001 // License: GPL. For details, see LICENSE file.
002 package org.openstreetmap.josm.io.remotecontrol.handler;
003
004 import static org.openstreetmap.josm.tools.I18n.tr;
005
006 import java.io.UnsupportedEncodingException;
007 import java.net.URLDecoder;
008 import java.util.HashMap;
009
010 import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask;
011 import org.openstreetmap.josm.actions.downloadtasks.DownloadTask;
012 import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
013
014 /**
015 * Handler for import request
016 */
017 public class ImportHandler extends RequestHandler {
018
019 public static final String command = "import";
020
021 @Override
022 protected void handleRequest() throws RequestHandlerErrorException {
023 try {
024 DownloadTask osmTask = new DownloadOsmTask();
025 osmTask.loadUrl(false, args.get("url"), null);
026 } catch (Exception ex) {
027 System.out.println("RemoteControl: Error parsing import remote control request:");
028 ex.printStackTrace();
029 throw new RequestHandlerErrorException();
030 }
031 }
032
033 @Override
034 public String[] getMandatoryParams() {
035 return new String[]{"url"};
036 }
037
038 @Override
039 public String getPermissionMessage() {
040 return tr("Remote Control has been asked to import data from the following URL:")
041 + "<br>" + request;
042 }
043
044 @Override
045 public PermissionPrefWithDefault getPermissionPref() {
046 return PermissionPrefWithDefault.IMPORT_DATA;
047 }
048
049 @Override
050 protected void parseArgs() {
051 HashMap<String, String> args = new HashMap<String, String>();
052 if (request.indexOf('?') != -1) {
053 String query = request.substring(request.indexOf('?') + 1);
054 if (query.indexOf("url=") == 0) {
055 args.put("url", decodeURL(query.substring(4)));
056 } else {
057 int urlIdx = query.indexOf("&url=");
058 if (urlIdx != -1) {
059 String url = query.substring(urlIdx + 1);
060 args.put("url", decodeURL(query.substring(urlIdx + 5)));
061 query = query.substring(0, urlIdx);
062 } else {
063 if (query.indexOf('#') != -1) {
064 query = query.substring(0, query.indexOf('#'));
065 }
066 }
067 String[] params = query.split("&", -1);
068 for (String param : params) {
069 int eq = param.indexOf('=');
070 if (eq != -1) {
071 args.put(param.substring(0, eq), param.substring(eq + 1));
072 }
073 }
074 }
075 }
076 this.args = args;
077 }
078
079 private String decodeURL(String url) {
080 try {
081 return URLDecoder.decode(url, "UTF-8");
082 } catch (UnsupportedEncodingException e) {
083 throw new RuntimeException();
084 }
085 }
086 }