# Class DefaultRequirement

Object
AbstractMetadata
ModifiableMetadata
ISOMetadata
DefaultRequirement

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

public class DefaultRequirement extends ISOMetadata implements Requirement
Requirement to be satisfied by the planned data acquisition. The following properties are mandatory or conditional (i.e. mandatory under some circumstances) in a well-formed metadata according ISO 19115:
`MI_Requirement` `├─identifier………………………………………………………` Unique name, or code, for the requirement. `│ └─code……………………………………………………………` Alphanumeric value identifying an instance in the namespace. `├─requestor…………………………………………………………` Origin of requirement. `│ ├─party…………………………………………………………` Information about the parties. `│ │ └─name…………………………………………………` Name of the party. `│ └─role……………………………………………………………` Function performed by the responsible party. `├─recipient…………………………………………………………` Person(s), or body(ies), to receive results of requirement. `├─priority……………………………………………………………` Relative ordered importance, or urgency, of the requirement. `├─requestedDate………………………………………………` Required or preferred acquisition date and time. `│ ├─requestedDateOfCollection……` Preferred date and time of collection. `│ └─latestAcceptableDate…………………` Latest date and time collection must be completed. `└─expiryDate………………………………………………………` Date and time after which collection is no longer valid.

## 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
  `DefaultRequirement()`
  Constructs an initially empty requirement.
  `DefaultRequirement(Requirement object)`
  Constructs a new instance initialized with the values from the specified metadata object.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static DefaultRequirement`
  `castOrCopy(Requirement object)`
  Returns a SIS metadata implementation with the values of the given arbitrary implementation.
  `Citation`
  `getCitation()`
  Returns the identification of reference or guidance material for the requirement.
  `Date`
  `getExpiryDate()`
  Returns the date and time after which collection is no longer valid.
  `Identifier`
  `getIdentifier()`
  Returns the unique name, or code, for the requirement.
  `Priority`
  `getPriority()`
  Returns the relative ordered importance, or urgency, of the requirement.
  `Collection<ResponsibleParty>`
  `getRecipients()`
  Returns the person(s), or body(ies), to receive results of requirement.
  `RequestedDate`
  `getRequestedDate()`
  Returns the required or preferred acquisition date and time.
  `Collection<ResponsibleParty>`
  `getRequestors()`
  Returns the origin of requirement.
  `Collection<Plan>`
  `getSatisfiedPlans()`
  Returns the plan that identifies solution to satisfy the requirement.
  `void`
  `setCitation(Citation newValue)`
  Sets the identification of reference or guidance material for the requirement.
  `void`
  `setExpiryDate(Temporal newValue)`
  Sets the date and time after which collection is no longer valid.
  `void`
  `setExpiryDate(Date newValue)`
  Deprecated.
  Replaced by `setExpiryDate(Temporal)`.
  `void`
  `setIdentifier(Identifier newValue)`
  Sets the unique name, or code, for the requirement.
  `void`
  `setPriority(Priority newValue)`
  Sets the relative ordered importance, or urgency, of the requirement.
  `void`
  `setRecipients(Collection<? extends ResponsibleParty> newValues)`
  Sets the Person(s), or body(ies), to receive results of requirement.
  `void`
  `setRequestedDate(RequestedDate newValue)`
  Sets the required or preferred acquisition date and time.
  `void`
  `setRequestors(Collection<? extends ResponsibleParty> newValues)`
  Sets the origin of requirement.
  `void`
  `setSatisfiedPlans(Collection<? extends Plan> newValues)`
  Sets the plan that identifies solution to satisfy the requirement.

  ### Methods inherited from class ISOMetadata

  `getIdentifierMap, getIdentifiers, getStandard`

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

  - ### DefaultRequirement

    public DefaultRequirement()
    Constructs an initially empty requirement.

  - ### DefaultRequirement

    public DefaultRequirement(Requirement 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(Requirement)`

