URLNotificationParser.java

/*
 * URLNotificationParser
 */
package gov.usgs.earthquake.distribution;

import java.net.URL;
import java.util.Date;

import gov.usgs.earthquake.product.ProductId;
import gov.usgs.util.SAXAdapter;
import gov.usgs.util.XmlUtils;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;

public class URLNotificationParser extends SAXAdapter {

	/** Namespace for product XML */
	public static final String PRODUCT_XML_NAMESPACE = "http://earthquake.usgs.gov/distribution/product";

	/** static var for notification element */
	public static final String NOTIFICATION_ELEMENT = "notification";
	/** attribute for product id */
	public static final String ATTRIBUTE_PRODUCT_ID = "id";
	/** attribute for updated */
	public static final String ATTRIBUTE_PRODUCT_UPDATED = "updated";
	/** attribute for trackerURL */
	public static final String ATTRIBUTE_TRACKER_URL = "trackerURL";
	/** attribute for expires */
	public static final String ATTRIBUTE_EXPIRES = "expires";
	/** attribute for url */
	public static final String ATTRIBUTE_URL = "url";

	/** The parsed notification. */
	private URLNotification notification;

	/**
	 * Construct a URLNotificationParser. This class is not intended to be
	 * instantiated directly. Instead, use the static URLNotification.parse
	 * method.
	 */
	protected URLNotificationParser() {
	}

	/**
	 * @return the parsed notification
	 */
	public URLNotification getNotification() {
		return notification;
	}

	/**
	 * SAXAdapter start element handler.
	 *
	 * @param uri
	 *            element uri.
	 * @param localName
	 *            element localName.
	 * @param qName
	 *            element qName.
	 * @param attributes
	 *            element attributes.
	 * @throws SAXException
	 *             if there is an error.
	 */
	public void onStartElement(final String uri, final String localName,
			final String qName, final Attributes attributes)
			throws SAXException {

		if (!uri.equals(PRODUCT_XML_NAMESPACE)) {
			return;
		}

		if (localName.equals(NOTIFICATION_ELEMENT)) {
			ProductId id = ProductId.parse(XmlUtils.getAttribute(
					attributes, uri, ATTRIBUTE_PRODUCT_ID));
			id.setUpdateTime(XmlUtils.getDate(XmlUtils.getAttribute(
					attributes, uri, ATTRIBUTE_PRODUCT_UPDATED)));

			URL trackerURL = null;
			try {
				trackerURL = new URL(XmlUtils.getAttribute(attributes, uri,
						ATTRIBUTE_TRACKER_URL));
			} catch (Exception e) {
				throw new SAXException("Unable to parse tracker url", e);
			}

			Date expirationDate = XmlUtils.getDate(XmlUtils.getAttribute(
					attributes, uri, ATTRIBUTE_EXPIRES));

			URL productURL = null;
			try {
				productURL = new URL(XmlUtils.getAttribute(attributes, uri,
						ATTRIBUTE_URL));
			} catch (Exception e) {
				throw new SAXException("Unable to parse product url", e);
			}

			notification = new URLNotification(id, expirationDate,
					trackerURL, productURL);
		}
	}

}