001 package org.openstreetmap.josm.io.remotecontrol.handler;
002
003 import static org.openstreetmap.josm.tools.I18n.tr;
004
005 import java.util.LinkedList;
006 import java.util.List;
007 import org.openstreetmap.josm.Main;
008 import org.openstreetmap.josm.actions.DownloadPrimitiveAction;
009 import org.openstreetmap.josm.data.osm.PrimitiveId;
010 import org.openstreetmap.josm.data.osm.SimplePrimitiveId;
011 import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
012
013 /**
014 * Loads OSM primitives using their ID
015 * similar to the "Download object" dialog (@see DownloadPrimitiveAction}.
016 * For instance, {@code /load_object?objects=n1,w2,r3[&new_layer=false&relation_members=true]}.
017 */
018 public class LoadObjectHandler extends RequestHandler {
019
020 public static final String command = "load_object";
021
022 @Override
023 public String[] getMandatoryParams() {
024 return new String[]{"objects"};
025 }
026
027 @Override
028 protected void handleRequest() throws RequestHandlerErrorException, RequestHandlerBadRequestException {
029 if (!PermissionPrefWithDefault.LOAD_DATA.isAllowed()) {
030 System.out.println("RemoteControl: download forbidden by preferences");
031 }
032 final List<PrimitiveId> ps = new LinkedList<PrimitiveId>();
033 for (String i : args.get("objects").split(",\\s*")) {
034 ps.add(SimplePrimitiveId.fromString(i));
035 }
036 boolean newLayer = isLoadInNewLayer();
037 boolean relationMembers = Boolean.parseBoolean(args.get("relation_members"));
038 DownloadPrimitiveAction.processItems(newLayer, ps, true, relationMembers);
039 Main.worker.submit(new Runnable() {
040
041 @Override
042 public void run() {
043 Main.main.getCurrentDataSet().setSelected(ps);
044 LoadAndZoomHandler.addTags(args);
045 }
046 });
047 }
048
049 @Override
050 public String getPermissionMessage() {
051 return tr("Remote Control has been asked to load objects (specified by their id) from the API.");
052 }
053
054 @Override
055 public PermissionPrefWithDefault getPermissionPref() {
056 return PermissionPrefWithDefault.LOAD_DATA;
057 }
058 }