IndexerChange.java

package gov.usgs.earthquake.indexer;

/**
 * Description of a specific change to a {@link ProductIndex}.
 *
 * Multiple IndexerChange objects may be created, and grouped into an
 * {@link IndexerEvent}, in response to one product being processed.
 */
public class IndexerChange {

  /** Enumeration of indexer event types. */
  public static enum IndexerChangeType {
    /** Enum for IndexerChangeType Event Added */
    EVENT_ADDED,
    /** Enum for IndexerChangeType Event Updated */
    EVENT_UPDATED,
    /** Enum for IndexerChangeType Event Deleted */
    EVENT_DELETED,
    /** Enum for IndexerChangeType Event Archived */
    EVENT_ARCHIVED,
    /** Enum for IndexerChangeType Event Merged */
    EVENT_MERGED,
    /** Enum for IndexerChangeType Event Split */
    EVENT_SPLIT,

    /** Enum for IndexerChangeType Product Added */
    PRODUCT_ADDED,
    /** Enum for IndexerChangeType Product Updated */
    PRODUCT_UPDATED,
    /** Enum for IndexerChangeType Product Deleted */
    PRODUCT_DELETED,
    /** Enum for IndexerChangeType Product Archived */
    PRODUCT_ARCHIVED
  };

  /** IndexerChangeType for Event Added */
  public static final IndexerChangeType EVENT_ADDED = IndexerChangeType.EVENT_ADDED;
  /** IndexerChangeType for Event Updated */
  public static final IndexerChangeType EVENT_UPDATED = IndexerChangeType.EVENT_UPDATED;
  /** IndexerChangeType for Event Deleted */
  public static final IndexerChangeType EVENT_DELETED = IndexerChangeType.EVENT_DELETED;
  /** IndexerChangeType for Event Archived */
  public static final IndexerChangeType EVENT_ARCHIVED = IndexerChangeType.EVENT_ARCHIVED;
  /** IndexerChangeType for Event Merged */
  public static final IndexerChangeType EVENT_MERGED = IndexerChangeType.EVENT_MERGED;
  /** IndexerChangeType for Event Split */
  public static final IndexerChangeType EVENT_SPLIT = IndexerChangeType.EVENT_SPLIT;

  /** IndexerChangeType for Product Added */
  public static final IndexerChangeType PRODUCT_ADDED = IndexerChangeType.PRODUCT_ADDED;
  /** IndexerChangeType for Product Updated */
  public static final IndexerChangeType PRODUCT_UPDATED = IndexerChangeType.PRODUCT_UPDATED;
  /** IndexerChangeType for Product Deleted */
  public static final IndexerChangeType PRODUCT_DELETED = IndexerChangeType.PRODUCT_DELETED;
  /** IndexerChangeType for Product Archived */
  public static final IndexerChangeType PRODUCT_ARCHIVED = IndexerChangeType.PRODUCT_ARCHIVED;

  /** Indicates the type of change that is occurring */
  private IndexerChangeType type;
  /** The event as it was before the change occurred. */
  private Event originalEvent;
  /** The event as it is after the change occurred. */
  private Event newEvent;

  /**
   * Constructor to quickly create a new <code>IndexerChange</code> object to be
   * added to the list of changes in a given <code>IndexerEvent</code>. Note the
   * <code>oldEvent</code> and <code>newEvent</code> will have particular meanings
   * depending on the given <code>type</code> of change that occurred.
   *
   * @param type          The type of change that occurred.
   * @param originalEvent The event as it was before the change occurred.
   * @param newEvent      The event as it is after the change occurred.
   * @see IndexerEvent
   */
  public IndexerChange(IndexerChangeType type, Event originalEvent, Event newEvent) {
    this.type = type;
    this.originalEvent = originalEvent;
    this.newEvent = newEvent;
  }

  /** @return IndexerChangeType */
  public IndexerChangeType getType() {
    return this.type;
  }

  /** @return originalEvent */
  public Event getOriginalEvent() {
    return this.originalEvent;
  }

  /** @return newEvent */
  public Event getNewEvent() {
    return this.newEvent;
  }

  @Override
  public String toString() {
    StringBuffer b = new StringBuffer();
    b.append(getType().toString() + " :: ");

    if (getOriginalEvent() != null) {
      b.append(getOriginalEvent().getEventId() + " --> ");
    } else {
      b.append("null --> ");
    }

    if (getNewEvent() != null) {
      b.append(getNewEvent().getEventId());
    } else {
      b.append("null");
    }

    return b.toString();
  }
}