source: josm/trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandler.java@ 18211

Last change on this file since 18211 was 18211, checked in by Don-vip, 3 years ago

global use of !Utils.isEmpty/isBlank

  • Property svn:eol-style set to native
File size: 5.0 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.io.remotecontrol.handler;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.net.MalformedURLException;
7import java.net.URL;
8import java.util.Collection;
9import java.util.LinkedHashSet;
10import java.util.Set;
11
12import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask;
13import org.openstreetmap.josm.actions.downloadtasks.DownloadTask;
14import org.openstreetmap.josm.gui.MainApplication;
15import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
16import org.openstreetmap.josm.spi.preferences.Config;
17import org.openstreetmap.josm.tools.Logging;
18import org.openstreetmap.josm.tools.Utils;
19
20/**
21 * Handler for import request
22 */
23public class ImportHandler extends RequestHandler.RawURLParseRequestHandler {
24
25 /**
26 * The remote control command name used to import data.
27 */
28 public static final String command = "import";
29
30 private URL url;
31 private Collection<DownloadTask> suitableDownloadTasks;
32
33 @Override
34 protected void handleRequest() throws RequestHandlerErrorException {
35 try {
36 if (suitableDownloadTasks.isEmpty()) {
37 // It should maybe be better to reject the request in that case ?
38 // For compatibility reasons with older instances of JOSM, arbitrary choice of DownloadOsmTask
39 // As of 2015-04, Overpass Turbo requires this branch of code ...
40 Logging.debug("Remote control, /import: defaulting to DownloadOsmTask");
41 new DownloadOsmTask().loadUrl(getDownloadParams(), url.toExternalForm(), null);
42 } else if (Config.getPref().getBoolean("remotecontrol.import.interactive", true)) {
43 // OpenLocationAction queries the user if more than one task is suitable
44 MainApplication.getMenu().openLocation.openUrl(getDownloadParams(), url.toExternalForm());
45 } else {
46 // Otherwise perform all tasks
47 for (DownloadTask task : suitableDownloadTasks) {
48 task.loadUrl(getDownloadParams(), url.toExternalForm(), null);
49 }
50 }
51 LoadAndZoomHandler.parseChangesetTags(args);
52 } catch (RuntimeException ex) { // NOPMD
53 Logging.warn("RemoteControl: Error parsing import remote control request:");
54 Logging.error(ex);
55 throw new RequestHandlerErrorException(ex);
56 }
57 }
58
59 @Override
60 public String[] getMandatoryParams() {
61 return new String[]{"url"};
62 }
63
64 @Override
65 public String[] getOptionalParams() {
66 return new String[] {"new_layer", "layer_name", "layer_locked", "download_policy", "upload_policy", "changeset_tags"};
67 }
68
69 @Override
70 public String getUsage() {
71 return "downloads the specified OSM file and adds it to the current data set";
72 }
73
74 @Override
75 public String[] getUsageExamples() {
76 return new String[] {"/import?url=" + Utils.encodeUrl(
77 Config.getUrls().getJOSMWebsite()+"/browser/josm/trunk/nodist/data/direction-arrows.osm?format=txt")};
78 }
79
80 @Override
81 public String getPermissionMessage() {
82 // URL can be any suitable URL giving back OSM data, including OSM API calls, even if calls to the main API
83 // should rather be passed to LoadAndZoomHandler or LoadObjectHandler.
84 // Other API instances will however use the import handler to force JOSM to make requests to this API instance.
85 // (Example with OSM-FR website that makes calls to the OSM-FR API)
86 // For user-friendliness, let's try to decode these OSM API calls to give a better confirmation message.
87 Set<String> taskMessages = new LinkedHashSet<>();
88 if (!Utils.isEmpty(suitableDownloadTasks)) {
89 for (DownloadTask task : suitableDownloadTasks) {
90 taskMessages.add(Utils.firstNonNull(task.getConfirmationMessage(url), url.toString()));
91 }
92 }
93 return tr("Remote Control has been asked to import data from the following URL:")
94 + Utils.joinAsHtmlUnorderedList(taskMessages);
95 }
96
97 @Override
98 public PermissionPrefWithDefault getPermissionPref() {
99 return PermissionPrefWithDefault.IMPORT_DATA;
100 }
101
102 @Override
103 protected void validateRequest() throws RequestHandlerBadRequestException {
104 validateDownloadParams();
105 String urlString = args != null ? args.get("url") : null;
106 if (Config.getPref().getBoolean("remotecontrol.importhandler.fix_url_query", true)) {
107 urlString = Utils.fixURLQuery(urlString);
108 }
109 try {
110 // Ensure the URL is valid
111 url = new URL(urlString);
112 } catch (MalformedURLException e) {
113 throw new RequestHandlerBadRequestException("MalformedURLException: "+e.getMessage(), e);
114 }
115 // Find download tasks for the given URL
116 suitableDownloadTasks = MainApplication.getMenu().openLocation.findDownloadTasks(urlString, true);
117 }
118}
Note: See TracBrowser for help on using the repository browser.