# Class DefaultCitation

Object
AbstractMetadata
ModifiableMetadata
ISOMetadata
DefaultCitation

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

@TitleProperty(name="title") public class DefaultCitation extends ISOMetadata implements Citation
Standardized resource reference. The following properties are mandatory in a well-formed metadata according ISO 19115:
`CI_Citation` `├─title………………………` Name by which the cited resource is known. `└─date…………………………` Reference date for the cited resource.

## Unified identifiers view

The ISO 19115 model provides specific attributes for the ISBN and ISSN codes. However, the SIS library handles those codes like any other identifiers. Consequently, the ISBN and ISSN codes are included in the collection returned by `getIdentifiers()`, except at XML marshalling time (for ISO 19115-3 compliance).

## 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
  `DefaultCitation()`
  Constructs an initially empty citation.
  `DefaultCitation(CharSequence title)`
  Constructs a citation with the specified title.
  `DefaultCitation(Citation object)`
  Constructs a new instance initialized with the values from the specified metadata object.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static DefaultCitation`
  `castOrCopy(Citation object)`
  Returns a SIS metadata implementation with the values of the given arbitrary implementation.
  `Collection<InternationalString>`
  `getAlternateTitles()`
  Returns short name or other language name by which the cited information is known.
  `Collection<ResponsibleParty>`
  `getCitedResponsibleParties()`
  Returns the role, name, contact and position information for an individual or organization that is responsible for the resource.
  `InternationalString`
  `getCollectiveTitle()`
  Deprecated.
  Removed as of ISO 19115:2014.
  `Collection<CitationDate>`
  `getDates()`
  Returns the reference date for the cited resource.
  `InternationalString`
  `getEdition()`
  Returns the version of the cited resource.
  `Date`
  `getEditionDate()`
  Returns the date of the edition.
  `Collection<BrowseGraphic>`
  `getGraphics()`
  Returns citation graphics or logo for cited party.
  `Collection<Identifier>`
  `getIdentifiers()`
  Returns the unique identifier for the resource.
  `String`
  `getISBN()`
  Returns the International Standard Book Number.
  `String`
  `getISSN()`
  Returns the International Standard Serial Number.
  `Collection<OnlineResource>`
  `getOnlineResources()`
  Returns online references to the cited resource.
  `InternationalString`
  `getOtherCitationDetails()`
  Returns other information required to complete the citation that is not recorded elsewhere.
  `Collection<PresentationForm>`
  `getPresentationForms()`
  Returns the mode in which the resource is represented.
  `Series`
  `getSeries()`
  Returns the information about the series, or aggregate dataset, of which the dataset is a part.
  `InternationalString`
  `getTitle()`
  Returns the name by which the cited resource is known.
  `void`
  `setAlternateTitles(Collection<? extends InternationalString> newValues)`
  Sets the short name or other language name by which the cited information is known.
  `void`
  `setCitedResponsibleParties(Collection<? extends ResponsibleParty> newValues)`
  Sets the role, name, contact and position information for an individual or organization that is responsible for the resource.
  `void`
  `setCollectiveTitle(InternationalString newValue)`
  Deprecated.
  Removed as of ISO 19115:2014.
  `void`
  `setDates(Collection<? extends CitationDate> newValues)`
  Sets the reference date for the cited resource.
  `void`
  `setEdition(InternationalString newValue)`
  Sets the version of the cited resource.
  `void`
  `setEditionDate(Temporal newValue)`
  Sets the date of the edition.
  `void`
  `setEditionDate(Date newValue)`
  Deprecated.
  Replaced by `setEditionDate(Temporal)`.
  `void`
  `setGraphics(Collection<? extends BrowseGraphic> newValues)`
  Sets citation graphics or logo for cited party.
  `void`
  `setIdentifiers(Collection<? extends Identifier> newValues)`
  Sets the unique identifier for the resource.
  `void`
  `setISBN(String newValue)`
  Sets the International Standard Book Number.
  `void`
  `setISSN(String newValue)`
  Sets the International Standard Serial Number.
  `void`
  `setOnlineResources(Collection<? extends OnlineResource> newValues)`
  Sets online references to the cited resource.
  `void`
  `setOtherCitationDetails(InternationalString newValue)`
  Sets other information required to complete the citation that is not recorded elsewhere.
  `void`
  `setPresentationForms(Collection<? extends PresentationForm> newValues)`
  Sets the mode in which the resource is represented.
  `void`
  `setSeries(Series newValue)`
  Sets the information about the series, or aggregate dataset, of which the dataset is a part.
  `void`
  `setTitle(InternationalString newValue)`
  Sets the name by which the cited resource is known.

  ### Methods inherited from class ISOMetadata

  `getIdentifier, getIdentifierMap, 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

  - ### DefaultCitation

    public DefaultCitation()
    Constructs an initially empty citation.

  - ### DefaultCitation

    public DefaultCitation(CharSequence title)
    Constructs a citation with the specified title.
    Parameters:
      `title` - the title as a `String` or an `InternationalString` object, or `null` if none.

  - ### DefaultCitation

    public DefaultCitation(Citation 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(Citation)`

- ## Method Details

  - ### castOrCopy

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

  - ### getTitle

    public InternationalString getTitle()
    Returns the name by which the cited resource is known.
    Specified by:
      `getTitle` in interface `Citation`
    Returns:
      the cited resource name, or `null`.

  - ### setTitle

    public void setTitle(InternationalString newValue)
    Sets the name by which the cited resource is known.
    Parameters:
      `newValue` - the new title, or `null` if none.

  - ### getAlternateTitles

    public Collection<InternationalString> getAlternateTitles()
    Returns short name or other language name by which the cited information is known.

    #### Example

    "DCW" as an alternative title for "Digital Chart of the World".
    Specified by:
      `getAlternateTitles` in interface `Citation`
    Returns:
      other names for the resource, or an empty collection if none.

  - ### setAlternateTitles

    public void setAlternateTitles(Collection<? extends InternationalString> newValues)
    Sets the short name or other language name by which the cited information is known.
    Parameters:
      `newValues` - the new alternate titles, or `null` if none.

  - ### getDates

    public Collection<CitationDate> getDates()
    Returns the reference date for the cited resource.
    Specified by:
      `getDates` in interface `Citation`
    Returns:
      the reference date.

  - ### setDates

    public void setDates(Collection<? extends CitationDate> newValues)
    Sets the reference date for the cited resource.
    Parameters:
      `newValues` - the new dates, or `null` if none.

  - ### getEdition

    public InternationalString getEdition()
    Returns the version of the cited resource.
    Specified by:
      `getEdition` in interface `Citation`
    Returns:
      the version, or `null` if none.

  - ### setEdition

    public void setEdition(InternationalString newValue)
    Sets the version of the cited resource.
    Parameters:
      `newValue` - the new edition, or `null` if none.

  - ### getEditionDate

    public Date getEditionDate()
    Returns the date of the edition.
    Upcoming API change
    `Date` may be replaced by `Temporal` in GeoAPI 4.0.
    Specified by:
      `getEditionDate` in interface `Citation`
    Returns:
      the edition date, or `null` if none.

  - ### setEditionDate

    public void setEditionDate(Temporal newValue)
    Sets the date of the edition. 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. For example, a citation date may be merely a `Year`.
    Parameters:
      `newValue` - the new edition date, or `null` if none.
    Since:
      1.5

  - ### setEditionDate

    @Deprecated(since="1.5") public void setEditionDate(Date newValue)
    Deprecated.
    Replaced by `setEditionDate(Temporal)`.
    Sets the date of the edition.
    Parameters:
      `newValue` - the new edition date, or `null` if none.

  - ### getIdentifiers

    public Collection<Identifier> getIdentifiers()
    Returns the unique identifier for the resource.

    #### Examples

    - Universal Product Code (UPC)
    - National Stock Number (NSN)

    #### Unified identifiers view

    In this SIS implementation, the collection returned by this method includes the XML identifiers (ID, UUID, etc.), as well as the ISBN and ISSN codes, thus providing a unified view of every kind of identifiers associated to this citation.

    #### XML marshalling note

    The `<cit:identifier>` element marshalled to XML will exclude all the above cited identifiers, for ISO 19115-3 compliance. Those identifiers will appear in other XML elements or attributes.
    Specified by:
      `getIdentifiers` in interface `Citation`
    Specified by:
      `getIdentifiers` in interface `IdentifiedObject`
    Overrides:
      `getIdentifiers` in class `ISOMetadata`
    Returns:
      the identifiers, or an empty collection if none.
    See Also:
      - `getISBN()`
      - `getISSN()`
      - `ISOMetadata​.getIdentifierMap()`

  - ### setIdentifiers

    public void setIdentifiers(Collection<? extends Identifier> newValues)
    Sets the unique identifier for the resource. Example: Universal Product Code (UPC), National Stock Number (NSN).

    XML identifiers (ID, UUID, etc.), ISBN and ISSN codes are not affected by this method, unless they are explicitly provided in the given collection.

    Parameters:
      `newValues` - the new identifiers, or `null` if none.
    See Also:
      - `setISBN(String)`
      - `setISSN(String)`

  - ### getCitedResponsibleParties

    public Collection<ResponsibleParty> getCitedResponsibleParties()
    Returns the role, name, contact and position information for an individual or organization that is responsible for the resource.
    Upcoming API change — generalization
    As of ISO 19115:2014, `ResponsibleParty` is replaced by the `Responsibility` parent interface. This change may be applied in GeoAPI 4.0.
    Specified by:
      `getCitedResponsibleParties` in interface `Citation`
    Returns:
      the individual or organization that is responsible, or an empty collection if none.

  - ### setCitedResponsibleParties

    public void setCitedResponsibleParties(Collection<? extends ResponsibleParty> newValues)
    Sets the role, name, contact and position information for an individual or organization that is responsible for the resource.
    Upcoming API change — generalization
    As of ISO 19115:2014, `ResponsibleParty` is replaced by the `Responsibility` parent interface. This change may be applied in GeoAPI 4.0.
    Parameters:
      `newValues` - the new cited responsible parties, or `null` if none.

  - ### getPresentationForms

    public Collection<PresentationForm> getPresentationForms()
    Returns the mode in which the resource is represented.
    Specified by:
      `getPresentationForms` in interface `Citation`
    Returns:
      the presentation modes, or an empty collection if none.

  - ### setPresentationForms

    public void setPresentationForms(Collection<? extends PresentationForm> newValues)
    Sets the mode in which the resource is represented.
    Parameters:
      `newValues` - the new presentation form, or `null` if none.

  - ### getSeries

    public Series getSeries()
    Returns the information about the series, or aggregate dataset, of which the dataset is a part.
    Specified by:
      `getSeries` in interface `Citation`
    Returns:
      the series of which the dataset is a part, or `null` if none.

  - ### setSeries

    public void setSeries(Series newValue)
    Sets the information about the series, or aggregate dataset, of which the dataset is a part.
    Parameters:
      `newValue` - the new series.

  - ### getOtherCitationDetails

    public InternationalString getOtherCitationDetails()
    Returns other information required to complete the citation that is not recorded elsewhere.
    Upcoming API change — multiplicity
    As of ISO 19115:2014, this singleton has been replaced by a collection. This change may be applied in GeoAPI 4.0.
    Specified by:
      `getOtherCitationDetails` in interface `Citation`
    Returns:
      other details, or `null` if none.

  - ### setOtherCitationDetails

    public void setOtherCitationDetails(InternationalString newValue)
    Sets other information required to complete the citation that is not recorded elsewhere.
    Upcoming API change — multiplicity
    As of ISO 19115:2014, this singleton has been replaced by a collection. This change may be applied in GeoAPI 4.0.
    Parameters:
      `newValue` - Other citations details, or `null` if none.

  - ### getCollectiveTitle

    @Deprecated(since="1.0") public InternationalString getCollectiveTitle()
    Deprecated.
    Removed as of ISO 19115:2014.
    Returns the common title with holdings note.
    Specified by:
      `getCollectiveTitle` in interface `Citation`
    Returns:
      the common title, or `null` if none.

  - ### setCollectiveTitle

    @Deprecated(since="1.0") public void setCollectiveTitle(InternationalString newValue)
    Deprecated.
    Removed as of ISO 19115:2014.
    Sets the common title with holdings note. This title identifies elements of a series collectively, combined with information about what volumes are available at the source cited.
    Parameters:
      `newValue` - the new collective title, or `null` if none.

  - ### getISBN

    public String getISBN()
    Returns the International Standard Book Number. In this SIS implementation, invoking this method is equivalent to:

        return getIdentifierMap().getSpecialized(Citations.ISBN);

    Specified by:
      `getISBN` in interface `Citation`
    Returns:
      the ISBN, or `null` if none.
    See Also:
      - `getIdentifiers()`
      - `Citations​.ISBN`

  - ### setISBN

    public void setISBN(String newValue)
    Sets the International Standard Book Number. In this SIS implementation, invoking this method is equivalent to:

        getIdentifierMap().putSpecialized(Citations.ISBN, newValue);

    Parameters:
      `newValue` - the new ISBN, or `null` if none.
    See Also:
      - `setIdentifiers(Collection)`
      - `Citations​.ISBN`

  - ### getISSN

    public String getISSN()
    Returns the International Standard Serial Number. In this SIS implementation, invoking this method is equivalent to:

        return getIdentifierMap().getSpecialized(Citations.ISSN);

    Specified by:
      `getISSN` in interface `Citation`
    Returns:
      the ISSN, or `null` if none.
    See Also:
      - `getIdentifiers()`
      - `Citations​.ISSN`

  - ### setISSN

    public void setISSN(String newValue)
    Sets the International Standard Serial Number. In this SIS implementation, invoking this method is equivalent to:

        getIdentifierMap().putSpecialized(Citations.ISSN, newValue);

    Parameters:
      `newValue` - the new ISSN.
    See Also:
      - `setIdentifiers(Collection)`
      - `Citations​.ISSN`

  - ### getOnlineResources

    @UML(identifier="onlineResource", obligation=OPTIONAL, specification=ISO_19115) public Collection<OnlineResource> getOnlineResources()
    Returns online references to the cited resource.
    Returns:
      online references to the cited resource, or an empty collection if there is none.
    Since:
      0.5

  - ### setOnlineResources

    public void setOnlineResources(Collection<? extends OnlineResource> newValues)
    Sets online references to the cited resource.
    Parameters:
      `newValues` - the new online references to the cited resource.
    Since:
      0.5

  - ### getGraphics

    @UML(identifier="graphic", obligation=OPTIONAL, specification=ISO_19115) public Collection<BrowseGraphic> getGraphics()
    Returns citation graphics or logo for cited party.
    Returns:
      graphics or logo for cited party, or an empty collection if there is none.
    Since:
      0.5

  - ### setGraphics

    public void setGraphics(Collection<? extends BrowseGraphic> newValues)
    Sets citation graphics or logo for cited party.
    Parameters:
      `newValues` - the new citation graphics or logo for cited party.
    Since:
      0.5