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