Changes in trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandler.java [5085:5691] in josm
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandler.java
r5085 r5691 4 4 import static org.openstreetmap.josm.tools.I18n.tr; 5 5 6 import java.io.UnsupportedEncodingException; 7 import java.net.URLDecoder; 6 import java.net.MalformedURLException; 7 import java.net.URL; 8 import java.util.Collection; 8 9 import java.util.HashMap; 9 10 11 import org.openstreetmap.josm.Main; 10 12 import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask; 11 13 import org.openstreetmap.josm.actions.downloadtasks.DownloadTask; … … 17 19 public class ImportHandler extends RequestHandler { 18 20 21 /** 22 * The remote control command name used to import data. 23 */ 19 24 public static final String command = "import"; 25 26 private URL url; 27 private Collection<DownloadTask> suitableDownloadTasks; 20 28 21 29 @Override 22 30 protected void handleRequest() throws RequestHandlerErrorException { 23 31 try { 24 DownloadTask osmTask = new DownloadOsmTask(); 25 osmTask.loadUrl(false, args.get("url"), null); 32 if (suitableDownloadTasks != null && !suitableDownloadTasks.isEmpty()) { 33 // TODO: add new_layer parameter 34 // TODO: handle multiple suitable download tasks ? 35 suitableDownloadTasks.iterator().next().loadUrl(false, url.toExternalForm(), null); 36 } 26 37 } catch (Exception ex) { 27 38 System.out.println("RemoteControl: Error parsing import remote control request:"); … … 38 49 @Override 39 50 public String getPermissionMessage() { 51 // URL can be any suitable URL giving back OSM data, including OSM API calls, even if calls to the main API 52 // should rather be passed to LoadAndZoomHandler or LoadObjectHandler. 53 // Other API instances will however use the import handler to force JOSM to make requests to this API instance. 54 // (Example with OSM-FR website that makes calls to the OSM-FR API) 55 // For user-friendliness, let's try to decode these OSM API calls to give a better confirmation message. 56 String taskMessage = null; 57 if (suitableDownloadTasks != null && !suitableDownloadTasks.isEmpty()) { 58 // TODO: handle multiple suitable download tasks ? 59 taskMessage = suitableDownloadTasks.iterator().next().getConfirmationMessage(url); 60 } 40 61 return tr("Remote Control has been asked to import data from the following URL:") 41 + "<br>" + request;62 + "<br>" + (taskMessage == null ? url.toString() : taskMessage); 42 63 } 43 64 … … 53 74 String query = request.substring(request.indexOf('?') + 1); 54 75 if (query.indexOf("url=") == 0) { 55 args.put("url", decode URL(query.substring(4)));76 args.put("url", decodeParam(query.substring(4))); 56 77 } else { 57 78 int urlIdx = query.indexOf("&url="); 58 79 if (urlIdx != -1) { 59 String url =query.substring(urlIdx + 1);60 args.put("url", decode URL(query.substring(urlIdx + 5)));80 /*String url =*/ query.substring(urlIdx + 1); 81 args.put("url", decodeParam(query.substring(urlIdx + 5))); 61 82 query = query.substring(0, urlIdx); 62 83 } else { … … 77 98 } 78 99 79 private String decodeURL(String url) { 100 @Override 101 protected void validateRequest() throws RequestHandlerBadRequestException { 102 final String urlString = args.get("url"); 80 103 try { 81 return URLDecoder.decode(url, "UTF-8"); 82 } catch (UnsupportedEncodingException e) { 83 throw new RuntimeException(); 104 // Ensure the URL is valid 105 url = new URL(urlString); 106 } catch (MalformedURLException e) { 107 throw new RequestHandlerBadRequestException("MalformedURLException: "+e.getMessage()); 108 } 109 // Find download tasks for the given URL 110 suitableDownloadTasks = Main.main.menu.openLocation.findDownloadTasks(urlString); 111 if (suitableDownloadTasks.isEmpty()) { 112 // It should maybe be better to reject the request in that case ? 113 // For compatibility reasons with older instances of JOSM, arbitrary choice of DownloadOsmTask 114 suitableDownloadTasks.add(new DownloadOsmTask()); 84 115 } 85 116 }
Note:
See TracChangeset
for help on using the changeset viewer.