ContentOutputThread.java

package gov.usgs.earthquake.product.io;

import java.util.logging.Level;
import java.util.logging.Logger;

import gov.usgs.earthquake.product.Content;
import gov.usgs.earthquake.product.ProductId;

/**
 * Deliver content in a separate thread.
 */
public class ContentOutputThread extends Thread {

	private static final Logger LOGGER = Logger
			.getLogger(ContentOutputThread.class.getName());

	private final ProductHandler handler;
	private final ProductId id;
	private final String path;
	private final Content content;

	/**
	 * Constructor
	 * @param handler A product handler
	 * @param id A product ID
	 * @param path String path
	 * @param content Content
	 */
	public ContentOutputThread(final ProductHandler handler,
			final ProductId id, final String path, final Content content) {
		this.handler = handler;
		this.id = id;
		this.path = path;
		this.content = content;
	}

	@Override
	public void run() {
		try {
			handler.onContent(id, path, content);
		} catch (Exception e) {
			LOGGER.log(Level.WARNING, "Exception delivering content '" + path
					+ "'", e);
		} finally {
			content.close();
		}
	}

}