JsonNotification.java
- package gov.usgs.earthquake.aws;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.nio.charset.StandardCharsets;
- import java.time.Instant;
- import java.util.Base64;
- import java.util.Date;
- import javax.json.JsonObject;
- import gov.usgs.earthquake.distribution.URLNotification;
- import gov.usgs.earthquake.product.Product;
- import gov.usgs.earthquake.product.io.JsonProduct;
- import gov.usgs.util.protocolhandlers.data.Handler;
- /**
- * Json formatted notification.
- *
- * Stores stores product content in URLNotification as a data URL.
- */
- public class JsonNotification extends URLNotification {
- /** Empty URL for product tracker. */
- public static final URL EMPTY_URL;
- static {
- try {
- // make sure data protocol handler is registered
- Handler.register();
- EMPTY_URL = new URL("data:,");
- } catch (MalformedURLException mue) {
- throw new RuntimeException("failed to parse empty url");
- }
- }
- /** When notification was created. */
- public final Instant created;
- /** Product attached to notification. */
- public final Product product;
- /**
- * Parse a Json formatted Notification.
- *
- * @param json
- * @throws Exception
- */
- JsonNotification(final JsonObject json) throws Exception {
- this(
- Instant.parse(json.getString("created")),
- new JsonProduct().getProduct(json.getJsonObject("product")));
- }
- /**
- * Create a JsonNotification from an existing Product.
- */
- JsonNotification(final Instant created, final Product product) throws Exception {
- this(created, product, new Date(Instant.now().plusSeconds(7 * 86400).toEpochMilli()));
- }
- /**
- * Create a JsonNotification with an expiration date.
- */
- JsonNotification(final Instant created, final Product product, final Date expiration)
- throws Exception {
- super(
- product.getId(),
- // expiration date
- expiration,
- // no tracker
- EMPTY_URL,
- // store product as data url
- new URL("data:;base64," +
- new String(Base64.getEncoder().encode(
- new JsonProduct().getJsonObject((product))
- .toString().getBytes(StandardCharsets.UTF_8)))));
- this.created = created;
- this.product = product;
- }
- }