source: josm/trunk/src/org/openstreetmap/josm/io/session/GpxTracksSessionExporter.java

Last change on this file was 19535, checked in by stoecker, 3 months ago

remove a lot of PMD warnings, especially outdated ignores, see #24635

  • Property svn:eol-style set to native
File size: 3.3 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.io.session;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
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.time.Instant;
13
14import javax.swing.JCheckBox;
15import javax.swing.JPanel;
16
17import org.openstreetmap.josm.gui.layer.GpxLayer;
18import org.openstreetmap.josm.io.GpxWriter;
19import org.openstreetmap.josm.io.session.SessionWriter.ExportSupport;
20import org.openstreetmap.josm.tools.GBC;
21import org.w3c.dom.Element;
22
23/**
24 * Session exporter for {@link GpxLayer}.
25 * @since 5501
26 */
27public class GpxTracksSessionExporter extends GenericSessionExporter<GpxLayer> {
28
29 private Instant metaTime;
30 private JCheckBox chkMarkers;
31 private boolean hasMarkerLayer;
32
33 /**
34 * Constructs a new {@code GpxTracksSessionExporter}.
35 * @param layer GPX layer to export
36 */
37 public GpxTracksSessionExporter(GpxLayer layer) { // NO_UCD (test only)
38 this(layer, "tracks");
39 }
40
41 protected GpxTracksSessionExporter(GpxLayer layer, String type) {
42 super(layer, type, "0.1", "gpx");
43 if (layer.data == null) {
44 throw new IllegalArgumentException("GPX layer without data: " + layer);
45 }
46
47 hasMarkerLayer = layer.getLinkedMarkerLayer() != null
48 && layer.getLinkedMarkerLayer().data != null
49 && !layer.getLinkedMarkerLayer().data.isEmpty();
50 }
51
52 @Override
53 public JPanel getExportPanel() {
54 JPanel p = super.getExportPanel();
55 if (hasMarkerLayer) {
56 chkMarkers = new JCheckBox();
57 chkMarkers.setText(tr("include marker layer \"{0}\"", layer.getLinkedMarkerLayer().getName()));
58 chkMarkers.setSelected(true);
59 p.add(chkMarkers, GBC.eol().insets(12, 0, 0, 5));
60 }
61 return p;
62 }
63
64 @Override
65 public Element export(ExportSupport support) throws IOException {
66 Element el = super.export(support);
67 if (hasMarkerLayer && (chkMarkers == null || chkMarkers.isSelected())) {
68 Element markerEl = support.createElement("markerLayer");
69 markerEl.setAttribute("index", Integer.toString(support.getLayerIndexOf(layer.getLinkedMarkerLayer())));
70 markerEl.setAttribute("name", layer.getLinkedMarkerLayer().getName());
71 markerEl.setAttribute("visible", Boolean.toString(layer.getLinkedMarkerLayer().isVisible()));
72 if (layer.getLinkedMarkerLayer().getOpacity() != 1) {
73 markerEl.setAttribute("opacity", Double.toString(layer.getLinkedMarkerLayer().getOpacity()));
74 }
75 el.appendChild(markerEl);
76 }
77 return el;
78 }
79
80 @Override
81 // The new closable resources in this method will close the input OutputStream
82 @SuppressWarnings("squid:S2095")
83 protected void addDataFile(OutputStream out) {
84 Writer writer = new OutputStreamWriter(out, StandardCharsets.UTF_8);
85 GpxWriter w = new GpxWriter(new PrintWriter(writer));
86 if (metaTime != null) {
87 w.setMetaTime(metaTime);
88 }
89 w.write(layer.data);
90 w.flush();
91 }
92
93 protected void setMetaTime(Instant metaTime) {
94 this.metaTime = metaTime;
95 }
96}
Note: See TracBrowser for help on using the repository browser.