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 }