FilterProductHandler.java

/*
 * FilterProductHandler
 */
package gov.usgs.earthquake.product.io;

import gov.usgs.earthquake.product.Content;
import gov.usgs.earthquake.product.ProductId;
import gov.usgs.util.CryptoUtils.Version;

import java.net.URI;
import java.net.URL;

/**
 * Filter calls to another ProductHandler.
 *
 * By default, calls are passed directly on to the wrapped ProductOutput.
 */
public class FilterProductHandler implements ProductHandler {

	/** The product output being filtered. */
	private ProductHandler output;

	/**
	 * Create a new FilterProductHandler.
	 *
	 * A ProductOutput should be set using setProductOutput before any calls to
	 * other methods.
	 */
	public FilterProductHandler() {
	}

	/**
	 * Create a new FilterProductHandler using and existing ProductOutput.
	 *
	 * @param output
	 *            the ProductOutput to wrap.
	 */
	public FilterProductHandler(final ProductHandler output) {
		setProductOutput(output);
	}

	/**
	 * Set the wrapped ProductOutput.
	 *
	 * @param output
	 *            the ProductOutput being wrapped.
	 */
	public void setProductOutput(final ProductHandler output) {
		this.output = output;
	}

	/**
	 * Calls the wrapped ProductOutput onBeginProduct method.
	 */
	public void onBeginProduct(ProductId id, String status, URL trackerURL)
			throws Exception {
		output.onBeginProduct(id, status, trackerURL);
	}

	/**
	 * Calls the wrapped ProductOutput onContent method.
	 */
	public void onContent(ProductId id, String path, Content content)
			throws Exception {
		output.onContent(id, path, content);
	}

	/**
	 * Calls the wrapped ProductOutput onEndProduct method.
	 */
	public void onEndProduct(ProductId id) throws Exception {
		output.onEndProduct(id);
	}

	/**
	 * Calls the wrapped ProductOutput onLink method.
	 */
	public void onLink(ProductId id, String relation, URI href)
			throws Exception {
		output.onLink(id, relation, href);
	}

	/**
	 * Calls the wrapped ProductOutput onProperty method.
	 */
	public void onProperty(ProductId id, String name, String value)
			throws Exception {
		output.onProperty(id, name, value);
	}

	@Override
	public void onSignatureVersion(ProductId id, Version version) throws Exception {
		output.onSignatureVersion(id, version);
	}

	/**
	 * Calls the wrapped ProductOutput onSignature method.
	 */
	public void onSignature(ProductId id, String signature) throws Exception {
		output.onSignature(id, signature);
	}


	/**
	 * Free any resources associated with this source.
	 */
	@Override
	public void close() {
		if (output != null) {
			output.close();
		}
	}

}