Skip to content

Commit 7766eb0

Browse files
author
stoecker
committed
add remote control command to export dataset, fix #24385
git-svn-id: https://josm.openstreetmap.de/svn/trunk@19425 0c6e7542-c601-0410-84e7-c038aed88b3b
1 parent be0b752 commit 7766eb0

File tree

3 files changed

+86
-1
lines changed

3 files changed

+86
-1
lines changed

src/org/openstreetmap/josm/io/remotecontrol/PermissionPrefWithDefault.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ public class PermissionPrefWithDefault {
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"));

src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.openstreetmap.josm.io.remotecontrol.handler.FeaturesHandler;
3838
import org.openstreetmap.josm.io.remotecontrol.handler.ImageryHandler;
3939
import org.openstreetmap.josm.io.remotecontrol.handler.ImportHandler;
40+
import org.openstreetmap.josm.io.remotecontrol.handler.ExportHandler;
4041
import org.openstreetmap.josm.io.remotecontrol.handler.LoadAndZoomHandler;
4142
import org.openstreetmap.josm.io.remotecontrol.handler.LoadDataHandler;
4243
import org.openstreetmap.josm.io.remotecontrol.handler.LoadObjectHandler;
@@ -172,6 +173,7 @@ public static void initialize() {
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);
@@ -332,7 +334,7 @@ private static void callHandler(String url, String command, Writer out, String s
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());
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
// License: GPL. For details, see LICENSE file.
2+
package org.openstreetmap.josm.io.remotecontrol.handler;
3+
4+
import static org.openstreetmap.josm.tools.I18n.tr;
5+
6+
import java.io.PrintWriter;
7+
import java.io.StringWriter;
8+
9+
import org.openstreetmap.josm.gui.MainApplication;
10+
import org.openstreetmap.josm.gui.layer.Layer;
11+
import org.openstreetmap.josm.gui.layer.OsmDataLayer;
12+
import org.openstreetmap.josm.io.OsmWriter;
13+
import org.openstreetmap.josm.io.OsmWriterFactory;
14+
import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
15+
16+
/**
17+
* Export map data into .osm format
18+
* For instance, {@code /export]}.
19+
* @since 19425
20+
*/
21+
public class ExportHandler extends RequestHandler {
22+
23+
/**
24+
* The remote control command name used to export data from JOSM.
25+
*/
26+
public static final String command = "export";
27+
28+
@Override
29+
public String[] getMandatoryParams() {
30+
return new String[]{};
31+
}
32+
33+
@Override
34+
public String[] getOptionalParams() {
35+
return new String[] {};
36+
}
37+
38+
@Override
39+
public String getUsage() {
40+
return "export data from JOSM";
41+
}
42+
43+
@Override
44+
public String[] getUsageExamples() {
45+
return new String[] {"/export"};
46+
}
47+
48+
@Override
49+
protected void handleRequest() throws RequestHandlerErrorException, RequestHandlerBadRequestException {
50+
Layer layer = MainApplication.getLayerManager().getActiveLayer();
51+
if (!(layer instanceof OsmDataLayer)) {
52+
content = "";
53+
return;
54+
}
55+
OsmDataLayer osmLayer = (OsmDataLayer) layer;
56+
StringWriter sw = new StringWriter();
57+
OsmWriter w = OsmWriterFactory.createOsmWriter(new PrintWriter(sw), false, osmLayer.data.getVersion());
58+
osmLayer.data.getReadLock().lock();
59+
try {
60+
w.write(osmLayer.data);
61+
} finally {
62+
osmLayer.data.getReadLock().unlock();
63+
}
64+
contentType = "application/xml";
65+
content = sw.toString();
66+
}
67+
68+
@Override
69+
public String getPermissionMessage() {
70+
return tr("Remote Control has been asked to export data from JOSM");
71+
}
72+
73+
@Override
74+
public PermissionPrefWithDefault getPermissionPref() {
75+
return PermissionPrefWithDefault.EXPORT_DATA;
76+
}
77+
78+
@Override
79+
protected void validateRequest() throws RequestHandlerBadRequestException {}
80+
}

0 commit comments

Comments
 (0)