001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.actions.relation;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import java.awt.event.ActionEvent;
007import java.util.Collection;
008
009import org.openstreetmap.josm.actions.mapmode.DeleteAction;
010import org.openstreetmap.josm.data.osm.OsmUtils;
011import org.openstreetmap.josm.data.osm.Relation;
012import org.openstreetmap.josm.gui.MainApplication;
013import org.openstreetmap.josm.gui.MapFrame;
014import org.openstreetmap.josm.gui.layer.OsmDataLayer;
015import org.openstreetmap.josm.tools.ImageProvider;
016import org.openstreetmap.josm.tools.Utils;
017
018/**
019 * Action that delete relations
020 * @since 5799
021 */
022public class DeleteRelationsAction extends AbstractRelationAction {
023
024    /**
025     * Constructs a new <code>DeleteRelationsAction</code>.
026     */
027    public DeleteRelationsAction() {
028        putValue(SHORT_DESCRIPTION, tr("Delete the selected relation"));
029        putValue(NAME, tr("Delete"));
030        new ImageProvider("dialogs", "delete").getResource().attachImageIcon(this, true);
031    }
032
033    protected void deleteRelation(Collection<Relation> toDelete) {
034        OsmDataLayer layer = MainApplication.getLayerManager().getEditLayer();
035        if (toDelete == null || layer == null)
036            return;
037
038        DeleteAction.deleteRelations(layer, toDelete);
039        // clear selection after deletion
040        MapFrame map = MainApplication.getMap();
041        if (map.relationListDialog != null)
042            map.relationListDialog.selectRelations(null);
043    }
044
045    @Override
046    public void actionPerformed(ActionEvent e) {
047        if (!isEnabled())
048            return;
049        deleteRelation(Utils.filteredCollection(relations, Relation.class));
050    }
051
052    @Override
053    protected void updateEnabledState() {
054        setEnabled(OsmUtils.isOsmCollectionEditable(relations));
055    }
056}