DefaultNotification.java

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

import gov.usgs.earthquake.product.ProductId;

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

/**
 * A DefaultNotification is a implementation of the Notification interface. No
 * location information is stored about products, and must be tracked
 * separately.
 */
public class DefaultNotification implements Notification {

	/** The product that is available. */
	private final ProductId id;

	/** How long the product is available. */
	private final Date expirationDate;

	/** Where to send tracking updates. */
	private final URL trackerURL;

	/**
	 * Construct a DefaultNotification.
	 *
	 * @param id
	 *            the product that is available.
	 * @param expirationDate
	 *            how long the product is available.
	 * @param trackerURL
	 *            where to send tracking updates.
	 */
	public DefaultNotification(final ProductId id, final Date expirationDate,
			final URL trackerURL) {
		this.id = id;
		this.expirationDate = expirationDate;
		this.trackerURL = trackerURL;
	}

	/**
	 * @return how long the product is available.
	 */
	public Date getExpirationDate() {
		return expirationDate;
	}

	/**
	 * @return which product is available.
	 */
	public ProductId getProductId() {
		return id;
	}

	/**
	 * @return location to send tracking updates.
	 */
	public URL getTrackerURL() {
		return trackerURL;
	}

	/** A comparison method to see if two notifications are equal. */
	public boolean equals(Notification that) {
		return
		(
			that instanceof DefaultNotification &&
			getExpirationDate().equals(that.getExpirationDate()) &&
			getProductId().equals(that.getProductId()) &&
			(
				(getTrackerURL() == null && that.getTrackerURL() == null)
				|| getTrackerURL().equals(that.getTrackerURL()))
		);
	}

}