com.alipay.rdf.file.summary.StatisticPair Maven / Gradle / Ivy
package com.alipay.rdf.file.summary;
import com.alipay.rdf.file.exception.RdfErrorEnum;
import com.alipay.rdf.file.exception.RdfFileException;
import com.alipay.rdf.file.loader.ExtensionLoader;
import com.alipay.rdf.file.meta.StatisticPairMeta;
import com.alipay.rdf.file.model.FileDataTypeEnum;
import com.alipay.rdf.file.spi.RdfFileColumnTypeSpi;
import com.alipay.rdf.file.spi.RdfFileRowConditionSpi;
import com.alipay.rdf.file.util.RdfFileUtil;
/**
* Copyright (C) 2013-2018 Ant Financial Services Group
*
* 统计处理
*
* @author hongwei.quhw
* @version $Id: StatisticPair.java, v 0.1 2018年11月13日 下午6:19:12 hongwei.quhw Exp $
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public class StatisticPair {
private final StatisticPairMeta pairMeta;
/**头统计值*/
private Object headValue;
/**尾统计值*/
private Object tailValue;
/**读写过程统计的值*/
private Long staticsticValue = 0L;
private RdfFileColumnTypeSpi columnTypeCodec;
public StatisticPair(StatisticPairMeta pairMeta) {
this.pairMeta = pairMeta;
String columnName = pairMeta.getColumnMeta().getType().getName();
columnTypeCodec = ExtensionLoader.getExtensionLoader(RdfFileColumnTypeSpi.class)
.getExtension(columnName);
RdfFileUtil.assertNotNull(columnTypeCodec,
"rdf-file#StatisticPair 没有type=[" + columnName + "] 对应的类型codec");
}
/**
* 计数累加
*/
public void increment() {
staticsticValue++;
}
public void addColValue(Object value) {
if (null == value) {
return;
}
String strValue = columnTypeCodec.serialize(value, pairMeta.getColumnMeta());
staticsticValue += Long.valueOf(strValue);
}
public boolean isStatisticEquals() {
if (FileDataTypeEnum.HEAD.equals(pairMeta.getStatisticdataType())) {
return RdfFileUtil.compare(headValue, getStaticsticValue());
} else if (FileDataTypeEnum.TAIL.equals(pairMeta.getStatisticdataType())) {
return RdfFileUtil.compare(tailValue, getStaticsticValue());
} else {
throw new RdfFileException(
"rdf-file#StatisticPair.isStatisticEquals unsupport statistic type="
+ pairMeta.getStatisticdataType().name(),
RdfErrorEnum.UNSUPPORTED_OPERATION);
}
}
public String staticsticMsg() {
StringBuilder builder = new StringBuilder("统计字段信息:");
if (FileDataTypeEnum.HEAD.equals(pairMeta.getStatisticdataType())) {
builder.append("headKey=").append(pairMeta.getStatisticKey());
builder.append(" ");
builder.append("headValue=").append(null == headValue ? "为空" : headValue);
builder.append(" ");
}
builder.append(" ");
builder.append("staticsticValue=").append(staticsticValue == null ? "为空" : staticsticValue);
if (FileDataTypeEnum.TAIL.equals(pairMeta.getStatisticdataType())) {
builder.append(" ");
builder.append("tailKey=").append(pairMeta.getStatisticKey());
builder.append(" ");
builder.append("tailValue=").append(null == tailValue ? "为空" : tailValue);
}
return builder.toString();
}
public void setHeadValue(Object headValue) {
this.headValue = headValue;
}
public void setTailValue(Object tailValue) {
this.tailValue = tailValue;
}
public String getHeadKey() {
if (FileDataTypeEnum.HEAD.equals(pairMeta.getStatisticdataType())) {
return pairMeta.getStatisticKey();
} else {
return null;
}
}
public String getTailKey() {
if (FileDataTypeEnum.TAIL.equals(pairMeta.getStatisticdataType())) {
return pairMeta.getStatisticKey();
} else {
return null;
}
}
public RdfFileRowConditionSpi getRowCondition() {
return pairMeta.getRowCondition();
}
public Object getHeadValue() {
return headValue;
}
public Object getTailValue() {
return tailValue;
}
public Object getStaticsticValue() {
return columnTypeCodec.deserialize(String.valueOf(staticsticValue),
pairMeta.getColumnMeta());
}
public Long getStaticsticLongValue() {
return staticsticValue;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy