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