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

tv.amwa.maj.model

## Interface PluginDefinition

- All Superinterfaces:
    DefinitionObject, InterchangeObject, MediaEntity, MetadataObject, WeakReferenceTarget
  All Known Implementing Classes:
    PluginDefinitionImpl

      public interface PluginDefinition
      extends DefinitionObject

  Specifies the definition of code objects that provide an implementation for a definition, such as a codec definition, or for a meta definition, such as a class definition.

  Note that the mechanism of supporting plugins has yet to be determined for the current implementation of the MAJ API.

  See Also:
    `PluginIdentifiers`, `Dictionary.getPluginDefinitions()`, `Warehouse.lookup(Class, String)`, `TypeDefinitions.PluginDefinitionWeakReference`, `TypeDefinitions.PluginDefinitionWeakReferenceSet`, `TypeDefinitions.PluginDefinitionStrongReference`, `TypeDefinitions.PluginDefinitionStrongReferenceSet`

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static boolean` | `ACCELERATOR_DEFAULT` Default value for the accelerator property, which is false.
    `static boolean` | `AUTHENTICATION_DEFAULT` Default value for the authentication property, which is false.
    `static boolean` | `SOFTWAREONLY_DEFAULT` Default value for the software only property, which is false.

  - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `appendPluginLocator(Locator pluginLocator)` Append a locator to the list of plugin locators of this plugin definition, which specify an ordered list of locations that provide access to the defined plugin's implementation.
    `void` | `clearPluginLocators()` Clear the list of locators to this plugin definition, omitting this optional property.
    `PluginDefinition` | `clone()` Create a cloned copy of this plugin definition.
    `int` | `countPluginLocators()` Returns the number of locators in the list of plugin locators of this plugin definition, which specify an ordered list locations that provide access to the defined plugin's implementation.
    `AUID` | `getCategoryClass()` Returns the category of the defined plugin.
    `String` | `getDeviceManufacturerName()` Returns the plugin manufacturer name for the defined plugin, which specifies a string that can be used to identify the plugin manufacturer to the user.
    `AUID` | `getEngine()` Returns the software engine identifier that identifies the software subsystem used for essence management and playback for the defined plugin.
    `VersionType` | `getEngineMaximumVersion()` Returns the maximum acceptable software engine version of the defined plugin, which specifies the maximum version of the engine for which this plugin will function.
    `VersionType` | `getEngineMinimumVersion()` Returns the minimum acceptable software engine version of the defined plugin, which specifies the minimum version of the engine for which this plugin will function.
    `VersionType[]` | `getEngineVersionRange()` Returns the minimum and maximum software engine versions of the defined plugin, which specify the minimum and maximum versions of the engine for which this plugin will function.
    `AUID` | `getImplementedClass()` Returns the identifier of the implemented class of teh defined plugin.This property specifies the AUID for the class definition of the definition or meta definition that the defined plugin provides an implementation for.
    `boolean` | `getIsAccelerated()` Returns `true` if the defined plugin is capable of running with a hardware accelerator; otherwise `false`.
    `boolean` | `getIsSoftwareOnly()` Returns `true` if the defined plugin is capable of running in a software-only environment; otherwise `false`.
    `AUID` | `getManufacturerID()` Returns an AUID that identifies the manufacturer of the defined plugin.
    `NetworkLocator` | `getManufacturerInfo()` Returns a network locator pointing to manufacturer information for the defined plugin, which provides a link to a web page containing information about the manufacturer.
    `VersionType` | `getPlatformMaximumVersion()` Returns the maximum acceptable platform version for the defined plugin, which specifies the maximum version of the platform on which this plugin will function.
    `VersionType` | `getPlatformMinimumVersion()` Returns the minimum acceptable platform version for the defined plugin, which specifies the minimum version of the platform on which this plugin will function.
    `VersionType[]` | `getPlatformVersionRange()` Returns the minimum and maximum platform version properties of the defined plugin, which specify the minimum and maximum versions of the platform for which the plugin will function.
    `AUID` | `getPluginAPI()` Returns the identifier for the manufacturer's interface that is supported by the defined plugin.
    `VersionType` | `getPluginAPIMaximumVersion()` Returns the maximum acceptable plugin API version supporting the defined plugin, which is the maximum version of the plugin API for which this plugin will function.
    `VersionType` | `getPluginAPIMinimumVersion()` Returns the minimum acceptable plugin API version supporting the defined plugin, which is the minimum version of the plugin API for which this plugin will function.
    `VersionType[]` | `getPluginAPIVersionRange()` Returns the minimum and maximum plugin API version properties of the defined plugin, which are the minimum and maximum versions of the plugin API for which this plugin will function.
    `Locator` | `getPluginLocatorAt(int index)` Returns the locator at the given index from the list of locators of this plugin descriptor, which specify an ordered list of locations that provide access to the defined plugin's implementation.
    `List<? extends Locator>` | `getPluginLocators()` Returns the list of locators of the plugin definition, which specify an ordered list of locations that provide access to the defined plugin's implementation.
    `AUID` | `getPluginPlatform()` Returns the hardware platform identifier of the defined plugin, which identifies the platform by both its hardware platform and operating system.
    `VersionType` | `getPluginVersion()` Returns the plugin version of the defined plugin.
    `String` | `getPluginVersionString()` Returns the plugin version string of the defined plugin, which specifies a string that can be used to identify the plugin version to the user.
    `boolean` | `getSupportsAuthentication()` Returns `true` if the defined plugin is capable of supporting authentication; otherwise `false`.
    `void` | `insertPluginLocatorAt(int index, Locator pluginLocator)` Insert a locator at the given index into the list of locators of this plugin definition, which specify an ordered list of locations that provide access to the defined plugin's implementation.
    `boolean` | `isAccelerated()` Returns `true` if the defined plugin is capable of running with a hardware accelerator; otherwise `false`.
    `boolean` | `isSoftwareOnly()` Returns `true` if the defined plugin is capable of running in a software-only environment; otherwise `false`.
    `void` | `prependPluginLocator(Locator pluginLocator)` Prepend a locator to the list of plugin locators of this plugin definition, which specify an ordered list of locations that provide access to the defined plugin's implementation.
    `void` | `removePluginLocatorAt(int index)` Remove the locator at the given index from the list of locators of the plugin definition, which specify an ordered list of locations that provide access to the defined plugin's implementation.
    `void` | `setCategoryClass(AUID categoryClass)` Sets the category of the defined plugin.
    `void` | `setDeviceManufacturerName(String pluginManufacturerName)` Set the plugin manufacturer name for the defined plugin, which specifies a string that can be used to identify the plugin manufacturer to the user.
    `void` | `setEngine(AUID engine)` Sets the software engine identifier that identifies the software subsystem used for essence management and playback for the defined plugin.
    `void` | `setEngineMaximumVersion(VersionType maxVersion)` Sets the maximum engine version property of the defined plugin, which specifies the maximum version of the engine for which this plugin will function.
    `void` | `setEngineMinimumVersion(VersionType minVersion)` Sets the minimum engine version property of the defined plugin, which specifies the minimum version of the engine for which this plugin will function.
    `void` | `setImplementedClass(AUID implementedClass)` Sets the identifier of the implemented class of the defined plugin.
    `void` | `setIsAccelerated(Boolean isAccelerated)` Set to `true` if the defined plugin is capable of running with a hardware accelerator; otherwise `false`.
    `void` | `setIsSoftwareOnly(Boolean isSoftwareOnly)` Set to `true` if the defined plugin is capable of running in a software-only environment; otherwise `false`.
    `void` | `setManufacturerID(AUID manufacturerID)` Sets the AUID that identifies the manufacturer of the defined plugin.
    `void` | `setManufacturerInfo(NetworkLocator manufacturerInfo)` Set a network locator pointing to the location of manufacturer information for the defined plugin.
    `void` | `setPlatformMaximumVersion(VersionType maxVersion)` Sets the maximum platform version property of the defined plugin, which specifies the maximum version of the platform for which the plugin will function.
    `void` | `setPlatformMinimumVersion(VersionType minVersion)` Sets the minimum platform version property of the defined plugin, which specifies the minimum version of the platform for which the plugin will function.
    `void` | `setPluginAPI(AUID pluginApi)` Sets the identifier for the manufacturer's interface that is supported by the defined plugin.
    `void` | `setPluginAPIMaximumVersion(VersionType maxVersion)` Sets the maximum plugin API version property of the defined plugin, which specifies the maximum version number of the specified plugin interfaces that the plugin supports.
    `void` | `setPluginAPIMinimumVersion(VersionType minVersion)` Sets the minimum plugin API version property of the defined plugin, which specifies the minimum version number of the specified plugin interfaces that the plugin supports.
    `void` | `setPluginPlatform(AUID hardwarePlatform)` Sets the hardware platform identifier of the defined plugin, which identifies the platform by both the hardware platform and operating system.
    `void` | `setPluginVersion(VersionType pluginVersion)` Sets the plugin version of the defined plugin.
    `void` | `setPluginVersionString(String pluginVersionString)` Sets the plugin version string of this defined plugin, which specifies a string that can be used to identify the plugin version to the user.
    `void` | `setSupportsAuthentication(Boolean supportsAuthentication)` Set to `true` if the defined plugin defined is capable of supporting authentication; otherwise `false`.
    `boolean` | `supportsAuthentication()` Returns `true` if the defined plugin is capable of supporting authentication; otherwise `false`.

    - ### Methods inherited from interface tv.amwa.maj.model.DefinitionObject

      `getAUID, getDescription, getName, setDescription, setName`

    - ### Methods inherited from interface tv.amwa.maj.model.InterchangeObject

      `addApplicationPlugin, clearApplicationPlugins, containsApplicationPlugin, containsApplicationPlugin, countApplicationPlugins, deepEquals, disableGenerationTracking, enableGenerationTracking, equals, getApplicationPlugins, getGeneration, getLinkedGenerationID, getObjectClass, isGenerationTracked, removeApplicationPlugin, removeApplicationPlugin, setLinkedGenerationID, setObjectClass, toString`

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

      `getPersistentID, setPersistentIndex`

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

      `getWeakTargetReference`

- - ### Field Detail

    - #### SOFTWAREONLY_DEFAULT

          static final boolean SOFTWAREONLY_DEFAULT

      Default value for the software only property, which is false. The property specifies if the plugin is capable of executing in a software-only environment.

      See Also:
        `isSoftwareOnly()`, `setIsSoftwareOnly(Boolean)`, Constant Field Values

    - #### ACCELERATOR_DEFAULT

          static final boolean ACCELERATOR_DEFAULT

      Default value for the accelerator property, which is false. The property specifies if the plugin is capable of using hardware to accelerate essence processing.

      See Also:
        `isAccelerated()`, `setIsAccelerated(Boolean)`, Constant Field Values

    - #### AUTHENTICATION_DEFAULT

          static final boolean AUTHENTICATION_DEFAULT

      Default value for the authentication property, which is false. The property specifies that the plugin implementation supports authentication.

      See Also:
        `supportsAuthentication()`, `setSupportsAuthentication(Boolean)`, Constant Field Values

  - ### Method Detail

    - #### getCategoryClass

          AUID getCategoryClass()

      Returns the category of the defined plugin. The AAF built in categories are:

      - `PluginCategoryType.Effect`
      - `PluginCategoryType.Codec`
      - `PluginCategoryType.Interpolation`
      Returns:
        Kind of plugin defined.
      See Also:
        `PluginCategoryType`, `TypeDefinitions.PluginCategoryType`

    - #### setCategoryClass

          void setCategoryClass(AUID categoryClass)
                         throws NullPointerException

      Sets the category of the defined plugin. The AAF built in categories are:

      - `PluginCategoryType.Effect`
      - `PluginCategoryType.Codec`
      - `PluginCategoryType.Interpolation`
      Parameters:
        `categoryClass` - Kind of plugin defined.
      Throws:
        `NullPointerException` - The given plugin category is `null`.
      See Also:
        `PluginCategoryType`, `TypeDefinitions.PluginCategoryType`

    - #### getPluginVersion

          VersionType getPluginVersion()

      Returns the plugin version of the defined plugin.

      Returns:
        Plugin version of the defined plugin.

    - #### setPluginVersion

          void setPluginVersion(VersionType pluginVersion)
                         throws NullPointerException

      Sets the plugin version of the defined plugin.

      Parameters:
        `pluginVersion` - Plugin version of the defined plugin.
      Throws:
        `NullPointerException` - The given version number is `null`.

    - #### setPluginVersionString

          void setPluginVersionString(@AAFString
                                      String pluginVersionString)

      Sets the plugin version string of this defined plugin, which specifies a string that can be used to identify the plugin version to the user. Set this optional property to `null` to omit it.

      Parameters:
        `pluginVersionString` - Plugin version string of this plugin definition.

    - #### getPluginVersionString

          @AAFString
          String getPluginVersionString()
                                            throws PropertyNotPresentException

      Returns the plugin version string of the defined plugin, which specifies a string that can be used to identify the plugin version to the user.

      Returns:
        Plugin version string of this plugin definition.
      Throws:
        `PropertyNotPresentException` - The optional version string property is not present in this plugin definition.

    - #### setDeviceManufacturerName

          void setDeviceManufacturerName(@AAFString
                                         String pluginManufacturerName)

      Set the plugin manufacturer name for the defined plugin, which specifies a string that can be used to identify the plugin manufacturer to the user. Set this optional property to `null` to omit it.

      Parameters:
        `pluginManufacturerName` - Plugin manufacturer name for this plugin definition.

    - #### getDeviceManufacturerName

          @AAFString
          String getDeviceManufacturerName()
                                               throws PropertyNotPresentException

      Returns the plugin manufacturer name for the defined plugin, which specifies a string that can be used to identify the plugin manufacturer to the user. This is an optional property.

      Returns:
        Plugin manufacturer name of the plugin definition.
      Throws:
        `PropertyNotPresentException` - The optional manufacturer's name is not set for the plugin definition.

    - #### getManufacturerInfo

          NetworkLocator getManufacturerInfo()
                                      throws PropertyNotPresentException

      Returns a network locator pointing to manufacturer information for the defined plugin, which provides a link to a web page containing information about the manufacturer.

      Returns:
        Link to manufacturer information about the manufacturer of this plugin definition.
      Throws:
        `PropertyNotPresentException` - The optional manufacturer information property is not present for this plugin definition.

    - #### setManufacturerInfo

          void setManufacturerInfo(NetworkLocator manufacturerInfo)

      Set a network locator pointing to the location of manufacturer information for the defined plugin. A successful call to this method will result in any existing manufacturer information being replaced.

      Parameters:
        `manufacturerInfo` - Network locator for pointing to manufacturer information for the definition.

    - #### getManufacturerID

          AUID getManufacturerID()
                          throws PropertyNotPresentException

      Returns an AUID that identifies the manufacturer of the defined plugin. This is an optional property.

      Returns:
        Manufacturer id of the defined plugin.
      Throws:
        `PropertyNotPresentException` - The optional manufacturer id property is not present in this plugin definition.

    - #### setManufacturerID

          void setManufacturerID(AUID manufacturerID)

      Sets the AUID that identifies the manufacturer of the defined plugin. Set this optional property to `null` to omit it.

      Parameters:
        `manufacturerID` - Manufacturer id for the defined plugin.

    - #### getPluginPlatform

          @HardwarePlatform
          AUID getPluginPlatform()
                                            throws PropertyNotPresentException

      Returns the hardware platform identifier of the defined plugin, which identifies the platform by both its hardware platform and operating system. This is an optional property.

      Returns:
        Hardware platform identifier for the defined plugin.
      Throws:
        `PropertyNotPresentException` - The optional hardware platform property is not present in this plugin definition.
      See Also:
        `PluginIdentifiers.Platform_Independent`

    - #### setPluginPlatform

          void setPluginPlatform(@HardwarePlatform
                                 AUID hardwarePlatform)

      Sets the hardware platform identifier of the defined plugin, which identifies the platform by both the hardware platform and operating system. Set this optional property to `null` to omit it.

      Parameters:
        `hardwarePlatform` - Hardware platform identifier for the defined plugin.
      See Also:
        `PluginIdentifiers.Platform_Independent`

    - #### getPlatformVersionRange

          VersionType[] getPlatformVersionRange()
                                         throws PropertyNotPresentException

      Returns the minimum and maximum platform version properties of the defined plugin, which specify the minimum and maximum versions of the platform for which the plugin will function. The platform version range properties are optional.

      The value returned is an array containing two version numbers with the value at index 0 being the minimum version number and the value at index 1 being the maximum.

      Returns:
        Array containing the minimum and maximum platform versions of the defined plugin.
      Throws:
        `PropertyNotPresentException` - The optional platform version range is not fully specified in this plugin definition.
      See Also:
        `getPlatformMinimumVersion()`, `getPlatformMaximumVersion()`

    - #### getPlatformMinimumVersion

          VersionType getPlatformMinimumVersion()
                                         throws PropertyNotPresentException

      Returns the minimum acceptable platform version for the defined plugin, which specifies the minimum version of the platform on which this plugin will function. This is an optional property.

      Returns:
        Minimum acceptable platform version for the defined plugin.
      Throws:
        `PropertyNotPresentException` - The optional platform minimum version property is not present for this plugin definition.
      See Also:
        `getPlatformMaximumVersion()`, `getPlatformVersionRange()`

    - #### getPlatformMaximumVersion

          VersionType getPlatformMaximumVersion()
                                         throws PropertyNotPresentException

      Returns the maximum acceptable platform version for the defined plugin, which specifies the maximum version of the platform on which this plugin will function. This is an optional property.

      Returns:
        Maximum acceptable platform version for the defined plugin.
      Throws:
        `PropertyNotPresentException` - The optional platform maximum version property is not present for this plugin definition.
      See Also:
        `getPlatformMinimumVersion()`, `getPlatformVersionRange()`

    - #### setPlatformMinimumVersion

          void setPlatformMinimumVersion(VersionType minVersion)

      Sets the minimum platform version property of the defined plugin, which specifies the minimum version of the platform for which the plugin will function. Set this optional property to `null` to omit it.

      Parameters:
        `minVersion` - Minimum platform version of the defined plugin.

    - #### setPlatformMaximumVersion

          void setPlatformMaximumVersion(VersionType maxVersion)

      Sets the maximum platform version property of the defined plugin, which specifies the maximum version of the platform for which the plugin will function. Set this optional property to `null` to omit it.

      Parameters:
        `maxVersion` - Maximum platform version of the defined plugin.

    - #### getEngine

          @Engine
          AUID getEngine()
                          throws PropertyNotPresentException

      Returns the software engine identifier that identifies the software subsystem used for essence management and playback for the defined plugin. This is an optional property.

      Returns:
        Software engine identifier for the defined plugin.
      Throws:
        `PropertyNotPresentException` - The optional engine property is not present in this plugin definition.
      See Also:
        `PluginIdentifiers.Engine_None`

    - #### setEngine

          void setEngine(@Engine
                         AUID engine)

      Sets the software engine identifier that identifies the software subsystem used for essence management and playback for the defined plugin. Set this optional property to `null` to omit it.

      Parameters:
        `engine` - Software engine identifier for the defined plugin.
      See Also:
        `PluginIdentifiers.Engine_None`

    - #### getEngineVersionRange

          VersionType[] getEngineVersionRange()
                                       throws PropertyNotPresentException

      Returns the minimum and maximum software engine versions of the defined plugin, which specify the minimum and maximum versions of the engine for which this plugin will function. The engine version range properties are optional.

      The value returned is an array containing two version numbers with the value at index 0 being the minimum version number and the value at index 1 being the maximum.

      Returns:
        Array containing minimum and maximum engine versions for the defined plugin.
      Throws:
        `PropertyNotPresentException` - The optional engine version range property is not fully specified in this plugin definition.
      See Also:
        `getEngine()`

    - #### getEngineMinimumVersion

          VersionType getEngineMinimumVersion()
                                       throws PropertyNotPresentException

      Returns the minimum acceptable software engine version of the defined plugin, which specifies the minimum version of the engine for which this plugin will function. The minimum engine version property is optional.

      Returns:
        Minimum acceptable software engine versions of the defined plugin.
      Throws:
        `PropertyNotPresentException` - The optional engine minimum version property is not present for this plugin definition.
      See Also:
        `getEngine()`, `getEngineVersionRange()`, `getEngineMaximumVersion()`

    - #### getEngineMaximumVersion

          VersionType getEngineMaximumVersion()
                                       throws PropertyNotPresentException

      Returns the maximum acceptable software engine version of the defined plugin, which specifies the maximum version of the engine for which this plugin will function. The maximum engine version property is optional.

      Returns:
        Maximum acceptable software engine versions of the defined plugin.
      Throws:
        `PropertyNotPresentException` - The optional engine maximum version property is not present for this plugin definition.
      See Also:
        `getEngine()`, `getEngineVersionRange()`, `getEngineMinimumVersion()`

    - #### setEngineMinimumVersion

          void setEngineMinimumVersion(VersionType minVersion)

      Sets the minimum engine version property of the defined plugin, which specifies the minimum version of the engine for which this plugin will function. Set this optional property to `null` to omit it.

      Parameters:
        `minVersion` - Minimum engine version for the defined plugin.

    - #### setEngineMaximumVersion

          void setEngineMaximumVersion(VersionType maxVersion)

      Sets the maximum engine version property of the defined plugin, which specifies the maximum version of the engine for which this plugin will function. Set this optional property to `null` to omit it.

      Parameters:
        `maxVersion` - Maximum engine version for the defined plugin.

    - #### getPluginAPI

          @PluginAPI
          AUID getPluginAPI()
                                throws PropertyNotPresentException

      Returns the identifier for the manufacturer's interface that is supported by the defined plugin. This is an optional property.

      Returns:
        Identifier for the plugin interface of the defined plugin.
      Throws:
        `PropertyNotPresentException` - The optional plugin API property is not present in this plugin definition.
      See Also:
        `PluginIdentifiers.PluginAPI_EssenceAccess`

    - #### setPluginAPI

          void setPluginAPI(@PluginAPI
                            AUID pluginApi)

      Sets the identifier for the manufacturer's interface that is supported by the defined plugin. Set this optional property to `null` to omit it.

      Parameters:
        `pluginApi` - Identifier for the plugin interface of the defined plugin.
      See Also:
        `PluginIdentifiers.Engine_None`

    - #### getPluginAPIVersionRange

          VersionType[] getPluginAPIVersionRange()
                                          throws PropertyNotPresentException

      Returns the minimum and maximum plugin API version properties of the defined plugin, which are the minimum and maximum versions of the plugin API for which this plugin will function. The plugin API version range properties are optional.

      The value returned is an array containing two version numbers with the value at index 0 being the minimum version number and the value at index 1 being the maximum.

      Returns:
        Array containing plugin API minimum and maximum version for the defined plugin.
      Throws:
        `PropertyNotPresentException` - The optional plugin API version range is not present in this plugin definition.
      See Also:
        `getPluginAPI()`, `getPluginAPIMinimumVersion()`, `getPluginAPIMaximumVersion()`

    - #### getPluginAPIMinimumVersion

          VersionType getPluginAPIMinimumVersion()
                                          throws PropertyNotPresentException

      Returns the minimum acceptable plugin API version supporting the defined plugin, which is the minimum version of the plugin API for which this plugin will function. The minimum plugin API version property is optional.

      Returns:
        Minimum acceptable plugin API version supporting the defined plugin
      Throws:
        `PropertyNotPresentException` - The optional plugin API minimum version property is not present for this plugin definition.
      See Also:
        `getPluginAPI()`, `getPluginAPIVersionRange()`, `getPlatformMaximumVersion()`

    - #### getPluginAPIMaximumVersion

          VersionType getPluginAPIMaximumVersion()
                                          throws PropertyNotPresentException

      Returns the maximum acceptable plugin API version supporting the defined plugin, which is the maximum version of the plugin API for which this plugin will function. The maximum plugin API version property is optional.

      Returns:
        Maximum acceptable plugin API version supporting the defined plugin
      Throws:
        `PropertyNotPresentException` - The optional plugin API maximum version property is not present for this plugin definition.
      See Also:
        `getPluginAPI()`, `getPluginAPIVersionRange()`, `getPlatformMinimumVersion()`

    - #### setPluginAPIMinimumVersion

          void setPluginAPIMinimumVersion(VersionType minVersion)

      Sets the minimum plugin API version property of the defined plugin, which specifies the minimum version number of the specified plugin interfaces that the plugin supports. Set this optional property to `null` to omit it.

      Parameters:
        `minVersion` - The minimum plugin API version of the defined plugin.

    - #### setPluginAPIMaximumVersion

          void setPluginAPIMaximumVersion(VersionType maxVersion)

      Sets the maximum plugin API version property of the defined plugin, which specifies the maximum version number of the specified plugin interfaces that the plugin supports. Set this optional property to `null` to omit it.

      Parameters:
        `maxVersion` - Maximum plugin API version for the defined plugin.

    - #### isSoftwareOnly

          @Bool
          boolean isSoftwareOnly()

      Returns `true` if the defined plugin is capable of running in a software-only environment; otherwise `false`. A value of `true` indicates that no additional hardware is required. If the result is `true` then this plugin may also support hardware acceleration, as long as it also supports a software-only method of processing data.

      If this optional property is not present, the default value of false is returned.

      Returns:
        Is the define plugin capable of running in a software-only environment?
      See Also:
        `SOFTWAREONLY_DEFAULT`, `getIsSoftwareOnly()`

    - #### getIsSoftwareOnly

          boolean getIsSoftwareOnly()

      Returns `true` if the defined plugin is capable of running in a software-only environment; otherwise `false`. A value of `true` indicates that no additional hardware is required. If the result is `true` then this plugin may also support hardware acceleration, as long as it also supports a software-only method of processing data.

      If this optional property is not present, the default value of false is returned.

      Returns:
        Is the define plugin capable of running in a software-only environment?
      See Also:
        `SOFTWAREONLY_DEFAULT`, `isSoftwareOnly()`

    - #### setIsSoftwareOnly

          void setIsSoftwareOnly(@Bool
                                 Boolean isSoftwareOnly)

      Set to `true` if the defined plugin is capable of running in a software-only environment; otherwise `false`. A value of `true` indicates that no additional hardware is required. If the result is `true` then this plugin may also support hardware acceleration, as long as it also supports a software-only method of processing data.

      The default value of this optional property is false. To omit this optional property, call this method with `null`.

      Parameters:
        `isSoftwareOnly` - Is the defined plugin capable of running in a software-only environment?
      See Also:
        `SOFTWAREONLY_DEFAULT`

    - #### isAccelerated

          @Bool
          boolean isAccelerated()

      Returns `true` if the defined plugin is capable of running with a hardware accelerator; otherwise `false`. If the result is `true` then the plugin may additionally support software decompression.

      If this optional property is not present, the default value of false is returned.

      Returns:
        Is the defined plugin capable of running with hardware acceleration?
      See Also:
        `ACCELERATOR_DEFAULT`, `getIsAccelerated()`

    - #### getIsAccelerated

          boolean getIsAccelerated()

      Returns `true` if the defined plugin is capable of running with a hardware accelerator; otherwise `false`. If the result is `true` then the plugin may additionally support software decompression.

      If this optional property is not present, the default value of false is returned.

      Returns:
        Is the defined plugin capable of running with hardware acceleration?
      See Also:
        `ACCELERATOR_DEFAULT`, `isAccelerated()`

    - #### setIsAccelerated

          void setIsAccelerated(@Bool
                                Boolean isAccelerated)

      Set to `true` if the defined plugin is capable of running with a hardware accelerator; otherwise `false`. If the result is `true` then the plugin may additionally support software decompression.

      The default value for this optional property is false. To omit this optional property, call this method with `null`.

      Parameters:
        `isAccelerated` - Is the defined plugin capable of running with hardware acceleration?
      See Also:
        `ACCELERATOR_DEFAULT`

    - #### supportsAuthentication

          @Bool
          boolean supportsAuthentication()

      Returns `true` if the defined plugin is capable of supporting authentication; otherwise `false`.

      If this optional property is not present, the default value of false is returned.

      Returns:
        Is the defined plugin capable of supporting authentication?
      See Also:
        `AUTHENTICATION_DEFAULT`, `getSupportsAuthentication()`

    - #### getSupportsAuthentication

          boolean getSupportsAuthentication()

      Returns `true` if the defined plugin is capable of supporting authentication; otherwise `false`.

      If this optional property is not present, the default value of false is returned.

      Returns:
        Is the defined plugin capable of supporting authentication?
      See Also:
        `AUTHENTICATION_DEFAULT`, `supportsAuthentication()`

    - #### setSupportsAuthentication

          void setSupportsAuthentication(@Bool
                                         Boolean supportsAuthentication)

      Set to `true` if the defined plugin defined is capable of supporting authentication; otherwise `false`.

      The default value for this optional property is false. To omit this optional property, call this method with `null`.

      Parameters:
        `supportsAuthentication` - Is the defined plugin capable of supporting authentication?
      See Also:
        `AUTHENTICATION_DEFAULT`

    - #### countPluginLocators

          @UInt32
          int countPluginLocators()

      Returns the number of locators in the list of plugin locators of this plugin definition, which specify an ordered list locations that provide access to the defined plugin's implementation. The number of locators may be zero if the plugin is in the current file, which is also when this optional property is not present.

      Returns:
        Number of locators of this plugin definition.

    - #### clearPluginLocators

          void clearPluginLocators()

      Clear the list of locators to this plugin definition, omitting this optional property.

    - #### appendPluginLocator

          void appendPluginLocator(Locator pluginLocator)
                            throws NullPointerException

      Append a locator to the list of plugin locators of this plugin definition, which specify an ordered list of locations that provide access to the defined plugin's implementation. Use this method to add a locator to be scanned last when searching for the plugin's implementation. The locator list is an optional property that will be made present by calling this method if it is currently omitted.

      Parameters:
        `pluginLocator` - Locator of the plugin to append to the list of locators of this plugin definition.
      Throws:
        `NullPointerException` - The given locator to append is `null`.

    - #### prependPluginLocator

          void prependPluginLocator(Locator pluginLocator)
                             throws NullPointerException

      Prepend a locator to the list of plugin locators of this plugin definition, which specify an ordered list of locations that provide access to the defined plugin's implementation. Use this method to add a locator to be scanned first when searching for the plugin's implementation. The locator list is an optional property that will be made present by calling this method if it is currently omitted.

      Parameters:
        `pluginLocator` - Locator to prepend to the list of plugin locators of the plugin definition.
      Throws:
        `NullPointerException` - The given locator to prepend is `null`.

    - #### insertPluginLocatorAt

          void insertPluginLocatorAt(@UInt32
                                     int index,
                                     Locator pluginLocator)
                              throws NullPointerException,
                                     IndexOutOfBoundsException

      Insert a locator at the given index into the list of locators of this plugin definition, which specify an ordered list of locations that provide access to the defined plugin's implementation. Locators already existing at the named and higher indices will be moved up to the next higher index to accommodate to inserted item. The locator list is an optional property that may be made present by calling this method with an index of 0.

      Parameters:
        `index` - Index where the locator should be inserted.
        `pluginLocator` - Locator to insert into the list of plugin locators of this plugin definition.
      Throws:
        `NullPointerException` - The given locator to insert is `null`.
        `IndexOutOfBoundsException` - The given index is outside the acceptable range for the current list of locators.

    - #### getPluginLocatorAt

          Locator getPluginLocatorAt(@UInt32
                                     int index)
                              throws IndexOutOfBoundsException

      Returns the locator at the given index from the list of locators of this plugin descriptor, which specify an ordered list of locations that provide access to the defined plugin's implementation.

      Parameters:
        `index` - Index of the locator to retrieve from the list of locators.
      Returns:
        Locator at the given index in the list of locators of the plugin descriptor.
      Throws:
        `IndexOutOfBoundsException` - The given index is outside the acceptable range for the current list of locators.

    - #### removePluginLocatorAt

          void removePluginLocatorAt(@UInt32
                                     int index)
                              throws IndexOutOfBoundsException

      Remove the locator at the given index from the list of locators of the plugin definition, which specify an ordered list of locations that provide access to the defined plugin's implementation.

      Parameters:
        `index` - Index of locator to remove from the list of locators of the plugin definition.
      Throws:
        `IndexOutOfBoundsException` - The given index is outside the acceptable range for the current list of locators.

    - #### getPluginLocators

          List<? extends Locator> getPluginLocators()
                                             throws PropertyNotPresentException

      Returns the list of locators of the plugin definition, which specify an ordered list of locations that provide access to the defined plugin's implementation. This is an optional property.

      Returns:
        Shallow copy of the list of the locators for this plugin definition.
      Throws:
        `PropertyNotPresentException` - No locators for the plugin implementation are present in this plugin definition.
      See Also:
        `TypeDefinitions.LocatorStrongReferenceVector`

    - #### setImplementedClass

          void setImplementedClass(AUID implementedClass)
                            throws NullPointerException

      Sets the identifier of the implemented class of the defined plugin. This property specifies the AUID for the class definition of the definition or meta definition that the defined plugin provides an implementation for.

      As of AAF version 1.1, this property must be specified. This was an optional property in version 1.0.

      Parameters:
        `implementedClass` - Implemented class of the defined plugin.
      Throws:
        `NullPointerException` - The given definition object identifier is `null`.
      See Also:
        `getCategoryClass()`

    - #### getImplementedClass

          AUID getImplementedClass()
                            throws PropertyNotPresentException

      Returns the identifier of the implemented class of teh defined plugin.This property specifies the AUID for the class definition of the definition or meta definition that the defined plugin provides an implementation for.

      As of AAF version 1.1, this property must be specified. This was an optional property in version 1.0.

      Returns:
        Implemented class of the defined plugin.
      Throws:
        `PropertyNotPresentException` - Although the definition object should be specified, this was not a required property in older versions of the AAF specification and is not present for this plugin definition.

    - #### clone

          PluginDefinition clone()

      Create a cloned copy of this plugin definition.

      Specified by:
        `clone` in interface `DefinitionObject`
      Specified by:
        `clone` in interface `InterchangeObject`
      Specified by:
        `clone` in interface `MediaEntity`
      Returns:
        Cloned copy of this plugin definition.

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