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;
011import javax.swing.event.TableModelListener;
012
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.gui.tagging.TagEditorModel;
018import org.openstreetmap.josm.tools.ImageProvider;
019
020/**
021 * Apply the current updates.
022 * @since 9496
023 */
024public class ApplyAction extends SavingAction implements PropertyChangeListener, TableModelListener {
025
026    /**
027     * Constructs a new {@code ApplyAction}.
028     * @param memberTable member table
029     * @param memberTableModel member table model
030     * @param layer OSM data layer
031     * @param editor relation editor
032     * @param tagModel tag editor model
033     */
034    public ApplyAction(MemberTable memberTable, MemberTableModel memberTableModel, TagEditorModel tagModel, OsmDataLayer layer,
035            IRelationEditor editor) {
036        super(memberTable, memberTableModel, tagModel, layer, editor, null);
037        putValue(SHORT_DESCRIPTION, tr("Apply the current updates"));
038        putValue(SMALL_ICON, ImageProvider.get("save"));
039        putValue(NAME, tr("Apply"));
040        updateEnabledState();
041        memberTableModel.addTableModelListener(this);
042        tagModel.addPropertyChangeListener(this);
043    }
044
045    @Override
046    public void actionPerformed(ActionEvent e) {
047        if (applyChanges()) {
048            editor.reloadDataFromRelation();
049        }
050    }
051
052    @Override
053    protected void updateEnabledState() {
054        setEnabled(isEditorDirty());
055    }
056
057    @Override
058    public void propertyChange(PropertyChangeEvent evt) {
059        updateEnabledState();
060    }
061
062    @Override
063    public void tableChanged(TableModelEvent e) {
064        updateEnabledState();
065    }
066}