## org.opengis.util
Interface RecordType

    @UML(identifier="RecordType",
         specification=ISO_19103)
    public interface RecordType

The type definition of a record. A `RecordType` defines dynamically constructed data type. This interface has methods for data access, but no methods to dynamically add members. This approach ensures that once a `RecordType` is constructed, it is immutable.

A `RecordType` is identified by a `TypeName`. It contains an arbitrary amount of attribute types which are also identified by `TypeName`. A `RecordType` may therefore contain another `RecordType` as a member. This is a limited association because a named member may be defined to be a single instance of some externally defined `RecordType`. This does not permit aggregation of any kind.

This class can be think as the equivalent of the Java `Class` class.

Since:
  GeoAPI 2.1
See Also:
  `Record`, `RecordSchema`

Method Summary
`Map<MemberName,TypeName>` `getAttributeTypes()` Returns the dictionary of all (name, type) pairs in this record type.
`RecordSchema` `getContainer()` Returns the schema that contains this record type.
`Set<MemberName>` `getMembers()` Returns the set of attribute names defined in this `RecordType`'s dictionary.
`TypeName` `getTypeName()` Returns the name that identifies this record type.
`boolean` `isInstance(Record record)` Determines if the specified record is compatible with this record type.
`TypeName` `locate(MemberName name)` Looks up the provided attribute name and returns the associated type name.

Method Detail

### getTypeName

    @UML(identifier="typeName",
         obligation=MANDATORY,
         specification=ISO_19103)
    TypeName getTypeName()

  Returns the name that identifies this record type. If this `RecordType` is contained in a record schema, then the record type name should be a valid in the name space of the record schema:

  > `getContainer().getSchemaName().scope()`

  This method can be think as the equivalent of the Java `Class.getName()` method.

### getContainer

    @UML(identifier="container",
         obligation=OPTIONAL,
         specification=ISO_19103)
    RecordSchema getContainer()

  Returns the schema that contains this record type.

### getAttributeTypes

    @UML(identifier="attributeTypes",
         obligation=MANDATORY,
         specification=ISO_19103)
    Map<MemberName,TypeName> getAttributeTypes()

  Returns the dictionary of all (name, type) pairs in this record type. The dictionary shall be unmodifiable.

  See Also:
    `Record.getAttributes()`

### getMembers

    @Extension
    Set<MemberName> getMembers()

  Returns the set of attribute names defined in this `RecordType`'s dictionary. If there are no attributes, this method returns the empty set. This method is functionally equivalent to `getAttributeTypes().keySet()`.

  The name space associated with a `RecordType` contains only members of this `RecordType`. There is no potential for conflict with subpackages.

  This method can be think as the equivalent of the Java `Class.getFields()` method.

### locate

    @UML(identifier="locate",
         obligation=MANDATORY,
         specification=ISO_19103)
    TypeName locate(MemberName name)

  Looks up the provided attribute name and returns the associated type name. If the attribute name is not defined in this record type, then this method returns `null`. This method is functionnaly equivalent to `getAttributeTypes().get(name)`.

  This method can be think as the equivalent of the Java `Class.getField(String)` method.

  See Also:
    `Record.locate(org.opengis.util.MemberName)`
  TODO:
    Does it make sense given that `MemberName.getAttributeType()` already provides this information?

### isInstance

    @Extension
    boolean isInstance(Record record)

  Determines if the specified record is compatible with this record type. This method returns `true` if the specified `record` argument is non-null and the following condition holds:

  - `getMembers().containsAll(record.getAttributes().keySet())`
  - Any other implementation-specific conditions.

  This method can be think as the equivalent of the Java `Class.isInstance(Object)` method.

Copyright © 1994-2008 Open Geospatial Consortium. All Rights Reserved.