001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.io.session; 003 004import java.io.OutputStream; 005import java.io.OutputStreamWriter; 006import java.io.PrintWriter; 007import java.io.Writer; 008import java.nio.charset.StandardCharsets; 009import java.time.Instant; 010 011import org.openstreetmap.josm.gui.layer.GpxLayer; 012import org.openstreetmap.josm.io.GpxWriter; 013 014/** 015 * Session exporter for {@link GpxLayer}. 016 * @since 5501 017 */ 018public class GpxTracksSessionExporter extends GenericSessionExporter<GpxLayer> { 019 020 private Instant metaTime; 021 022 /** 023 * Constructs a new {@code GpxTracksSessionExporter}. 024 * @param layer GPX layer to export 025 */ 026 public GpxTracksSessionExporter(GpxLayer layer) { // NO_UCD (test only) 027 this(layer, "tracks"); 028 } 029 030 protected GpxTracksSessionExporter(GpxLayer layer, String type) { 031 super(layer, type, "0.1", "gpx"); 032 if (layer.data == null) { 033 throw new IllegalArgumentException("GPX layer without data: " + layer); 034 } 035 } 036 037 @Override 038 @SuppressWarnings("resource") 039 protected void addDataFile(OutputStream out) { 040 Writer writer = new OutputStreamWriter(out, StandardCharsets.UTF_8); 041 GpxWriter w = new GpxWriter(new PrintWriter(writer)); 042 if (metaTime != null) { 043 w.setMetaTime(metaTime); 044 } 045 w.write(layer.data); 046 w.flush(); 047 } 048 049 protected void setMetaTime(Instant metaTime) { 050 this.metaTime = metaTime; 051 } 052}