org.openstreetmap.osmosis.xml.common.BaseElementProcessor Maven / Gradle / Ivy
// This software is released into the Public Domain. See copying.txt for details.
package org.openstreetmap.osmosis.xml.common;
import java.util.Calendar;
import org.openstreetmap.osmosis.core.domain.common.SimpleTimestampContainer;
import org.openstreetmap.osmosis.core.domain.common.TimestampContainer;
import org.openstreetmap.osmosis.core.domain.common.TimestampFormat;
import org.openstreetmap.osmosis.core.domain.common.UnparsedTimestampContainer;
/**
* Provides common functionality shared by element processor implementations.
*
* @author Brett Henderson
*/
public abstract class BaseElementProcessor implements ElementProcessor {
private BaseElementProcessor parentProcessor;
private ElementProcessor dummyChildProcessor;
private TimestampFormat timestampFormat;
private TimestampContainer dummyTimestampContainer;
private boolean enableDateParsing;
/**
* Creates a new instance.
*
* @param parentProcessor
* The parent of this element processor.
* @param enableDateParsing
* If true, dates will be parsed from xml data, else the current
* date will be used thus saving parsing time.
*/
protected BaseElementProcessor(BaseElementProcessor parentProcessor, boolean enableDateParsing) {
this.parentProcessor = parentProcessor;
this.enableDateParsing = enableDateParsing;
if (enableDateParsing) {
timestampFormat = new XmlTimestampFormat();
} else {
Calendar calendar;
calendar = Calendar.getInstance();
calendar.set(Calendar.MILLISECOND, 0);
dummyTimestampContainer = new SimpleTimestampContainer(calendar.getTime());
}
}
/**
* 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;
}
/**
* {@inheritDoc}
*/
public ElementProcessor getParent() {
return parentProcessor;
}
/**
* Parses a date using the standard osm date format.
*
* @param data
* The date string to be parsed.
* @return The parsed date (if dateparsing is enabled).
*/
protected TimestampContainer createTimestampContainer(String data) {
if (enableDateParsing) {
return new UnparsedTimestampContainer(timestampFormat, data);
} else {
return dummyTimestampContainer;
}
}
}