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}