package com.pardot.rhombus; import com.datastax.driver.core.utils.UUIDs; import com.fasterxml.jackson.annotation.JsonIgnore; import com.google.common.base.Objects; import com.pardot.rhombus.cobject.CObjectOrdering; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.text.SimpleDateFormat; import java.util.Date; import java.util.SortedMap; import java.util.UUID; /** * Pardot, an ExactTarget company * User: Michael Frank * Date: 4/17/13 */ public class Criteria { private static final Logger logger = LoggerFactory.getLogger(Criteria.class); private SortedMap<String, Object> indexKeys; private CObjectOrdering ordering; private UUID startUuid; private UUID endUuid; private Long limit = 0L; private Boolean inclusive = true; private Boolean allowFiltering = false; public String toString() { return Objects.toStringHelper(this.getClass()) .add("indexKeys", indexKeys) .add("ordering", ordering) .add("startTimestamp", uuidToDateString(startUuid)) .add("endTimestamp", uuidToDateString(endUuid)) .add("limit", limit) .add("inclusive", inclusive) .add("allowFiltering", allowFiltering) .toString(); } private String uuidToDateString(UUID uuid) { if(uuid == null) { return null; } else { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd:HH:mm:ssZ"); Date date = new Date(UUIDs.unixTimestamp(uuid)); return sdf.format(date); } } public SortedMap<String, Object> getIndexKeys() { return indexKeys; } public void setIndexKeys(SortedMap<String, Object> indexKeys) { this.indexKeys = indexKeys; } public CObjectOrdering getOrdering() { return ordering; } public void setOrdering(String ordering) { this.ordering = CObjectOrdering.fromString(ordering); } @JsonIgnore public void setOrdering(CObjectOrdering ordering) { this.ordering = ordering; } public UUID getStartUuid() { return startUuid; } public void setStartUuid(UUID startUuid) { this.startUuid = startUuid; } public UUID getEndUuid() { return endUuid; } public void setEndUuid(UUID endUuid) { this.endUuid = endUuid; } public void setStartTimestamp(Long startTimestamp) { this.startUuid = UUIDs.startOf(startTimestamp); } public void setEndTimestamp(Long endTimestamp) { this.endUuid = UUIDs.endOf(endTimestamp); } public Long getLimit() { return limit; } public void setLimit(Long limit) { this.limit = limit; } public Boolean getInclusive() { return inclusive; } public void setInclusive(Boolean inclusive) { this.inclusive = inclusive; } public Boolean getAllowFiltering() { return allowFiltering; } public void setAllowFiltering(Boolean allowFiltering) { this.allowFiltering = allowFiltering; } }