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

Last change on this file since 7082 was 7082, checked in by Don-vip, 10 years ago

see #8465 - replace Utils.UTF_8 by StandardCharsets.UTF_8, new in Java 7

File size: 3.3 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.JCheckBox;
16import javax.swing.JLabel;
17import javax.swing.JPanel;
18import javax.swing.SwingConstants;
19
20import org.openstreetmap.josm.Main;
21import org.openstreetmap.josm.data.gpx.GpxData;
22import org.openstreetmap.josm.gui.layer.Layer;
23import org.openstreetmap.josm.gui.layer.markerlayer.Marker;
24import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
25import org.openstreetmap.josm.io.GpxWriter;
26import org.openstreetmap.josm.io.session.SessionWriter.ExportSupport;
27import org.openstreetmap.josm.tools.GBC;
28import org.w3c.dom.Element;
29
30public class MarkerSessionExporter implements SessionLayerExporter {
31
32 private MarkerLayer layer;
33 private JCheckBox export;
34
35 public MarkerSessionExporter(MarkerLayer layer) {
36 this.layer = layer;
37 }
38
39 @Override
40 public Collection<Layer> getDependencies() {
41 Layer gpxLayer = layer.fromLayer;
42 if (gpxLayer != null && Main.map.mapView.hasLayer(gpxLayer))
43 return Collections.singleton(gpxLayer);
44 return Collections.emptySet();
45 }
46
47 @Override
48 public Component getExportPanel() {
49 final JPanel p = new JPanel(new GridBagLayout());
50 export = new JCheckBox();
51 export.setSelected(true);
52 final JLabel lbl = new JLabel(layer.getName(), layer.getIcon(), SwingConstants.LEFT);
53 lbl.setToolTipText(layer.getToolTipText());
54 p.add(export, GBC.std());
55 p.add(lbl, GBC.std());
56 p.add(GBC.glue(1,0), GBC.std().fill(GBC.HORIZONTAL));
57 return p;
58 }
59
60 @Override
61 public boolean shallExport() {
62 return export.isSelected();
63 }
64
65 @Override
66 public boolean requiresZip() {
67 return true;
68 }
69
70 @Override
71 public Element export(ExportSupport support) throws IOException {
72 Element layerEl = support.createElement("layer");
73 layerEl.setAttribute("type", "markers");
74 layerEl.setAttribute("version", "0.1");
75
76 Element file = support.createElement("file");
77 layerEl.appendChild(file);
78
79 String zipPath = "layers/" + String.format("%02d", support.getLayerIndex()) + "/data.gpx";
80 file.appendChild(support.createTextNode(zipPath));
81 addDataFile(support.getOutputStreamZip(zipPath));
82
83 return layerEl;
84 }
85
86 @SuppressWarnings("resource")
87 protected void addDataFile(OutputStream out) {
88 Writer writer = new OutputStreamWriter(out, StandardCharsets.UTF_8);
89 MarkerWriter w = new MarkerWriter(new PrintWriter(writer));
90 w.write(layer);
91 w.flush();
92 }
93
94 public static class MarkerWriter extends GpxWriter {
95
96 public MarkerWriter(PrintWriter out) {
97 super(out);
98 }
99
100 public void write(MarkerLayer layer) {
101 GpxData data = new GpxData();
102 data.attr.put(GpxData.META_DESC, "exported JOSM marker layer");
103 for (Marker m : layer.data) {
104 data.waypoints.add(m.convertToWayPoint());
105 }
106 super.write(data);
107 }
108 }
109}
Note: See TracBrowser for help on using the repository browser.