Ticket #8612: remote_features.patch
File remote_features.patch, 14.2 KB (added by , 11 years ago) |
---|
-
src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java
294 294 public static void addTags(final Map<String, String> args, final String sender) { 295 295 if (args.containsKey("addtags")) { 296 296 GuiHelper.executeByMainWorkerInEDT(new Runnable() { 297 297 @Override 298 298 public void run() { 299 299 String[] tags = null; 300 300 try { -
src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java
7 7 import java.io.InputStreamReader; 8 8 import java.io.OutputStream; 9 9 import java.io.OutputStreamWriter; 10 import java.io.PrintWriter; 11 import java.io.StringWriter; 10 12 import java.io.Writer; 11 13 import java.net.Socket; 12 14 import java.util.Arrays; … … 21 23 22 24 import org.openstreetmap.josm.io.remotecontrol.handler.AddNodeHandler; 23 25 import org.openstreetmap.josm.io.remotecontrol.handler.AddWayHandler; 26 import org.openstreetmap.josm.io.remotecontrol.handler.FeaturesHandler; 24 27 import org.openstreetmap.josm.io.remotecontrol.handler.ImageryHandler; 25 28 import org.openstreetmap.josm.io.remotecontrol.handler.ImportHandler; 26 29 import org.openstreetmap.josm.io.remotecontrol.handler.LoadAndZoomHandler; … … 126 129 addRequestHandlerClass(VersionHandler.command, VersionHandler.class, true); 127 130 addRequestHandlerClass(LoadObjectHandler.command, LoadObjectHandler.class, true); 128 131 addRequestHandlerClass(OpenFileHandler.command, OpenFileHandler.class, true); 132 addRequestHandlerClass(FeaturesHandler.command, FeaturesHandler.class, true); 129 133 } 130 134 131 135 /** 132 136 * The work is done here. 133 137 */ 138 @Override 134 139 public void run() { 135 140 Writer out = null; 136 141 try { … … 202 207 // find a handler for this command 203 208 Class<? extends RequestHandler> handlerClass = handlers.get(command); 204 209 if (handlerClass == null) { 205 // no handler found 206 StringBuilder usage = new StringBuilder(1024); 207 for (Entry<String, Class<? extends RequestHandler>> handler : handlers.entrySet()) { 208 String[] mandatory = handler.getValue().newInstance().getMandatoryParams(); 209 usage.append("<li>"); 210 usage.append(handler.getKey()); 211 if (mandatory != null) { 212 usage.append("<br/>mandatory parameter: ").append(Utils.join(", ", Arrays.asList(mandatory))); 213 } 214 usage.append("</li>"); 215 } 210 String usage = getUsageAsHtml(); 216 211 String websiteDoc = "http://josm.openstreetmap.de/wiki/Help/Preferences/RemoteControl"; 217 212 String help = "No command specified! The following commands are available:<ul>" 218 213 + usage.toString() … … 363 358 if (endHeaders) 364 359 out.write("\r\n"); 365 360 } 361 362 public static String getHandlersInfoAsJSON() { 363 StringWriter w = new StringWriter(500); 364 PrintWriter r = new PrintWriter(w); 365 boolean first = true; 366 r.append('['); 367 368 for (Entry<String, Class<? extends RequestHandler>> p : handlers.entrySet()) { 369 if (first) { 370 first = false; 371 } else { 372 r.append(", "); 373 } 374 r.append('{'); 375 RequestHandler handler = null; 376 try { 377 handler = p.getValue().newInstance(); 378 } catch (Exception ex) { 379 ex.printStackTrace(); 380 } 381 382 r.printf("\"request\" : \"%s\"", p.getKey()); 383 r.append(", \"parameters\" : ["); 384 385 String params[] = handler.getMandatoryParams(); 386 if (params != null) { 387 for (int i = 0; i < params.length; i++) { 388 if (i == 0) { 389 r.append('\"'); 390 } else { 391 r.append(", \""); 392 } 393 r.append(params[i]).append('\"'); 394 } 395 } 396 r.append("], \"optional\" : ["); 397 String optional[] = handler.getOptionalParams(); 398 if (optional != null) { 399 for (int i = 0; i < optional.length; i++) { 400 if (i == 0) { 401 r.append('\"'); 402 } else { 403 r.append(", \""); 404 } 405 r.append(optional[i]).append('\"'); 406 } 407 } 408 r.append("]}"); 409 } 410 411 try { 412 w.close(); 413 } catch (IOException ex) { 414 ex.printStackTrace(); 415 } 416 return w.toString(); 417 } 418 419 public String getUsageAsHtml() throws IllegalAccessException, InstantiationException { 420 // no handler found 421 StringBuilder usage = new StringBuilder(1024); 422 for (Entry<String, Class<? extends RequestHandler>> handler : handlers.entrySet()) { 423 RequestHandler sample = handler.getValue().newInstance(); 424 String[] mandatory = sample.getMandatoryParams(); 425 String[] optional = sample.getOptionalParams(); 426 usage.append("<li>"); 427 usage.append(handler.getKey()); 428 if (mandatory != null) { 429 usage.append("<br/>mandatory parameters: ").append(Utils.join(", ", Arrays.asList(mandatory))); 430 } 431 if (optional != null) { 432 usage.append("<br/>optional parameters: ").append(Utils.join(", ", Arrays.asList(optional))); 433 } 434 usage.append("</li>"); 435 } 436 return usage.toString(); 437 } 366 438 } -
src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java
43 43 { 44 44 return new String[] { "lat", "lon" }; 45 45 } 46 47 @Override 48 public String[] getOptionalParams() 49 { 50 return new String[] { "addtags" }; 51 } 46 52 47 53 @Override 48 54 public String getPermissionMessage() { -
src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java
45 45 public String[] getMandatoryParams() { 46 46 return new String[]{"way"}; 47 47 } 48 49 @Override 50 public String[] getOptionalParams() 51 { 52 return new String[] { "addtags" }; 53 } 48 54 49 55 @Override 50 56 protected void handleRequest() throws RequestHandlerErrorException, RequestHandlerBadRequestException { -
src/org/openstreetmap/josm/io/remotecontrol/handler/FeaturesHandler.java
7 7 import org.openstreetmap.josm.io.remotecontrol.RequestProcessor; 8 8 9 9 /** 10 * Handler for versionrequest.10 * Handler for features request. 11 11 */ 12 public class VersionHandler extends RequestHandler {12 public class FeaturesHandler extends RequestHandler { 13 13 14 14 /** 15 * The remote control command name used to reply version.15 * The remote control command name used to reply features. 16 16 */ 17 public static final String command = " version";17 public static final String command = "features"; 18 18 19 19 @Override 20 20 protected void handleRequest() throws RequestHandlerErrorException, 21 21 RequestHandlerBadRequestException { 22 content = RequestProcessor.PROTOCOLVERSION; 23 contentType = "application/json"; 22 //contentType = "application/json"; 23 contentType = "text/plain"; 24 25 content = RequestProcessor.getHandlersInfoAsJSON(); 26 24 27 if (args.containsKey("jsonp")) { 25 28 content = args.get("jsonp") + " && " + args.get("jsonp") + "(" + content + ")"; 26 29 } … … 28 31 29 32 @Override 30 33 public String getPermissionMessage() { 31 return tr("Remote Control has been asked to report its protocol version. This enables web sites to detect a running JOSM.");34 return tr("Remote Control has been asked 'features' request. This enables web sites to detect capabilitites of remote control."); 32 35 } 33 36 34 37 @Override … … 40 43 public String[] getMandatoryParams() { 41 44 return null; 42 45 } 46 47 @Override 48 public String[] getOptionalParams() 49 { 50 return new String[] {"jsonp"}; 51 } 43 52 44 53 @Override 45 54 protected void validateRequest() throws RequestHandlerBadRequestException { -
src/org/openstreetmap/josm/io/remotecontrol/handler/ImageryHandler.java
32 32 public String[] getMandatoryParams() { 33 33 return new String[]{"url"}; 34 34 } 35 36 @Override 37 public String[] getOptionalParams() 38 { 39 return new String[] { "title", "type", "cookies", "min_zoom", "max_zoom"}; 40 } 35 41 36 42 @Override 37 43 public PermissionPrefWithDefault getPermissionPref() { … … 99 105 } 100 106 this.args = args; 101 107 } 102 108 103 109 @Override 104 110 protected void validateRequest() throws RequestHandlerBadRequestException { 105 111 // Nothing to do -
src/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandler.java
44 44 public String[] getMandatoryParams() { 45 45 return new String[]{"url"}; 46 46 } 47 48 @Override 49 public String[] getOptionalParams() 50 { 51 return new String[] {"new_layer"}; 52 } 47 53 48 54 @Override 49 55 public String getPermissionMessage() { -
src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
72 72 } 73 73 74 74 @Override 75 public String[] getOptionalParams() 76 { 77 return new String[] {"new_layer", "addtags", "select", "zoom_mode"}; 78 } 79 80 @Override 75 81 protected void handleRequest() throws RequestHandlerErrorException 76 82 { 77 83 DownloadTask osmTask = new DownloadOsmTask(); -
src/org/openstreetmap/josm/io/remotecontrol/handler/LoadObjectHandler.java
32 32 public String[] getMandatoryParams() { 33 33 return new String[]{"objects"}; 34 34 } 35 35 36 36 @Override 37 public String[] getOptionalParams() 38 { 39 return new String[] {"new_layer", "addtags", "select", "zoom_mode"}; 40 } 41 42 @Override 37 43 protected void handleRequest() throws RequestHandlerErrorException, RequestHandlerBadRequestException { 38 44 if (!PermissionPrefWithDefault.LOAD_DATA.isAllowed()) { 39 45 System.out.println("RemoteControl: download forbidden by preferences"); -
src/org/openstreetmap/josm/io/remotecontrol/handler/OpenFileHandler.java
24 24 public String[] getMandatoryParams() { 25 25 return new String[]{"filename"}; 26 26 } 27 28 @Override 29 public String[] getOptionalParams() { 30 return null; 31 } 27 32 28 33 @Override 29 34 public PermissionPrefWithDefault getPermissionPref() { -
src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java
105 105 abstract public PermissionPrefWithDefault getPermissionPref(); 106 106 107 107 abstract public String[] getMandatoryParams(); 108 109 public String[] getOptionalParams() { 110 return null; 111 } 108 112 109 113 /** 110 114 * Check permissions in preferences and display error message -
src/org/openstreetmap/josm/io/remotecontrol/handler/VersionHandler.java
40 40 public String[] getMandatoryParams() { 41 41 return null; 42 42 } 43 44 @Override 45 public String[] getOptionalParams() { 46 return new String[]{"jsonp"}; 47 } 43 48 44 49 @Override 45 50 protected void validateRequest() throws RequestHandlerBadRequestException {