source: josm/trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadObjectHandler.java@ 12636

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

see #15182 - deprecate Main.getLayerManager(). Replacement: gui.MainApplication.getLayerManager()

  • Property svn:eol-style set to native
File size: 4.2 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.util.Collection;
7import java.util.HashSet;
8import java.util.LinkedList;
9import java.util.List;
10
11import org.openstreetmap.josm.data.osm.DataSet;
12import org.openstreetmap.josm.data.osm.OsmPrimitive;
13import org.openstreetmap.josm.data.osm.PrimitiveId;
14import org.openstreetmap.josm.data.osm.SimplePrimitiveId;
15import org.openstreetmap.josm.gui.MainApplication;
16import org.openstreetmap.josm.gui.io.DownloadPrimitivesWithReferrersTask;
17import org.openstreetmap.josm.gui.util.GuiHelper;
18import org.openstreetmap.josm.io.remotecontrol.AddTagsDialog;
19import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
20import org.openstreetmap.josm.tools.Logging;
21
22/**
23 * Loads OSM primitives using their ID
24 * similar to the "Download object" dialog (@see DownloadPrimitiveAction}.
25 * For instance, {@code /load_object?objects=n1,w2,r3[&new_layer=false&relation_members=true]}.
26 */
27public class LoadObjectHandler extends RequestHandler {
28
29 /**
30 * The remote control command name used to load objects using their ID.
31 */
32 public static final String command = "load_object";
33
34 private final List<PrimitiveId> ps = new LinkedList<>();
35
36 @Override
37 public String[] getMandatoryParams() {
38 return new String[]{"objects"};
39 }
40
41 @Override
42 public String[] getOptionalParams() {
43 return new String[] {"new_layer", "layer_name", "addtags", "relation_members", "referrers"};
44 }
45
46 @Override
47 public String getUsage() {
48 return "downloads the specified objects from the server";
49 }
50
51 @Override
52 public String[] getUsageExamples() {
53 return new String[] {"/load_object?new_layer=true&objects=w106159509",
54 "/load_object?new_layer=true&objects=r2263653&relation_members=true",
55 "/load_object?objects=n100000&referrers=false"
56 };
57 }
58
59 @Override
60 protected void handleRequest() throws RequestHandlerErrorException, RequestHandlerBadRequestException {
61 if (!PermissionPrefWithDefault.LOAD_DATA.isAllowed()) {
62 Logging.info("RemoteControl: download forbidden by preferences");
63 }
64 if (!ps.isEmpty()) {
65 final boolean newLayer = isLoadInNewLayer();
66 final boolean relationMembers = Boolean.parseBoolean(args.get("relation_members"));
67 final boolean referrers = Boolean.parseBoolean(args.get("referrers"));
68 final DownloadPrimitivesWithReferrersTask task = new DownloadPrimitivesWithReferrersTask(
69 newLayer, ps, referrers, relationMembers, args.get("layer_name"), null);
70 MainApplication.worker.submit(task);
71 MainApplication.worker.submit(() -> {
72 final List<PrimitiveId> downloaded = task.getDownloadedId();
73 final DataSet ds = MainApplication.getLayerManager().getEditDataSet();
74 if (downloaded != null) {
75 GuiHelper.runInEDT(() -> ds.setSelected(downloaded));
76 Collection<OsmPrimitive> downlPrim = new HashSet<>();
77 for (PrimitiveId id : downloaded) {
78 downlPrim.add(ds.getPrimitiveById(id));
79 }
80 AddTagsDialog.addTags(args, sender, downlPrim);
81 }
82 ps.clear();
83 });
84 }
85 }
86
87 @Override
88 public String getPermissionMessage() {
89 return tr("Remote Control has been asked to load objects (specified by their id) from the API.");
90 }
91
92 @Override
93 public PermissionPrefWithDefault getPermissionPref() {
94 return PermissionPrefWithDefault.LOAD_DATA;
95 }
96
97 @Override
98 protected void validateRequest() throws RequestHandlerBadRequestException {
99 ps.clear();
100 for (String i : (args != null ? args.get("objects") : "").split(",\\s*")) {
101 if (!i.isEmpty()) {
102 try {
103 ps.add(SimplePrimitiveId.fromString(i));
104 } catch (IllegalArgumentException e) {
105 Logging.log(Logging.LEVEL_WARN, "RemoteControl: invalid selection '"+i+"' ignored.", e);
106 }
107 }
108 }
109 }
110}
Note: See TracBrowser for help on using the repository browser.