package org.osmtools.dataimport;
import org.osmtools.dataimport.BlockingQueueDefaultHandler;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
public class OsmObjectReader<T extends OsmObject> extends BlockingQueueDefaultHandler<T> {
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
char c = qName.charAt(0);
AttributesReader reader = new AttributesReader(attributes);
if (c == 't') {// tag
onTagStart(reader);
}
else if (c == 'n' && !qName.equals("nd")) { // node
onNodeStart(reader);
}
else if (c == 'n' && qName.equals("nd")) { // nd within way
onWayNodeStart(reader);
}
else if (c == 'r') {
onRelationStart(reader);
}
else if (c == 'm') { // member
onRelationMemberStart(reader);
}
else if (c == 'w') { // way
onWayStart(reader);
}
}
protected void onTagStart(AttributesReader reader) {
}
protected void onNodeStart(AttributesReader reader) {
}
protected void onWayNodeStart(AttributesReader reader) {
}
protected void onRelationStart(AttributesReader reader) {
}
protected void onRelationMemberStart(AttributesReader reader) {
}
protected void onWayStart(AttributesReader reader) {
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
char c = qName.charAt(0);
if (c == 't') // tag
{
onTagEnd();
}
else if (c == 'n' && !qName.equals("nd")) // node
{
onNodeEnd();
}
else if (c == 'n' && qName.equals("nd")) // nd within way
{
onWayNodeEnd();
}
else if (c == 'r') {
onRelationEnd();
}
else if (c == 'm') { // member
onRelationMemberEnd();
}
else if (c == 'w') { // way
onWayEnd();
}
}
protected void onWayEnd() {
}
protected void onRelationMemberEnd() {
}
protected void onRelationEnd() {
}
protected void onWayNodeEnd() {
}
protected void onNodeEnd() {
}
protected void onTagEnd() {
}
}