# Class DefaultLocalName

Object
AbstractName
DefaultLocalName

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

Direct Known Subclasses:
  `DefaultMemberName, DefaultTypeName`

public class DefaultLocalName extends AbstractName implements LocalName
Identifier within a name space for a local object. Local names are names which are directly accessible to and maintained by a name space. Names are local to one and only one name space. The name space within which they are local is indicated by the scope.

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

- `DefaultNameFactory​.createLocalName(NameSpace, CharSequence)`.
- `DefaultNameFactory​.createGenericName(NameSpace, CharSequence[])` with an array of length 1.
- `DefaultNameFactory​.parseGenericName(NameSpace, CharSequence)` with no 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 `CharSequence` 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`
  - `DefaultScopedName`
  - Serialized Form

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `DefaultLocalName(NameSpace scope, CharSequence name)`
  Constructs a local name from the given character sequence.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static DefaultLocalName`
  `castOrCopy(LocalName object)`
  Returns a SIS local name implementation with the values of the given arbitrary implementation.
  `int`
  `compareTo(GenericName name)`
  Compares this name with the specified object for order.
  `final int`
  `depth()`
  Returns the depth, which is always 1 for a local name.
  `boolean`
  `equals(Object object)`
  Compares this local name with the specified object for equality.
  `final List<DefaultLocalName>`
  `getParsedNames()`
  Returns the sequence of local name for this name.
  `final LocalName`
  `head()`
  Returns `this` since this object is already a local name.
  `NameSpace`
  `scope()`
  Returns the scope (name space) in which this name is local.
  `final LocalName`
  `tip()`
  Returns `this` since this object is already a local name.
  `InternationalString`
  `toInternationalString()`
  Returns a local-dependent string representation of this local name.
  `String`
  `toString()`
  Returns a locale-independent string representation of this local name.

  ### Methods inherited from class AbstractName

  `castOrCopy, hashCode, push, toFullyQualifiedName`

  ### Methods inherited from class Object

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

  ### Methods inherited from interface GenericName

  `push, toFullyQualifiedName`

- ## Constructor Details

  - ### DefaultLocalName

    protected DefaultLocalName(NameSpace scope, CharSequence name)
    Constructs a local name from the given character sequence. If the character sequence 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 a global scope.
      `name` - the local name. Shall not be `null` or empty.

- ## Method Details

  - ### castOrCopy

    public static DefaultLocalName castOrCopy(LocalName object)
    Returns a SIS local name 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 an instance of `MemberName` or `TypeName`, then this method delegates to `castOrCopy(…)` method of the corresponding subclass.
    - Otherwise if the given object is already an instance of `DefaultLocalName`, then it is returned unchanged.
    - Otherwise a new `DefaultLocalName` instance is created with the same values as the given name.
    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.

  - ### scope

    public NameSpace scope()
    Returns the scope (name space) in which this name is local. This method returns a non-null value in all cases, even when the scope given to the constructor was null.
    Specified by:
      `scope` in interface `GenericName`
    Specified by:
      `scope` in class `AbstractName`
    Returns:
      the scope of this name.

  - ### depth

    public final int depth()
    Returns the depth, which is always 1 for a local name.
    Specified by:
      `depth` in interface `GenericName`
    Specified by:
      `depth` in interface `LocalName`
    Overrides:
      `depth` in class `AbstractName`
    Returns:
      the depth of this name.

  - ### getParsedNames

    public final List<DefaultLocalName> getParsedNames()
    Returns the sequence of local name for this name. Since this object is itself a local name, this method always returns a singleton containing only `this`.
    Specified by:
      `getParsedNames` in interface `GenericName`
    Specified by:
      `getParsedNames` in interface `LocalName`
    Specified by:
      `getParsedNames` in class `AbstractName`
    Returns:
      the local names making this generic name, without the scope. Shall never be `null` neither empty.

  - ### head

    public final LocalName head()
    Returns `this` since this object is already a local name.
    Specified by:
      `head` in interface `GenericName`
    Specified by:
      `head` in interface `LocalName`
    Overrides:
      `head` in class `AbstractName`
    Returns:
      `this`.

  - ### tip

    public final LocalName tip()
    Returns `this` since this object is already a local name.
    Specified by:
      `tip` in interface `GenericName`
    Specified by:
      `tip` in interface `LocalName`
    Overrides:
      `tip` in class `AbstractName`
    Returns:
      `this`.

  - ### toString

    public String toString()
    Returns a locale-independent string representation of this local name. This string does not include the scope, which is consistent with the parsed names definition.
    Specified by:
      `toString` in interface `GenericName`
    Specified by:
      `toString` in interface `LocalName`
    Overrides:
      `toString` in class `AbstractName`
    Returns:
      a local-independent string representation of this name.

  - ### toInternationalString

    public InternationalString toInternationalString()
    Returns a local-dependent string representation of this local name.
    Specified by:
      `toInternationalString` in interface `GenericName`
    Overrides:
      `toInternationalString` in class `AbstractName`
    Returns:
      a localizable string representation of this name.

  - ### compareTo

    public int compareTo(GenericName name)
    Compares this name with the specified object for order. Returns a negative integer, zero, or a positive integer as this name lexicographically precedes, is equal to, or follows the specified object.
    Specified by:
      `compareTo` in interface `Comparable<GenericName>`
    Overrides:
      `compareTo` in class `AbstractName`
    Parameters:
      `name` - the other name to compare with this name.
    Returns:
      -1 if this name precedes the given one, +1 if it follows, 0 if equals.

  - ### equals

    public boolean equals(Object object)
    Compares this local name with the specified object for equality.
    Overrides:
      `equals` in class `AbstractName`
    Parameters:
      `object` - the object to compare with this name for equality.
    Returns:
      `true` if the given object is equal to this name.