SearchRequestParser.java
- package gov.usgs.earthquake.indexer;
- import java.math.BigDecimal;
- import gov.usgs.earthquake.product.ProductId;
- import gov.usgs.earthquake.product.io.XmlProductHandler;
- import gov.usgs.util.XmlUtils;
- import org.xml.sax.Attributes;
- import org.xml.sax.SAXException;
- import org.xml.sax.helpers.DefaultHandler;
- /**
- * Parser for SearchXML request.
- */
- public class SearchRequestParser extends DefaultHandler {
- /** The request being parsed. */
- private SearchRequest searchRequest;
- /** The query being parsed. */
- private SearchQuery searchQuery;
- /** Empty constructor */
- public SearchRequestParser() {
- }
- /** @return searchRequest */
- public SearchRequest getSearchRequest() {
- return searchRequest;
- }
- @Override
- public void startElement(String uri, String localName, String qName,
- Attributes attributes) throws SAXException {
- if (SearchXML.INDEXER_XMLNS.equals(uri)) {
- if (SearchXML.REQUEST_ELEMENT.equals(localName)) {
- searchRequest = new SearchRequest();
- } else if (SearchXML.PRODUCT_SUMMARY_ELEMENT.equals(localName)) {
- if (searchQuery == null) {
- throw new SAXException(
- "Expected searchQuery element around productSummary element");
- } else {
- ProductId id = ProductId.parse(XmlUtils.getAttribute(
- attributes, uri, SearchXML.ID_ATTRIBUTE));
- if (id != null) {
- searchQuery.getProductIndexQuery().getProductIds()
- .add(id);
- } else {
- throw new SAXException(
- "Expected id attribute on productSummary element");
- }
- }
- } else if (SearchXML.QUERY_ELEMENT.equals(localName)) {
- String method = XmlUtils.getAttribute(attributes,
- SearchXML.INDEXER_XMLNS, SearchXML.METHOD_ATTRIBUTE);
- String value;
- ProductIndexQuery query = new ProductIndexQuery();
- value = XmlUtils.getAttribute(attributes, uri,
- SearchXML.EVENT_SOURCE_ATTRIBUTE);
- query.setEventSource(value);
- value = XmlUtils.getAttribute(attributes, uri,
- SearchXML.EVENT_SOURCE_CODE_ATTRIBUTE);
- query.setEventSourceCode(value);
- value = XmlUtils.getAttribute(attributes, uri,
- SearchXML.MIN_EVENT_TIME_ATTRIBUTE);
- if (value != null) {
- query.setMinEventTime(XmlUtils.getDate(value));
- }
- value = XmlUtils.getAttribute(attributes, uri,
- SearchXML.MAX_EVENT_TIME_ATTRIBUTE);
- if (value != null) {
- query.setMaxEventTime(XmlUtils.getDate(value));
- }
- value = XmlUtils.getAttribute(attributes, uri,
- SearchXML.MIN_EVENT_LATITUDE_ATTRIBUTE);
- if (value != null) {
- query.setMinEventLatitude(new BigDecimal(value));
- }
- value = XmlUtils.getAttribute(attributes, uri,
- SearchXML.MAX_EVENT_LATITUDE_ATTRIBUTE);
- if (value != null) {
- query.setMaxEventLatitude(new BigDecimal(value));
- }
- value = XmlUtils.getAttribute(attributes, uri,
- SearchXML.MIN_EVENT_LONGITUDE_ATTRIBUTE);
- if (value != null) {
- query.setMinEventLongitude(new BigDecimal(value));
- }
- value = XmlUtils.getAttribute(attributes, uri,
- SearchXML.MAX_EVENT_LONGITUDE_ATTRIBUTE);
- if (value != null) {
- query.setMaxEventLongitude(new BigDecimal(value));
- }
- value = XmlUtils.getAttribute(attributes, uri,
- SearchXML.MIN_EVENT_DEPTH_ATTRIBUTE);
- if (value != null) {
- query.setMinEventDepth(new BigDecimal(value));
- }
- value = XmlUtils.getAttribute(attributes, uri,
- SearchXML.MAX_EVENT_DEPTH_ATTRIBUTE);
- if (value != null) {
- query.setMaxEventDepth(new BigDecimal(value));
- }
- value = XmlUtils.getAttribute(attributes, uri,
- SearchXML.MIN_EVENT_MAGNITUDE_ATTRIBUTE);
- if (value != null) {
- query.setMinEventMagnitude(new BigDecimal(value));
- }
- value = XmlUtils.getAttribute(attributes, uri,
- SearchXML.MAX_EVENT_MAGNITUDE_ATTRIBUTE);
- if (value != null) {
- query.setMaxEventMagnitude(new BigDecimal(value));
- }
- value = XmlUtils.getAttribute(attributes, uri,
- SearchXML.MIN_PRODUCT_UPDATE_TIME_ATTRIBUTE);
- if (value != null) {
- query.setMinProductUpdateTime(XmlUtils.getDate(value));
- }
- value = XmlUtils.getAttribute(attributes, uri,
- SearchXML.MAX_PRODUCT_UPDATE_TIME_ATTRIBUTE);
- if (value != null) {
- query.setMaxProductUpdateTime(XmlUtils.getDate(value));
- }
- value = XmlUtils.getAttribute(attributes, uri,
- SearchXML.PRODUCT_SOURCE_ATTRIBUTE);
- if (value != null) {
- query.setProductSource(value);
- }
- value = XmlUtils.getAttribute(attributes, uri,
- SearchXML.PRODUCT_TYPE_ATTRIBUTE);
- if (value != null) {
- query.setProductType(value);
- }
- value = XmlUtils.getAttribute(attributes, uri,
- SearchXML.PRODUCT_CODE_ATTRIBUTE);
- if (value != null) {
- query.setProductCode(value);
- }
- value = XmlUtils.getAttribute(attributes, uri,
- SearchXML.PRODUCT_VERSION_ATTRIBUTE);
- if (value != null) {
- query.setProductVersion(value);
- }
- value = XmlUtils.getAttribute(attributes, uri,
- SearchXML.PRODUCT_STATUS_ATTRIBUTE);
- if (value != null) {
- query.setProductStatus(value);
- }
- searchQuery = SearchQuery.getSearchQuery(
- SearchMethod.fromXmlMethodName(method), query);
- }
- } else if (XmlProductHandler.PRODUCT_XML_NAMESPACE.equals(uri)) {
- // Possible inclusion of properties in the future
- }
- }
- @Override
- public void endElement(String uri, String localName, String qName)
- throws SAXException {
- if (SearchXML.INDEXER_XMLNS.equals(uri)) {
- if (SearchXML.REQUEST_ELEMENT.equals(localName)) {
- // search request, done
- } else if (SearchXML.QUERY_ELEMENT.equals(localName)) {
- searchRequest.addQuery(searchQuery);
- searchQuery = null;
- }
- }
- }
- @Override
- public void characters(char[] ch, int start, int length)
- throws SAXException {
- }
- }