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.IPrimitive; 011import org.openstreetmap.josm.data.osm.Relation; 012import org.openstreetmap.josm.gui.MainApplication; 013import org.openstreetmap.josm.gui.dialogs.relation.DownloadRelationTask; 014import org.openstreetmap.josm.tools.ImageProvider; 015import org.openstreetmap.josm.tools.SubclassFilteredCollection; 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 new ImageProvider("dialogs", "downloadincomplete").getResource().attachImageIcon(this, true); 031 putValue("help", ht("/Dialog/RelationList#DownloadMembers")); 032 } 033 034 @Override 035 public void actionPerformed(ActionEvent e) { 036 if (!isEnabled() || relations.isEmpty() || !MainApplication.isDisplayingMapView()) return; 037 MainApplication.worker.submit(new DownloadRelationTask( 038 Utils.filteredCollection(relations, Relation.class), MainApplication.getLayerManager().getEditLayer())); 039 } 040 041 @Override 042 public void setPrimitives(Collection<? extends IPrimitive> primitives) { 043 // selected non-new relations 044 this.relations = SubclassFilteredCollection.filter(getRelations(primitives), r -> !r.isNew()); 045 updateEnabledState(); 046 } 047 048 @Override 049 protected void updateEnabledState() { 050 setEnabled(canDownload()); 051 } 052}