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.IPrimitive;
011import org.openstreetmap.josm.data.osm.Relation;
012import org.openstreetmap.josm.gui.MainApplication;
013import org.openstreetmap.josm.gui.dialogs.relation.DownloadRelationTask;
014import org.openstreetmap.josm.tools.ImageProvider;
015import org.openstreetmap.josm.tools.SubclassFilteredCollection;
016import org.openstreetmap.josm.tools.Utils;
017
018/**
019 * The action for downloading members of relations
020 * @since 5793
021 */
022public class DownloadMembersAction extends AbstractRelationAction {
023
024    /**
025     * Constructs a new <code>DownloadMembersAction</code>.
026     */
027    public DownloadMembersAction() {
028        putValue(SHORT_DESCRIPTION, tr("Download all members of the selected relations"));
029        putValue(NAME, tr("Download members"));
030        new ImageProvider("dialogs", "downloadincomplete").getResource().attachImageIcon(this, true);
031        setHelpId(ht("/Dialog/RelationList#DownloadMembers"));
032    }
033
034    @Override
035    public void actionPerformed(ActionEvent e) {
036        if (!isEnabled() || relations.isEmpty() || !MainApplication.isDisplayingMapView()) return;
037        MainApplication.worker.submit(new DownloadRelationTask(
038                Utils.filteredCollection(relations, Relation.class), MainApplication.getLayerManager().getEditLayer()));
039    }
040
041    @Override
042    public void setPrimitives(Collection<? extends IPrimitive> primitives) {
043        // selected non-new relations
044        this.relations = SubclassFilteredCollection.filter(getRelations(primitives), r -> !r.isNew());
045        updateEnabledState();
046    }
047
048    @Override
049    protected void updateEnabledState() {
050        setEnabled(canDownload());
051    }
052}