# Class DefaultSource

Object
AbstractMetadata
ModifiableMetadata
ISOMetadata
DefaultSource

All Implemented Interfaces:
  `Serializable`, `Emptiable`, `LenientComparable`, `IdentifiedObject`, `Source`

@TitleProperty(name="description") public class DefaultSource extends ISOMetadata implements Source
Information about the source data used in creating the data specified by the scope. The following properties are mandatory or conditional (i.e. mandatory under some circumstances) in a well-formed metadata according ISO 19115:
`LI_Source` `├─description……………………………………………` Detailed description of the level of the source data. `└─scope……………………………………………………………` Type and / or extent of the source. `├─level…………………………………………………` Hierarchical level of the data specified by the scope. `└─levelDescription……………………` Detailed description about the level of the data specified by the scope. `├─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.
According ISO 19115, at least one of description and source extents shall be provided.

## 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

- ## 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
  `DefaultSource()`
  Creates an initially empty source.
  `DefaultSource(CharSequence description)`
  Creates a source initialized with the given description.
  `DefaultSource(Source object)`
  Constructs a new instance initialized with the values from the specified metadata object.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static DefaultSource`
  `castOrCopy(Source object)`
  Returns a SIS metadata implementation with the values of the given arbitrary implementation.
  `InternationalString`
  `getDescription()`
  Returns a detailed description of the level of the source data.
  `Identifier`
  `getProcessedLevel()`
  Returns the processing level of the source data.
  `NominalResolution`
  `getResolution()`
  Returns the distance between consistent parts (centre, left side, right side) of two adjacent pixels.
  `RepresentativeFraction`
  `getScaleDenominator()`
  Deprecated.
  As of ISO 19115:2014, moved to `DefaultResolution​.getEquivalentScale()`.
  `Scope`
  `getScope()`
  Return the type and / or extent of the source.
  `Citation`
  `getSourceCitation()`
  Returns the recommended reference to be used for the source data.
  `Collection<Extent>`
  `getSourceExtents()`
  Deprecated.
  As of ISO 19115:2014, moved to `DefaultScope​.getExtents()`.
  `Collection<Citation>`
  `getSourceMetadata()`
  Returns the references to metadata for the source.
  `ReferenceSystem`
  `getSourceReferenceSystem()`
  Returns the spatial reference system used by the source data.
  `Resolution`
  `getSourceSpatialResolution()`
  Returns the spatial resolution expressed as a scale factor, an angle or a level of detail.
  `Collection<ProcessStep>`
  `getSourceSteps()`
  Returns information about process steps in which this source was used.
  `void`
  `setDescription(InternationalString newValue)`
  Sets a detailed description of the level of the source data.
  `void`
  `setProcessedLevel(Identifier newValue)`
  Sets the processing level of the source data.
  `void`
  `setResolution(NominalResolution newValue)`
  Sets the distance between consistent parts (centre, left side, right side) of two adjacent pixels.
  `void`
  `setScaleDenominator(RepresentativeFraction newValue)`
  Deprecated.
  As of ISO 19115:2014, moved to `DefaultResolution​.setEquivalentScale(RepresentativeFraction)`.
  `void`
  `setScope(Scope newValue)`
  Sets the type and / or extent of the source.
  `void`
  `setSourceCitation(Citation newValue)`
  Sets the recommended reference to be used for the source data.
  `void`
  `setSourceExtents(Collection<? extends Extent> newValues)`
  Deprecated.
  As of ISO 19115:2014, moved to `DefaultScope​.setExtents(Collection)`.
  `void`
  `setSourceMetadata(Collection<? extends Citation> newValues)`
  Sets the references to metadata for the source.
  `void`
  `setSourceReferenceSystem(ReferenceSystem newValue)`
  Sets the spatial reference system used by the source data.
  `void`
  `setSourceSpatialResolution(Resolution newValue)`
  Sets the spatial resolution expressed as a scale factor, an angle or a level of detail.
  `void`
  `setSourceSteps(Collection<? extends ProcessStep> newValues)`
  Sets information about process steps in which this source was used.

  ### Methods inherited from class ISOMetadata

  `getIdentifier, getIdentifierMap, getIdentifiers, getStandard, setIdentifier`

  ### Methods inherited from class ModifiableMetadata

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

  ### Methods inherited from class AbstractMetadata

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

  ### Methods inherited from class Object

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

- ## Constructor Details

  - ### DefaultSource

    public DefaultSource()
    Creates an initially empty source.

  - ### DefaultSource

    public DefaultSource(CharSequence description)
    Creates a source initialized with the given description.
    Parameters:
      `description` - a detailed description of the level of the source data, or `null`.

  - ### DefaultSource

    public DefaultSource(Source object)
    Constructs a new instance initialized with the values from the specified metadata object. This is a shallow copy constructor, because the other metadata contained in the given object are not recursively copied.
    Parameters:
      `object` - the metadata to copy values from, or `null` if none.
    See Also:
      - `castOrCopy(Source)`

