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

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

Accessibility - global use of JLabel.setLabelFor() + various fixes (javadoc, code style)

  • Property svn:eol-style set to native
File size: 3.4 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 lbl.setLabelFor(export);
55 p.add(export, GBC.std());
56 p.add(lbl, GBC.std());
57 p.add(GBC.glue(1,0), GBC.std().fill(GBC.HORIZONTAL));
58 return p;
59 }
60
61 @Override
62 public boolean shallExport() {
63 return export.isSelected();
64 }
65
66 @Override
67 public boolean requiresZip() {
68 return true;
69 }
70
71 @Override
72 public Element export(ExportSupport support) throws IOException {
73 Element layerEl = support.createElement("layer");
74 layerEl.setAttribute("type", "markers");
75 layerEl.setAttribute("version", "0.1");
76
77 Element file = support.createElement("file");
78 layerEl.appendChild(file);
79
80 String zipPath = "layers/" + String.format("%02d", support.getLayerIndex()) + "/data.gpx";
81 file.appendChild(support.createTextNode(zipPath));
82 addDataFile(support.getOutputStreamZip(zipPath));
83
84 return layerEl;
85 }
86
87 @SuppressWarnings("resource")
88 protected void addDataFile(OutputStream out) {
89 Writer writer = new OutputStreamWriter(out, StandardCharsets.UTF_8);
90 MarkerWriter w = new MarkerWriter(new PrintWriter(writer));
91 w.write(layer);
92 w.flush();
93 }
94
95 public static class MarkerWriter extends GpxWriter {
96
97 public MarkerWriter(PrintWriter out) {
98 super(out);
99 }
100
101 public void write(MarkerLayer layer) {
102 GpxData data = new GpxData();
103 data.put(GpxData.META_DESC, "exported JOSM marker layer");
104 for (Marker m : layer.data) {
105 data.waypoints.add(m.convertToWayPoint());
106 }
107 super.write(data);
108 }
109 }
110}
Note: See TracBrowser for help on using the repository browser.