001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.layer.gpx; 003 004import static org.openstreetmap.josm.gui.help.HelpUtil.ht; 005import static org.openstreetmap.josm.tools.I18n.tr; 006 007import java.awt.event.ActionEvent; 008 009import javax.swing.AbstractAction; 010 011import org.openstreetmap.josm.data.gpx.GpxData; 012import org.openstreetmap.josm.gui.MainApplication; 013import org.openstreetmap.josm.gui.layer.GpxLayer; 014import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer; 015import org.openstreetmap.josm.tools.ImageProvider; 016 017/** 018 * An action that converts the named points to a new marker layer 019 */ 020public class MarkersFromNamedPointsAction extends AbstractAction { 021 private final transient GpxLayer layer; 022 023 /** 024 * Construct a new {@link MarkersFromNamedPointsAction} 025 * @param layer The layer this action is for 026 */ 027 public MarkersFromNamedPointsAction(final GpxLayer layer) { 028 super(tr("Markers From Named Points")); 029 new ImageProvider("addmarkers").getResource().attachImageIcon(this, true); 030 this.layer = layer; 031 putValue("help", ht("/Action/MarkersFromNamedPoints")); 032 } 033 034 @Override 035 public void actionPerformed(ActionEvent e) { 036 GpxData namedTrackPoints = new GpxData(); 037 layer.data.getTrackPoints() 038 .filter(point -> point.attr.containsKey("name") || point.attr.containsKey("desc")) 039 .forEach(namedTrackPoints.waypoints::add); 040 MarkerLayer ml = new MarkerLayer(namedTrackPoints, tr("Named Trackpoints from {0}", layer.getName()), layer.getAssociatedFile(), layer); 041 if (!ml.data.isEmpty()) { 042 MainApplication.getLayerManager().addLayer(ml); 043 } 044 } 045 046}