Package org.apache.sis.feature

## Class Features

- Object
- - Static
  - - Features

-     public final class Features
      extends Static

  Static methods working on features or attributes.
  Since:
    0.5

  Defined in the `sis-feature` module

- - ### Method Summary

    All Methods Static Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `static <V> AbstractAttribute<V>` | `cast​(AbstractAttribute<?> attribute, Class<V> valueClass)` | Casts the given attribute instance to the given parameterized type.
    `static <V> DefaultAttributeType<V>` | `cast​(DefaultAttributeType<?> type, Class<V> valueClass)` | Casts the given attribute type to the given parameterized type.
    `static DefaultFeatureType` | `findCommonParent​(Iterable<? extends DefaultFeatureType> types)` | Finds a feature type common to all given types, or returns `null` if none is found.
    `static GenericName` | `getValueTypeName​(AbstractIdentifiedType property)` | Returns the name of the type of values that the given property can take.
    `static void` | `validate​(AbstractFeature feature)` | Ensures that all characteristics and property values in the given feature are valid.

    - ### Methods inherited from class Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Method Detail

    - #### cast

          public static <V> DefaultAttributeType<V> cast​(DefaultAttributeType<?> type,
                                                         Class<V> valueClass)
                                                  throws ClassCastException

      Casts the given attribute type to the given parameterized type. An exception is thrown immediately if the given type does not have the expected value class.
      Type Parameters:
        `V` - the expected value class.
      Parameters:
        `type` - the attribute type to cast, or `null`.
        `valueClass` - the expected value class.
      Returns:
        the attribute type casted to the given value class, or `null` if the given type was null.
      Throws:
        `ClassCastException` - if the given attribute type does not have the expected value class.

    - #### cast

          public static <V> AbstractAttribute<V> cast​(AbstractAttribute<?> attribute,
                                                      Class<V> valueClass)
                                               throws ClassCastException

      Casts the given attribute instance to the given parameterized type. An exception is thrown immediately if the given instance does not have the expected value class.
      Type Parameters:
        `V` - the expected value class.
      Parameters:
        `attribute` - the attribute instance to cast, or `null`.
        `valueClass` - the expected value class.
      Returns:
        the attribute instance casted to the given value class, or `null` if the given instance was null.
      Throws:
        `ClassCastException` - if the given attribute instance does not have the expected value class.

    - #### findCommonParent

          public static DefaultFeatureType findCommonParent​(Iterable<? extends DefaultFeatureType> types)

      Finds a feature type common to all given types, or returns `null` if none is found. The return value is either one of the given types, or a parent common to all types. A feature F is considered a common parent if `F.`isAssignableFrom`(type)` returns `true` for all elements type in the given array.
      Parameters:
        `types` - types for which to find a common type, or `null`.
      Returns:
        a feature type which is assignable from all given types, or `null` if none.
      Since:
        1.0
      See Also:
        `DefaultFeatureType​.isAssignableFrom(DefaultFeatureType)`

    - #### getValueTypeName

          public static GenericName getValueTypeName​(AbstractIdentifiedType property)

      Returns the name of the type of values that the given property can take. The type of value can be a `Class`, a `FeatureType` or another `PropertyType` depending on given argument:
      - If `property` is an `AttributeType`, then this method gets the value class and maps that class to a name.
      - If `property` is a `FeatureAssociationRole`, then this method gets the name of the value type. This methods can work even if the associated `FeatureType` is not yet resolved.
      - If `property` is an `Operation`, then this method returns the name of the result type.
      Parameters:
        `property` - the property for which to get the name of value type.
      Returns:
        the name of value type, or `null` if none.
      Since:
        0.8

    - #### validate

          public static void validate​(AbstractFeature feature)
                               throws IllegalArgumentException

      Ensures that all characteristics and property values in the given feature are valid. An attribute is valid if it contains a number of values between the minimum and maximum number of occurrences (inclusive), all values are instances of the expected value class, and the attribute is compliant with any other restriction that the implementation may add.

      This method gets a quality report as documented in the `AbstractFeature​.quality()` method and verifies that all conformance tests pass. If at least one `ConformanceResult​.pass` attribute is false, then an `InvalidPropertyValueException` is thrown. Otherwise this method returns doing nothing.

      Parameters:
        `feature` - the feature to validate, or `null`.
      Throws:
        `IllegalArgumentException` - if the given feature is non-null and does not pass validation.
      Since:
        0.7