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

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

see #8570, #7406 - I/O refactorization:

  • Move different file copy functions to Utils.copyFile (to be replaced later by Files.copy when switching to Java 7)
  • Replace all Utils.close(XXX) by Utils.close(Closeable) -> impacted plugins: commandline, mirrored_download, opendata, piclayer
  • Add new Utils.close(ZipFile)
  • Use of Utils.close almost everywhere
  • Javadoc fixes
File size: 3.5 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.UnsupportedEncodingException;
11import java.io.Writer;
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.w3c.dom.Element;
21
22import org.openstreetmap.josm.Main;
23import org.openstreetmap.josm.data.gpx.GpxData;
24import org.openstreetmap.josm.gui.layer.Layer;
25import org.openstreetmap.josm.gui.layer.markerlayer.Marker;
26import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
27import org.openstreetmap.josm.io.GpxWriter;
28import org.openstreetmap.josm.io.session.SessionWriter.ExportSupport;
29import org.openstreetmap.josm.tools.GBC;
30
31public class MarkerSessionExporter implements SessionLayerExporter {
32
33 private MarkerLayer layer;
34 private JCheckBox export;
35
36 public MarkerSessionExporter(MarkerLayer layer) {
37 this.layer = layer;
38 }
39
40 @Override
41 public Collection<Layer> getDependencies() {
42 Layer gpxLayer = layer.fromLayer;
43 if (gpxLayer != null && Main.map.mapView.hasLayer(gpxLayer))
44 return Collections.singleton(gpxLayer);
45 return Collections.emptySet();
46 }
47
48 @Override
49 public Component getExportPanel() {
50 final JPanel p = new JPanel(new GridBagLayout());
51 export = new JCheckBox();
52 export.setSelected(true);
53 final JLabel lbl = new JLabel(layer.getName(), layer.getIcon(), SwingConstants.LEFT);
54 lbl.setToolTipText(layer.getToolTipText());
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 protected void addDataFile(OutputStream out) throws IOException {
88 Writer writer = null;
89 try {
90 writer = new OutputStreamWriter(out, "UTF-8");
91 } catch (UnsupportedEncodingException e) {
92 throw new RuntimeException(e);
93 }
94 MarkerWriter w = new MarkerWriter(new PrintWriter(writer));
95 w.write(layer);
96 w.flush();
97 }
98
99 public static class MarkerWriter extends GpxWriter {
100
101 public MarkerWriter(PrintWriter out) {
102 super(out);
103 }
104
105 public void write(MarkerLayer layer) {
106 GpxData data = new GpxData();
107 data.attr.put(GpxData.META_DESC, "exported JOSM marker layer");
108 for (Marker m : layer.data) {
109 data.waypoints.add(m.convertToWayPoint());
110 }
111 super.write(data);
112 }
113 }
114}
Note: See TracBrowser for help on using the repository browser.