# Class TIFFDirectory

java.lang.Object
javax.imageio.plugins.tiff.TIFFDirectory

All Implemented Interfaces:
  `Cloneable`

public class TIFFDirectory extends Object implements Cloneable
A convenience class for simplifying interaction with TIFF native image metadata. A TIFF image metadata tree represents an Image File Directory (IFD) from a TIFF 6.0 stream. An IFD consists of a number of IFD Entries each of which associates an identifying tag number with a compatible value. A `TIFFDirectory` instance corresponds to an IFD and contains a set of `TIFFField`s each of which corresponds to an IFD Entry in the IFD.

When reading, a `TIFFDirectory` may be created by passing the value returned by `ImageReader.getImageMetadata()` to `createFromMetadata()`. The `TIFFField`s in the directory may then be obtained using the accessor methods provided in this class.

When writing, an `IIOMetadata` object for use by one of the `write()` methods of `ImageWriter` may be created from a `TIFFDirectory` by `getAsMetadata()`. The `TIFFDirectory` itself may be created by construction or from the `IIOMetadata` object returned by `ImageWriter.getDefaultImageMetadata()`. The `TIFFField`s in the directory may be set using the mutator methods provided in this class.

A `TIFFDirectory` is aware of the tag numbers in the group of `TIFFTagSet`s associated with it. When a `TIFFDirectory` is created from a native image metadata object, these tag sets are derived from the `tagSets` attribute of the `TIFFIFD` node.

A `TIFFDirectory` might also have a parent `TIFFTag`. This will occur if the directory represents an IFD other than the root IFD of the image. The parent tag is the tag of the IFD Entry which is a pointer to the IFD represented by this `TIFFDirectory`. The `TIFFTag.isIFDPointer()` method of this parent `TIFFTag` must return `true`. When a `TIFFDirectory` is created from a native image metadata object, the parent tag set is set from the `parentTagName` attribute of the corresponding `TIFFIFD` node. Note that a `TIFFDirectory` instance which has a non-`null` parent tag will be contained in the data field of a `TIFFField` instance which has a tag field equal to the contained directory's parent tag.

As an example consider an Exif image. The `TIFFDirectory` instance corresponding to the Exif IFD in the Exif stream would have parent tag `TAG_EXIF_IFD_POINTER` and would include `ExifTIFFTagSet` in its group of known tag sets. The `TIFFDirectory` corresponding to this Exif IFD will be contained in the data field of a `TIFFField` which will in turn be contained in the `TIFFDirectory` corresponding to the primary IFD of the Exif image which will itself have a `null`-valued parent tag.

Note that this implementation is not synchronized. If multiple threads use a `TIFFDirectory` instance concurrently, and at least one of the threads modifies the directory, for example, by adding or removing `TIFFField`s or `TIFFTagSet`s, it must be synchronized externally.

Since:
  9
