RelayProductListener.java

  1. /*
  2.  * RelayProductListener
  3.  */
  4. package gov.usgs.earthquake.distribution;

  5. import gov.usgs.earthquake.aws.AwsProductSender;
  6. import gov.usgs.earthquake.product.Product;
  7. import gov.usgs.util.Config;

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

  10. /**
  11.  * Listen for products and use a product sender (SocketProductSender by default)
  12.  * to send products as they are received.
  13.  */
  14. public class RelayProductListener extends DefaultNotificationListener {

  15.     /** Logging object. */
  16.     private static final Logger LOGGER = Logger
  17.             .getLogger(RelayProductListener.class.getName());

  18.     /** property for senderType */
  19.     public static final String SENDER_TYPE_PROPERTY = "senderType";
  20.     /** property saying the sender type is aws */
  21.     public static final String SENDER_TYPE_AWS = "aws";

  22.     /** Sender used to send products. */
  23.     private ProductSender sender;

  24.     /**
  25.      * Empty constructor for configurable, will configure as a
  26.      * SocketProductSender.
  27.      */
  28.     public RelayProductListener() {
  29.     }

  30.     /**
  31.      * Construct a RelayProductListener using a custom ProductSender.
  32.      *
  33.      * @param sender
  34.      *            the sender to use.
  35.      */
  36.     public RelayProductListener(final ProductSender sender) {
  37.         this.sender = sender;
  38.     }

  39.     /**
  40.      * Send a product.
  41.      */
  42.     public void onProduct(final Product product) {
  43.         LOGGER.info("Relaying product " + product.getId().toString() + " "
  44.                 + product.getId().getUpdateTime());

  45.         try {
  46.             sender.sendProduct(product);
  47.         } catch (Exception e) {
  48.             LOGGER.log(Level.WARNING, "Error relaying product", e);
  49.         }
  50.     }

  51.     /**
  52.      * Creates a SocketProductSender and uses its configure method.
  53.      */
  54.     public void configure(Config config) throws Exception {
  55.         // read DefaultNotificationListener properties
  56.         super.configure(config);

  57.         final String senderType = config.getProperty(SENDER_TYPE_PROPERTY);
  58.         if (senderType != null && SENDER_TYPE_AWS.equals(SENDER_TYPE_AWS)) {
  59.             sender = new AwsProductSender();
  60.         } else {
  61.             sender = new SocketProductSender();
  62.         }
  63.         sender.configure(config);
  64.     }

  65.     public void setName(final String name) {
  66.         super.setName(name);
  67.         // also set sender name for logging
  68.         if (sender != null) {
  69.             sender.setName(name);
  70.         }
  71.     }

  72.     /**
  73.      * Call the sender shutdown method.
  74.      */
  75.     public void shutdown() throws Exception {
  76.         super.shutdown();
  77.         sender.shutdown();
  78.     }

  79.     /**
  80.      * Call the sender startup method.
  81.      */
  82.     public void startup() throws Exception {
  83.         super.startup();
  84.         sender.startup();
  85.     }

  86. }