package mil.nga.giat.geowave.core.index;
import java.nio.ByteBuffer;
import java.util.List;
import java.util.Set;
import mil.nga.giat.geowave.core.index.dimension.NumericDimensionDefinition;
import mil.nga.giat.geowave.core.index.sfc.data.MultiDimensionalNumericData;
public class NumericIndexStrategyWrapper implements
NumericIndexStrategy
{
private String id;
private NumericIndexStrategy indexStrategy;
protected NumericIndexStrategyWrapper() {}
public NumericIndexStrategyWrapper(
final String id,
final NumericIndexStrategy indexStrategy ) {
this.id = id;
this.indexStrategy = indexStrategy;
}
@Override
public String getId() {
return id;
}
@Override
public byte[] toBinary() {
final byte[] idBinary = StringUtils.stringToBinary(id);
final byte[] delegateBinary = PersistenceUtils.toBinary(indexStrategy);
final ByteBuffer buf = ByteBuffer.allocate(4 + idBinary.length + delegateBinary.length);
buf.putInt(idBinary.length);
buf.put(idBinary);
buf.put(delegateBinary);
return buf.array();
}
@Override
public void fromBinary(
final byte[] bytes ) {
final ByteBuffer buf = ByteBuffer.wrap(bytes);
final int idBinaryLength = buf.getInt();
final byte[] idBinary = new byte[idBinaryLength];
final byte[] delegateBinary = new byte[bytes.length - idBinaryLength - 4];
buf.get(idBinary);
buf.get(delegateBinary);
id = StringUtils.stringFromBinary(idBinary);
indexStrategy = PersistenceUtils.fromBinary(
delegateBinary,
NumericIndexStrategy.class);
}
@Override
public List<ByteArrayRange> getQueryRanges(
final MultiDimensionalNumericData indexedRange,
final IndexMetaData... hints ) {
return indexStrategy.getQueryRanges(
indexedRange,
hints);
}
@Override
public List<ByteArrayRange> getQueryRanges(
final MultiDimensionalNumericData indexedRange,
final int maxRangeDecomposition,
final IndexMetaData... hints ) {
return indexStrategy.getQueryRanges(
indexedRange,
maxRangeDecomposition,
hints);
}
@Override
public List<ByteArrayId> getInsertionIds(
final MultiDimensionalNumericData indexedData ) {
return indexStrategy.getInsertionIds(indexedData);
}
@Override
public MultiDimensionalNumericData getRangeForId(
final ByteArrayId insertionId ) {
return indexStrategy.getRangeForId(insertionId);
}
@Override
public MultiDimensionalCoordinates getCoordinatesPerDimension(
final ByteArrayId insertionId ) {
return indexStrategy.getCoordinatesPerDimension(insertionId);
}
@Override
public NumericDimensionDefinition[] getOrderedDimensionDefinitions() {
return indexStrategy.getOrderedDimensionDefinitions();
}
@Override
public double[] getHighestPrecisionIdRangePerDimension() {
return indexStrategy.getHighestPrecisionIdRangePerDimension();
}
@Override
public List<ByteArrayId> getInsertionIds(
final MultiDimensionalNumericData indexedData,
final int maxDuplicateInsertionIds ) {
return indexStrategy.getInsertionIds(
indexedData,
maxDuplicateInsertionIds);
}
@Override
public Set<ByteArrayId> getNaturalSplits() {
return indexStrategy.getNaturalSplits();
}
@Override
public int getByteOffsetFromDimensionalIndex() {
return indexStrategy.getByteOffsetFromDimensionalIndex();
}
@Override
public List<IndexMetaData> createMetaData() {
return indexStrategy.createMetaData();
}
@Override
public MultiDimensionalCoordinateRanges[] getCoordinateRangesPerDimension(
final MultiDimensionalNumericData dataRange,
final IndexMetaData... hints ) {
return indexStrategy.getCoordinateRangesPerDimension(
dataRange,
hints);
}
}