Class DimensionFilter

Object
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
  • Field Details

  • Constructor Details

  • Method Details

    • 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:
    • clear

      public void clear()
      Clears any source and target dimension setting.
    • 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.
    • separate

      public MathTransform separate(MathTransform transform) throws FactoryException
      Separates the specified math transform. This method returns a math transform that uses only the specified source dimensions and returns only the specified target dimensions. Special case:

      • If source dimensions are unspecified, then the returned transform will expects all source dimensions as input but will produces only the specified target dimensions as output.

      • If target dimensions are unspecified, then the returned transform will expects only the specified source dimensions as input, and the target dimensions will be inferred automatically.

      Parameters:
      transform - The transform to separate.
      Returns:
      The separated math transform.
      Throws:
      FactoryException - if the transform can't be separated.