package mil.nga.giat.geowave.core.store.adapter.statistics;
import java.nio.ByteBuffer;
import org.apache.commons.lang3.ArrayUtils;
import mil.nga.giat.geowave.core.index.ByteArrayId;
import mil.nga.giat.geowave.core.index.Mergeable;
import mil.nga.giat.geowave.core.store.base.DataStoreEntryInfo;
public class MaxDuplicatesStatistics<T> extends
AbstractDataStatistics<T>
{
public static final ByteArrayId STATS_TYPE = new ByteArrayId(
"MAX_DUPLICATES");
private int maxDuplicates = 0;
protected MaxDuplicatesStatistics() {
super();
}
public int getEntriesWithDifferingFieldVisibilities() {
return maxDuplicates;
}
private MaxDuplicatesStatistics(
final ByteArrayId dataAdapterId,
final ByteArrayId statsId,
final int maxDuplicates ) {
super(
dataAdapterId,
statsId);
this.maxDuplicates = maxDuplicates;
}
public MaxDuplicatesStatistics(
final ByteArrayId dataAdapterId,
final ByteArrayId statisticsId ) {
super(
dataAdapterId,
composeId(statisticsId));
}
public static ByteArrayId composeId(
final ByteArrayId statisticsId ) {
return new ByteArrayId(
ArrayUtils.addAll(
ArrayUtils.addAll(
STATS_TYPE.getBytes(),
STATS_SEPARATOR.getBytes()),
statisticsId.getBytes()));
}
@Override
public DataStatistics<T> duplicate() {
return new MaxDuplicatesStatistics<>(
dataAdapterId,
statisticsId,
maxDuplicates);
}
@Override
public byte[] toBinary() {
final ByteBuffer buf = super.binaryBuffer(8);
buf.putInt(maxDuplicates);
return buf.array();
}
@Override
public void fromBinary(
final byte[] bytes ) {
final ByteBuffer buf = super.binaryBuffer(bytes);
maxDuplicates = buf.getInt();
}
@Override
public void entryIngested(
final DataStoreEntryInfo entryInfo,
final T entry ) {
maxDuplicates = Math.max(
maxDuplicates,
entryInfo.getRowIds().size() - 1);
}
@Override
public void merge(
final Mergeable merge ) {
if ((merge != null) && (merge instanceof MaxDuplicatesStatistics)) {
maxDuplicates = Math.max(
maxDuplicates,
((MaxDuplicatesStatistics) merge).maxDuplicates);
}
}
}