Class DimensionFilter


  • public class DimensionFilter
    extends Object
    An utility class for the separation of concatenation of pass through transforms. Given an arbitrary math transform, this utility class will returns a new math transform that operates only of a given set of source dimensions. For example if the supplied transform has (x, y, z) inputs and (longitude, latitude, height) outputs, then the following code:
     addSourceDimensionRange(0, 2);
     MathTransform mt = separate(transform);
     

    will returns a transform with (x, y) inputs and (probably) (longitude, latitude) outputs. The later can be verified with a call to getTargetDimensions().

    Since:
    2.1
    Author:
    Martin Desruisseaux (IRD), Simone Giannecchini
    • Method Detail

      • getInstance

        public static DimensionFilter getInstance​(Hints hints)
        Creates or returns an existing instance from the given set of hints. If the hints contain a value for the INSTANCE key, this value is returned. Otherwise a new instance is created with the given hints.
        Parameters:
        hints - The hints, or null if none.
        Returns:
        An existing or a new DimensionFilter instance (never null).
        Since:
        2.5
        See Also:
        INSTANCE
      • addSourceDimension

        public void addSourceDimension​(int dimension)
                                throws IllegalArgumentException
        Add an input dimension to keep. The dimension applies to the source dimensions of the transform to be given to separate(transform). The number must be in the range 0 inclusive to transform.getSourceDimensions() exclusive.
        Parameters:
        dimension - The dimension to add.
        Throws:
        IllegalArgumentException - if dimension is negative.
      • addSourceDimensions

        public void addSourceDimensions​(int[] dimensions)
                                 throws IllegalArgumentException
        Add input dimensions to keep. The dimensions apply to the source dimensions of the transform to be given to separate(transform). All numbers must be in the range 0 inclusive to transform.getSourceDimensions() exclusive. The dimensions values must be in strictly increasing order.
        Parameters:
        dimensions - The new sequence of dimensions.
        Throws:
        IllegalArgumentException - if dimensions contains negative values or is not a strictly increasing sequence.
      • addSourceDimensionRange

        public void addSourceDimensionRange​(int lower,
                                            int upper)
                                     throws IllegalArgumentException
        Add a range of input dimensions to keep. The lower and upper values apply to the source dimensions of the transform to be given to separate(transform).
        Parameters:
        lower - The lower dimension, inclusive. Must not be smaller than 0.
        upper - The upper dimension, exclusive. Must not be greater than transform.getSourceDimensions().
        Throws:
        IllegalArgumentException
      • getSourceDimensions

        public int[] getSourceDimensions()
                                  throws IllegalStateException
        Returns the input dimensions. This information is available only if at least one setter method has been explicitly invoked for source dimensions.
        Returns:
        The input dimension as a sequence of strictly increasing values.
        Throws:
        IllegalStateException - if input dimensions have not been set.
      • addTargetDimension

        public void addTargetDimension​(int dimension)
                                throws IllegalArgumentException
        Add an output dimension to keep. The dimension applies to the target dimensions of the transform to be given to separate(transform). The number must be in the range 0 inclusive to transform.getTargetDimensions() exclusive.
        Parameters:
        dimension - The dimension to add.
        Throws:
        IllegalArgumentException - if dimension is negative.
      • addTargetDimensions

        public void addTargetDimensions​(int[] dimensions)
                                 throws IllegalArgumentException
        Add output dimensions to keep. The dimensions apply to the target dimensions of the transform to be given to separate(transform). All numbers must be in the range 0 inclusive to transform.getTargetDimensions() exclusive. The dimensions values must be in strictly increasing order.
        Parameters:
        dimensions - The new sequence of dimensions.
        Throws:
        IllegalArgumentException - if dimensions contains negative values or is not a strictly increasing sequence.
      • addTargetDimensionRange

        public void addTargetDimensionRange​(int lower,
                                            int upper)
                                     throws IllegalArgumentException
        Add a range of output dimensions to keep. The lower and upper values apply to the target dimensions of the transform to be given to separate(transform).
        Parameters:
        lower - The lower dimension, inclusive. Must not be smaller than 0.
        upper - The upper dimension, exclusive. Must not be greater than transform.getTargetDimensions().
        Throws:
        IllegalArgumentException
      • getTargetDimensions

        public int[] getTargetDimensions()
                                  throws IllegalStateException
        Returns the output dimensions. This information is available only if one of the following conditions is meet:

        • Target dimensions has been explicitly set using setter methods.
        • No target dimensions were set but separate(transform) has been invoked at least once, in which case the target dimensions are inferred automatically from the source dimensions and the transform.
        Returns:
        The output dimension as a sequence of strictly increasing values.
        Throws:
        IllegalStateException - if this information is not available.