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.tools.ImageProvider;
015import org.openstreetmap.josm.tools.Predicate;
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        putValue(SMALL_ICON, ImageProvider.get("dialogs", "downloadincomplete"));
031        putValue("help", ht("/Dialog/RelationList#DownloadMembers"));
032    }
033    
034    @Override
035    public void actionPerformed(ActionEvent e) {
036        if (!isEnabled() || relations.isEmpty() || !Main.isDisplayingMapView()) return;
037        Main.worker.submit(new DownloadRelationTask(relations, Main.main.getEditLayer()));
038    }
039
040    @Override
041    public void setPrimitives(Collection<? extends OsmPrimitive> primitives) {
042        // selected non-new relations
043        this.relations = Utils.filter(getRelations(primitives), new Predicate<Relation>(){
044            @Override public boolean evaluate(Relation r) {
045                return !r.isNew();
046            }});
047        updateEnabledState();
048    }
049}