001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.dialogs.relation.actions;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import java.awt.event.ActionEvent;
007import java.beans.PropertyChangeEvent;
008import java.beans.PropertyChangeListener;
009
010import javax.swing.event.TableModelEvent;
011
012import org.openstreetmap.josm.gui.dialogs.relation.IRelationEditor;
013import org.openstreetmap.josm.gui.dialogs.relation.MemberTable;
014import org.openstreetmap.josm.gui.dialogs.relation.MemberTableModel;
015import org.openstreetmap.josm.gui.layer.OsmDataLayer;
016import org.openstreetmap.josm.gui.tagging.TagEditorModel;
017import org.openstreetmap.josm.tools.ImageProvider;
018
019/**
020 * Apply the current updates.
021 * @since 9496
022 */
023public class ApplyAction extends SavingAction implements PropertyChangeListener {
024
025    /**
026     * Constructs a new {@code ApplyAction}.
027     * @param memberTable member table
028     * @param memberTableModel member table model
029     * @param layer OSM data layer
030     * @param editor relation editor
031     * @param tagModel tag editor model
032     */
033    public ApplyAction(MemberTable memberTable, MemberTableModel memberTableModel, TagEditorModel tagModel, OsmDataLayer layer,
034            IRelationEditor editor) {
035        super(memberTable, memberTableModel, tagModel, layer, editor, null);
036        putValue(SHORT_DESCRIPTION, tr("Apply the current updates"));
037        new ImageProvider("save").getResource().attachImageIcon(this, true);
038        putValue(NAME, tr("Apply"));
039        updateEnabledState();
040        memberTableModel.addTableModelListener(this);
041        tagModel.addPropertyChangeListener(this);
042    }
043
044    @Override
045    public void actionPerformed(ActionEvent e) {
046        if (applyChanges()) {
047            editor.reloadDataFromRelation();
048        }
049    }
050
051    @Override
052    protected void updateEnabledState() {
053        setEnabled(isEditorDirty());
054    }
055
056    @Override
057    public void propertyChange(PropertyChangeEvent evt) {
058        updateEnabledState();
059    }
060
061    @Override
062    public void tableChanged(TableModelEvent e) {
063        updateEnabledState();
064    }
065}