package com.linkedin.thirdeye.client.comparison;
import java.util.ArrayList;
import java.util.List;
import org.joda.time.DateTime;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
import com.linkedin.thirdeye.api.TimeGranularity;
import com.linkedin.thirdeye.client.MetricExpression;
public class TimeOnTimeComparisonRequest {
private String collectionName;
private List<MetricExpression> metricExpressions;
private List<String> groupByDimensions;
/**
* easy way to represent AND of multiple dimensions
* for example
* filterSet = new HashMap
* filterSet.put("country", "us")
* filterSet.put("device", "android")
* is equivalent to setting filterClause country='us' and device='android'
*/
private Multimap<String, String> filterSet;
/**
* Allows one to specify complex boolean expressions, advanced usage
*/
private String filterClause;
// TIME RELATED PARAMETERs
private DateTime baselineStart;
private DateTime baselineEnd;
private DateTime currentStart;
private DateTime currentEnd;
private TimeGranularity aggregationTimeGranularity;
private boolean isEndDateInclusive = false;
public TimeOnTimeComparisonRequest() {
}
public TimeOnTimeComparisonRequest(TimeOnTimeComparisonRequest that) {
this.collectionName = that.collectionName;
this.filterClause = that.filterClause;
this.baselineStart = that.baselineStart;
this.baselineEnd = that.baselineEnd;
this.currentStart = that.currentStart;
this.currentEnd = that.currentEnd;
if (that.groupByDimensions != null) {
this.groupByDimensions = new ArrayList<>(that.groupByDimensions);
}
if (that.filterSet != null) {
this.filterSet = ArrayListMultimap.create(that.filterSet);
}
if (that.aggregationTimeGranularity != null) {
this.aggregationTimeGranularity =
new TimeGranularity(that.aggregationTimeGranularity.getSize(),
that.aggregationTimeGranularity.getUnit());
}
this.metricExpressions = new ArrayList<>(that.metricExpressions);
this.isEndDateInclusive = that.isEndDateInclusive;
}
public String getCollectionName() {
return collectionName;
}
public void setCollectionName(String collectionName) {
this.collectionName = collectionName;
}
public List<MetricExpression> getMetricExpressions() {
return metricExpressions;
}
public void setMetricExpressions(List<MetricExpression> metricExpressions) {
this.metricExpressions = metricExpressions;
}
public List<String> getGroupByDimensions() {
return groupByDimensions;
}
public void setGroupByDimensions(List<String> groupByDimensions) {
this.groupByDimensions = groupByDimensions;
}
public Multimap<String, String> getFilterSet() {
return filterSet;
}
public void setFilterSet(Multimap<String, String> filterSet) {
this.filterSet = filterSet;
}
public String getFilterClause() {
return filterClause;
}
public void setFilterClause(String filterClause) {
this.filterClause = filterClause;
}
public DateTime getBaselineStart() {
return baselineStart;
}
public void setBaselineStart(DateTime baselineStart) {
this.baselineStart = baselineStart;
}
public DateTime getBaselineEnd() {
return baselineEnd;
}
public void setBaselineEnd(DateTime baselineEnd) {
this.baselineEnd = baselineEnd;
}
public DateTime getCurrentStart() {
return currentStart;
}
public void setCurrentStart(DateTime currentStart) {
this.currentStart = currentStart;
}
public DateTime getCurrentEnd() {
return currentEnd;
}
public void setCurrentEnd(DateTime currentEnd) {
this.currentEnd = currentEnd;
}
public TimeGranularity getAggregationTimeGranularity() {
return aggregationTimeGranularity;
}
public void setAggregationTimeGranularity(TimeGranularity aggregationTimeGranularity) {
this.aggregationTimeGranularity = aggregationTimeGranularity;
}
public boolean isEndDateInclusive() {
return isEndDateInclusive;
}
public void setEndDateInclusive(boolean isEndDateInclusive) {
this.isEndDateInclusive = isEndDateInclusive;
}
}