// 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.util.Collection;
import java.util.List;
import org.openstreetmap.osmosis.core.domain.v0_6.Tag;
import org.openstreetmap.osmosis.core.domain.v0_6.Way;
import org.openstreetmap.osmosis.core.domain.v0_6.WayNode;
/**
* Renders a way as xml.
*
* @author Brett Henderson
*/
public class WayWriter extends EntityWriter {
/**
* Write the ordered list of node-references of a way.
*/
private WayNodeWriter wayNodeWriter;
/**
* Write the tags of a way.
*/
private TagWriter tagWriter;
/**
* Creates a new instance.
*
* @param elementName
* The name of the element to be written.
* @param indentLevel
* The indent level of the element.
*/
public WayWriter(String elementName, int indentLevel) {
super(elementName, indentLevel);
tagWriter = new TagWriter("tag", indentLevel + 1);
wayNodeWriter = new WayNodeWriter("nd", indentLevel + 1);
}
/**
* Writes the way.
*
* @param way
* The way to be processed.
*/
public void process(Way way) {
List<WayNode> wayNodes;
Collection<Tag> tags;
beginOpenElement();
addCommonAttributes(way);
addMetatags(way);
wayNodes = way.getWayNodes();
tags = way.getTags();
if (wayNodes.size() > 0 || tags.size() > 0) {
endOpenElement(false);
for (WayNode wayNode : wayNodes) {
wayNodeWriter.processWayNode(wayNode);
}
for (Tag tag : tags) {
tagWriter.process(tag);
}
closeElement();
} else {
endOpenElement(true);
}
}
/**
* {@inheritDoc}
*/
@Override
public void setWriter(final Writer writer) {
super.setWriter(writer);
wayNodeWriter.setWriter(writer);
tagWriter.setWriter(writer);
}
}