/**
*
*/
package com.taobao.top.analysis.statistics.data;
import java.io.Serializable;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.taobao.top.analysis.statistics.map.IMapper;
import com.taobao.top.analysis.statistics.reduce.IReducer;
import com.taobao.top.analysis.statistics.reduce.group.GroupFunction;
import com.taobao.top.analysis.util.AnalysisConstants;
/**
* SimpleMapReduce Entry
*
* @author fangweng
*
*/
public class ReportEntry implements Serializable, Cloneable {
/**
*
*/
private static final long serialVersionUID = -6275004376213449537L;
private String id;
/**
* 显示在报表的列title
*/
private String name;
/**
* 是否是后处理的列,例如有些列需要由某几个统计列再次作处理, 因此必须在这些列处理以后再统计
*/
private boolean lazy;
/**
* 自定义key生成方法
*/
private IMapper mapClass;
private int[] keys;
/**
* 用于存储一些key为对象的情况,例如某一列是json对象
*/
private List<ObjectColumn> subKeys;
private ICalculator calculator;
private ICondition condition;
private IFilter valueFilter;
/**
* 自定义合并方式
*/
private IReducer reduceClass;
private GroupFunction groupFunction;
/**
* mapClass带入的参数
*/
private String mapParams;
/**
* reduceClass带入的参数
*/
private String reduceParams;
private Map<String,Object> additions;
private boolean period = true;
/**
* 该entry所属的report
*/
private Set<String> reports = new HashSet<String>();
/**
* 该entry所依赖引用的entry的列表
*/
private List<String> referEntries;
public Map<String,Object> getAdditions() {
return additions;
}
public void setAdditions(String additions) {
if (additions != null)
{
this.additions = new HashMap<String,Object>();
String[] as = additions.split(",");
for(String a : as)
{
String[] kv = a.split("=");
if (kv.length == 2)
{
//性能考虑,这里写的比较恶劣一点,直接转换
if (kv[0].equals(AnalysisConstants.ANALYSIS_BLOOM_MAXKEYS))
this.additions.put(kv[0], Integer.parseInt(kv[1]));
else
if (kv[0].equals(AnalysisConstants.ANALYSIS_BLOOM_ERRORRATE))
this.additions.put(kv[0], Float.parseFloat(kv[1]));
else
this.additions.put(kv[0], kv[1]);
}
}
}
}
public Set<String> getReports() {
return reports;
}
public void setReports(Set<String> reports) {
this.reports = reports;
}
public void addReport(Report report) {
if(report == null)
return;
this.reports.add(report.getId());
if(!report.isPeriod())
this.period = false;
}
public boolean isLazy() {
return lazy;
}
public void setLazy(boolean lazy) {
this.lazy = lazy;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public IMapper getMapClass() {
return mapClass;
}
public void setMapClass(IMapper mapClass) {
this.mapClass = mapClass;
if(mapClass instanceof com.taobao.top.analysis.statistics.map.TimeKeyMapper) {
this.period = true;
}
}
public IReducer getReduceClass() {
return reduceClass;
}
public void setReduceClass(IReducer reduceClass) {
this.reduceClass = reduceClass;
}
public String getMapParams() {
return mapParams;
}
public void setMapParams(String mapParams) {
this.mapParams = mapParams;
}
public String getReduceParams() {
return reduceParams;
}
public void setReduceParams(String reduceParams) {
this.reduceParams = reduceParams;
}
public ICalculator getCalculator() {
return calculator;
}
public void setCalculator(ICalculator calculator) {
this.calculator = calculator;
}
public ICondition getCondition() {
return condition;
}
public void setCondition(ICondition condition) {
this.condition = condition;
}
public IFilter getValueFilter() {
return valueFilter;
}
public void setValueFilter(IFilter valueFilter) {
this.valueFilter = valueFilter;
}
public int[] getKeys() {
return keys;
}
public void setKeys(int[] keys) {
this.keys = keys;
}
public List<ObjectColumn> getSubKeys() {
return subKeys;
}
public void setSubKeys(List<ObjectColumn> subKeys) {
this.subKeys = subKeys;
}
public GroupFunction getGroupFunction() {
return groupFunction;
}
public void setGroupFunction(GroupFunction groupFunction) {
this.groupFunction = groupFunction;
}
@Override
public ReportEntry clone() throws CloneNotSupportedException {
return (ReportEntry) super.clone();
}
/**
* @return the period
*/
public boolean isPeriod() {
return period;
}
/**
* @param period the period to set
*/
public void setPeriod(boolean period) {
this.period = period;
}
/**
* @return the referEntries
*/
public List<String> getReferEntries() {
return referEntries;
}
/**
* @param referEntries the referEntries to set
*/
public void setReferEntries(List<String> referEntries) {
this.referEntries = referEntries;
}
}