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.gui.dialogs.relation.MemberTable;
011import org.openstreetmap.josm.gui.dialogs.relation.MemberTableModel;
012import org.openstreetmap.josm.gui.dialogs.relation.IRelationEditor;
013import org.openstreetmap.josm.gui.layer.OsmDataLayer;
014
015/**
016 * Abstract superclass of relation editor actions.
017 * @since 9496
018 */
019abstract class AbstractRelationEditorAction extends AbstractAction implements TableModelListener, ListSelectionListener {
020    protected final MemberTable memberTable;
021    protected final MemberTableModel memberTableModel;
022    protected final transient OsmDataLayer layer;
023    protected final transient IRelationEditor editor;
024
025    protected AbstractRelationEditorAction(MemberTable memberTable, MemberTableModel memberTableModel, String actionMapKey) {
026        this(memberTable, memberTableModel, actionMapKey, null, null);
027    }
028
029    protected AbstractRelationEditorAction(MemberTable memberTable, MemberTableModel memberTableModel, String actionMapKey,
030            OsmDataLayer layer, IRelationEditor editor) {
031        this.memberTable = memberTable;
032        this.memberTableModel = memberTableModel;
033        this.layer = layer;
034        this.editor = editor;
035        if (actionMapKey != null) {
036            this.memberTable.getActionMap().put(actionMapKey, this);
037        }
038    }
039
040    @Override
041    public void tableChanged(TableModelEvent e) {
042        updateEnabledState();
043    }
044
045    @Override
046    public void valueChanged(ListSelectionEvent e) {
047        updateEnabledState();
048    }
049
050    protected abstract void updateEnabledState();
051}