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 }