GridXMLHandler.java
- package gov.usgs.earthquake.shakemap;
- import gov.usgs.util.XmlUtils;
- import java.util.HashMap;
- import org.xml.sax.Attributes;
- import org.xml.sax.SAXException;
- import org.xml.sax.helpers.DefaultHandler;
- /**
- * Parser for ShakeMap grid.xml metadata.
- *
- * Accepts a ShakeMap object and updates the properties of that product based on
- * the product's grid.xml file.
- */
- public class GridXMLHandler extends DefaultHandler {
- // ShakeMap grid parameters
- /** Element for shakemap grid */
- public static final String SHAKEMAPGRID_ELEMENT = "shakemap_grid";
- /** Shakemap grid id */
- public static final String SHAKEMAPGRID_ID = "shakemap_id";
- /** Shakemap grid originator */
- public static final String SHAKEMAPGRID_ORIGINATOR = "shakemap_originator";
- /** Shakemap grid process timestamp */
- public static final String SHAKEMAPGRID_TIMESTAMP = "process_timestamp";
- /** Shakemap grid version */
- public static final String SHAKEMAPGRID_VERSION = "shakemap_version";
- /** Shakemap grid event type */
- public static final String SHAKEMAPGRID_EVENT_TYPE = "shakemap_event_type";
- /** Shakemap grid event/map status */
- public static final String SHAKEMAPGRID_EVENT_STATUS = "map_status";
- // ShakeMap event parameters
- /** Element for event */
- public static final String EVENT_ELEMENT = "event";
- /** Event latitude */
- public static final String EVENT_LATITUDE = "lat";
- /** Event longitude */
- public static final String EVENT_LONGITUDE = "lon";
- /** Event magnitude */
- public static final String EVENT_MAGNITUDE = "magnitude";
- /** Event timestamp */
- public static final String EVENT_TIMESTAMP = "event_timestamp";
- /** Event description */
- public static final String EVENT_DESCRIPTION = "event_description";
- /** Event depth */
- public static final String EVENT_DEPTH = "depth";
- // These are new parameters used by GSM when it is contributing to a
- // different
- // network as a backup
- /** GSM Parameter when using a different network as a backup */
- public static final String EVENT_NETWORK = "event_network";
- /** GSM Parameter when using a different network as a backup */
- public static final String EVENT_ID = "event_id";
- // ShakeMap gridspec parameters
- /** Element for grid specification */
- public static final String GRIDSPEC_ELEMENT = "grid_specification";
- /** gridspec longitude min */
- public static final String GRIDSPEC_LONMIN = "lon_min";
- /** gridspec longitude max */
- public static final String GRIDSPEC_LONMAX = "lon_max";
- /** gridspec latitude min */
- public static final String GRIDSPEC_LATMIN = "lat_min";
- /** gridspec latitude max */
- public static final String GRIDSPEC_LATMAX = "lat_max";
- /** XML for SHAKEMAPGRID_ELEMENT */
- public static final String SHAKEMAPGRID_ELEMENT_XML = SHAKEMAPGRID_ELEMENT;
- /** XML for SHAKEMAPGRID_ID */
- public static final String SHAKEMAPGRID_ID_XML = SHAKEMAPGRID_ELEMENT+ "[" + SHAKEMAPGRID_ID + "]";
- /** XML for SHAKEMAPGRID_ORIGINATOR */
- public static final String SHAKEMAPGRID_ORIGINATOR_XML = SHAKEMAPGRID_ELEMENT + "[" + SHAKEMAPGRID_ORIGINATOR + "]";
- /** XML for SHAKEMAPGRID_TIMESTAMP */
- public static final String SHAKEMAPGRID_TIMESTAMP_XML = SHAKEMAPGRID_ELEMENT + "[" + SHAKEMAPGRID_TIMESTAMP + "]";
- /** XML for SHAKEMAPGRID_VERSION */
- public static final String SHAKEMAPGRID_VERSION_XML = SHAKEMAPGRID_ELEMENT+ "[" + SHAKEMAPGRID_VERSION + "]";
- /** XML for SHAKEMAPGRID_EVENT_TYPE */
- public static final String SHAKEMAPGRID_EVENT_TYPE_XML = SHAKEMAPGRID_ELEMENT+ "[" + SHAKEMAPGRID_EVENT_TYPE + "]";
- /** XML for SHAKEMAPGRID_EVENT_STATUS */
- public static final String SHAKEMAPGRID_EVENT_STATUS_XML = SHAKEMAPGRID_ELEMENT+ "[" + SHAKEMAPGRID_EVENT_STATUS + "]";
- /** XML for EVENT_ELEMENT */
- public static final String EVENT_ELEMENT_XML = EVENT_ELEMENT;
- /** XML for EVENT_LATITUDE */
- public static final String EVENT_LATITUDE_XML = EVENT_ELEMENT + "[" + EVENT_LATITUDE + "]";
- /** XML for EVENT_LONGITUDE */
- public static final String EVENT_LONGITUDE_XML = EVENT_ELEMENT+ "[" + EVENT_LONGITUDE + "]";
- /** XML for EVENT_MAGNITUDE */
- public static final String EVENT_MAGNITUDE_XML = EVENT_ELEMENT+ "[" + EVENT_MAGNITUDE + "]";
- /** XML for EVENT_TIMESTAMP */
- public static final String EVENT_TIMESTAMP_XML = EVENT_ELEMENT+ "[" + EVENT_TIMESTAMP + "]";
- /** XML for EVENT_DESCRIPTION */
- public static final String EVENT_DESCRIPTION_XML = EVENT_ELEMENT+ "[" + EVENT_DESCRIPTION + "]";
- /** XML for EVENT_DEPTH */
- public static final String EVENT_DEPTH_XML = EVENT_ELEMENT+ "[" + EVENT_DEPTH + "]";
- /** XML for EVENT_NETWORK */
- public static final String EVENT_NETWORK_XML = EVENT_ELEMENT + "[" + EVENT_NETWORK + "]";
- /** XML for EVENT_ID */
- public static final String EVENT_ID_XML = EVENT_ELEMENT + "[" + EVENT_ID + "]";
- /** XML for GRIDSPEC_ELEMENT */
- public static final String GRIDSPEC_ELEMENT_XML = GRIDSPEC_ELEMENT;
- /** XML for GRIDSPEC_LONMIN */
- public static final String GRIDSPEC_LONMIN_XML = GRIDSPEC_ELEMENT+ "[" + GRIDSPEC_LONMIN + "]";
- /** XML for GRIDSPEC_LONMAX */
- public static final String GRIDSPEC_LONMAX_XML = GRIDSPEC_ELEMENT+ "[" + GRIDSPEC_LONMAX + "]";
- /** XML for GRIDSPEC_LATMIN */
- public static final String GRIDSPEC_LATMIN_XML = GRIDSPEC_ELEMENT+ "[" + GRIDSPEC_LATMIN + "]";
- /** XML for GRIDSPEC_LATMAX */
- public static final String GRIDSPEC_LATMAX_XML = GRIDSPEC_ELEMENT+ "[" + GRIDSPEC_LATMAX + "]";
- // ShakeMap griddata parameters
- /** Element for Shakemap griddata */
- public static final String GRIDDATA_ELEMENT = "grid_data";
- /** Shakemap griddata parameter to stop parsing before */
- public static final String STOP_PARSING_BEFORE_GRIDDATA =
- "Stop parsing before grid data.";
- private HashMap<String, String> grid = new HashMap<String, String>();
- /**
- * Construct a new SAX Handler for an grid.xml document.
- */
- public GridXMLHandler() {}
- /**
- * @param in
- * - the file or stream to parse
- * @return the ShakeMap associated with this XML handler
- * @throws Exception if error occurs
- */
- public HashMap<String, String> parse(final Object in) throws Exception {
- try {
- XmlUtils.parse(in, this);
- } catch (Exception se) {
- if (!se.getMessage().equals(STOP_PARSING_BEFORE_GRIDDATA)) {
- throw se;
- }
- }
- return this.grid;
- }
- /**
- * @return the parsed info.
- */
- public HashMap<String, String> getInfo() {
- return this.grid;
- }
- /**
- * Read grid, event, and gridspec element attributes.
- *
- * @param uri namespace of element.
- * @param localName name of element.
- * @param qName qualified name of element.
- * @param attributes element attributes.
- * @throws SAXException when griddata element is reached, to stop parsing.
- */
- public final void startElement(final String uri, final String localName,
- final String qName, final Attributes attributes)
- throws SAXException {
- if (localName != null && GRIDDATA_ELEMENT.equals(localName)) {
- // don't read the whole grid
- throw new SAXException(STOP_PARSING_BEFORE_GRIDDATA);
- }
- if (localName.equals(SHAKEMAPGRID_ELEMENT)) {
- this.grid.put(SHAKEMAPGRID_ORIGINATOR_XML, attributes.getValue(SHAKEMAPGRID_ORIGINATOR));
- this.grid.put(SHAKEMAPGRID_ID_XML, attributes.getValue(SHAKEMAPGRID_ID));
- this.grid.put(SHAKEMAPGRID_TIMESTAMP_XML, attributes.getValue(SHAKEMAPGRID_TIMESTAMP));
- this.grid.put(SHAKEMAPGRID_VERSION_XML, attributes.getValue(SHAKEMAPGRID_VERSION));
- this.grid.put(SHAKEMAPGRID_EVENT_TYPE_XML, attributes.getValue(SHAKEMAPGRID_EVENT_TYPE));
- this.grid.put(SHAKEMAPGRID_EVENT_STATUS_XML, attributes.getValue(SHAKEMAPGRID_EVENT_STATUS));
- } else if (localName.equals(EVENT_ELEMENT)) {
- this.grid.put(EVENT_LATITUDE_XML, attributes.getValue(EVENT_LATITUDE));
- this.grid.put(EVENT_LONGITUDE_XML, attributes.getValue(EVENT_LONGITUDE));
- this.grid.put(EVENT_MAGNITUDE_XML , attributes.getValue(EVENT_MAGNITUDE));
- this.grid.put(EVENT_DEPTH_XML, attributes.getValue(EVENT_DEPTH));
- this.grid.put(EVENT_TIMESTAMP_XML, attributes.getValue(EVENT_TIMESTAMP));
- this.grid.put(EVENT_DESCRIPTION_XML, attributes.getValue(EVENT_DESCRIPTION));
- this.grid.put(EVENT_NETWORK_XML, attributes.getValue(EVENT_NETWORK));
- this.grid.put(EVENT_ID_XML, attributes.getValue(EVENT_ID));
- } else if (localName.equals(GRIDSPEC_ELEMENT)) {
- this.grid.put(GRIDSPEC_LONMIN_XML, attributes.getValue(GRIDSPEC_LONMIN));
- this.grid.put(GRIDSPEC_LATMIN_XML, attributes.getValue(GRIDSPEC_LATMIN));
- this.grid.put(GRIDSPEC_LONMAX_XML, attributes.getValue(GRIDSPEC_LONMAX));
- this.grid.put(GRIDSPEC_LATMAX_XML, attributes.getValue(GRIDSPEC_LATMAX));
- }
- }
- }