content: package aimax.osm.reader;
  
  import org.xml.sax.Attributes;
  
  import aimax.osm.data.BoundingBox;
  import aimax.osm.data.MapBuilder;
  
  public class BoundElementProcessor extends ElementProcessor {
  	private static final String ATTRIBUTE_NAME_BOX = "box";
  	private static final String ATTRIBUTE_NAME_ORIGIN = "origin";
  	
  	private BoundingBox bb;
  	
  	public BoundElementProcessor(ElementProcessor parentProcessor,
  			MapBuilder mdConsumer) {
  		super(parentProcessor, mdConsumer);
  	}
  
  
  	/**
  	 * {@inheritDoc}
  	 */
  	@Override
  	public void begin(Attributes attributes) {
  		String boxString;
  		String origin;
  		String[] boundStrings;
  		float right;
  		float left;
  		float top;
  		float bottom;
  		
  		boxString = attributes.getValue(ATTRIBUTE_NAME_BOX);
  		
  		if (boxString == null) {
  			throw new OsmRuntimeException("Missing required box attribute of bound element");
  		}
  		boundStrings = boxString.split(",");
  		if (boundStrings.length != 4) {
  			throw new OsmRuntimeException("Badly formed box attribute of bound element");
  		}
  		try {
  			bottom = Float.parseFloat(boundStrings[0]);
  			left = Float.parseFloat(boundStrings[1]);
  			top = Float.parseFloat(boundStrings[2]);
  			right = Float.parseFloat(boundStrings[3]);
  		} catch (NumberFormatException e) {
  			throw new OsmRuntimeException("Can't parse box attribute of bound element", e);
  		}
  		origin = attributes.getValue(ATTRIBUTE_NAME_ORIGIN);
  		if (origin == null || origin.equals("")) {
  			throw new OsmRuntimeException("Origin attribute of bound element is empty or missing.");
  		}
  		bb = new BoundingBox(bottom, left, top, right);
  	}
  
  
  	/**
  	 * {@inheritDoc}
  	 */
  	@Override
  	public void end() {
  		getMapBuilder().setBoundingBox(bb);
  		bb = null;
  	}
  
  }
  
  