See Also:
  - `IIOMetadata`
  - `TIFFField`
  - `TIFFTag`
  - `TIFFTagSet`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `TIFFDirectory(TIFFTagSet[] tagSets, TIFFTag parentTag)`
  Constructs a `TIFFDirectory` which is aware of a given group of `TIFFTagSet`s.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `addTagSet(TIFFTagSet tagSet)`
  Adds an element to the group of `TIFFTagSet`s of which this directory is aware.
  `void`
  `addTIFFField(TIFFField f)`
  Adds a TIFF field to the directory.
  `TIFFDirectory`
  `clone()`
  Clones the directory and all the fields contained therein.
  `boolean`
  `containsTIFFField(int tagNumber)`
  Determines whether a TIFF field with the given tag number is contained in this directory.
  `static TIFFDirectory`
  `createFromMetadata(IIOMetadata tiffImageMetadata)`
  Creates a `TIFFDirectory` instance from the contents of an image metadata object.
  `IIOMetadata`
  `getAsMetadata()`
  Converts the directory to a metadata object.
  `int`
  `getNumTIFFFields()`
  Returns the number of `TIFFField`s in this directory.
  `TIFFTag`
  `getParentTag()`
  Returns the parent `TIFFTag` of this directory if one has been defined or `null` otherwise.
  `TIFFTag`
  `getTag(int tagNumber)`
  Returns the `TIFFTag` which has tag number equal to `tagNumber` or `null` if no such tag exists in the `TIFFTagSet`s associated with this directory.
  `TIFFTagSet[]`
  `getTagSets()`
  Returns the `TIFFTagSet`s of which this directory is aware.
  `TIFFField`
  `getTIFFField(int tagNumber)`
  Retrieves a TIFF field from the directory.
  `TIFFField[]`
  `getTIFFFields()`
  Retrieves all TIFF fields from the directory.
  `void`
  `removeTagSet(TIFFTagSet tagSet)`
  Removes an element from the group of `TIFFTagSet`s of which this directory is aware.
  `void`
  `removeTIFFField(int tagNumber)`
  Removes a TIFF field from the directory.
  `void`
  `removeTIFFFields()`
  Removes all TIFF fields from the directory.

  ### Methods declared in class Object

  `equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### TIFFDirectory

    public TIFFDirectory(TIFFTagSet[] tagSets, TIFFTag parentTag)
    Constructs a `TIFFDirectory` which is aware of a given group of `TIFFTagSet`s. An optional parent `TIFFTag` may also be specified.
    Parameters:
      `tagSets` - The `TIFFTagSets` associated with this directory.
      `parentTag` - The parent `TIFFTag` of this directory; may be `null`.
    Throws:
      `NullPointerException` - if `tagSets` is `null`.

- ## Method Details

  - ### createFromMetadata

    public static TIFFDirectory createFromMetadata(IIOMetadata tiffImageMetadata) throws IIOInvalidTreeException
    Creates a `TIFFDirectory` instance from the contents of an image metadata object. The supplied object must support an image metadata format supported by the TIFF `ImageWriter` plug-in. This will usually be either the TIFF native image metadata format `javax_imageio_tiff_image_1.0` or the Java Image I/O standard metadata format `javax_imageio_1.0`.
    Parameters:
      `tiffImageMetadata` - A metadata object which supports a compatible image metadata format.
    Returns:
      A `TIFFDirectory` populated from the contents of the supplied metadata object.
    Throws:
      `NullPointerException` - if `tiffImageMetadata` is `null`.
      `IllegalArgumentException` - if `tiffImageMetadata` does not support a compatible image metadata format.
      `IIOInvalidTreeException` - if the supplied metadata object cannot be parsed.

  - ### getTagSets

    public TIFFTagSet[] getTagSets()
    Returns the `TIFFTagSet`s of which this directory is aware.
    Returns:
      The `TIFFTagSet`s associated with this `TIFFDirectory`.

  - ### addTagSet

    public void addTagSet(TIFFTagSet tagSet)
    Adds an element to the group of `TIFFTagSet`s of which this directory is aware.
    Parameters:
      `tagSet` - The `TIFFTagSet` to add.
    Throws:
      `NullPointerException` - if `tagSet` is `null`.

  - ### removeTagSet

    public void removeTagSet(TIFFTagSet tagSet)
    Removes an element from the group of `TIFFTagSet`s of which this directory is aware.
    Parameters:
      `tagSet` - The `TIFFTagSet` to remove.
    Throws:
      `NullPointerException` - if `tagSet` is `null`.

  - ### getParentTag

    public TIFFTag getParentTag()
    Returns the parent `TIFFTag` of this directory if one has been defined or `null` otherwise.
    Returns:
      The parent `TIFFTag` of this `TIFFDiectory` or `null`.

  - ### getTag

    public TIFFTag getTag(int tagNumber)
    Returns the `TIFFTag` which has tag number equal to `tagNumber` or `null` if no such tag exists in the `TIFFTagSet`s associated with this directory.
    Parameters:
      `tagNumber` - The tag number of interest.
    Returns:
      The corresponding `TIFFTag` or `null`.

  - ### getNumTIFFFields

    public int getNumTIFFFields()
    Returns the number of `TIFFField`s in this directory.
    Returns:
      The number of `TIFFField`s in this `TIFFDirectory`.

  - ### containsTIFFField

    public boolean containsTIFFField(int tagNumber)
    Determines whether a TIFF field with the given tag number is contained in this directory.
    Parameters:
      `tagNumber` - The tag number.
    Returns:
      Whether a `TIFFTag` with tag number equal to `tagNumber` is present in this `TIFFDirectory`.

  - ### addTIFFField

    public void addTIFFField(TIFFField f)
    Adds a TIFF field to the directory.
    Parameters:
      `f` - The field to add.
    Throws:
      `NullPointerException` - if `f` is `null`.

  - ### getTIFFField

    public TIFFField getTIFFField(int tagNumber)
    Retrieves a TIFF field from the directory.
    Parameters:
      `tagNumber` - The tag number of the tag associated with the field.
    Returns:
      A `TIFFField` with the requested tag number of `null` if no such field is present.

  - ### removeTIFFField

    public void removeTIFFField(int tagNumber)
    Removes a TIFF field from the directory.
    Parameters:
      `tagNumber` - The tag number of the tag associated with the field.

  - ### getTIFFFields

    public TIFFField[] getTIFFFields()
    Retrieves all TIFF fields from the directory.
    Returns:
      An array of all TIFF fields in order of numerically increasing tag number.

  - ### removeTIFFFields

    public void removeTIFFFields()
    Removes all TIFF fields from the directory.

  - ### getAsMetadata

    public IIOMetadata getAsMetadata()
    Converts the directory to a metadata object.
    Returns:
      A metadata instance initialized from the contents of this `TIFFDirectory`.

  - ### clone

    public TIFFDirectory clone() throws CloneNotSupportedException
    Clones the directory and all the fields contained therein.
    Overrides:
      `clone` in class `Object`
    Returns:
      A clone of this `TIFFDirectory`.
    Throws:
      `CloneNotSupportedException` - if the instance cannot be cloned.
    See Also:
      - `Cloneable`