package org.geotools.coverage.io.impl.range;
import javax.measure.Measurable;
import javax.measure.Measure;
import javax.measure.converter.ConversionException;
import javax.measure.quantity.Dimensionless;
import javax.measure.unit.Unit;
/**
* {@link Measurable} subclass suitable for modeling a band index in a multiband
* image axis.
*
* <p>
* The band index is a measurement of a {@link Dimensionless} quantity since it
* is just a convenience ordering.
*
* @author Simone Giannecchini, GeoSolutions
*
*
*
* @source $URL$
*/
public class BandIndexMeasure extends Measure<String, Dimensionless>
implements Measurable<Dimensionless> {
private static final long serialVersionUID = 3895010709415779953L;
private Long index = null;
private String bandMnemonic = null;
public BandIndexMeasure(final int index, final String bandMnemonic) {
this.index = (long) index;
this.bandMnemonic = bandMnemonic != null ? bandMnemonic : Long
.toString(this.index);
}
public double doubleValue(Unit<Dimensionless> value) {
return index;
}
public long longValue(Unit<Dimensionless> value) throws ArithmeticException {
return index;
}
public int compareTo(Measurable<Dimensionless> o) {
return this.index.compareTo(o.longValue(Unit.ONE));
}
@Override
public Unit<Dimensionless> getUnit() {
return Unit.ONE;
}
@Override
public String getValue() {
return this.bandMnemonic;
}
@Override
public Measure<String, Dimensionless> to(Unit<Dimensionless> target) {
if (target.isCompatible(Unit.ONE))
return new BandIndexMeasure(this.index.intValue(),
this.bandMnemonic);
final StringBuilder buffer = new StringBuilder();
buffer.append("Unable to perform requested conversion");
buffer.append("\nsource UoM:").append(" ").append(Unit.ONE.toString());
buffer.append("\ntarget UoM:").append(" ").append(target.toString());
throw new ConversionException(buffer.toString());
}
}