package org.esa.beam.dataio.smos.dddb;
class BandDescriptorImpl implements BandDescriptor {
private final boolean visible;
private final String bandName;
private final String memberName;
private final int polarization;
private final int sampleModel;
private final double scalingOffset;
private final double scalingFactor;
private final double typicalMin;
private final double typicalMax;
private final boolean cyclic;
private final double fillValue;
private final String validPixelExpression;
private final String unit;
private final String description;
private final String flagCodingName;
private final Family<FlagDescriptor> flagDescriptors;
private boolean gridPointData;
private String dimensionNames;
private String ancilliaryBandName;
BandDescriptorImpl(String[] tokens, Dddb dddb) {
visible = TokenParser.parseBoolean(tokens[0], true);
bandName = TokenParser.parseString(tokens[1]);
memberName = TokenParser.parseString(tokens[2], bandName);
polarization = TokenParser.parseInt(tokens[3], -1);
sampleModel = TokenParser.parseInt(tokens[4], 0);
scalingOffset = TokenParser.parseDouble(tokens[5], 0.0);
scalingFactor = TokenParser.parseDouble(tokens[6], 1.0);
typicalMin = TokenParser.parseDouble(tokens[7], Double.NEGATIVE_INFINITY);
typicalMax = TokenParser.parseDouble(tokens[8], Double.POSITIVE_INFINITY);
cyclic = TokenParser.parseBoolean(tokens[9], false);
fillValue = TokenParser.parseDouble(tokens[10], Double.NaN);
validPixelExpression = TokenParser.parseString(tokens[11], "").replaceAll("x", bandName);
unit = TokenParser.parseString(tokens[12], "");
description = TokenParser.parseString(tokens[13], "");
flagCodingName = TokenParser.parseString(tokens[14], "");
flagDescriptors = getFlagDescriptors(tokens[15], dddb);
if (tokens.length > 16) {
ancilliaryBandName = TokenParser.parseString(tokens[16], "");
}
if (tokens.length > 18) {
gridPointData = TokenParser.parseBoolean(tokens[17], true);
dimensionNames = TokenParser.parseString(tokens[18], null);
} else {
gridPointData = true;
dimensionNames = null;
}
}
private Family<FlagDescriptor> getFlagDescriptors(String token, Dddb dddb) {
if (flagCodingName.isEmpty()) {
return null;
}
return dddb.getFlagDescriptors(TokenParser.parseString(token));
}
@Override
public final String getBandName() {
return bandName;
}
@Override
public final String getMemberName() {
return memberName;
}
@Override
public int getPolarization() {
return polarization;
}
@Override
public boolean isVisible() {
return visible;
}
@Override
public final int getSampleModel() {
return sampleModel;
}
@Override
public final double getScalingOffset() {
return scalingOffset;
}
@Override
public final double getScalingFactor() {
return scalingFactor;
}
@Override
public final boolean hasTypicalMin() {
return !Double.isInfinite(typicalMin);
}
@Override
public final boolean hasTypicalMax() {
return !Double.isInfinite(typicalMax);
}
@Override
public final boolean hasFillValue() {
return !Double.isNaN(fillValue);
}
@Override
public final double getTypicalMin() {
return typicalMin;
}
@Override
public final double getTypicalMax() {
return typicalMax;
}
@Override
public final double getFillValue() {
return fillValue;
}
@Override
public final String getValidPixelExpression() {
return validPixelExpression;
}
@Override
public final String getUnit() {
return unit;
}
@Override
public final boolean isCyclic() {
return cyclic;
}
@Override
public final String getDescription() {
return description;
}
@Override
public final String getFlagCodingName() {
return flagCodingName;
}
@Override
public final Family<FlagDescriptor> getFlagDescriptors() {
return flagDescriptors;
}
@Override
public boolean isGridPointData() {
return gridPointData;
}
@Override
public String getDimensionNames() {
return dimensionNames;
}
public String getAncilliaryBandName() {
return ancilliaryBandName;
}
}