Package org.apache.sis.metadata.iso.maintenance

## Class DefaultScopeDescription

- Object
- - AbstractMetadata
  - - ModifiableMetadata
    - - ISOMetadata
      - - DefaultScopeDescription

- All Implemented Interfaces:
    `Serializable`, `Emptiable`, `LenientComparable`, `IdentifiedObject`, `ScopeDescription`

      public class DefaultScopeDescription
      extends ISOMetadata
      implements ScopeDescription

  Description of the class of information covered by the information. The following properties are mandatory or conditional (i.e. mandatory under some circumstances) in a well-formed metadata according ISO 19115:
  `MD_ScopeDescription` `├─attributeInstances……` Attribute instances to which the information applies. `├─attributes…………………………` Attributes to which the information applies. `├─dataset…………………………………` Dataset to which the information applies. `├─featureInstances…………` Feature instances to which the information applies. `├─features………………………………` Features to which the information applies. `└─other………………………………………` Class of information that does not fall into the other categories to which the information applies.
  ISO 19115 defines `ScopeDescription` as an union (in the C/C++ sense): only one of the properties in this class can be set to a non-empty value. Setting any property to a non-empty value discard all the other ones.
  Limitations
  - Instances of this class are not synchronized for multi-threading. Synchronization, if needed, is caller's responsibility.
  - Serialized objects of this class are not guaranteed to be compatible with future Apache SIS releases. Serialization support is appropriate for short term storage or RMI between applications running the same version of Apache SIS. For long term storage, use `XML` instead.
  Since:
    0.3
  See Also:
    Serialized Form

  Defined in the `sis-metadata` module

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class ModifiableMetadata

      `ModifiableMetadata​.State`

  - ### Field Summary

    - ### Fields inherited from class ISOMetadata

      `identifiers`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `DefaultScopeDescription()` | Creates an initially empty scope description.
    `DefaultScopeDescription​(ScopeDescription object)` | Constructs a new instance initialized with the values from the specified metadata object.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `static DefaultScopeDescription` | `castOrCopy​(ScopeDescription object)` | Returns a SIS metadata implementation with the values of the given arbitrary implementation.
    `Set<AttributeType>` | `getAttributeInstances()` | Returns the attribute instances to which the information applies.
    `Set<AttributeType>` | `getAttributes()` | Returns the attribute types to which the information applies.
    `String` | `getDataset()` | Returns the dataset to which the information applies.
    `Set<FeatureType>` | `getFeatureInstances()` | Returns the feature instances to which the information applies.
    `Set<FeatureType>` | `getFeatures()` | Returns the feature types to which the information applies.
    `ScopeCode` | `getLevel()` | Returns an indication of which property is set, or `null` if unknown.
    `String` | `getOther()` | Returns the class of information that does not fall into the other categories to which the information applies.
    `void` | `setAttributeInstances​(Set<? extends AttributeType> newValues)` | Sets the attribute instances to which the information applies.
    `void` | `setAttributes​(Set<? extends AttributeType> newValues)` | Sets the attribute types to which the information applies.
    `void` | `setDataset​(String newValue)` | Sets the dataset to which the information applies.
    `void` | `setFeatureInstances​(Set<? extends FeatureType> newValues)` | Sets the feature instances to which the information applies.
    `void` | `setFeatures​(Set<? extends FeatureType> newValues)` | Sets the feature types to which the information applies.
    `void` | `setLevelDescription​(ScopeCode level, Set<? extends CharSequence> newValues)` | Dispatches the given values to a setter method determined by the given hierarchical level.
    `void` | `setOther​(String newValue)` | Sets the class of information that does not fall into the other categories to which the information applies.

    - ### Methods inherited from class ISOMetadata

      `getIdentifier, getIdentifierMap, getIdentifiers, getStandard, setIdentifier, transitionTo`

    - ### Methods inherited from class ModifiableMetadata

      `checkWritePermission, checkWritePermission, collectionType, copyCollection, copyList, copyMap, copySet, freeze, isModifiable, nonNullCollection, nonNullList, nonNullMap, nonNullSet, singleton, state, unmodifiable, writeCollection, writeList, writeMap, writeSet`

    - ### Methods inherited from class AbstractMetadata

      `asMap, asTreeTable, equals, equals, getInterface, hashCode, isEmpty, prune, toString`

    - ### Methods inherited from class Object

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- - ### Constructor Detail

    - #### DefaultScopeDescription

          public DefaultScopeDescription()

      Creates an initially empty scope description.

    - #### DefaultScopeDescription

          public DefaultScopeDescription​(ScopeDescription object)

      Constructs a new instance initialized with the values from the specified metadata object. This is a shallow copy constructor, since the other metadata contained in the given object are not recursively copied.

      If the given object contains more than one value, then the first non-null element in the following list has precedence (from wider scope to smaller scope): dataset, features, attributes, feature instances, attribute instances and other.

      Parameters:
        `object` - the metadata to copy values from, or `null` if none.
      See Also:
        `castOrCopy(ScopeDescription)`

  - ### Method Detail

    - #### castOrCopy

          public static DefaultScopeDescription castOrCopy​(ScopeDescription object)

      Returns a SIS metadata implementation with the values of the given arbitrary implementation. This method performs the first applicable action in the following choices:
      - If the given object is `null`, then this method returns `null`.
      - Otherwise if the given object is already an instance of `DefaultScopeDescription`, then it is returned unchanged.
      - Otherwise a new `DefaultScopeDescription` instance is created using the copy constructor and returned. Note that this is a shallow copy operation, since the other metadata contained in the given object are not recursively copied.
      Parameters:
        `object` - the object to get as a SIS implementation, or `null` if none.
      Returns:
        a SIS implementation containing the values of the given object (may be the given object itself), or `null` if the argument was null.

    - #### getLevel

          public ScopeCode getLevel()

      Returns an indication of which property is set, or `null` if unknown. This method returns one of the following values depending which property has been set:

      hierarchical level of the data
      Scope code | Getter method
      --- | ---
      `DATASET` | `getDataset()`
      `FEATURE_TYPE` | `getFeatures()`
      `ATTRIBUTE_TYPE` | `getAttributes()`
      `FEATURE` | `getFeatureInstances()`
      `ATTRIBUTE` | `getAttributeInstances()`

      Returns:
        an identification of the property which is set, or `null` if unknown.
      Since:
        1.0
      See Also:
        `setLevelDescription(ScopeCode, Set)`

    - #### getDataset

          public String getDataset()

      Returns the dataset to which the information applies.
      Example: If a geographic data provider is generating vector mapping for the administrative areas and if the data were processed in the same way, then the provider could record the bulk of initial data at `ScopeCode​.DATASET` level with a “Administrative area A, B & C” description.
      Specified by:
        `getDataset` in interface `ScopeDescription`
      Returns:
        dataset to which the information applies, or `null`.

    - #### setDataset

          public void setDataset​(String newValue)

      Sets the dataset to which the information applies.
      Effect on other properties
      If and only if the `newValue` is non-null, then this method automatically discards all other properties.
      Parameters:
        `newValue` - the new dataset.

    - #### getFeatures

          public Set<FeatureType> getFeatures()

      Returns the feature types to which the information applies.
      Example: if an administrative area performs a complete re-survey of the road network, the change can be recorded at `ScopeCode​.FEATURE_TYPE` level with a “Administrative area A — Road network” description.
      Conditions
      This method returns a modifiable collection only if no other property is set. Otherwise, this method returns an unmodifiable empty collection.
      Upcoming API change: The type of this property may be changed to `Set<CharSequence>` for ISO 19115:2014 conformance. See GEO-238 for more information.
      Specified by:
        `getFeatures` in interface `ScopeDescription`
      Returns:
        feature types to which the information applies.

    - #### setFeatures

          public void setFeatures​(Set<? extends FeatureType> newValues)

      Sets the feature types to which the information applies.
      Effect on other properties
      If and only if the `newValue` is non-empty, then this method automatically discards all other properties.
      Upcoming API change: The type of this property may be changed to `Set<CharSequence>` for ISO 19115:2014 conformance. See GEO-238 for more information.
      Parameters:
        `newValues` - the new feature types.

    - #### getAttributes

          public Set<AttributeType> getAttributes()

      Returns the attribute types to which the information applies.
      Example: if an administrative area detects an anomaly in all overhead clearance of the road survey, the correction can be recorded at `ScopeCode​.ATTRIBUTE_TYPE` level with a “Administrative area A — Overhead clearance” description.
      Conditions
      This method returns a modifiable collection only if no other property is set. Otherwise, this method returns an unmodifiable empty collection.
      Upcoming API change: The type of this property may be changed to `Set<CharSequence>` for ISO 19115:2014 conformance. See GEO-238 for more information.
      Specified by:
        `getAttributes` in interface `ScopeDescription`
      Returns:
        attribute types to which the information applies.

    - #### setAttributes

          public void setAttributes​(Set<? extends AttributeType> newValues)

      Sets the attribute types to which the information applies.
      Effect on other properties
      If and only if the `newValue` is non-empty, then this method automatically discards all other properties.
      Upcoming API change: The type of this property may be changed to `Set<CharSequence>` for ISO 19115:2014 conformance. See GEO-238 for more information.
      Parameters:
        `newValues` - the new attribute types.

    - #### getFeatureInstances

          public Set<FeatureType> getFeatureInstances()

      Returns the feature instances to which the information applies.
      Example: If a new bridge is constructed in a road network, the change can be recorded at `ScopeCode​.FEATURE` level with a “Administrative area A — New bridge” description.
      Conditions
      This method returns a modifiable collection only if no other property is set. Otherwise, this method returns an unmodifiable empty collection.
      Upcoming API change: The type of this property may be changed to `Set<CharSequence>` for ISO 19115:2014 conformance. See GEO-238 for more information.
      Specified by:
        `getFeatureInstances` in interface `ScopeDescription`
      Returns:
        feature instances to which the information applies.

    - #### setFeatureInstances

          public void setFeatureInstances​(Set<? extends FeatureType> newValues)

      Sets the feature instances to which the information applies.
      Effect on other properties
      If and only if the `newValue` is non-empty, then this method automatically discards all other properties.
      Upcoming API change: The type of this property may be changed to `Set<CharSequence>` for ISO 19115:2014 conformance. See GEO-238 for more information.
      Parameters:
        `newValues` - the new feature instances.

    - #### getAttributeInstances

          public Set<AttributeType> getAttributeInstances()

      Returns the attribute instances to which the information applies.
      Example: If the overhead clearance of a new bridge was wrongly recorded, the correction can be recorded at `ScopeCode​.ATTRIBUTE` level with a “Administrative area A — New bridge — Overhead clearance” description.
      Conditions
      This method returns a modifiable collection only if no other property is set. Otherwise, this method returns an unmodifiable empty collection.
      Upcoming API change: The type of this property may be changed to `Set<CharSequence>` for ISO 19115:2014 conformance. See GEO-238 for more information.
      Specified by:
        `getAttributeInstances` in interface `ScopeDescription`
      Returns:
        attribute instances to which the information applies.

    - #### setAttributeInstances

          public void setAttributeInstances​(Set<? extends AttributeType> newValues)

      Sets the attribute instances to which the information applies.
      Effect on other properties
      If and only if the `newValue` is non-empty, then this method automatically discards all other properties.
      Upcoming API change: The type of this property may be changed to `Set<CharSequence>` for ISO 19115:2014 conformance. See GEO-238 for more information.
      Parameters:
        `newValues` - the new attribute instances.

    - #### getOther

          public String getOther()

      Returns the class of information that does not fall into the other categories to which the information applies.
      Upcoming API change: The type of this property may be changed to `InternationalString` for ISO 19115:2014 conformance. See GEO-221 for more information.
      Specified by:
        `getOther` in interface `ScopeDescription`
      Returns:
        class of information that does not fall into the other categories, or `null`.

    - #### setOther

          public void setOther​(String newValue)

      Sets the class of information that does not fall into the other categories to which the information applies.
      Effect on other properties
      If and only if the `newValue` is non-null, then this method automatically discards all other properties.
      Upcoming API change: The type of this property may be changed to `InternationalString` for ISO 19115:2014 conformance. See GEO-221 for more information.
      Parameters:
        `newValue` - Other class of information.

    - #### setLevelDescription

          public void setLevelDescription​(ScopeCode level,
                                          Set<? extends CharSequence> newValues)

      Dispatches the given values to a setter method determined by the given hierarchical level. The mapping between scope codes and `ScopeDescription` properties is documented in the `getLevel()` method. If the given scope code is not one of the listed codes, then the "other" property is used.
      Parameters:
        `level` - an identification of the property which is set, or `null` if unknown.
        `newValues` - the values to set, or `null` if none.
      Since:
        1.0
      See Also:
        `getLevel()`