001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.actions.relation;
003
004import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
005import static org.openstreetmap.josm.tools.I18n.tr;
006
007import java.awt.event.ActionEvent;
008import java.util.Collection;
009
010import org.openstreetmap.josm.data.osm.OsmPrimitive;
011import org.openstreetmap.josm.gui.MainApplication;
012import org.openstreetmap.josm.gui.dialogs.relation.DownloadRelationTask;
013import org.openstreetmap.josm.tools.ImageProvider;
014import org.openstreetmap.josm.tools.SubclassFilteredCollection;
015
016/**
017 * The action for downloading members of relations
018 * @since 5793
019 */
020public class DownloadMembersAction extends AbstractRelationAction {
021
022    /**
023     * Constructs a new <code>DownloadMembersAction</code>.
024     */
025    public DownloadMembersAction() {
026        putValue(SHORT_DESCRIPTION, tr("Download all members of the selected relations"));
027        putValue(NAME, tr("Download members"));
028        new ImageProvider("dialogs", "downloadincomplete").getResource().attachImageIcon(this, true);
029        putValue("help", ht("/Dialog/RelationList#DownloadMembers"));
030    }
031
032    @Override
033    public void actionPerformed(ActionEvent e) {
034        if (!isEnabled() || relations.isEmpty() || !MainApplication.isDisplayingMapView()) return;
035        MainApplication.worker.submit(new DownloadRelationTask(relations, MainApplication.getLayerManager().getEditLayer()));
036    }
037
038    @Override
039    public void setPrimitives(Collection<? extends OsmPrimitive> primitives) {
040        // selected non-new relations
041        this.relations = SubclassFilteredCollection.filter(getRelations(primitives), r -> !r.isNew());
042        updateEnabledState();
043    }
044
045    @Override
046    protected void updateEnabledState() {
047        setEnabled(canDownload());
048    }
049}