com.beaglebuddy.id3.v24.frame_body

## Class ID3v24FrameBodyUniqueFileIdentifier

- java.lang.Object
- - com.beaglebuddy.util.Utility
  - - com.beaglebuddy.id3.v24.frame_body.ID3v24FrameBodyUtility
    - - com.beaglebuddy.id3.v24.frame_body.ID3v24FrameBody
      - - com.beaglebuddy.id3.v24.frame_body.ID3v24FrameBodyUniqueFileIdentifier

-     public class ID3v24FrameBodyUniqueFileIdentifier
      extends ID3v24FrameBody

  A unique file identifier frame body is associated with an ID3v2.4 `UFID` `frame` which is used to identify the audio file in a database that may contain more information relevant to the content, such as CDDB. This is very similar to the `music CD identifier` frame. The ownerId URL should not be used for the actual database queries. The string "http://www.id3.org/dummy/ufid.html" should be used for tests. Software that isn't told otherwise may safely remove such frames. The unique file identifier frame body contains the following fields:

  Unique File Identifier Frame Body Fields
  | Field | Description
  --- | --- | ---
  1. | ownerId | URL containing an e-mail address, or a link to a location where an e-mail address can be found, that belongs to the organization responsible for this specific database implementation. Questions regarding the database should be sent to the e-mail address specified.
  2. | data | the actual identifier, which may be up to 64 bytes.

  There may be more than one unique file identifier frame in an ID3v2.4 `tag`, but only one with the same owner id field.

  See Also:
    `ID3v24Frame`, ID3 tag version 2.4.0 standard, wikipedia history of ID3 tags

- - ### Field Summary

    - ### Fields inherited from class com.beaglebuddy.id3.v24.frame_body.ID3v24FrameBody

      `buffer, dirty, frameType`

    - ### Fields inherited from class com.beaglebuddy.id3.v24.frame_body.ID3v24FrameBodyUtility

      `nextNullTerminatorIndex, nullTerminatorIndex`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ID3v24FrameBodyUniqueFileIdentifier()` The default constructor is called when creating a new frame.
    `ID3v24FrameBodyUniqueFileIdentifier(java.io.InputStream inputStream, int frameBodySize)` This constructor is called when reading in an existing frame from an .mp3 file.
    `ID3v24FrameBodyUniqueFileIdentifier(java.lang.String ownerId, byte[] data)` This constructor is called when creating a new frame.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `byte[]` | `getData()` gets the actual .mp3 file identifier to the audio file database.
    `java.lang.String` | `getOwnerId()` gets the owner id of the frame.
    `void` | `parse()` parses the raw bytes of the frame body and stores the parsed values in the frame's fields.
    `void` | `setBuffer()` If the frame body's values have been modified, then resize the raw binary buffer and store the new values there.
    `void` | `setData(byte[] data)` sets the actual .mp3 file identifier to the audio file database.
    `void` | `setOwnerId(java.lang.String ownerId)` sets the owner id, which is a URL containing an e-mail address, or a link to a location where an e-mail address can be found, that belongs to the organization responsible for the frame.
    `java.lang.String` | `toString()` gets a string representation of the unique field identifier frame body showing all of the frame's fields and their values.

    - ### Methods inherited from class com.beaglebuddy.id3.v24.frame_body.ID3v24FrameBody

      `getFrameType, getNextNullTerminator, getSize, isDirty, save, save`

    - ### Methods inherited from class com.beaglebuddy.id3.v24.frame_body.ID3v24FrameBodyUtility

      `getNextNullTerminator, pricesToString, stringToBytes`

    - ### Methods inherited from class com.beaglebuddy.util.Utility

      `bytesToInt, bytesToInt, bytesToShort, bytesToShort, bytesToSynchsafeInt, bytesToSynchsafeShort, formateDate, hex, hex, hex, intToBytes, littleEndianBytesToInt, pad, shortToBytes, synchsafeIntToBytes`

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

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

- - ### Constructor Detail

    - #### ID3v24FrameBodyUniqueFileIdentifier

          public ID3v24FrameBodyUniqueFileIdentifier()

      The default constructor is called when creating a new frame. The default values used are:
      - empty owner id
      - empty data

    - #### ID3v24FrameBodyUniqueFileIdentifier

          public ID3v24FrameBodyUniqueFileIdentifier(java.lang.String ownerId,
                                             byte[] data)

      This constructor is called when creating a new frame.
      Parameters:
        `ownerId` - id of the owner of the private data.
        `data` - raw binary data

    - #### ID3v24FrameBodyUniqueFileIdentifier

          public ID3v24FrameBodyUniqueFileIdentifier(java.io.InputStream inputStream,
                                             int frameBodySize)
                                              throws java.io.IOException

      This constructor is called when reading in an existing frame from an .mp3 file. This is then followed by a call to the parse() method.
      Parameters:
        `inputStream` - input stream pointing to a unique file identifier frame body in the .mp3 file.
        `frameBodySize` - size (in bytes) of the frame's body.
      Throws:
        `java.io.IOException` - if there is an error while reading the frame body.

  - ### Method Detail

    - #### parse

          public void parse()
                     throws java.lang.IllegalArgumentException

      parses the raw bytes of the frame body and stores the parsed values in the frame's fields.
      Overrides:
        `parse` in class `ID3v24FrameBody`
      Throws:
        `java.lang.IllegalArgumentException` - if an invalid value is detected while parsing the frame body's raw bytes.

    - #### getOwnerId

          public java.lang.String getOwnerId()

      gets the owner id of the frame.
      Returns:
        the owner id of the frame.
      See Also:
        `setOwnerId(String)`

    - #### setOwnerId

          public void setOwnerId(java.lang.String ownerId)

      sets the owner id, which is a URL containing an e-mail address, or a link to a location where an e-mail address can be found, that belongs to the organization responsible for the frame. Questions regarding the frame should be sent to the indicated e-mail address.
      Parameters:
        `ownerId` - the id of the owner of the data.
      See Also:
        `getOwnerId()`

    - #### getData

          public byte[] getData()

      gets the actual .mp3 file identifier to the audio file database.
      Returns:
        the binary data of the audio database identifier.
      See Also:
        `setData(byte[])`

    - #### setData

          public void setData(byte[] data)
                       throws java.lang.IllegalArgumentException

      sets the actual .mp3 file identifier to the audio file database.
      Parameters:
        `data` - the binary data of the audio database identifier.
      Throws:
        `java.lang.IllegalArgumentException` - if the length of the data is greater than 64.
      See Also:
        `getData()`

    - #### setBuffer

          public void setBuffer()

      If the frame body's values have been modified, then resize the raw binary buffer and store the new values there. When finished, the dirty flag is reset to indicate that the buffer is up to date, and the frame is now ready to be saved to the .mp3 file.
      Overrides:
        `setBuffer` in class `ID3v24FrameBody`

    - #### toString

          public java.lang.String toString()

      gets a string representation of the unique field identifier frame body showing all of the frame's fields and their values.
      Overrides:
        `toString` in class `java.lang.Object`
      Returns:
        a string representation of the frame body.