/* JAI-Ext - OpenSource Java Advanced Image Extensions Library
* http://www.geo-solutions.it/
* Copyright 2014 GeoSolutions
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package it.geosolutions.jaiext.piecewise;
import it.geosolutions.jaiext.range.Range;
import it.geosolutions.jaiext.range.RangeFactory;
/**
* The {@link DefaultPassthroughPiecewiseTransform1DElement} identically maps input values to the output ones.
*
* Such DomainElement1D can be used in cases when only No-Data have been specified, allowing us to create a convenience domain element for the other
* values.
*
* @author Simone Giannecchini, GeoSolutions
* @author Alessio Fabiani, GeoSolutions
*/
public class DefaultPassthroughPiecewiseTransform1DElement extends
DefaultPiecewiseTransform1DElement implements PiecewiseTransform1DElement {
/**
* A generated Serial Version UID.
*/
private static final long serialVersionUID = -2420723761115130075L;
/**
* Protected constructor for {@link DomainElement1D}s that want to build their transform later on.
*
* @param name for this {@link DomainElement1D}.
* @throws IllegalArgumentException
*/
public DefaultPassthroughPiecewiseTransform1DElement(CharSequence name)
throws IllegalArgumentException {
super(name, RangeFactory.create(Double.NEGATIVE_INFINITY, true, Double.POSITIVE_INFINITY,
true, true));
}
/**
* Protected constructor for {@link DomainElement1D}s that want to build their transform later on.
*
* @param name for this {@link DomainElement1D}.
* @param valueRange for this {@link DomainElement1D}.
* @throws IllegalArgumentException
*/
public DefaultPassthroughPiecewiseTransform1DElement(CharSequence name, final Range valueRange)
throws IllegalArgumentException {
super(name, valueRange);
}
/**
* Transforms the specified value.
*
* @param value The value to transform.
* @return the transformed value.
* @throws TransformationException if the value can't be transformed.
*/
public double transform(double value) throws TransformationException {
if (checkContainment(value))
return value;
throw new IllegalArgumentException("Wrong value:" + value);
}
private boolean checkContainment(double value) throws TransformationException {
return contains(value);
}
/**
* Transforms the specified {@code ptSrc} and stores the result in {@code ptDst}.
*/
public Position transform(final Position ptSrc, Position ptDst) throws TransformationException {
PiecewiseUtilities.ensureNonNull("DirectPosition", ptSrc);
if (ptDst == null) {
ptDst = new Position();
}
final double value = ptSrc.getOrdinatePosition();
checkContainment(value);
ptDst.setOrdinatePosition(transform(value));
return ptDst;
}
/*
* (non-Javadoc)
*
* @see DefaultPiecewiseTransform1DElement#getSourceDimensions()
*/
public int getSourceDimensions() {
return 1;
}
/*
* (non-Javadoc)
*
* @see DefaultPiecewiseTransform1DElement#getTargetDimensions()
*/
public int getTargetDimensions() {
return 1;
}
/*
* (non-Javadoc)
*
* @see DefaultPiecewiseTransform1DElement#inverse()
*/
public MathTransformation inverse() throws NoninvertibleTransformException {
return SingleDimensionTransformation.IDENTITY;
}
/*
* (non-Javadoc)
*
* @see DefaultPiecewiseTransform1DElement#isIdentity()
*/
public boolean isIdentity() {
return true;
}
}