// 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.Relation;
import org.openstreetmap.osmosis.core.domain.v0_6.RelationMember;
import org.openstreetmap.osmosis.core.domain.v0_6.Tag;
/**
* Renders a relation as xml.
*
* @author Brett Henderson
*/
public class RelationWriter extends EntityWriter {
/**
* Write the ordered list of members of a relation.
*/
private RelationMemberWriter relationMemberWriter;
/**
* Write the tags of a relation.
*/
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 RelationWriter(String elementName, int indentLevel) {
super(elementName, indentLevel);
tagWriter = new TagWriter("tag", indentLevel + 1);
relationMemberWriter = new RelationMemberWriter("member", indentLevel + 1);
}
/**
* Writes the relation.
*
* @param relation
* The relation to be processed.
*/
public void process(Relation relation) {
List<RelationMember> relationMembers;
Collection<Tag> tags;
beginOpenElement();
addCommonAttributes(relation);
addMetatags(relation);
relationMembers = relation.getMembers();
tags = relation.getTags();
if (relationMembers.size() > 0 || tags.size() > 0) {
endOpenElement(false);
for (RelationMember relationMember : relationMembers) {
relationMemberWriter.processRelationMember(relationMember);
}
for (Tag tag : tags) {
tagWriter.process(tag);
}
closeElement();
} else {
endOpenElement(true);
}
}
/**
* {@inheritDoc}
*/
@Override
public void setWriter(final Writer writer) {
super.setWriter(writer);
relationMemberWriter.setWriter(writer);
tagWriter.setWriter(writer);
}
}