// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.io.remotecontrol.handler; import static org.openstreetmap.josm.tools.I18n.tr; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault; import org.openstreetmap.josm.io.remotecontrol.RequestProcessor; /** * Reports available commands, their parameters and examples * @since 6091 */ public class FeaturesHandler extends RequestHandler { /** * The remote control command name used to reply version. */ public static final String command = "features"; @Override protected void handleRequest() throws RequestHandlerErrorException, RequestHandlerBadRequestException { StringBuilder buf = new StringBuilder(); String q = args.get("q"); if (q != null) { buf.append('['); boolean first = true; for (String s: q.split("[,\\s]+")) { if (first) { first = false; } else { buf.append(", "); } String info = RequestProcessor.getHandlerInfoAsJSON('/'+s); if (info != null) { buf.append(info); } else { Main.warn("Unknown handler {0} passed to /features request", s); } } buf.append(']'); } else { buf.append(RequestProcessor.getHandlersInfoAsJSON()); } content = buf.toString(); contentType = "application/json"; if (args.containsKey("jsonp")) { content = args.get("jsonp") + " && " + args.get("jsonp") + '(' + content + ')'; } } @Override public String getPermissionMessage() { return tr("Remote Control has been asked to report its supported features. This enables web sites to guess a running JOSM version"); } @Override public PermissionPrefWithDefault getPermissionPref() { return PermissionPrefWithDefault.READ_PROTOCOL_VERSION; } @Override public String[] getMandatoryParams() { return new String[0]; } @Override public String[] getOptionalParams() { return new String[]{"jsonp", "q"}; } @Override protected void validateRequest() throws RequestHandlerBadRequestException { // Nothing to do } @Override public String getUsage() { return "reports available commands, their parameters and examples"; } @Override public String[] getUsageExamples() { return new String[] {"/features", "/features?q=import,add_node"}; } }