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.List; 009import java.util.stream.Collectors; 010 011import org.openstreetmap.josm.data.osm.IPrimitive; 012import org.openstreetmap.josm.data.osm.PrimitiveId; 013import org.openstreetmap.josm.gui.MainApplication; 014import org.openstreetmap.josm.gui.io.DownloadPrimitivesTask; 015import org.openstreetmap.josm.tools.ImageProvider; 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 new ImageProvider("dialogs", "downloadincomplete").getResource().attachImageIcon(this, true); 030 setHelpId(ht("/Dialog/RelationList#DownloadMembers")); 031 } 032 033 @Override 034 public void actionPerformed(ActionEvent e) { 035 if (!isEnabled() || relations.isEmpty() || !MainApplication.isDisplayingMapView()) return; 036 List<PrimitiveId> members = relations.stream() 037 .flatMap(r -> r.getMemberPrimitivesList().stream().filter(osm -> !osm.isNew()).map(IPrimitive::getOsmPrimitiveId)) 038 .distinct() 039 .collect(Collectors.toList()); 040 041 MainApplication.worker.submit(new DownloadPrimitivesTask(MainApplication.getLayerManager().getEditLayer(), members, false)); 042 } 043 044 @Override 045 protected void updateEnabledState() { 046 setEnabled(canDownload()); 047 } 048}