// This software is released into the Public Domain. See copying.txt for details. package org.openstreetmap.osmosis.xml.v0_6.impl; import java.io.Writer; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.text.NumberFormat; import java.util.Collection; import java.util.Locale; import org.openstreetmap.osmosis.core.domain.v0_6.Node; import org.openstreetmap.osmosis.core.domain.v0_6.Tag; /** * Renders a node as xml. * * @author Brett Henderson */ public class NodeWriter extends EntityWriter { /** * Write the tags of a node. */ private TagWriter tagWriter; private NumberFormat numberFormat; /** * Creates a new instance. * * @param elementName * The name of the element to be written. * @param indentLevel * The indent level of the element. */ public NodeWriter(String elementName, int indentLevel) { super(elementName, indentLevel); tagWriter = new TagWriter("tag", indentLevel + 1); // Only write the first 7 decimal places. // Write in US locale so that a '.' is used as the decimal separator. numberFormat = new DecimalFormat( "0.#######;-0.#######", new DecimalFormatSymbols(Locale.US) ); } /** * Writes the node. * * @param node * The node to be processed. */ public void process(Node node) { Collection<Tag> tags; beginOpenElement(); addCommonAttributes(node); if (!Double.isNaN(node.getLatitude())) { addAttribute("lat", numberFormat.format(node.getLatitude())); } if (!Double.isNaN(node.getLongitude())) { addAttribute("lon", numberFormat.format(node.getLongitude())); } addMetatags(node); tags = node.getTags(); if (tags.size() > 0) { endOpenElement(false); for (Tag tag : tags) { tagWriter.process(tag); } closeElement(); } else { endOpenElement(true); } } /** * {@inheritDoc} */ @Override public void setWriter(final Writer writer) { super.setWriter(writer); tagWriter.setWriter(writer); } }