- ## Method Details

  - ### castOrCopy

    public static DefaultSource castOrCopy(Source 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 `DefaultSource`, then it is returned unchanged.
    - Otherwise a new `DefaultSource` instance is created using the copy constructor and returned. Note that this is a shallow copy operation, because 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.

  - ### getDescription

    public InternationalString getDescription()
    Returns a detailed description of the level of the source data.
    Specified by:
      `getDescription` in interface `Source`
    Returns:
      description of the level of the source data, or `null`.

  - ### setDescription

    public void setDescription(InternationalString newValue)
    Sets a detailed description of the level of the source data.
    Parameters:
      `newValue` - the new description.

  - ### getSourceSpatialResolution

    @UML(identifier="sourceSpatialResolution", obligation=OPTIONAL, specification=ISO_19115) public Resolution getSourceSpatialResolution()
    Returns the spatial resolution expressed as a scale factor, an angle or a level of detail.
    Returns:
      spatial resolution expressed as a scale factor, an angle or a level of detail, or `null` if none.
    Since:
      0.5

  - ### setSourceSpatialResolution

    public void setSourceSpatialResolution(Resolution newValue)
    Sets the spatial resolution expressed as a scale factor, an angle or a level of detail.
    Parameters:
      `newValue` - the new spatial resolution.
    Since:
      0.5

  - ### getScaleDenominator

    @Deprecated(since="1.0") public RepresentativeFraction getScaleDenominator()
    Deprecated.
    As of ISO 19115:2014, moved to `DefaultResolution​.getEquivalentScale()`.
    Returns the denominator of the representative fraction on a source map. This method fetches the value from the source spatial resolution.
    Specified by:
      `getScaleDenominator` in interface `Source`
    Returns:
      representative fraction on a source map, or `null`.

  - ### setScaleDenominator

    @Deprecated(since="1.0") public void setScaleDenominator(RepresentativeFraction newValue)
    Deprecated.
    As of ISO 19115:2014, moved to `DefaultResolution​.setEquivalentScale(RepresentativeFraction)`.
    Sets the denominator of the representative fraction on a source map. This method stores the value in the source spatial resolution.
    Parameters:
      `newValue` - the new scale denominator.

  - ### getSourceReferenceSystem

    public ReferenceSystem getSourceReferenceSystem()
    Returns the spatial reference system used by the source data.
    Specified by:
      `getSourceReferenceSystem` in interface `Source`
    Returns:
      spatial reference system used by the source data, or `null`.

  - ### setSourceReferenceSystem

    public void setSourceReferenceSystem(ReferenceSystem newValue)
    Sets the spatial reference system used by the source data.
    Parameters:
      `newValue` - the new reference system.

  - ### getSourceCitation

    public Citation getSourceCitation()
    Returns the recommended reference to be used for the source data.
    Specified by:
      `getSourceCitation` in interface `Source`
    Returns:
      recommended reference to be used for the source data, or `null`.

  - ### setSourceCitation

    public void setSourceCitation(Citation newValue)
    Sets the recommended reference to be used for the source data.
    Parameters:
      `newValue` - the new source citation.

  - ### getSourceMetadata

    @UML(identifier="sourceMetadata", obligation=OPTIONAL, specification=ISO_19115) public Collection<Citation> getSourceMetadata()
    Returns the references to metadata for the source.
    Returns:
      references to metadata for the source.
    Since:
      0.5

  - ### setSourceMetadata

    public void setSourceMetadata(Collection<? extends Citation> newValues)
    Sets the references to metadata for the source.
    Parameters:
      `newValues` - the new references.
    Since:
      0.5

  - ### getScope

    @UML(identifier="scope", obligation=CONDITIONAL, specification=ISO_19115) public Scope getScope()
    Return the type and / or extent of the source. This information should be provided if the description is not provided.
    Returns:
      type and / or extent of the source, or `null` if none.
    Since:
      0.5

  - ### setScope

    public void setScope(Scope newValue)
    Sets the type and / or extent of the source.
    Parameters:
      `newValue` - the new type and / or extent of the source.
    Since:
      0.5

  - ### getSourceExtents

    @Deprecated(since="1.0") public Collection<Extent> getSourceExtents()
    Deprecated.
    As of ISO 19115:2014, moved to `DefaultScope​.getExtents()`.
    Returns the information about the spatial, vertical and temporal extent of the source data. This method fetches the values from the scope.
    Specified by:
      `getSourceExtents` in interface `Source`
    Returns:
      information about the extent of the source data.

  - ### setSourceExtents

    @Deprecated(since="1.0") public void setSourceExtents(Collection<? extends Extent> newValues)
    Deprecated.
    As of ISO 19115:2014, moved to `DefaultScope​.setExtents(Collection)`.
    Information about the spatial, vertical and temporal extent of the source data. This method stores the values in the scope.
    Parameters:
      `newValues` - the new source extents.

  - ### getSourceSteps

    public Collection<ProcessStep> getSourceSteps()
    Returns information about process steps in which this source was used.
    Specified by:
      `getSourceSteps` in interface `Source`
    Returns:
      information about process steps in which this source was used.

  - ### setSourceSteps

    public void setSourceSteps(Collection<? extends ProcessStep> newValues)
    Sets information about process steps in which this source was used.
    Parameters:
      `newValues` - the new process steps.

  - ### getProcessedLevel

    public Identifier getProcessedLevel()
    Returns the processing level of the source data. `null` if unspecified.
    Specified by:
      `getProcessedLevel` in interface `Source`
    Returns:
      processing level of the source data, or `null`.

  - ### setProcessedLevel

    public void setProcessedLevel(Identifier newValue)
    Sets the processing level of the source data.
    Parameters:
      `newValue` - the new processed level value.

  - ### getResolution

    public NominalResolution getResolution()
    Returns the distance between consistent parts (centre, left side, right side) of two adjacent pixels.
    Specified by:
      `getResolution` in interface `Source`
    Returns:
      distance between consistent parts of two adjacent pixels, or `null`.

  - ### setResolution

    public void setResolution(NominalResolution newValue)
    Sets the distance between consistent parts (centre, left side, right side) of two adjacent pixels.
    Parameters:
      `newValue` - the new nominal resolution value.