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    }