// License: GPL. For details, see LICENSE file. package at.dallermassl.josm.plugin.surveyor.action; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.data.coor.LatLon; import org.openstreetmap.josm.data.osm.DataSet; import org.openstreetmap.josm.data.osm.Node; import org.openstreetmap.josm.tools.Pair; import at.dallermassl.josm.plugin.surveyor.GpsActionEvent; import at.dallermassl.josm.plugin.surveyor.SurveyorAction; import at.dallermassl.josm.plugin.surveyor.SurveyorLock; /** * Action that sets a node into the data layer. The first parameter is used as a property key * the second as the property value (e.g. amenity=parking). If there are more than two parameters * they are used as key/value pairs. * @author cdaller * */ public class SetNodeAction implements SurveyorAction { private Collection<Pair<String, String>> keyValues; /** * Default Constructor */ public SetNodeAction() { } @Override public void setParameters(List<String> parameters) { keyValues = new ArrayList<>(); int pos; String key; String value; for (String keyValuePair : parameters) { pos = keyValuePair.indexOf('='); if (pos > 0) { key = keyValuePair.substring(0, pos); value = keyValuePair.substring(pos + 1); keyValues.add(new Pair<>(key, value)); } else { System.err.println("SetNodeAction: ignoring invalid key value pair: " + keyValuePair); } } } @Override public void actionPerformed(GpsActionEvent event) { LatLon coordinates = event.getCoordinates(); //System.out.println(getClass().getSimpleName() + " KOORD: " + coordinates.lat() + ", " + coordinates.lon() + " params: " + keyValues); Node node = new Node(coordinates); for (Pair<String, String> entry : keyValues) { node.put(entry.a, entry.b); } synchronized (SurveyorLock.class) { DataSet ds = Main.getLayerManager().getEditDataSet(); if (ds != null) { ds.addPrimitive(node); ds.setSelected(node); } } Main.map.repaint(); } }