package mil.nga.giat.geowave.core.index.dimension; import mil.nga.giat.geowave.core.index.PersistenceUtils; import mil.nga.giat.geowave.core.index.dimension.bin.BinRange; import mil.nga.giat.geowave.core.index.dimension.bin.BinningStrategy; import mil.nga.giat.geowave.core.index.sfc.data.NumericData; import mil.nga.giat.geowave.core.index.sfc.data.NumericRange; /** * Because space filling curves require an extent (minimum & maximum), the * unbounded implementation relies on an external binning strategy to translate * an unbounded variable into bounded bins */ public class UnboundedDimensionDefinition extends BasicDimensionDefinition { protected BinningStrategy binningStrategy; protected UnboundedDimensionDefinition() { super(); } /** * * @param binningStrategy * a bin strategy associated with the dimension */ public UnboundedDimensionDefinition( final BinningStrategy binningStrategy ) { super( binningStrategy.getBinMin(), binningStrategy.getBinMax()); this.binningStrategy = binningStrategy; } /** * @param index * a numeric value to be normalized */ @Override public BinRange[] getNormalizedRanges( final NumericData index ) { return binningStrategy.getNormalizedRanges(index); } /** * * @return a bin strategy associated with the dimension */ public BinningStrategy getBinningStrategy() { return binningStrategy; } @Override public NumericRange getDenormalizedRange( BinRange range ) { return binningStrategy.getDenormalizedRanges(range); } @Override public int getFixedBinIdSize() { return binningStrategy.getFixedBinIdSize(); } @Override public int hashCode() { final int prime = 31; int result = 1; result = (prime * result) + ((binningStrategy == null) ? 0 : binningStrategy.hashCode()); return result; } @Override public boolean equals( final Object obj ) { if (this == obj) { return true; } if (!super.equals(obj)) { return false; } if (getClass() != obj.getClass()) { return false; } final UnboundedDimensionDefinition other = (UnboundedDimensionDefinition) obj; if (binningStrategy == null) { if (other.binningStrategy != null) { return false; } } else if (!binningStrategy.equals(other.binningStrategy)) { return false; } return true; } @Override public byte[] toBinary() { return PersistenceUtils.toBinary(binningStrategy); } @Override public void fromBinary( final byte[] bytes ) { binningStrategy = PersistenceUtils.fromBinary( bytes, BinningStrategy.class); min = binningStrategy.getBinMin(); max = binningStrategy.getBinMax(); } }