// This software is released into the Public Domain. See copying.txt for details.
package org.openstreetmap.osmosis.xml.v0_6.impl;
import org.xml.sax.Attributes;
import org.openstreetmap.osmosis.core.domain.v0_6.EntityType;
import org.openstreetmap.osmosis.core.domain.v0_6.RelationMember;
import org.openstreetmap.osmosis.xml.common.BaseElementProcessor;
/**
* Provides an element processor implementation for a relation member.
*
* @author Brett Henderson
*/
public class RelationMemberElementProcessor extends BaseElementProcessor {
private static final String ATTRIBUTE_NAME_ID = "ref";
private static final String ATTRIBUTE_NAME_TYPE = "type";
private static final String ATTRIBUTE_NAME_ROLE = "role";
private RelationMemberListener relationMemberListener;
private RelationMember relationMember;
private MemberTypeParser memberTypeParser;
/**
* Creates a new instance.
*
* @param parentProcessor
* The parent element processor.
* @param relationMemberListener
* The relation member listener for receiving created tags.
*/
public RelationMemberElementProcessor(
BaseElementProcessor parentProcessor, RelationMemberListener relationMemberListener) {
super(parentProcessor, true);
this.relationMemberListener = relationMemberListener;
memberTypeParser = new MemberTypeParser();
}
/**
* {@inheritDoc}
*/
public void begin(Attributes attributes) {
long id;
EntityType type;
String role;
id = Long.parseLong(attributes.getValue(ATTRIBUTE_NAME_ID));
type = memberTypeParser.parse(attributes.getValue(ATTRIBUTE_NAME_TYPE));
role = attributes.getValue(ATTRIBUTE_NAME_ROLE);
if (role == null) {
role = ""; // this may actually happen
}
relationMember = new RelationMember(id, type, role);
}
/**
* {@inheritDoc}
*/
public void end() {
relationMemberListener.processRelationMember(relationMember);
relationMember = null;
}
}