tv.amwa.maj.record.impl (Media Authoring with Java API)
Date: 2016-02-05

# Package tv.amwa.maj.record.impl

Implementations of structured values that can be embedded as properties of entity beans.

See: Description

- Class Summary
  Class | Description
  --- | ---
  AUIDImpl | Implementation of a 16 byte unique identifier whose value is a SMPTE 298M Universal Label or a UUID or GUID.
  DateStructImpl | Implementation of the date component of timestamp values that are specified according to Coordinated Universal Time (UTC).
  EdgeCodeValueImpl | Implementation of a value that represents film edge code information.
  PackageIDImpl | Implementation of a 32 byte package id unique identifier that can hold a SMPTE UMID, as specified in SMPTE 330M.
  ProductVersionImpl | Implementation of a version number for an application, represented with four release levels and its product release type.
  ProductVersionImpl.XMLHandler | XML parser event handler for converting product version elements into product version values.
  RationalImpl | Implements a rational number by means of a Java integer numerator (`Int32`) and a Java integer (`Int32`) denominator.
  RGBAComponentImpl | Implements an element of an array representing the order and size of the component values within a pixel value as part of an RGBA Layout.
  RGBAComponentImpl.XMLHandler | XML parser event handler for converting RGBA component elements into RGBA component values.
  TimecodeValueImpl | Implementation of a value that represents video tape or audio tape timecode information.
  TimeStampImpl | Implementation of a date and time in UTC (Coordinated Universal Time).
  TimeStructImpl | Implementation of the time component of date and time values specified according to Coordinated Universal Time (UTC), including hour, minute, second and 1/250th of a second.
  VersionTypeImpl | Implements a 2-byte version number, consisting of a major and minor component.

- Enum Summary
  Enum | Description
  --- | ---
  AUIDGeneration | Enumeration representing the different generation methods for AUIDs.

## Package tv.amwa.maj.record.impl Description

Implementations of structured values that can be embedded as properties of entity beans. Typically, the classes of this package are taken implementations of AAF record data types, as specified by the interfaces of the record package.

The MAJ implementations of these classes are registered with the record type definition that represents them. This allows the values to be serialised to and from files and streams.

### Memory management

Whenever a non-primitive value is requested from one of these classes, a copy is made to ensure no side effects occur to the internal representation of the value. Similarly, whenever a non-primitive value is passed to these classes, it is copied before storage internally to avoid side effects. Applications should take care to ensure that the repeated copying of values does not cause memory management issues.

For an example of the memory management behaviour, see `tv.amwa.maj.embeddable.PackageID#getPackageIDValue()` and `tv.amwa.maj.embeddable.PackageID#setPackageIDValue(byte[])`.

### String representation

Values that have a defined string representation, e.g. a rational representing a half can be written "1/2", will generate this when the `toString()` method is called on them. Classes without an obvious simple representation, such as Timecode, will generate a pseudo XML representation similar that that which appears in Reg-XML.

All classes in this package implement a `parseFactory(String)` method that parses the given string an creates an instance of the defining class. This is used when creating values from strings using the record type definition's `createValueFromString(String)` method.

### Final classes and methods

The classes and methods of this package are declared final deliberately. Their specification was derived from C struct declarations and their behaviour is tightly specified. Extensions of these classes that introduce different behaviour or a different approach to MAJ API memory management will not be expected by any MAJ API implementing classes.

This does not prevent another developer from creating their own implementation of the MAJ API interfaces. In this case, unexpected behaviour may result.

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