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