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