// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.io; import java.io.PrintWriter; import java.util.Objects; /** * This factory is called by everyone who needs an OsmWriter object, * instead of directly calling the OsmWriter constructor. * * This enables plugins to substitute the original OsmWriter with * their own version, altering the way JOSM writes objects to the * server, and to disk. * * @author Frederik Ramm * */ public class OsmWriterFactory { private static volatile OsmWriterFactory theFactory; /** * Creates new {@code OsmWriter}. * @param out print writer * @param osmConform if {@code true}, prevents modification attributes to be written to the common part * @param version OSM API version (0.6) * @return new {@code OsmWriter} */ public static OsmWriter createOsmWriter(PrintWriter out, boolean osmConform, String version) { // pre-set factory with this default implementation; can still be overwritten // later. note that the default factory may already be used for constructing // OsmWriters during the startup process. if (theFactory == null) { theFactory = new OsmWriterFactory(); } return theFactory.createOsmWriterImpl(out, osmConform, version); } /** * Sets the default factory. * @param factory new default factory * @since 11851 */ public static void setDefaultFactory(OsmWriterFactory factory) { theFactory = Objects.requireNonNull(factory); } /** * Creates new {@code OsmWriter}. * @param out print writer * @param osmConform if {@code true}, prevents modification attributes to be written to the common part * @param version OSM API version (0.6) * @return new {@code OsmWriter} */ protected OsmWriter createOsmWriterImpl(PrintWriter out, boolean osmConform, String version) { return new OsmWriter(out, osmConform, version); } }