TypeDefinitionImpl (Media Authoring with Java API)
Date: 2016-02-05

tv.amwa.maj.meta.impl

## Class TypeDefinitionImpl

- java.lang.Object
- - tv.amwa.maj.meta.impl.MetaDefinitionImpl
  - - tv.amwa.maj.meta.impl.TypeDefinitionImpl

- All Implemented Interfaces:
    Serializable, Cloneable, CommonConstants, MetadataObject, WeakReferenceTarget, MetaDefinition, TypeDefinition, DefinitionType
  Direct Known Subclasses:
    SingletonTypeDefinitionImpl, TypeDefinitionSetImpl, TypeDefinitionVariableArrayImpl

      @MediaClass(uuid1=218169601,
                  uuid2=515,
                  uuid3=0,
                  uuid4={6,14,43,52,2,6,1,1},
                  definedName="TypeDefinition",
                  description="The TypeDefinition class defines a property type.",
                  symbol="TypeDefinition")
      public abstract class TypeDefinitionImpl
      extends MetaDefinitionImpl
      implements TypeDefinition, Serializable, Cloneable

  Implements the definition of a property type.

  See Also:
    `tv.amwa.maj.industry.TypeDefinitionWarehouse`, `TypeDefinitions.TypeDefinitionWeakReference`, `TypeDefinitions.TypeDefinitionStrongReference`, `TypeDefinitions.TypeDefinitionStrongReferenceSet`, `TypeDefinitions.TypeDefinitionWeakReferenceVector`, Serialized Form

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `TypeDefinitionImpl.PropertyValueImpl`

  - ### Field Summary

    - ### Fields inherited from interface tv.amwa.maj.constant.CommonConstants

      `AAF_METADICT_NAMESPACE, AAF_METADICT_PREFIX, AAF_XML_NAMESPACE, AAF_XML_PREFIX, ApplicationPluginObjectID, ApplicationPluginsID, MAX_NUM_RGBA_COMPS, MemberOfID, ObjectClassID, ParentClassID, PropertiesID, XMLClassIDAsAttributeName`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `TypeDefinitionImpl()`

  - ### Method Summary

    All Methods Static Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `TypeDefinition` | `clone()` Create a cloned copy of this meta definition.
    `PropertyValue` | `createFromBytes(ByteBuffer buffer)` Create a value of this type by reading the bytes in the given byte buffer.
    `abstract PropertyValue` | `createValue(Object javaValue)` Create a property value from the given Java object.
    `String` | `getNamespace()` Returns the namespace in which the subject of this meta definition is defined.
    `String` | `getPrefix()` Returns the namespace prefix to use when serializing a value of the subject of this meta definition to XML.
    `PropertyValue` | `getPropertyValue(MetadataObject metadataObject, PropertyDefinition property)` Get the specified property's value from the given object.
    `abstract TypeCategory` | `getTypeCategory()` Returns the type category to which this type definition belongs, which corresponds to its sub interface.
    `static void` | `initalizeTypeNameMap()`
    `long` | `lengthAsBytes(PropertyValue value)` Returns the number of bytes that the given value of this type is serialized as a sequence of bytes.
    `String` | `nameToAAFName(String name)`
    `boolean` | `resolveReferences(PropertyValue value, Map<AUID,MetadataObject> referenceMap)` Resolve any unresolved object references using the given reference map.
    `abstract void` | `setPropertyValue(MetadataObject metadataObject, PropertyDefinition property, PropertyValue value)` On the given metadata object, set the specified property to the given value.
    `List<PropertyValue>` | `writeAsBytes(PropertyValue value, ByteBuffer buffer)` Write the given property value of this type to the given byte stream.
    `List<PropertyValue>` | `writeAsStructuredStorageBytes(PropertyValue value, ByteBuffer buffer)` Write the given property value of this type to the given byte stream that is to be written to a structured storage format file.

    - ### Methods inherited from class tv.amwa.maj.meta.impl.MetaDefinitionImpl

      `aafNameToName, appendMetadictXML, appendXMLChildren, deepEquals, equals, getAAFNamesInUse, getAliases, getAUID, getComment, getDescription, getIdentification, getName, getSymbol, getWeakTargetReference, hashCode, initializeMetaDefinitionIdentification, initializeMetaDefinitionName, setAAFNamesInUse, setAliases, setDescription, setIdentification, setName, setNamespace, setPrefix, setSymbol, toString`

    - ### Methods inherited from class java.lang.Object

      `getClass, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface tv.amwa.maj.meta.MetaDefinition

      `appendMetadictXML, deepEquals, equals, getAAFNamesInUse, getAliases, getAUID, getDescription, getName, getSymbol, hashCode, setAAFNamesInUse, setDescription, setName, setNamespace, setPrefix, setSymbol, toString`

    - ### Methods inherited from interface tv.amwa.maj.industry.WeakReferenceTarget

      `getWeakTargetReference`

- - ### Constructor Detail

    - #### TypeDefinitionImpl

          public TypeDefinitionImpl()

  - ### Method Detail

    - #### initalizeTypeNameMap

          public static final void initalizeTypeNameMap()

    - #### getTypeCategory

          public abstract TypeCategory getTypeCategory()

      Description copied from interface: `TypeDefinition`

      Returns the type category to which this type definition belongs, which corresponds to its sub interface. For example, TypeCategory.Int is returned for a `TypeDefinitionInteger`.

      Specified by:
        `getTypeCategory` in interface `TypeDefinition`
      Returns:
        Type category to which the type definition belongs.
      See Also:
        `TypeCategory`

    - #### createValue

          public abstract PropertyValue createValue(Object javaValue)
                                             throws ClassCastException

      Create a property value from the given Java object. If the type of the object is not compatible with this type definition, a `ClassCastException` is thrown.

      Specified by:
        `createValue` in interface `TypeDefinition`
      Parameters:
        `javaValue` - Java object to use to create a property value of this type.
      Returns:
        Property value representing the given value.
      Throws:
        `ClassCastException` - The given object cannot be cast to a property value with this type definition.

    - #### setPropertyValue

          public abstract void setPropertyValue(MetadataObject metadataObject,
                                                PropertyDefinition property,
                                                PropertyValue value)
                                         throws IllegalArgumentException,
                                                IllegalAccessException,
                                                InvocationTargetException

      Description copied from interface: `TypeDefinition`

      On the given metadata object, set the specified property to the given value. The property must be of this type.

      Specified by:
        `setPropertyValue` in interface `TypeDefinition`
      Parameters:
        `metadataObject` - Object to set the value on.
        `property` - Property of the object to set.
        `value` - Value of this type to set the property value to.
      Throws:
        `IllegalArgumentException` - The given property value is not of this type.
        `IllegalAccessException` - Insufficient privileges to set properties on the given metadata object.
        `InvocationTargetException` - Problem encountered while calling the set method associated with the property for the given object.
      See Also:
        `TypeDefinition.getPropertyValue(MetadataObject, PropertyDefinition)`

    - #### getPropertyValue

          public PropertyValue getPropertyValue(MetadataObject metadataObject,
                                                PropertyDefinition property)
                                         throws IllegalArgumentException,
                                                IllegalAccessException,
                                                InvocationTargetException

      Description copied from interface: `TypeDefinition`

      Get the specified property's value from the given object. The property must be of this type.

      Specified by:
        `getPropertyValue` in interface `TypeDefinition`
      Parameters:
        `metadataObject` - Object to retrieve the property value from.
        `property` - Property of this type to extract the value for.
      Returns:
        Current value of the given property for the object.
      Throws:
        `IllegalArgumentException` - The given property value is not of this type.
        `IllegalAccessException` - Insufficient privileges to get properties on the given metadata object.
        `InvocationTargetException` - Problem encountered while calling the get method associated with the property for the given object.
      See Also:
        `TypeDefinition.setPropertyValue(MetadataObject, PropertyDefinition, PropertyValue)`

    - #### createFromBytes

          public PropertyValue createFromBytes(ByteBuffer buffer)
                                        throws NullPointerException,
                                               EndOfDataException

      Description copied from interface: `TypeDefinition`

      Create a value of this type by reading the bytes in the given byte buffer. The buffer is assumed to have exactly the number of bytes that represent the value. For example, the length of a string value will be determined by the length (remaining bytes) in the buffer and not by reading a length value from the buffer.

      This method is able to read values written by the `TypeDefinition.writeAsBytes(PropertyValue, ByteBuffer)` method.

      Specified by:
        `createFromBytes` in interface `TypeDefinition`
      Parameters:
        `buffer` - Buffer to create a value from.
      Returns:
        Value of this type created from the given byte array.
      Throws:
        `NullPointerException` - Cannot read values from a `null` buffer.
        `EndOfDataException` - Insufficient bytes remaining in the given buffer to create a value of this type.
      See Also:
        `TypeDefinition.writeAsBytes(PropertyValue, ByteBuffer)`, `TypeDefinition.lengthAsBytes(PropertyValue)`

    - #### writeAsBytes

          public List<PropertyValue> writeAsBytes(PropertyValue value,
                                                  ByteBuffer buffer)
                                           throws NullPointerException,
                                                  IllegalPropertyValueException,
                                                  InsufficientSpaceException

      Description copied from interface: `TypeDefinition`

      Write the given property value of this type to the given byte stream. This version is most appropriate for writing KLV streams (MXF files).

      The format used to serialize the value with be compatible with the `TypeDefinition.createFromBytes(ByteBuffer)` method. The number of bytes written to the byte buffer will be the same as returned by `TypeDefinition.lengthAsBytes(PropertyValue)`.

      Specified by:
        `writeAsBytes` in interface `TypeDefinition`
      Parameters:
        `value` - Value to write to the given buffer.
        `buffer` - Buffer to write the value to.
      Returns:
        List of any strongly referenced property values referenced from the new structure of bytes. Elements of this list will require separate serialization to the stream if the reference if to be resolved.
      Throws:
        `NullPointerException` - Cannot write from a `null` property value and/or to a `null` value.
        `IllegalPropertyValueException` - The given property value is not of this type.
        `InsufficientSpaceException` - Insufficient space to write the given value into the given buffer.
      See Also:
        `TypeDefinition.writeAsStructuredStorageBytes(PropertyValue, ByteBuffer)`, `TypeDefinition.createFromBytes(ByteBuffer)`, `TypeDefinition.lengthAsBytes(PropertyValue)`

    - #### writeAsStructuredStorageBytes

          public List<PropertyValue> writeAsStructuredStorageBytes(PropertyValue value,
                                                                   ByteBuffer buffer)
                                                            throws NullPointerException,
                                                                   IllegalPropertyValueException,
                                                                   InsufficientSpaceException

      Description copied from interface: `TypeDefinition`

      Write the given property value of this type to the given byte stream that is to be written to a structured storage format file.

      The number of bytes written to the byte buffer will be the same as returned by `TypeDefinition.lengthAsBytes(PropertyValue)`.

      Specified by:
        `writeAsStructuredStorageBytes` in interface `TypeDefinition`
      Parameters:
        `value` - Value to write to the given buffer.
        `buffer` - Buffer to write the value to.
      Returns:
        List of any strongly referenced property values referenced from the new structure of bytes. Elements of this list will require separate serialization to the stream if the reference if to be resolved.
      Throws:
        `NullPointerException` - Cannot write from a `null` property value and/or to a `null` value.
        `IllegalPropertyValueException` - The given property value is not of this type.
        `InsufficientSpaceException` - Insufficient space to write the given value into the given buffer.
      See Also:
        `TypeDefinition.writeAsBytes(PropertyValue, ByteBuffer)`, `TypeDefinition.lengthAsBytes(PropertyValue)`

    - #### lengthAsBytes

          public long lengthAsBytes(PropertyValue value)
                             throws NullPointerException,
                                    IllegalPropertyValueException

      Description copied from interface: `TypeDefinition`

      Returns the number of bytes that the given value of this type is serialized as a sequence of bytes.

      The number returned by this method is the same as the number of bytes written to a byte buffer by the `TypeDefinition.writeAsBytes(PropertyValue, ByteBuffer)` method.

      Specified by:
        `lengthAsBytes` in interface `TypeDefinition`
      Parameters:
        `value` - Value to find the length of when serialized to bytes.
      Returns:
        Number of bytes used to represent the given value when serialized.
      Throws:
        `NullPointerException` - Cannot compute the serialized length of a `null` value.
        `IllegalPropertyValueException` - The given property value is not of this type.
      See Also:
        `TypeDefinition.writeAsBytes(PropertyValue, ByteBuffer)`, `TypeDefinition.createFromBytes(ByteBuffer)`

    - #### resolveReferences

          public boolean resolveReferences(PropertyValue value,
                                           Map<AUID,MetadataObject> referenceMap)
                                    throws NullPointerException,
                                           IllegalPropertyValueException

      Description copied from interface: `TypeDefinition`

      Resolve any unresolved object references using the given reference map. Unresolved object references occur when a value has been read from a file but not linked to its strong or weak values. This method only effects types that are references or contain references in collections, which are:

      - `TypeDefinitionWeakObjectReference`;
      - `TypeDefinitionStrongObjectReference`;
      - `TypeDefinitionVariableArray` with elements of one of the object reference types;
      - `TypeDefinitionSet` with elements of one of the object reference types.
      Specified by:
        `resolveReferences` in interface `TypeDefinition`
      Parameters:
        `value` - Value to resolve references for.
        `referenceMap` - Map of local identifications to values to be used for resolution.
      Returns:
        Have all references been resolved?
      Throws:
        `NullPointerException` - The value or reference map is/are `null`.
        `IllegalPropertyValueException` - The given property value is not of this type.

    - #### nameToAAFName

          public String nameToAAFName(String name)

      Overrides:
        `nameToAAFName` in class `MetaDefinitionImpl`

    - #### getPrefix

          public String getPrefix()

      Description copied from interface: `MetaDefinition`

      Returns the namespace prefix to use when serializing a value of the subject of this meta definition to XML.

      Specified by:
        `getPrefix` in interface `MetaDefinition`
      Overrides:
        `getPrefix` in class `MetaDefinitionImpl`
      Returns:
        Namespace prefix to use when serializing a value of the subject of this meta definition to XML.
      See Also:
        `MediaProperty.prefix()`, `MediaClass.prefix()`

    - #### getNamespace

          public String getNamespace()

      Description copied from interface: `MetaDefinition`

      Returns the namespace in which the subject of this meta definition is defined.

      Specified by:
        `getNamespace` in interface `MetaDefinition`
      Overrides:
        `getNamespace` in class `MetaDefinitionImpl`
      Returns:
        Namespace in which the subject of this meta definition is defined.
      See Also:
        `MediaProperty.namespace()`, `MediaClass.namespace()`, `ExtensionScheme.getSchemeURI()`

    - #### clone

          public TypeDefinition clone()

      Description copied from interface: `MetaDefinition`

      Create a cloned copy of this meta definition.

      Specified by:
        `clone` in interface `MetaDefinition`
      Specified by:
        `clone` in interface `TypeDefinition`
      Overrides:
        `clone` in class `MetaDefinitionImpl`
      Returns:
        Cloned copy of this meta definition.

(c)2007-2016 Richard Cartwright, all rights reserved. Licensed under Apache 2 license and subject to the AMWA IPR policy.