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}