Ticket #24385: Remote_Control__export_data.patch

File Remote_Control__export_data.patch, 6.4 KB (added by TrickyFoxy, 9 months ago)
  • new file core/src/org/openstreetmap/josm/io/remotecontrol/handler/ExportHandler.java

    Subject: [PATCH] Remote Control: export data
    ---
    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
    diff --git a/core/src/org/openstreetmap/josm/io/remotecontrol/handler/ExportHandler.java b/core/src/org/openstreetmap/josm/io/remotecontrol/handler/ExportHandler.java
    new file mode 100644
    - +  
     1// License: GPL. For details, see LICENSE file.
     2package org.openstreetmap.josm.io.remotecontrol.handler;
     3
     4import org.openstreetmap.josm.gui.MainApplication;
     5import org.openstreetmap.josm.gui.layer.Layer;
     6import org.openstreetmap.josm.gui.layer.OsmDataLayer;
     7import org.openstreetmap.josm.io.OsmWriter;
     8import org.openstreetmap.josm.io.OsmWriterFactory;
     9import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
     10
     11import java.io.*;
     12
     13import static org.openstreetmap.josm.tools.I18n.tr;
     14
     15/**
     16 * Export map data into .osm format
     17 * For instance, {@code /export]}.
     18 */
     19public class ExportHandler extends RequestHandler {
     20
     21    /**
     22     * The remote control command name used to export data from JOSM.
     23     */
     24    public static final String command = "export";
     25
     26    @Override
     27    public String[] getMandatoryParams() {
     28        return new String[]{};
     29    }
     30
     31    @Override
     32    public String[] getOptionalParams() {
     33        return new String[] {};
     34    }
     35
     36    @Override
     37    public String getUsage() {
     38        return "export data from JOSM";
     39    }
     40
     41    @Override
     42    public String[] getUsageExamples() {
     43        return new String[] {"/export"};
     44    }
     45
     46    @Override
     47    protected void handleRequest() throws RequestHandlerErrorException, RequestHandlerBadRequestException {
     48        Layer layer = MainApplication.getLayerManager().getActiveLayer();
     49        if (!(layer instanceof OsmDataLayer)) {
     50            content = "";
     51            return;
     52        }
     53        OsmDataLayer osmLayer = (OsmDataLayer) layer;
     54        StringWriter sw = new StringWriter();
     55        OsmWriter w = OsmWriterFactory.createOsmWriter(new PrintWriter(sw), false, osmLayer.data.getVersion());
     56        osmLayer.data.getReadLock().lock();
     57        try {
     58            w.write(osmLayer.data);
     59        } finally {
     60            osmLayer.data.getReadLock().unlock();
     61        }
     62        contentType = "application/xml";
     63        content = sw.toString();
     64    }
     65
     66    @Override
     67    public String getPermissionMessage() {
     68        return tr("Remote Control has been asked to export data from JOSM");
     69    }
     70
     71    @Override
     72    public PermissionPrefWithDefault getPermissionPref() {
     73        return PermissionPrefWithDefault.EXPORT_DATA;
     74    }
     75
     76    @Override
     77    protected void validateRequest() throws RequestHandlerBadRequestException {}
     78}
  • core/src/org/openstreetmap/josm/io/remotecontrol/PermissionPrefWithDefault.java

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
    diff --git a/core/src/org/openstreetmap/josm/io/remotecontrol/PermissionPrefWithDefault.java b/core/src/org/openstreetmap/josm/io/remotecontrol/PermissionPrefWithDefault.java
    a b  
    2626    /** Import data from URL */
    2727    public static final PermissionPrefWithDefault IMPORT_DATA =
    2828            new PermissionPrefWithDefault("remotecontrol.permission.import", true, tr("Import data from URL"));
     29    /** Export data from JOSM */
     30    public static final PermissionPrefWithDefault EXPORT_DATA =
     31            new PermissionPrefWithDefault("remotecontrol.permission.export", false, tr("Export data from JOSM"));
    2932    /** Open local files */
    3033    public static final PermissionPrefWithDefault OPEN_FILES =
    3134            new PermissionPrefWithDefault("remotecontrol.permission.open-files", false, tr("Open local files"));
  • core/src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
    diff --git a/core/src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java b/core/src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java
    a b  
    3737import org.openstreetmap.josm.io.remotecontrol.handler.FeaturesHandler;
    3838import org.openstreetmap.josm.io.remotecontrol.handler.ImageryHandler;
    3939import org.openstreetmap.josm.io.remotecontrol.handler.ImportHandler;
     40import org.openstreetmap.josm.io.remotecontrol.handler.ExportHandler;
    4041import org.openstreetmap.josm.io.remotecontrol.handler.LoadAndZoomHandler;
    4142import org.openstreetmap.josm.io.remotecontrol.handler.LoadDataHandler;
    4243import org.openstreetmap.josm.io.remotecontrol.handler.LoadObjectHandler;
     
    172173            addRequestHandlerClass(LoadObjectHandler.command, LoadObjectHandler.class, true);
    173174            addRequestHandlerClass(LoadDataHandler.command, LoadDataHandler.class, true);
    174175            addRequestHandlerClass(ImportHandler.command, ImportHandler.class, true);
     176            addRequestHandlerClass(ExportHandler.command, ExportHandler.class, true);
    175177            addRequestHandlerClass(OpenFileHandler.command, OpenFileHandler.class, true);
    176178            PermissionPrefWithDefault.addPermissionPref(PermissionPrefWithDefault.ALLOW_WEB_RESOURCES);
    177179            addRequestHandlerClass(ImageryHandler.command, ImageryHandler.class, true);
     
    332334                handler.setSender(sender);
    333335                handler.handle();
    334336                sendHeader(out, "200 OK", handler.getContentType(), false);
    335                 out.write("Content-length: " + handler.getContent().length()
     337                out.write("Content-length: " + handler.getContent().getBytes().length
    336338                        + "\r\n");
    337339                out.write("\r\n");
    338340                out.write(handler.getContent());