EventDataXMLHandler.java
- package gov.usgs.earthquake.dyfi;
- import gov.usgs.util.XmlUtils;
- import java.util.HashMap;
- import java.util.Map;
- import org.xml.sax.Attributes;
- import org.xml.sax.SAXException;
- import org.xml.sax.helpers.DefaultHandler;
- /**
- * Parser for DYFI "eventdata.xml" metadata.
- */
- public class EventDataXMLHandler extends DefaultHandler {
- /** XML Element Name for event_data */
- public static final String DYFI_EVENTDATA_ELEMENT = "event_data";
- /** XML Element Name for event */
- public static final String DYFI_EVENT_ELEMENT = "event";
- /** XML Element Name for cdi_summary */
- public static final String DYFI_CDI_SUMMARY_ELEMENT = "cdi_summary";
- /** XML Element Name for products */
- public static final String DYFI_PRODUCTS_ELEMENT = "products";
- /** Static string to stop parsing before list of products */
- public static final String DYFI_STOP_PARSING_BEFORE_PRODUCTS = "Stop parsing before list of product files.";
- /** Map of XML attributes */
- public static final Map<String, String[]> DYFI_ELEMENT_ATTRIBUTES = new HashMap<String, String[]>();
- static {
- // Statically add all these attributes and associate them to their
- // corresponding elements
- // Currently we only care about the max MMI and number of responses.
- DYFI_ELEMENT_ATTRIBUTES.put(DYFI_CDI_SUMMARY_ELEMENT, new String[] {
- DYFIProduct.DYFI_NUM_RESP_PROPERTY,
- DYFIProduct.DYFI_MAX_MMI_PROPERTY });
- }
- private DYFIProduct dyfi = null;
- /**
- * Constructor
- * @param dyfi takes in DYFIProduct
- */
- public EventDataXMLHandler(final DYFIProduct dyfi) {
- this.dyfi = dyfi;
- }
- /** @return DYFIProduct */
- public DYFIProduct getDYFI() {
- return this.dyfi;
- }
- /** @param dyfi Product to set */
- public void setDYFI(final DYFIProduct dyfi) {
- this.dyfi = dyfi;
- }
- /**
- *
- * @param in XML object to parse
- * @return DYFIProduct
- * @throws Exception if exception message equals stop_parsing string
- */
- public DYFIProduct parse(final Object in) throws Exception {
- try {
- XmlUtils.parse(in, this);
- } catch (Exception e) {
- if (!DYFI_STOP_PARSING_BEFORE_PRODUCTS.equals(e.getMessage())) {
- throw e;
- }
- }
- return getDYFI();
- }
- public final void startElement(final String uri, final String localName,
- final String qName, final Attributes attributes)
- throws SAXException {
- if (localName != null && DYFI_PRODUCTS_ELEMENT.equals(localName)) {
- // We don't need the list of product files at this time.
- throw new SAXException(DYFI_STOP_PARSING_BEFORE_PRODUCTS);
- }
- if (DYFI_CDI_SUMMARY_ELEMENT.equals(localName)) {
- dyfi.setNumResponses(attributes
- .getValue(DYFIProduct.DYFI_NUM_RESP_ATTRIBUTE));
- dyfi.setMaxMMI(attributes
- .getValue(DYFIProduct.DYFI_MAX_MMI_ATTRIBUTE));
- }
- }
- }