// License: GPL. Copyright 2007-2008 by Brett Henderson and other contributors.
// Modified by Ruediger Lunde, 2009
package aimax.osm.reader;
import org.xml.sax.Attributes;
import aimax.osm.data.MapBuilder;
/**
* Provides common functionality shared by element processor implementations.
*/
public abstract class ElementProcessor {
private ElementProcessor parentProcessor;
private ElementProcessor dummyChildProcessor;
private MapBuilder mapBuilder;
/**
* Creates a new instance.
*
* @param parentProcessor
* The parent of this element processor.
*/
protected ElementProcessor(ElementProcessor parentProcessor) {
this.parentProcessor = parentProcessor;
}
public ElementProcessor(ElementProcessor parentProcessor, MapBuilder builder) {
this(parentProcessor);
mapBuilder = builder;
}
/**
* This implementation returns a dummy element processor as the child which
* ignores all nested xml elements. Sub-classes wishing to handle child
* elements must override this method and delegate to this method for xml
* elements they don't care about.
*
* @param uri
* The element uri.
* @param localName
* The element localName.
* @param qName
* The element qName.
* @return A dummy element processor.
*/
public ElementProcessor getChild(String uri, String localName, String qName) {
if (dummyChildProcessor == null) {
dummyChildProcessor = new DummyElementProcessor(this);
}
return dummyChildProcessor;
}
/**
* Returns the parent of the processor.
*/
public ElementProcessor getParent() {
return parentProcessor;
}
/**
* @return The sink.
*/
protected MapBuilder getMapBuilder() {
return mapBuilder;
}
//////////////////////////////////////////////////////////////////////
// abstract methods
/**
* Initialises the element processor with attributes for a new element to be
* processed.
*
* @param attributes
* The attributes of the new element.
*/
abstract void begin(Attributes attributes);
/**
* Finalises processing for the element processor, this is called when the
* end of an element is reached.
*/
abstract void end();
}