001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.dialogs.relation.actions; 003 004import javax.swing.AbstractAction; 005import javax.swing.event.ListSelectionEvent; 006import javax.swing.event.ListSelectionListener; 007import javax.swing.event.TableModelEvent; 008import javax.swing.event.TableModelListener; 009 010import org.openstreetmap.josm.Main; 011import org.openstreetmap.josm.data.osm.DataSet; 012import org.openstreetmap.josm.data.osm.DownloadPolicy; 013import org.openstreetmap.josm.gui.dialogs.relation.IRelationEditor; 014import org.openstreetmap.josm.gui.dialogs.relation.MemberTable; 015import org.openstreetmap.josm.gui.dialogs.relation.MemberTableModel; 016import org.openstreetmap.josm.gui.layer.OsmDataLayer; 017import org.openstreetmap.josm.io.OnlineResource; 018 019/** 020 * Abstract superclass of relation editor actions. 021 * @since 9496 022 */ 023public abstract class AbstractRelationEditorAction extends AbstractAction implements TableModelListener, ListSelectionListener { 024 protected final MemberTable memberTable; 025 protected final MemberTableModel memberTableModel; 026 protected final transient OsmDataLayer layer; 027 protected final transient IRelationEditor editor; 028 029 protected AbstractRelationEditorAction(MemberTable memberTable, MemberTableModel memberTableModel, String actionMapKey) { 030 this(memberTable, memberTableModel, actionMapKey, null, null); 031 } 032 033 protected AbstractRelationEditorAction(MemberTable memberTable, MemberTableModel memberTableModel, String actionMapKey, 034 OsmDataLayer layer, IRelationEditor editor) { 035 this.memberTable = memberTable; 036 this.memberTableModel = memberTableModel; 037 this.layer = layer; 038 this.editor = editor; 039 if (actionMapKey != null) { 040 this.memberTable.getActionMap().put(actionMapKey, this); 041 } 042 } 043 044 @Override 045 public void tableChanged(TableModelEvent e) { 046 updateEnabledState(); 047 } 048 049 @Override 050 public void valueChanged(ListSelectionEvent e) { 051 updateEnabledState(); 052 } 053 054 protected abstract void updateEnabledState(); 055 056 protected final boolean canDownload() { 057 if (editor.getRelation() == null) 058 return false; 059 DataSet ds = editor.getRelation().getDataSet(); 060 return !Main.isOffline(OnlineResource.OSM_API) 061 && ds != null && !ds.isLocked() && !DownloadPolicy.BLOCKED.equals(ds.getDownloadPolicy()); 062 } 063}