# Class DefaultRecord

Object
DefaultRecord

All Implemented Interfaces:
  `Serializable`, `Record`

public class DefaultRecord extends Object implements Record, Serializable
A list of logically related elements as (name, value) pairs in a dictionary. By definition, all record fields have a [1 … 1] multiplicity (for a more flexible construct, see features). Since all fields are expected to be assigned a value, the initial values on `DefaultRecord` instantiation are unspecified. Some may be null, or some may be zero.

## Limitations

- Multi-threading: `DefaultRecord` instances are not thread-safe. Synchronization, if needed, shall be done externally by the caller.
- Serialization: this class is serializable if the associated `RecordType` and all values are also serializable. Note in particular that `DefaultRecordSchema` is currently not serializable, so users wanting serialization may need to define their own schema implementation.

Since:
  0.5
See Also:
  - `DefaultRecordType`
  - `DefaultRecordSchema`
  - Serialized Form

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `DefaultRecord(Record record)`
  Creates a new record initialized to a shallow copy of the given record.
  `DefaultRecord(RecordType type)`
  Creates a new record for the given record type.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static DefaultRecord`
  `castOrCopy(Record other)`
  Returns a SIS implementation with the name and fields of the given arbitrary implementation.
  `boolean`
  `equals(Object object)`
  Compares this record with the given object for equality.
  `Map<MemberName, Object>`
  `getAttributes()`
  Deprecated.
  Renamed `getFields()` for consistency with the 2015 revision of ISO 19103 standard.
  `Map<MemberName, Object>`
  `getFields()`
  Returns the dictionary of all (name, value) pairs in this record.
  `RecordType`
  `getRecordType()`
  Returns the type definition of this record.
  `int`
  `hashCode()`
  Returns a hash code value for this record.
  `Object`
  `locate(MemberName name)`
  Returns the value for an attribute of the specified name.
  `void`
  `set(MemberName name, Object value)`
  Sets the value for the attribute of the specified name.
  `void`
  `setAll(Object... newValues)`
  Sets all attribute values in this record, in attribute order.
  `String`
  `toString()`
  Returns a string representation of this record.

  ### Methods inherited from class Object

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

- ## Constructor Details

  - ### DefaultRecord

    public DefaultRecord(RecordType type)
    Creates a new record for the given record type. The initial values are unspecified - they may be null or zero. Callers can assign values by a call to `setAll(Object[])`.
    Parameters:
      `type` - the type definition of the new record.

  - ### DefaultRecord

    public DefaultRecord(Record record)
    Creates a new record initialized to a shallow copy of the given record. The fields contained in the given record are not recursively copied.
    Parameters:
      `record` - the record to copy (cannot be null).
    Since:
      0.8

- ## Method Details

  - ### castOrCopy

    public static DefaultRecord castOrCopy(Record other)
    Returns a SIS implementation with the name and fields 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 `DefaultRecord`, then it is returned unchanged.
    - Otherwise a new `DefaultRecord` instance is created using the copy constructor and returned. Note that this is a shallow copy operation, since the fields contained in the given object are not recursively copied.
    Parameters:
      `other` - The object to get as a SIS implementation, or `null` if none.
    Returns:
      A SIS implementation containing the fields of the given object (may be the given object itself), or `null` if the argument was `null`.
    Since:
      0.8

  - ### getRecordType

    public RecordType getRecordType()
    Returns the type definition of this record.
    Specified by:
      `getRecordType` in interface `Record`
    Returns:
      the type definition of this record.

  - ### getAttributes

    @Deprecated public Map<MemberName, Object> getAttributes()
    Deprecated.
    Renamed `getFields()` for consistency with the 2015 revision of ISO 19103 standard.
    Returns the dictionary of all (name, value) pairs in this record. This method returns a view which will delegate all `get` and `put` operations to the `locate(MemberName)` and `set(MemberName, Object)` methods respectively.
    Specified by:
      `getAttributes` in interface `Record`
    Returns:
      the dictionary of all (name, value) pairs in this record.
    See Also:
      - `RecordType​.getMemberTypes()`

  - ### getFields

    public Map<MemberName, Object> getFields()
    Returns the dictionary of all (name, value) pairs in this record. This method returns a view which will delegate all `get` and `put` operations to the `locate(MemberName)` and `set(MemberName, Object)` methods respectively.
    Returns:
      the dictionary of all (name, value) pairs in this record.
    Since:
      1.1

  - ### locate

    public Object locate(MemberName name)
    Returns the value for an attribute of the specified name.
    Specified by:
      `locate` in interface `Record`
    Parameters:
      `name` - the name of the attribute to lookup.
    Returns:
      the value of the attribute for the given name.
    See Also:
      - `RecordType​.locate(MemberName)`

  - ### set

    public void set(MemberName name, Object value)
    Sets the value for the attribute of the specified name.
    Specified by:
      `set` in interface `Record`
    Parameters:
      `name` - the name of the attribute to modify.
      `value` - the new value for the attribute.
    Throws:
      `IllegalArgumentException` - if the given name is not a field of this record.
      `ClassCastException` - if the given value is not an instance of the expected type for this record.

  - ### setAll

    public void setAll(Object... newValues)
    Sets all attribute values in this record, in attribute order.
    Parameters:
      `newValues` - the attribute values.
    Throws:
      `IllegalArgumentException` - if the given number of values does not match the expected number.
      `ClassCastException` - if a value is not an instance of the expected type for this record.

  - ### equals

    public boolean equals(Object object)
    Compares this record with the given object for equality.
    Overrides:
      `equals` in class `Object`
    Parameters:
      `object` - the object to compare with this record for equality.
    Returns:
      `true` if both objects are equal.

  - ### hashCode

    public int hashCode()
    Returns a hash code value for this record.
    Overrides:
      `hashCode` in class `Object`
    Returns:
      a hash code value for this record.

  - ### toString

    public String toString()
    Returns a string representation of this record. The string representation is for debugging purpose and may change in any future SIS version.
    Overrides:
      `toString` in class `Object`
    Returns:
      a string representation of this record.