/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2002-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.
*/
package org.geotools.referencing.piecewise;
import org.geotools.geometry.GeneralDirectPosition;
import org.geotools.referencing.operation.matrix.Matrix1;
import org.geotools.renderer.i18n.ErrorKeys;
import org.geotools.renderer.i18n.Errors;
import org.opengis.geometry.DirectPosition;
import org.opengis.geometry.MismatchedDimensionException;
import org.opengis.referencing.operation.MathTransform1D;
import org.opengis.referencing.operation.Matrix;
import org.opengis.referencing.operation.NoninvertibleTransformException;
import org.opengis.referencing.operation.TransformException;
/**
* Adapter class for {@link MathTransform1D}.
*
* <p>
* Simple adapter for {@link MathTransform1D} it provides some convenience methods for
* implementors.
*
* <p>
* Note that it throw an {@link UnsupportedOperationException} for the operations that must
* be implemented by implementors, namely:
* <ol>
* <li>transform methods</li>
* <li>inverse methods</li>
* <li>derivative methods</li>
* </ol>
* @author Simone Giannecchini, GeoSolutions.
*
*
* @source $URL$
*/
public class MathTransform1DAdapter implements MathTransform1D {
/**
* Ensure the specified point is one-dimensional.
*/
private static void checkDimension(final DirectPosition point) {
final int dim = point.getDimension();
if (dim != 1) {
throw new MismatchedDimensionException(Errors.format(
ErrorKeys.MISMATCHED_DIMENSION_$2, new Integer(1),
new Integer(dim)));
}
}
/**
* Makes sure that an argument is non-null.
*
* @param name
* Argument name.
* @param object
* User argument.
* @throws IllegalArgumentException
* if {@code object} is null.
*/
private static void ensureNonNull(final String name, final Object object)
throws IllegalArgumentException {
if (object == null) {
throw new IllegalArgumentException(Errors.format(
ErrorKeys.NULL_ARGUMENT_$1, name));
}
}
/*
* (non-Javadoc)
*
* @see org.opengis.referencing.operation.MathTransform1D#derivative(double)
*/
public double derivative(double value) throws TransformException {
throw new UnsupportedOperationException(Errors.format(
ErrorKeys.UNSUPPORTED_OPERATION_$1, "inverse"));
}
/*
* (non-Javadoc)
*
* @see org.opengis.referencing.operation.MathTransform1D#transform(double)
*/
public double transform(double value) throws TransformException {
throw new UnsupportedOperationException(Errors.format(
ErrorKeys.UNSUPPORTED_OPERATION_$1, "transform"));
}
/*
* (non-Javadoc)
*
* @see org.opengis.referencing.operation.MathTransform#derivative(org.opengis.geometry.DirectPosition)
*/
public Matrix derivative(DirectPosition point)
throws MismatchedDimensionException, TransformException {
checkDimension(point);
return new Matrix1(derivative(point.getOrdinate(0)));
}
/*
* (non-Javadoc)
*
* @see org.opengis.referencing.operation.MathTransform#getSourceDimensions()
*/
public int getSourceDimensions() {
return 1;
}
/*
* (non-Javadoc)
*
* @see org.opengis.referencing.operation.MathTransform#getTargetDimensions()
*/
public int getTargetDimensions() {
return 1;
}
/*
* (non-Javadoc)
*
* @see org.opengis.referencing.operation.MathTransform#inverse()
*/
public MathTransform1D inverse() throws NoninvertibleTransformException {
throw new UnsupportedOperationException(Errors.format(
ErrorKeys.UNSUPPORTED_OPERATION_$1, "inverse"));
}
/*
* (non-Javadoc)
*
* @see org.opengis.referencing.operation.MathTransform#isIdentity()
*/
public boolean isIdentity() {
throw new UnsupportedOperationException(Errors.format(
ErrorKeys.UNSUPPORTED_OPERATION_$1, "isIdentity"));
}
/*
* (non-Javadoc)
*
* @see org.opengis.referencing.operation.MathTransform#toWKT()
*/
public String toWKT() {
throw new UnsupportedOperationException(Errors.format(
ErrorKeys.UNSUPPORTED_OPERATION_$1, "toWKT"));
}
/*
* (non-Javadoc)
*
* @see org.opengis.referencing.operation.MathTransform#transform(org.opengis.geometry.DirectPosition,
* org.opengis.geometry.DirectPosition)
*/
public DirectPosition transform(DirectPosition ptSrc, DirectPosition ptDst)
throws MismatchedDimensionException, TransformException {
// /////////////////////////////////////////////////////////////////////
//
// input checks
//
// /////////////////////////////////////////////////////////////////////
ensureNonNull("ptSrc", ptSrc);
checkDimension(ptSrc);
if (ptDst == null) {
ptDst = new GeneralDirectPosition(1);
} else {
checkDimension(ptDst);
}
ptDst.setOrdinate(0, transform(ptSrc.getOrdinate(0)));
return ptDst;
}
/*
* (non-Javadoc)
*
* @see org.opengis.referencing.operation.MathTransform#transform(double[],
* int, double[], int, int)
*/
public void transform(double[] arg0, int arg1, double[] arg2, int arg3,
int arg4) throws TransformException {
throw new UnsupportedOperationException(Errors.format(
ErrorKeys.UNSUPPORTED_OPERATION_$1, "transform"));
}
/*
* (non-Javadoc)
*
* @see org.opengis.referencing.operation.MathTransform#transform(float[],
* int, float[], int, int)
*/
public void transform(float[] arg0, int arg1, float[] arg2, int arg3,
int arg4) throws TransformException {
throw new UnsupportedOperationException(Errors.format(
ErrorKeys.UNSUPPORTED_OPERATION_$1, "transform"));
}
/*
* (non-Javadoc)
*
* @see org.opengis.referencing.operation.MathTransform#transform(float[],
* int, float[], int, int)
*/
public void transform(float[] arg0, int arg1, double[] arg2, int arg3,
int arg4) throws TransformException {
throw new UnsupportedOperationException(Errors.format(
ErrorKeys.UNSUPPORTED_OPERATION_$1, "transform"));
}
/*
* (non-Javadoc)
*
* @see org.opengis.referencing.operation.MathTransform#transform(float[],
* int, float[], int, int)
*/
public void transform(double[] arg0, int arg1, float[] arg2, int arg3,
int arg4) throws TransformException {
throw new UnsupportedOperationException(Errors.format(
ErrorKeys.UNSUPPORTED_OPERATION_$1, "transform"));
}
}