001 // License: GPL. For details, see LICENSE file.
002 package org.openstreetmap.josm.io.remotecontrol.handler;
003
004 import static org.openstreetmap.josm.tools.I18n.tr;
005
006 import java.util.HashMap;
007 import org.openstreetmap.josm.Main;
008 import org.openstreetmap.josm.actions.AutoScaleAction;
009 import org.openstreetmap.josm.command.AddCommand;
010 import org.openstreetmap.josm.data.coor.LatLon;
011 import org.openstreetmap.josm.data.osm.Node;
012 import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
013
014 /**
015 * Handler for add_node request.
016 */
017 public class AddNodeHandler extends RequestHandler {
018
019 public static final String command = "add_node";
020
021 @Override
022 protected void handleRequest() {
023 addNode(args);
024 }
025
026 @Override
027 public String[] getMandatoryParams()
028 {
029 return new String[] { "lat", "lon" };
030 }
031
032 @Override
033 public String getPermissionMessage() {
034 return tr("Remote Control has been asked to create a new node.");
035 }
036
037 @Override
038 public PermissionPrefWithDefault getPermissionPref() {
039 return PermissionPrefWithDefault.CREATE_OBJECTS;
040 }
041
042 /**
043 * Adds a node, implements the GET /add_node?lon=...&lat=... request.
044 * @param args
045 */
046 private void addNode(HashMap<String, String> args){
047
048 // Parse the arguments
049 double lat = Double.parseDouble(args.get("lat"));
050 double lon = Double.parseDouble(args.get("lon"));
051 System.out.println("Adding node at (" + lat + ", " + lon + ")");
052
053 // Create a new node
054 LatLon ll = new LatLon(lat, lon);
055 Node nnew = new Node(ll);
056
057 // Now execute the commands to add this node.
058 Main.main.undoRedo.add(new AddCommand(nnew));
059 Main.main.getCurrentDataSet().setSelected(nnew);
060 if (PermissionPrefWithDefault.CHANGE_VIEWPORT.isAllowed()) {
061 AutoScaleAction.autoScale("selection");
062 } else {
063 Main.map.mapView.repaint();
064 }
065 }
066 }