Module org.apache.sis.metadata
Package org.apache.sis.util.iso

# Class DefaultScopedName

Object
AbstractName
DefaultScopedName

All Implemented Interfaces:
  `Serializable`, `Comparable<GenericName>`, `GenericName`, `ScopedName`

public class DefaultScopedName extends AbstractName implements ScopedName
A composite of a name space (as a local name) and a generic name valid in that name space. See the GeoAPI javadoc for more information.

`DefaultScopedName` can be instantiated by any of the following methods:

- `DefaultNameFactory​.createGenericName(NameSpace, CharSequence[])` with an array of length 2 or more.
- `DefaultNameFactory​.parseGenericName(NameSpace, CharSequence)` with at least one occurrence of the separator in the path.
- Similar static convenience methods in `Names`.

## Immutability and thread safety

This class is immutable and thus inherently thread-safe if the `NameSpace` and all `CharSequence` elements in the arguments given to the constructor are also immutable. Subclasses shall make sure that any overridden methods remain safe to call from multiple threads and do not change any public `LocalName` state.

Since:
  0.3
See Also:
  - `DefaultNameSpace`
  - `DefaultLocalName`
  - Serialized Form

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `DefaultScopedName(GenericName path, String separator, CharSequence tail)`
  Constructs a scoped name as the concatenation of the given generic name with a single character sequence.
  `protected`
  `DefaultScopedName(GenericName path, GenericName tail)`
  Constructs a scoped name as the concatenation of the given generic names.
  `protected`
  `DefaultScopedName(NameSpace scope, List<? extends CharSequence> names)`
  Constructs a scoped name from the specified list of strings.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `List<? extends LocalName>`
  `getParsedNames()`
  Returns the sequence of local name for this generic name.
  `GenericName`
  `path()`
  Returns every element in the sequence of parsed names except for the tip.
  `NameSpace`
  `scope()`
  Returns the scope (name space) in which this name is local.
  `GenericName`
  `tail()`
  Returns every elements in the sequence of parsed names except for the head.

  ### Methods inherited from class AbstractName

  `castOrCopy, compareTo, depth, equals, hashCode, head, push, tip, toFullyQualifiedName, toInternationalString, toString`

  ### Methods inherited from class Object

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

  ### Methods inherited from interface Comparable

  `compareTo`

  ### Methods inherited from interface GenericName

  `depth, push, toFullyQualifiedName, toInternationalString`

  ### Methods inherited from interface ScopedName

  `head, tip, toString`

- ## Constructor Details

  - ### DefaultScopedName

    protected DefaultScopedName(NameSpace scope, List<? extends CharSequence> names)
    Constructs a scoped name from the specified list of strings. If any of the given names is an instance of `InternationalString`, then its `toString(Locale​.ROOT)` method will be invoked for fetching an unlocalized name. Otherwise the `CharSequence​.toString()` method will be used.
    Parameters:
      `scope` - the scope of this name, or `null` for the global scope.
      `names` - the local names. This list must have at least two elements.

  - ### DefaultScopedName

    protected DefaultScopedName(GenericName path, GenericName tail)
    Constructs a scoped name as the concatenation of the given generic names. The scope of the new name will be the scope of the `path` argument.
    Parameters:
      `path` - the first part to concatenate.
      `tail` - the second part to concatenate.

  - ### DefaultScopedName

    protected DefaultScopedName(GenericName path, String separator, CharSequence tail)
    Constructs a scoped name as the concatenation of the given generic name with a single character sequence. The scope of the new name will be the scope of the `path` argument. The tail is a local name created from the given character sequence.
    Parameters:
      `path` - the first part to concatenate.
      `separator` - the separator between the head and the tail, or `null` for inheriting the same separator than the given path.
      `tail` - the second part to concatenate.
    Since:
      0.8
    See Also:
      - `Names​.createScopedName(GenericName, String, CharSequence)`

- ## Method Details

  - ### scope

    public NameSpace scope()
    Returns the scope (name space) in which this name is local. For example if a fully qualified name is `"org​.opengis​.util​.Record"` and if this instance is the `"util​.Record"` part, then its scope is named `"org​.opengis"`.

    Continuing with the above example, the full `"org​.opengis​.util​.Record"` name has no scope. If this method is invoked on such name, then the SIS implementation returns a global scope instance (i.e. an instance for which `DefaultNameSpace​.isGlobal()` returns `true`) which is unique and named `"global"`.

    Specified by:
      `scope` in interface `GenericName`
    Specified by:
      `scope` in class `AbstractName`
    Returns:
      the scope of this name.

  - ### tail

    public GenericName tail()
    Returns every elements in the sequence of parsed names except for the head.
    Specified by:
      `tail` in interface `ScopedName`
    Returns:
      all elements except the first one in the in the list of parsed names.

  - ### path

    public GenericName path()
    Returns every element in the sequence of parsed names except for the tip.
    Specified by:
      `path` in interface `ScopedName`
    Returns:
      all elements except the last one in the in the list of parsed names.

  - ### getParsedNames

    public List<? extends LocalName> getParsedNames()
    Returns the sequence of local name for this generic name.
    Specified by:
      `getParsedNames` in interface `GenericName`
    Specified by:
      `getParsedNames` in class `AbstractName`
    Returns:
      the local names making this generic name, without the scope. Shall never be `null` neither empty.