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    }