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;
009
010import org.openstreetmap.josm.gui.layer.OsmDataLayer;
011import org.openstreetmap.josm.io.OsmWriter;
012import org.openstreetmap.josm.io.OsmWriterFactory;
013
014/**
015 * Session exporter for {@link OsmDataLayer}.
016 * @since 4685
017 */
018public class OsmDataSessionExporter extends GenericSessionExporter<OsmDataLayer> {
019
020    /**
021     * Constructs a new {@code OsmDataSessionExporter}.
022     * @param layer Data layer to export
023     */
024    public OsmDataSessionExporter(OsmDataLayer layer) { // NO_UCD (test only)
025        super(layer, "osm-data", "0.1", "osm");
026    }
027
028    @Override
029    protected void addDataFile(OutputStream out) {
030        Writer writer = new OutputStreamWriter(out, StandardCharsets.UTF_8);
031        OsmWriter w = OsmWriterFactory.createOsmWriter(new PrintWriter(writer), false, layer.data.getVersion());
032        layer.data.getReadLock().lock();
033        try {
034            w.writeLayer(layer);
035            w.flush();
036        } finally {
037            layer.data.getReadLock().unlock();
038        }
039    }
040}