source: josm/trunk/src/org/openstreetmap/josm/io/session/MarkerSessionExporter.java@ 10364

Last change on this file since 10364 was 10364, checked in by stoecker, 8 years ago

gsoc-core - patch by Michael Zangl - see #12953 - remove deprecation usage

  • Property svn:eol-style set to native
File size: 3.7 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.io.session;
3
4import java.awt.Component;
5import java.awt.GridBagLayout;
6import java.io.IOException;
7import java.io.OutputStream;
8import java.io.OutputStreamWriter;
9import java.io.PrintWriter;
10import java.io.Writer;
11import java.nio.charset.StandardCharsets;
12import java.util.Collection;
13import java.util.Collections;
14
15import javax.swing.JLabel;
16import javax.swing.JPanel;
17import javax.swing.SwingConstants;
18
19import org.openstreetmap.josm.Main;
20import org.openstreetmap.josm.data.gpx.GpxData;
21import org.openstreetmap.josm.gui.layer.Layer;
22import org.openstreetmap.josm.gui.layer.markerlayer.Marker;
23import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
24import org.openstreetmap.josm.io.GpxWriter;
25import org.openstreetmap.josm.io.session.SessionWriter.ExportSupport;
26import org.openstreetmap.josm.tools.GBC;
27import org.w3c.dom.Element;
28
29/**
30 * Session exporter for {@link MarkerLayer}.
31 * @since 5684
32 */
33public class MarkerSessionExporter extends AbstractSessionExporter<MarkerLayer> {
34
35 /**
36 * Constructs a new {@code MarkerSessionExporter}.
37 * @param layer marker layer to export
38 */
39 public MarkerSessionExporter(MarkerLayer layer) { // NO_UCD (unused code)
40 super(layer);
41 }
42
43 @Override
44 public Collection<Layer> getDependencies() {
45 Layer gpxLayer = layer.fromLayer;
46 if (gpxLayer != null && Main.getLayerManager().containsLayer(gpxLayer))
47 return Collections.singleton(gpxLayer);
48 return Collections.emptySet();
49 }
50
51 @Override
52 public Component getExportPanel() {
53 final JPanel p = new JPanel(new GridBagLayout());
54 export.setSelected(true);
55 final JLabel lbl = new JLabel(layer.getName(), layer.getIcon(), SwingConstants.LEFT);
56 lbl.setToolTipText(layer.getToolTipText());
57 lbl.setLabelFor(export);
58 p.add(export, GBC.std());
59 p.add(lbl, GBC.std());
60 p.add(GBC.glue(1, 0), GBC.std().fill(GBC.HORIZONTAL));
61 return p;
62 }
63
64 @Override
65 public boolean requiresZip() {
66 return true;
67 }
68
69 @Override
70 public Element export(ExportSupport support) throws IOException {
71 Element layerEl = support.createElement("layer");
72 layerEl.setAttribute("type", "markers");
73 layerEl.setAttribute("version", "0.1");
74
75 Element file = support.createElement("file");
76 layerEl.appendChild(file);
77
78 String zipPath = "layers/" + String.format("%02d", support.getLayerIndex()) + "/data.gpx";
79 file.appendChild(support.createTextNode(zipPath));
80 addDataFile(support.getOutputStreamZip(zipPath));
81
82 return layerEl;
83 }
84
85 @SuppressWarnings("resource")
86 protected void addDataFile(OutputStream out) {
87 Writer writer = new OutputStreamWriter(out, StandardCharsets.UTF_8);
88 MarkerWriter w = new MarkerWriter(new PrintWriter(writer));
89 w.write(layer);
90 w.flush();
91 }
92
93 /**
94 * Writes GPX file from marker data.
95 */
96 public static class MarkerWriter extends GpxWriter {
97
98 /**
99 * Constructs a new {@code MarkerWriter}.
100 * @param out The output writer
101 */
102 public MarkerWriter(PrintWriter out) {
103 super(out);
104 }
105
106 /**
107 * Writes the given markers data.
108 * @param layer The layer data to write
109 */
110 public void write(MarkerLayer layer) {
111 GpxData data = new GpxData();
112 data.put(GpxData.META_DESC, "exported JOSM marker layer");
113 for (Marker m : layer.data) {
114 data.waypoints.add(m.convertToWayPoint());
115 }
116 super.write(data);
117 }
118 }
119}
Note: See TracBrowser for help on using the repository browser.