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;
007
008import org.openstreetmap.josm.gui.dialogs.relation.GenericRelationEditor.AddAbortException;
009import org.openstreetmap.josm.tools.ImageProvider;
010import org.openstreetmap.josm.tools.Logging;
011
012/**
013 * Add all objects selected in the current dataset before the first selected member.
014 * @since 9496
015 */
016public class AddSelectedBeforeSelection extends AddFromSelectionAction {
017    private static final long serialVersionUID = 1L;
018
019    /**
020     * Constructs a new {@code AddSelectedBeforeSelection}.
021     * @param editorAccess An interface to access the relation editor contents.
022     */
023    public AddSelectedBeforeSelection(IRelationEditorActionAccess editorAccess) {
024        super(editorAccess, IRelationEditorUpdateOn.MEMBER_TABLE_SELECTION, IRelationEditorUpdateOn.SELECTION_TABLE_CHANGE);
025        putValue(SHORT_DESCRIPTION, tr("Add all objects selected in the current dataset before the first selected member"));
026        new ImageProvider("dialogs/conflict", "copybeforecurrentright").getResource().attachImageIcon(this, true);
027        updateEnabledState();
028    }
029
030    @Override
031    protected void updateEnabledState() {
032        setEnabled(getSelectionTableModel().getRowCount() > 0
033                && editorAccess.getMemberTableModel().getSelectionModel().getMinSelectionIndex() >= 0);
034    }
035
036    @Override
037    public void actionPerformed(ActionEvent e) {
038        try {
039            editorAccess.getMemberTableModel().addMembersBeforeIdx(filterConfirmedPrimitives(getSelectionTableModel().getSelection()),
040                    editorAccess.getMemberTableModel().getSelectionModel().getMinSelectionIndex());
041        } catch (AddAbortException ex) {
042            Logging.trace(ex);
043        }
044    }
045}