package mil.nga.giat.geowave.core.index; import java.util.ArrayList; import java.util.Collections; 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; /** * This is a completely empty numeric index strategy representing no dimensions, * and always returning empty IDs and ranges. It can be used in cases when the * data is "indexed" by another means, and not using multi-dimensional numeric * data. * */ public class NullNumericIndexStrategy implements NumericIndexStrategy { private String id; protected NullNumericIndexStrategy() { super(); } public NullNumericIndexStrategy( final String id ) { this.id = id; } @Override public byte[] toBinary() { return StringUtils.stringToBinary(id); } @Override public void fromBinary( final byte[] bytes ) { id = StringUtils.stringFromBinary(bytes); } @Override public List<ByteArrayRange> getQueryRanges( final MultiDimensionalNumericData indexedRange, final IndexMetaData... hints ) { return getQueryRanges( indexedRange, -1); } @Override public List<ByteArrayRange> getQueryRanges( final MultiDimensionalNumericData indexedRange, final int maxRangeDecomposition, final IndexMetaData... hints ) { // a null return here should be interpreted as negative to positive // infinite return null; } @Override public List<ByteArrayId> getInsertionIds( final MultiDimensionalNumericData indexedData ) { return getInsertionIds( indexedData, 1); } @Override public NumericDimensionDefinition[] getOrderedDimensionDefinitions() { // there are no dimensions so return an empty array return new NumericDimensionDefinition[] {}; } @Override public String getId() { return id; } @Override public MultiDimensionalNumericData getRangeForId( final ByteArrayId insertionId ) { // a null return here should be interpreted as negative to positive // infinite return null; } @Override public double[] getHighestPrecisionIdRangePerDimension() { // there are no dimensions so return an empty array return new double[] {}; } @Override public MultiDimensionalCoordinates getCoordinatesPerDimension( final ByteArrayId insertionId ) { // there are no dimensions so return an empty array return new MultiDimensionalCoordinates(); } @Override public List<ByteArrayId> getInsertionIds( final MultiDimensionalNumericData indexedData, final int maxDuplicateInsertionIds ) { // return a single empty ID final List<ByteArrayId> retVal = new ArrayList<ByteArrayId>(); retVal.add(new ByteArrayId( new byte[] {})); return retVal; } @Override public Set<ByteArrayId> getNaturalSplits() { return null; } @Override public int getByteOffsetFromDimensionalIndex() { return 0; } @Override public List<IndexMetaData> createMetaData() { return Collections.emptyList(); } @Override public MultiDimensionalCoordinateRanges[] getCoordinateRangesPerDimension( MultiDimensionalNumericData dataRange, IndexMetaData... hints ) { return new MultiDimensionalCoordinateRanges[] { new MultiDimensionalCoordinateRanges() }; } }