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 }