Ticket #8612: remote_features.patch

File remote_features.patch, 14.2 KB (added by akks, 11 years ago)
  • src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java

     
    294294    public static void addTags(final Map<String, String> args, final String sender) {
    295295        if (args.containsKey("addtags")) {
    296296            GuiHelper.executeByMainWorkerInEDT(new Runnable() {
    297 
     297                @Override
    298298                public void run() {
    299299                    String[] tags = null;
    300300                    try {
  • src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java

     
    77import java.io.InputStreamReader;
    88import java.io.OutputStream;
    99import java.io.OutputStreamWriter;
     10import java.io.PrintWriter;
     11import java.io.StringWriter;
    1012import java.io.Writer;
    1113import java.net.Socket;
    1214import java.util.Arrays;
     
    2123
    2224import org.openstreetmap.josm.io.remotecontrol.handler.AddNodeHandler;
    2325import org.openstreetmap.josm.io.remotecontrol.handler.AddWayHandler;
     26import org.openstreetmap.josm.io.remotecontrol.handler.FeaturesHandler;
    2427import org.openstreetmap.josm.io.remotecontrol.handler.ImageryHandler;
    2528import org.openstreetmap.josm.io.remotecontrol.handler.ImportHandler;
    2629import org.openstreetmap.josm.io.remotecontrol.handler.LoadAndZoomHandler;
     
    126129        addRequestHandlerClass(VersionHandler.command, VersionHandler.class, true);
    127130        addRequestHandlerClass(LoadObjectHandler.command, LoadObjectHandler.class, true);
    128131        addRequestHandlerClass(OpenFileHandler.command, OpenFileHandler.class, true);
     132        addRequestHandlerClass(FeaturesHandler.command, FeaturesHandler.class, true);
    129133    }
    130134
    131135    /**
    132136     * The work is done here.
    133137     */
     138    @Override
    134139    public void run() {
    135140        Writer out = null;
    136141        try {
     
    202207            // find a handler for this command
    203208            Class<? extends RequestHandler> handlerClass = handlers.get(command);
    204209            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();
    216211                String websiteDoc = "http://josm.openstreetmap.de/wiki/Help/Preferences/RemoteControl";
    217212                String help = "No command specified! The following commands are available:<ul>"
    218213                        + usage.toString()
     
    363358        if (endHeaders)
    364359            out.write("\r\n");
    365360    }
     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    }
    366438}
  • src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java

     
    4343    {
    4444        return new String[] { "lat", "lon" };
    4545    }
     46   
     47    @Override
     48    public String[] getOptionalParams()
     49    {
     50        return new String[] { "addtags" };
     51    }
    4652
    4753    @Override
    4854    public String getPermissionMessage() {
  • src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java

     
    4545    public String[] getMandatoryParams() {
    4646        return new String[]{"way"};
    4747    }
     48   
     49    @Override
     50    public String[] getOptionalParams()
     51    {
     52        return new String[] { "addtags" };
     53    }
    4854
    4955    @Override
    5056    protected void handleRequest() throws RequestHandlerErrorException, RequestHandlerBadRequestException {
  • src/org/openstreetmap/josm/io/remotecontrol/handler/FeaturesHandler.java

     
    77import org.openstreetmap.josm.io.remotecontrol.RequestProcessor;
    88
    99/**
    10  * Handler for version request.
     10 * Handler for features request.
    1111 */
    12 public class VersionHandler extends RequestHandler {
     12public class FeaturesHandler extends RequestHandler {
    1313
    1414    /**
    15      * The remote control command name used to reply version.
     15     * The remote control command name used to reply features.
    1616     */
    17     public static final String command = "version";
     17    public static final String command = "features";
    1818
    1919    @Override
    2020    protected void handleRequest() throws RequestHandlerErrorException,
    2121            RequestHandlerBadRequestException {
    22         content = RequestProcessor.PROTOCOLVERSION;
    23         contentType = "application/json";
     22        //contentType = "application/json";
     23        contentType = "text/plain";
     24       
     25        content = RequestProcessor.getHandlersInfoAsJSON();
     26       
    2427        if (args.containsKey("jsonp")) {
    2528            content = args.get("jsonp") + " && " + args.get("jsonp") + "(" + content + ")";
    2629        }
     
    2831
    2932    @Override
    3033    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.");
    3235    }
    3336
    3437    @Override
     
    4043    public String[] getMandatoryParams() {
    4144        return null;
    4245    }
     46   
     47    @Override
     48    public String[] getOptionalParams()
     49    {
     50        return new String[] {"jsonp"};
     51    }
    4352
    4453    @Override
    4554    protected void validateRequest() throws RequestHandlerBadRequestException {
  • src/org/openstreetmap/josm/io/remotecontrol/handler/ImageryHandler.java

     
    3232    public String[] getMandatoryParams() {
    3333        return new String[]{"url"};
    3434    }
     35   
     36    @Override
     37    public String[] getOptionalParams()
     38    {
     39        return new String[] { "title", "type", "cookies", "min_zoom", "max_zoom"};
     40    }
    3541
    3642    @Override
    3743    public PermissionPrefWithDefault getPermissionPref() {
     
    99105        }
    100106        this.args = args;
    101107    }
    102 
     108   
    103109    @Override
    104110    protected void validateRequest() throws RequestHandlerBadRequestException {
    105111        // Nothing to do
  • src/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandler.java

     
    4444    public String[] getMandatoryParams() {
    4545        return new String[]{"url"};
    4646    }
     47   
     48    @Override
     49    public String[] getOptionalParams()
     50    {
     51        return new String[] {"new_layer"};
     52    }
    4753
    4854    @Override
    4955    public String getPermissionMessage() {
  • src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java

     
    7272    }
    7373
    7474    @Override
     75    public String[] getOptionalParams()
     76    {
     77        return new String[] {"new_layer", "addtags", "select", "zoom_mode"};
     78    }
     79
     80    @Override
    7581    protected void handleRequest() throws RequestHandlerErrorException
    7682    {
    7783        DownloadTask osmTask = new DownloadOsmTask();
  • src/org/openstreetmap/josm/io/remotecontrol/handler/LoadObjectHandler.java

     
    3232    public String[] getMandatoryParams() {
    3333        return new String[]{"objects"};
    3434    }
    35 
     35   
    3636    @Override
     37    public String[] getOptionalParams()
     38    {
     39        return new String[] {"new_layer", "addtags", "select", "zoom_mode"};
     40    }
     41   
     42    @Override
    3743    protected void handleRequest() throws RequestHandlerErrorException, RequestHandlerBadRequestException {
    3844        if (!PermissionPrefWithDefault.LOAD_DATA.isAllowed()) {
    3945            System.out.println("RemoteControl: download forbidden by preferences");
  • src/org/openstreetmap/josm/io/remotecontrol/handler/OpenFileHandler.java

     
    2424    public String[] getMandatoryParams() {
    2525        return new String[]{"filename"};
    2626    }
     27   
     28    @Override
     29    public String[] getOptionalParams() {
     30        return null;
     31    }
    2732
    2833    @Override
    2934    public PermissionPrefWithDefault getPermissionPref() {
  • src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java

     
    105105    abstract public PermissionPrefWithDefault getPermissionPref();
    106106
    107107    abstract public String[] getMandatoryParams();
     108   
     109     public String[] getOptionalParams() {
     110         return null;
     111     }
    108112
    109113    /**
    110114     * Check permissions in preferences and display error message
  • src/org/openstreetmap/josm/io/remotecontrol/handler/VersionHandler.java

     
    4040    public String[] getMandatoryParams() {
    4141        return null;
    4242    }
     43   
     44    @Override
     45    public String[] getOptionalParams() {
     46        return new String[]{"jsonp"};
     47    }
    4348
    4449    @Override
    4550    protected void validateRequest() throws RequestHandlerBadRequestException {