// 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.OsmosisRuntimeException;
import org.openstreetmap.osmosis.core.container.v0_6.BoundContainer;
import org.openstreetmap.osmosis.core.domain.v0_6.Bound;
import org.openstreetmap.osmosis.core.task.v0_6.Sink;
import org.openstreetmap.osmosis.xml.common.BaseElementProcessor;
/**
* Provides an element processor implementation for a node.
*
* @author Karl Newman
*/
public class LegacyBoundElementProcessor extends SourceElementProcessor {
private static final String ATTRIBUTE_NAME_BOX = "box";
private static final String ATTRIBUTE_NAME_ORIGIN = "origin";
private Bound bound;
/**
* Creates a new instance.
*
* @param parentProcessor
* The parent of this element processor.
* @param sink
* The sink for receiving processed data.
* @param enableDateParsing
* If true, dates will be parsed from xml data, else the current date will be used
* thus saving parsing time.
*/
public LegacyBoundElementProcessor(BaseElementProcessor parentProcessor,
Sink sink,
boolean enableDateParsing) {
super(parentProcessor, sink, enableDateParsing);
}
/**
* {@inheritDoc}
*/
@Override
public void begin(Attributes attributes) {
String boxString;
String origin;
String[] boundStrings;
Double right;
Double left;
Double top;
Double bottom;
boxString = attributes.getValue(ATTRIBUTE_NAME_BOX);
if (boxString == null) {
throw new OsmosisRuntimeException("Missing required box attribute of bound element");
}
boundStrings = boxString.split(",");
if (boundStrings.length != 4) {
throw new OsmosisRuntimeException("Badly formed box attribute of bound element");
}
try {
bottom = Double.parseDouble(boundStrings[0]);
left = Double.parseDouble(boundStrings[1]);
top = Double.parseDouble(boundStrings[2]);
right = Double.parseDouble(boundStrings[3]);
} catch (NumberFormatException e) {
throw new OsmosisRuntimeException("Can't parse box attribute of bound element", e);
}
origin = attributes.getValue(ATTRIBUTE_NAME_ORIGIN);
if (origin == null || origin.equals("")) {
throw new OsmosisRuntimeException("Origin attribute of bound element is empty or missing.");
}
bound = new Bound(right, left, top, bottom, origin);
}
/**
* {@inheritDoc}
*/
@Override
public void end() {
getSink().process(new BoundContainer(bound));
bound = null;
}
}