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();
    }
  }

}