001 package org.openstreetmap.josm.io.remotecontrol.handler; 002 003 import static org.openstreetmap.josm.tools.I18n.tr; 004 005 import java.util.LinkedList; 006 import java.util.List; 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.command.Command; 011 import org.openstreetmap.josm.command.SequenceCommand; 012 import org.openstreetmap.josm.data.coor.LatLon; 013 import org.openstreetmap.josm.data.osm.Node; 014 import org.openstreetmap.josm.data.osm.Way; 015 import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault; 016 017 /** 018 * Adds a way to the current dataset. For instance, {@code /add_way?way=lat1,lon2;lat2,lon2}. 019 */ 020 public class AddWayHandler extends RequestHandler { 021 022 public static final String command = "add_way"; 023 024 @Override 025 public String[] getMandatoryParams() { 026 return new String[]{"way"}; 027 } 028 029 @Override 030 protected void handleRequest() throws RequestHandlerErrorException, RequestHandlerBadRequestException { 031 Way way = new Way(); 032 List<Command> commands = new LinkedList<Command>(); 033 for (String coordinatesString : args.get("way").split(";\\s*")) { 034 String[] coordinates = coordinatesString.split(",\\s*", 2); 035 double lat = Double.parseDouble(coordinates[0]); 036 double lon = Double.parseDouble(coordinates[1]); 037 Node node = new Node(new LatLon(lat, lon)); 038 way.addNode(node); 039 commands.add(new AddCommand(node)); 040 } 041 commands.add(new AddCommand(way)); 042 Main.main.undoRedo.add(new SequenceCommand(tr("Add way"), commands)); 043 Main.main.getCurrentDataSet().setSelected(way); 044 if (PermissionPrefWithDefault.CHANGE_VIEWPORT.isAllowed()) { 045 AutoScaleAction.autoScale("selection"); 046 } else { 047 Main.map.mapView.repaint(); 048 } 049 } 050 051 @Override 052 public String getPermissionMessage() { 053 return tr("Remote Control has been asked to create a new way."); 054 } 055 056 @Override 057 public PermissionPrefWithDefault getPermissionPref() { 058 return PermissionPrefWithDefault.CREATE_OBJECTS; 059 } 060 }