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}