/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2004-2008, Open Source Geospatial Foundation (OSGeo)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* This package contains documentation from OpenGIS specifications.
* OpenGIS consortium's work is fully acknowledged here.
*/
package org.geotools.metadata.iso.content;
import javax.measure.unit.Unit;
import org.opengis.metadata.content.Band;
/**
* Range of wavelengths in the electromagnetic spectrum.
*
* @source $URL$
* @version $Id$
* @author Martin Desruisseaux (IRD)
* @author Touraïvane
*
* @since 2.1
*/
public class BandImpl extends RangeDimensionImpl implements Band {
/**
* Serial number for interoperability with different versions.
*/
private static final long serialVersionUID = -2302918545469034653L;
/**
* Longest wavelength that the sensor is capable of collecting within a designated band.
*/
private Double maxValue;
/**
* Shortest wavelength that the sensor is capable of collecting within a designated band.
*/
private Double minValue;
/**
* Units in which sensor wavelengths are expressed. Should be non-null if
* {@linkplain #getMinValue min value} or {@linkplain #getMaxValue max value}
* are provided.
*/
private Unit units;
/**
* Wavelength at which the response is the highest.
* {@code null} if unspecified.
*/
private Double peakResponse;
/**
* Maximum number of significant bits in the uncompressed representation for the value
* in each band of each pixel.
* {@code null} if unspecified.
*/
private Integer bitsPerValue;
/**
* Number of discrete numerical values in the grid data.
* {@code null} if unspecified.
*/
private Integer toneGradation;
/**
* Scale factor which has been applied to the cell value.
* {@code null} if unspecified.
*/
private Double scaleFactor;
/**
* The physical value corresponding to a cell value of zero.
* {@code null} if unspecified.
*/
private Double offset;
/**
* Constructs an initially empty band.
*/
public BandImpl() {
}
/**
* Constructs a metadata entity initialized with the values from the specified metadata.
*
* @since 2.4
*/
public BandImpl(final Band source) {
super(source);
}
/**
* Returns the longest wavelength that the sensor is capable of collecting within
* a designated band. Returns {@code null} if unspecified.
*/
public Double getMaxValue() {
return maxValue;
}
/**
* Set the longest wavelength that the sensor is capable of collecting within a
* designated band. Returns {@code null} if unspecified.
*/
public synchronized void setMaxValue(final Double newValue) {
checkWritePermission();
maxValue = newValue;
}
/**
* Returns the shortest wavelength that the sensor is capable of collecting
* within a designated band.
*/
public Double getMinValue() {
return minValue;
}
/**
* Set the shortest wavelength that the sensor is capable of collecting within
* a designated band.
*/
public synchronized void setMinValue(final Double newValue) {
checkWritePermission();
minValue = newValue;
}
/**
* Returns the units in which sensor wavelengths are expressed. Should be non-null
* if {@linkplain #getMinValue min value} or {@linkplain #getMaxValue max value}
* are provided.
*/
public Unit getUnits() {
return units;
}
/**
* Set the units in which sensor wavelengths are expressed. Should be non-null if
* {@linkplain #getMinValue min value} or {@linkplain #getMaxValue max value}
* are provided.
*/
public synchronized void setUnits(final Unit newValue) {
checkWritePermission();
units = newValue;
}
/**
* Returns the wavelength at which the response is the highest.
* Returns {@code null} if unspecified.
*/
public Double getPeakResponse() {
return peakResponse;
}
/**
* Set the wavelength at which the response is the highest.
*/
public synchronized void setPeakResponse(final Double newValue) {
checkWritePermission();
peakResponse = newValue;
}
/**
* Returns the maximum number of significant bits in the uncompressed
* representation for the value in each band of each pixel.
* Returns {@code null} if unspecified.
*/
public Integer getBitsPerValue() {
return bitsPerValue;
}
/**
* Set the maximum number of significant bits in the uncompressed representation
* for the value in each band of each pixel.
*/
public synchronized void setBitsPerValue(final Integer newValue) {
checkWritePermission();
bitsPerValue = newValue;
}
/**
* Returns the number of discrete numerical values in the grid data.
* Returns {@code null} if unspecified.
*/
public Integer getToneGradation() {
return toneGradation;
}
/**
* Set the number of discrete numerical values in the grid data.
*/
public synchronized void setToneGradation(final Integer newValue) {
checkWritePermission();
toneGradation = newValue;
}
/**
* Returns the scale factor which has been applied to the cell value.
* Returns {@code null} if unspecified.
*/
public Double getScaleFactor() {
return scaleFactor;
}
/**
* Set the scale factor which has been applied to the cell value.
*/
public synchronized void setScaleFactor(final Double newValue) {
checkWritePermission();
scaleFactor = newValue;
}
/**
* Returns the physical value corresponding to a cell value of zero.
* Returns {@code null} if unspecified.
*/
public Double getOffset() {
return offset;
}
/**
* Set the physical value corresponding to a cell value of zero.
*/
public synchronized void setOffset(final Double newValue) {
checkWritePermission();
offset = newValue;
}
}