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 046 public boolean evaluate(Relation r) { 047 return !r.isNew(); 048 } 049 }); 050 updateEnabledState(); 051 } 052 053 @Override 054 protected void updateEnabledState() { 055 setEnabled(!relations.isEmpty() && !Main.isOffline(OnlineResource.OSM_API)); 056 } 057}