com.beaglebuddy.id3.v23.frame_body

## Class ID3v23FrameBodyUserDefinedURLLink

- java.lang.Object
- - com.beaglebuddy.util.Utility
  - - com.beaglebuddy.id3.v23.frame_body.ID3v23FrameBodyUtility
    - - com.beaglebuddy.id3.v23.frame_body.ID3v23FrameBody
      - - com.beaglebuddy.id3.v23.frame_body.ID3v23FrameBodyUserDefinedURLLink

-     public class ID3v23FrameBodyUserDefinedURLLink
      extends ID3v23FrameBody

  A user defined url link frame body is associated with an ID3v2.3 `WXXX` `frame` which is used to include URL links concerning the audio file in a similar way to the other `url link` frames. The user defined url link frame body contains the following fields:

  User Defined URL Link Frame Body Fields
  | Field | Description
  --- | --- | ---
  1. | `encoding` | character set used to `encode` the description field.
  2. | description | description of the url.
  3. | url | URL of a website.

  There may be more than one user defined url link frame in an ID3v2.3 `tag`, but only one with the same description field.

  See Also:
    `ID3v23Frame`, ID3 tag version 2.3.0 standard, wikipedia history of ID3 tags

- - ### Field Summary

    - ### Fields inherited from class com.beaglebuddy.id3.v23.frame_body.ID3v23FrameBody

      `buffer, dirty, frameType`

    - ### Fields inherited from class com.beaglebuddy.id3.v23.frame_body.ID3v23FrameBodyUtility

      `nextNullTerminatorIndex, nullTerminatorIndex`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ID3v23FrameBodyUserDefinedURLLink()` The default constructor is called when creating a new frame.
    `ID3v23FrameBodyUserDefinedURLLink(Encoding encoding, java.lang.String description, java.lang.String url)` This constructor is called when creating a new frame.
    `ID3v23FrameBodyUserDefinedURLLink(java.io.InputStream inputStream, int frameBodySize)` This constructor is called when reading in an existing frame from an .mp3 file.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `java.lang.String` | `getDescription()` gets the description of the url.
    `Encoding` | `getEncoding()` gets the character encoding of the description.
    `java.lang.String` | `getURL()` gets the URL.
    `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` | `setDescription(java.lang.String description)` sets the description of the url.
    `void` | `setEncoding(Encoding encoding)` sets the character encoding of the description.
    `void` | `setURL(java.lang.String url)` sets the URL.
    `java.lang.String` | `toString()` gets a string representation of the user defined url link frame body showing all of the frame's fields and their values.

    - ### Methods inherited from class com.beaglebuddy.id3.v23.frame_body.ID3v23FrameBody

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

    - ### Methods inherited from class com.beaglebuddy.id3.v23.frame_body.ID3v23FrameBodyUtility

      `getNextNullTerminator, pricesToString, stringToBytes`

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

      `bytesToInt, bytesToInt, bytesToShort, bytesToShort, bytesToSynchsafeInt, bytesToSynchsafeShort, formateDate, getUTF16String, getUTF8String, 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

    - #### ID3v23FrameBodyUserDefinedURLLink

          public ID3v23FrameBodyUserDefinedURLLink()

      The default constructor is called when creating a new frame. The default values used are:
      - ISO-8859-1 encoding
      - empty description
      - empty URL

    - #### ID3v23FrameBodyUserDefinedURLLink

          public ID3v23FrameBodyUserDefinedURLLink(Encoding encoding,
                                           java.lang.String description,
                                           java.lang.String url)

      This constructor is called when creating a new frame.
      Parameters:
        `encoding` - character set used to encode the description.
        `description` - description of the url.
        `url` - url.

    - #### ID3v23FrameBodyUserDefinedURLLink

          public ID3v23FrameBodyUserDefinedURLLink(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 user defined url link 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 `ID3v23FrameBody`
      Throws:
        `java.lang.IllegalArgumentException` - if an invalid value is detected while parsing the frame body's raw bytes.

    - #### getEncoding

          public Encoding getEncoding()

      gets the character encoding of the description.
      Returns:
        the character encoding of the description.
      See Also:
        `setEncoding(Encoding)`

    - #### setEncoding

          public void setEncoding(Encoding encoding)

      sets the character encoding of the description.
      Parameters:
        `encoding` - the character set used to encode the description. Only ISO 8859-1 and UTF-16 are allowed.
      See Also:
        `getEncoding()`

    - #### getDescription

          public java.lang.String getDescription()

      gets the description of the url.
      Returns:
        the description url.
      See Also:
        `setDescription(String)`

    - #### setDescription

          public void setDescription(java.lang.String description)

      sets the description of the url.
      Parameters:
        `description` - the description of the url.
      See Also:
        `getDescription()`

    - #### getURL

          public java.lang.String getURL()

      gets the URL.
      Returns:
        the url.
      See Also:
        `setURL(String)`

    - #### setURL

          public void setURL(java.lang.String url)

      sets the URL.
      Parameters:
        `url` - the url.
      See Also:
        `getURL()`

    - #### 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 `ID3v23FrameBody`

    - #### toString

          public java.lang.String toString()

      gets a string representation of the user defined url link 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.