ProductIndexQuery.java
- /*
- * ProductIndexQuery
- */
- package gov.usgs.earthquake.indexer;
- import gov.usgs.earthquake.product.ProductId;
- import java.math.BigDecimal;
- import java.util.Date;
- import java.util.Iterator;
- import java.util.LinkedList;
- import java.util.List;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- /**
- * Criteria for finding events.
- *
- * All properties are inclusive. When a property is null, it means any value.
- *
- * Expected combinations:
- *
- * 1) find events based on event parameters event time event latitude event
- * longitude
- *
- * 2) find previously received update of product product source product type
- * product code
- *
- * 3) find related products/events product ids
- *
- * 4) find related products/events event ids
- */
- public class ProductIndexQuery implements Comparable<ProductIndexQuery> {
- /**
- * Event search types determine whether to search only preferred event
- * attributes (faster), or all event attributes from any associated product
- * (more complete).
- */
- private static enum EventSearchTypes {
- /**
- * Search preferred event attributes.
- *
- * NOTE: SEARCH_EVENT_PREFERRED should ONLY be used on event queries.
- * Using this on product queries will more than likely break.
- */
- SEARCH_EVENT_PREFERRED,
- /** Search event product attributes. */
- SEARCH_EVENT_PRODUCTS
- };
- /**
- * Result types determine which products associated to an event are
- * returned.
- */
- private static enum ResultTypes {
- /** Only include current versions of products in the result. */
- RESULT_TYPE_CURRENT,
- /** Only include superseded (old) versions of products in the result. */
- RESULT_TYPE_SUPERSEDED,
- /**
- * Include both current and superseded versions of products in the
- * result.
- */
- RESULT_TYPE_ALL;
- };
- /** EventSearchType for SEARCH_EVENT_PREFERRED */
- public static EventSearchTypes SEARCH_EVENT_PREFERRED = EventSearchTypes.SEARCH_EVENT_PREFERRED;
- /** EventSearchType for SEARCH_EVENT_PRODCUTS */
- public static EventSearchTypes SEARCH_EVENT_PRODUCTS = EventSearchTypes.SEARCH_EVENT_PRODUCTS;
- /** ResultType for RESULT_TYPE_CURRENT */
- public static ResultTypes RESULT_TYPE_CURRENT = ResultTypes.RESULT_TYPE_CURRENT;
- /** ResultType for RESULT_TYPE_SUPERSEDED */
- public static ResultTypes RESULT_TYPE_SUPERSEDED = ResultTypes.RESULT_TYPE_SUPERSEDED;
- /** ResultType for RESULT_TYPE_ALL */
- public static ResultTypes RESULT_TYPE_ALL = ResultTypes.RESULT_TYPE_ALL;
- /** Search preferred or all event attributes? */
- private EventSearchTypes eventSearchType = SEARCH_EVENT_PRODUCTS;
- /** Include previous versions? */
- private ResultTypes resultType = RESULT_TYPE_CURRENT;
- /** Event source */
- private String eventSource;
- /** Event source code */
- private String eventSourceCode;
- /** Minimum event time, inclusive. */
- private Date minEventTime;
- /** Maximum event time, inclusive. */
- private Date maxEventTime;
- /** Minimum event latitude. */
- private BigDecimal minEventLatitude;
- /** Maximum event latitude. */
- private BigDecimal maxEventLatitude;
- /** Minimum event longitude. */
- private BigDecimal minEventLongitude;
- /** Maximum event longitude. */
- private BigDecimal maxEventLongitude;
- /** Minimum event depth. */
- private BigDecimal minEventDepth;
- /** Maximum event depth. */
- private BigDecimal maxEventDepth;
- /** Minimum event magnitude. */
- private BigDecimal minEventMagnitude;
- /** Maximum event magnitude. */
- private BigDecimal maxEventMagnitude;
- /** A list of product ids to search. */
- private List<ProductId> productIds = new LinkedList<ProductId>();
- /** Minimum product update time. */
- private Date minProductUpdateTime;
- /** Maximum product update time. */
- private Date maxProductUpdateTime;
- /** The product source. */
- private String productSource;
- /** The product type. */
- private String productType;
- /** The product code. */
- private String productCode;
- /** The product version */
- private String productVersion;
- /** The product status */
- private String productStatus;
- /** The product index ID; unique per productIndex */
- private Long minProductIndexId;
- /** The max number of results */
- private Integer limit;
- /** List of columns to order by */
- private String orderBy;
- /**
- * Construct a new ProductIndexQuery.
- */
- public ProductIndexQuery() {
- }
- /** @param eventSearchType to set */
- public void setEventSearchType(EventSearchTypes eventSearchType) {
- this.eventSearchType = eventSearchType;
- }
- /** @return eventSearchType */
- public EventSearchTypes getEventSearchType() {
- return eventSearchType;
- }
- /** @param resultType to set */
- public void setResultType(ResultTypes resultType) {
- this.resultType = resultType;
- }
- /** @return resultType */
- public ResultTypes getResultType() {
- return resultType;
- }
- /** @param eventSource to set */
- public void setEventSource(String eventSource) {
- this.eventSource = (eventSource == null ? null : eventSource
- .toLowerCase());
- }
- /** @return eventSource */
- public String getEventSource() {
- return eventSource;
- }
- /** @param eventSourceCode to set */
- public void setEventSourceCode(String eventSourceCode) {
- this.eventSourceCode = (eventSourceCode == null ? null
- : eventSourceCode.toLowerCase());
- }
- /** @return eventSourceCode */
- public String getEventSourceCode() {
- return eventSourceCode;
- }
- /** @return minEventTime */
- public Date getMinEventTime() {
- return minEventTime;
- }
- /** @param minEventTime to set */
- public void setMinEventTime(Date minEventTime) {
- this.minEventTime = minEventTime;
- }
- /** @return maxEventTime */
- public Date getMaxEventTime() {
- return maxEventTime;
- }
- /** @param maxEventTime to set */
- public void setMaxEventTime(Date maxEventTime) {
- this.maxEventTime = maxEventTime;
- }
- /** @return minEventLatitude */
- public BigDecimal getMinEventLatitude() {
- return minEventLatitude;
- }
- /** @param minEventLatitude to set */
- public void setMinEventLatitude(BigDecimal minEventLatitude) {
- this.minEventLatitude = minEventLatitude;
- }
- /** @return maxEventLatitude */
- public BigDecimal getMaxEventLatitude() {
- return maxEventLatitude;
- }
- /** @param maxEventLatitude to set */
- public void setMaxEventLatitude(BigDecimal maxEventLatitude) {
- this.maxEventLatitude = maxEventLatitude;
- }
- /** @return minEventLongitude */
- public BigDecimal getMinEventLongitude() {
- return minEventLongitude;
- }
- /** @param minEventLongitude to set */
- public void setMinEventLongitude(BigDecimal minEventLongitude) {
- this.minEventLongitude = minEventLongitude;
- }
- /** @return maxEventLongitude */
- public BigDecimal getMaxEventLongitude() {
- return maxEventLongitude;
- }
- /** @param maxEventLongitude to set */
- public void setMaxEventLongitude(BigDecimal maxEventLongitude) {
- this.maxEventLongitude = maxEventLongitude;
- }
- /** @return minEventDepth */
- public BigDecimal getMinEventDepth() {
- return minEventDepth;
- }
- /** @param minEventDepth to set */
- public void setMinEventDepth(BigDecimal minEventDepth) {
- this.minEventDepth = minEventDepth;
- }
- /** @return maxEventDepth */
- public BigDecimal getMaxEventDepth() {
- return maxEventDepth;
- }
- /** @param maxEventDepth to set */
- public void setMaxEventDepth(BigDecimal maxEventDepth) {
- this.maxEventDepth = maxEventDepth;
- }
- /** @return minEventMagnitude */
- public BigDecimal getMinEventMagnitude() {
- return minEventMagnitude;
- }
- /** @param minEventMagnitude to set */
- public void setMinEventMagnitude(BigDecimal minEventMagnitude) {
- this.minEventMagnitude = minEventMagnitude;
- }
- /** @return maxEventMagnitude */
- public BigDecimal getMaxEventMagnitude() {
- return maxEventMagnitude;
- }
- /** @param maxEventMagnitude to set */
- public void setMaxEventMagnitude(BigDecimal maxEventMagnitude) {
- this.maxEventMagnitude = maxEventMagnitude;
- }
- /** @return list of product Ids */
- public List<ProductId> getProductIds() {
- return productIds;
- }
- /** @param productIds list to set */
- public void setProductIds(List<ProductId> productIds) {
- this.productIds.clear();
- this.productIds.addAll(productIds);
- }
- /** @return minProductUpdateTime */
- public Date getMinProductUpdateTime() {
- return minProductUpdateTime;
- }
- /** @param minProductUpdateTime to set */
- public void setMinProductUpdateTime(Date minProductUpdateTime) {
- this.minProductUpdateTime = minProductUpdateTime;
- }
- /** @return maxProductUpdateTime */
- public Date getMaxProductUpdateTime() {
- return maxProductUpdateTime;
- }
- /** @param maxProductUpdateTime to set */
- public void setMaxProductUpdateTime(Date maxProductUpdateTime) {
- this.maxProductUpdateTime = maxProductUpdateTime;
- }
- /** @return productSource */
- public String getProductSource() {
- return productSource;
- }
- /** @param productSource to set */
- public void setProductSource(String productSource) {
- this.productSource = productSource;
- }
- /** @return productType */
- public String getProductType() {
- return productType;
- }
- /** @param productType to set */
- public void setProductType(String productType) {
- this.productType = productType;
- }
- /** @return productCode */
- public String getProductCode() {
- return productCode;
- }
- /** @param productCode to set */
- public void setProductCode(String productCode) {
- this.productCode = productCode;
- }
- /** @param productVersion to set */
- public void setProductVersion(String productVersion) {
- this.productVersion = productVersion;
- }
- /** @return productVersion */
- public String getProductVersion() {
- return productVersion;
- }
- /** @param productStatus to set */
- public void setProductStatus(String productStatus) {
- this.productStatus = productStatus;
- }
- /** @return productStatus */
- public String getProductStatus() {
- return productStatus;
- }
- /** @param minProductIndexId to set */
- public void setMinProductIndexId(final Long minProductIndexId) {
- this.minProductIndexId = minProductIndexId;
- }
- /** @return minProductIndexId */
- public Long getMinProductIndexId() {
- return this.minProductIndexId;
- }
- /** @param limit to set */
- public void setLimit(final Integer limit) {
- this.limit = limit;
- }
- /** @return limit */
- public Integer getLimit() {
- return this.limit;
- }
- /** @param orderBy to set */
- public void setOrderBy(final String orderBy) {
- this.orderBy = orderBy;
- }
- /** @return orderBy */
- public String getOrderBy() {
- return this.orderBy;
- }
- @Override
- public boolean equals(Object that) {
- return (this.compareTo((ProductIndexQuery) that)) == 0;
- }
- @Override
- public int compareTo(ProductIndexQuery that) {
- int r = 0;
- if ((r = compare(this.eventSource, that.eventSource)) != 0) {
- return r;
- }
- if ((r = compare(this.eventSourceCode, that.eventSourceCode)) != 0) {
- return r;
- }
- if ((r = compare(this.maxEventDepth, that.maxEventDepth)) != 0) {
- return r;
- }
- if ((r = compare(this.maxEventLatitude, that.maxEventLatitude)) != 0) {
- return r;
- }
- if ((r = compare(this.maxEventLongitude, that.maxEventLongitude)) != 0) {
- return r;
- }
- if ((r = compare(this.maxEventMagnitude, that.maxEventMagnitude)) != 0) {
- return r;
- }
- if ((r = compare(this.maxEventTime, that.maxEventTime)) != 0) {
- return r;
- }
- if ((r = compare(this.maxProductUpdateTime, that.maxProductUpdateTime)) != 0) {
- return r;
- }
- if ((r = compare(this.minEventDepth, that.minEventDepth)) != 0) {
- return r;
- }
- if ((r = compare(this.minEventLatitude, that.minEventLatitude)) != 0) {
- return r;
- }
- if ((r = compare(this.minEventLongitude, that.minEventLongitude)) != 0) {
- return r;
- }
- if ((r = compare(this.minEventMagnitude, that.minEventMagnitude)) != 0) {
- return r;
- }
- if ((r = compare(this.minEventTime, that.minEventTime)) != 0) {
- return r;
- }
- if ((r = compare(this.minProductUpdateTime, that.minProductUpdateTime)) != 0) {
- return r;
- }
- if ((r = compare(this.productCode, that.productCode)) != 0) {
- return r;
- }
- if ((r = compare(this.productSource, that.productSource)) != 0) {
- return r;
- }
- if ((r = compare(this.productStatus, that.productStatus)) != 0) {
- return r;
- }
- if ((r = compare(this.productType, that.productType)) != 0) {
- return r;
- }
- if ((r = compare(this.productVersion, that.productVersion)) != 0) {
- return r;
- }
- if ((r = (that.productIds.size() - this.productIds.size())) != 0) {
- // different size lists
- return r;
- } else {
- // lists are same size, check contents
- Iterator<ProductId> thisIter = this.productIds.iterator();
- Iterator<ProductId> thatIter = that.productIds.iterator();
- while (thisIter.hasNext() && thatIter.hasNext()) {
- r = thisIter.next().compareTo(thatIter.next());
- if (r != 0) {
- return r;
- }
- }
- }
- return 0;
- }
- /**
- * Compare function
- * @param <T> Type
- * @param o1 First item to compare
- * @param o2 Second to comoare
- * @return 0 if equal, 1 if o1 is null, -1 if o2 null, or the comparison
- */
- protected <T extends Comparable<T>> int compare(T o1, T o2) {
- if (o1 == null && o2 == null) {
- return 0;
- } else if (o1 == null && o2 != null) {
- return 1;
- } else if (o1 != null && o2 == null) {
- return -1;
- } else {
- return o1.compareTo(o2);
- }
- }
- /**
- * Log function
- * @param logger logger object
- */
- public void log(final Logger logger) {
- if (!logger.isLoggable(Level.FINEST)) {
- return;
- }
- StringBuffer buf = new StringBuffer("Product Index Query");
- buf.append("\neventSearchType=").append(this.eventSearchType);
- buf.append("\nresultType=").append(this.resultType);
- if (this.eventSource != null) {
- buf.append("\neventSource=").append(this.eventSource);
- }
- if (this.eventSourceCode != null) {
- buf.append("\neventSourceCode=").append(this.eventSourceCode);
- }
- if (this.minEventTime != null) {
- buf.append("\nminEventTime=").append(this.minEventTime);
- }
- if (this.maxEventTime != null) {
- buf.append("\nmaxEventTime=").append(this.maxEventTime);
- }
- if (this.minEventLatitude != null) {
- buf.append("\nminEventLatitude=").append(this.minEventLatitude);
- }
- if (this.maxEventLatitude != null) {
- buf.append("\nmaxEventLatitude=").append(this.maxEventLatitude);
- }
- if (this.minEventLongitude != null) {
- buf.append("\nminEventLongitude=").append(this.minEventLongitude);
- }
- if (this.maxEventLongitude != null) {
- buf.append("\nmaxEventLongitude=").append(this.maxEventLongitude);
- }
- if (this.minEventDepth != null) {
- buf.append("\nminEventDepth=").append(this.minEventDepth);
- }
- if (this.maxEventDepth != null) {
- buf.append("\nmaxEventDepth=").append(this.maxEventDepth);
- }
- if (this.minEventMagnitude != null) {
- buf.append("\nminEventMagnitude=").append(this.minEventMagnitude);
- }
- if (this.maxEventMagnitude != null) {
- buf.append("\nmaxEventMagnitude=").append(this.maxEventMagnitude);
- }
- if (this.productIds.size() > 0) {
- buf.append("\nproduct ids=");
- Iterator<ProductId> iter = this.productIds.iterator();
- while (iter.hasNext()) {
- buf.append(iter.next().toString()).append(" ");
- }
- }
- if (this.minProductUpdateTime != null) {
- buf.append("\nminProductUpdateTime=").append(
- this.minProductUpdateTime);
- }
- if (this.maxProductUpdateTime != null) {
- buf.append("\nmaxProductUpdateTime=").append(
- this.maxProductUpdateTime);
- }
- if (this.productSource != null) {
- buf.append("\nproductSource=").append(this.productSource);
- }
- if (this.productType != null) {
- buf.append("\nproductType=").append(this.productType);
- }
- if (this.productCode != null) {
- buf.append("\nproductCode=").append(this.productCode);
- }
- if (this.productVersion != null) {
- buf.append("\nproductVersion=").append(this.productVersion);
- }
- if (this.productStatus != null) {
- buf.append("\nproductStatus=").append(this.productStatus);
- }
- logger.finest(buf.toString());
- }
- }