- ## Method Details

  - ### castOrCopy

    public static DefaultRequirement castOrCopy(Requirement 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 `DefaultRequirement`, then it is returned unchanged.
    - Otherwise a new `DefaultRequirement` 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.

  - ### getCitation

    public Citation getCitation()
    Returns the identification of reference or guidance material for the requirement. `null` if unspecified.
    Specified by:
      `getCitation` in interface `Requirement`
    Returns:
      identification of reference or guidance material, or `null`.

  - ### setCitation

    public void setCitation(Citation newValue)
    Sets the identification of reference or guidance material for the requirement.
    Parameters:
      `newValue` - the new citation value.

  - ### getIdentifier

    public Identifier getIdentifier()
    Returns the unique name, or code, for the requirement.
    Specified by:
      `getIdentifier` in interface `Requirement`
    Overrides:
      `getIdentifier` in class `ISOMetadata`
    Returns:
      unique name or code, or `null`.

  - ### setIdentifier

    public void setIdentifier(Identifier newValue)
    Sets the unique name, or code, for the requirement.
    Overrides:
      `setIdentifier` in class `ISOMetadata`
    Parameters:
      `newValue` - the new identifier value.

  - ### getRequestors

    public Collection<ResponsibleParty> getRequestors()
    Returns the origin of requirement.
    Upcoming API change — generalization
    As of ISO 19115:2014, `ResponsibleParty` is replaced by the `Responsibility` parent interface. This change will be tentatively applied in GeoAPI 4.0.
    Specified by:
      `getRequestors` in interface `Requirement`
    Returns:
      origin of requirement.

  - ### setRequestors

    public void setRequestors(Collection<? extends ResponsibleParty> newValues)
    Sets the origin of requirement.
    Upcoming API change — generalization
    As of ISO 19115:2014, `ResponsibleParty` is replaced by the `Responsibility` parent interface. This change will be tentatively applied in GeoAPI 4.0.
    Parameters:
      `newValues` - the new requestors values.

  - ### getRecipients

    public Collection<ResponsibleParty> getRecipients()
    Returns the person(s), or body(ies), to receive results of requirement.
    Upcoming API change — generalization
    As of ISO 19115:2014, `ResponsibleParty` is replaced by the `Responsibility` parent interface. This change will be tentatively applied in GeoAPI 4.0.
    Specified by:
      `getRecipients` in interface `Requirement`
    Returns:
      person(s), or body(ies), to receive results.

  - ### setRecipients

    public void setRecipients(Collection<? extends ResponsibleParty> newValues)
    Sets the Person(s), or body(ies), to receive results of requirement.
    Upcoming API change — generalization
    As of ISO 19115:2014, `ResponsibleParty` is replaced by the `Responsibility` parent interface. This change will be tentatively applied in GeoAPI 4.0.
    Parameters:
      `newValues` - the new recipients values.

  - ### getPriority

    public Priority getPriority()
    Returns the relative ordered importance, or urgency, of the requirement.
    Specified by:
      `getPriority` in interface `Requirement`
    Returns:
      relative ordered importance, or urgency, or `null`.

  - ### setPriority

    public void setPriority(Priority newValue)
    Sets the relative ordered importance, or urgency, of the requirement.
    Parameters:
      `newValue` - the new priority value.

  - ### getRequestedDate

    public RequestedDate getRequestedDate()
    Returns the required or preferred acquisition date and time.
    Specified by:
      `getRequestedDate` in interface `Requirement`
    Returns:
      required or preferred acquisition date and time, or `null`.

  - ### setRequestedDate

    public void setRequestedDate(RequestedDate newValue)
    Sets the required or preferred acquisition date and time.
    Parameters:
      `newValue` - the new requested date value.

  - ### getExpiryDate

    public Date getExpiryDate()
    Returns the date and time after which collection is no longer valid.
    Upcoming API change
    `Date` may be replaced by `Temporal` in GeoAPI 4.0.
    Specified by:
      `getExpiryDate` in interface `Requirement`
    Returns:
      date and time after which collection is no longer valid, or `null`.

  - ### setExpiryDate

    public void setExpiryDate(Temporal newValue)
    Sets the date and time after which collection is no longer valid. The specified value should be an instance of `LocalDate`, `LocalDateTime`, `OffsetDateTime` or `ZonedDateTime`, depending whether hours are defined and how the timezone (if any) is defined. But other types are also allowed.
    Parameters:
      `newValue` - the new expiry date.
    Since:
      1.5

  - ### setExpiryDate

    @Deprecated(since="1.5") public void setExpiryDate(Date newValue)
    Deprecated.
    Replaced by `setExpiryDate(Temporal)`.
    Sets the date and time after which collection is no longer valid.
    Parameters:
      `newValue` - the new expiry date.

  - ### getSatisfiedPlans

    public Collection<Plan> getSatisfiedPlans()
    Returns the plan that identifies solution to satisfy the requirement.
    Specified by:
      `getSatisfiedPlans` in interface `Requirement`
    Returns:
      plan that identifies solution to satisfy the requirement.

  - ### setSatisfiedPlans

    public void setSatisfiedPlans(Collection<? extends Plan> newValues)
    Sets the plan that identifies solution to satisfy the requirement.
    Parameters:
      `newValues` - the new satisfied plans values.