AttributeDefinition
Date: 2016-06-25

org.osgi.service.metatype.annotations

## Annotation Type AttributeDefinition

-     @Retention(value=CLASS)
      @Target(value=METHOD)
      public @interface AttributeDefinition

  `AttributeDefinition` information for the annotated method.

  Each method of a type annotated by `ObjectClassDefinition` has an implied AttributeDefinition annotation. This annotation is only used to specify non-default AttributeDefinition information.

  The `id` of this AttributeDefinition is generated from the name of the annotated method. The annotated method name is processed from left to right changing each character as follows:

  - A dollar sign (`'$'` \u0024) is removed unless it is followed by another dollar sign in which case the two consecutive dollar signs ( `'$$'`) are changed to a single dollar sign.
  - A low line (`'_'` \u005F) is changed to a full stop ( `'.'` \u002E) unless is it followed by another low line in which case the two consecutive low lines (`'__'`) are changed to a single low line.
  - All other characters are unchanged.
  This id is the value of the id attribute of the generate AD element and is used as the name of the corresponding configuration property.

  This annotation is not processed at runtime. It must be processed by tools and used to contribute to a Meta Type Resource document for the bundle.

  See Also:
    "The AD element of a Meta Type Resource."

- - ### Optional Element Summary

    Optional Elements
    Modifier and Type | Optional Element and Description
    --- | ---
    `int` | `cardinality` The cardinality of this AttributeDefinition.
    `java.lang.String[]` | `defaultValue` The default value for this AttributeDefinition.
    `java.lang.String` | `description` The human readable description of this AttributeDefinition.
    `java.lang.String` | `max` The maximum value for this AttributeDefinition.
    `java.lang.String` | `min` The minimum value for this AttributeDefinition.
    `java.lang.String` | `name` The human readable name of this AttributeDefinition.
    `Option[]` | `options` The option information for this AttributeDefinition.
    `boolean` | `required` The required value for this AttributeDefinition.
    `AttributeType` | `type` The type of this AttributeDefinition.

- - ### Element Detail

    - #### name

          public abstract java.lang.String name

      The human readable name of this AttributeDefinition.

      If not specified, the name of this AttributeDefinition is derived from the name of the annotated method. For example, low line (`'_'` \u005F) and dollar sign (`'$'` \u0024) are replaced with space (`' '` \u0020) and space is inserted between camel case words.

      If the name begins with the percent sign (`'%'` \u0025), the name can be `localized`.

      See Also:
        "The name attribute of the AD element of a Meta Type Resource."
      Default:
        ""

    - #### description

          public abstract java.lang.String description

      The human readable description of this AttributeDefinition.

      If not specified, the description of this AttributeDefinition is the empty string.

      If the description begins with the percent sign (`'%'` \u0025), the description can be `localized`.

      See Also:
        "The description attribute of the AD element of a Meta Type Resource."
      Default:
        ""

    - #### type

          public abstract AttributeType type

      The type of this AttributeDefinition.

      This must be one of the defined `attributes types`.

      If not specified, the type is derived from the return type of the annotated method. Return types of `Class` and `Enum` are mapped to `STRING`. If the return type is `List`, `Set`, `Collection`, `Iterable` or some type which can be determined at annotation processing time to

      1. be a subtype of `Collection` and
      2. have a public no argument constructor,
      then the type is derived from the generic type. For example, a return type of `List<String>` will be mapped to `STRING`. A return type of a single dimensional array is supported and the type is the component type of the array. Multi dimensional arrays are not supported. Annotation return types are not supported. Any unrecognized type is mapped to `STRING`. A tool processing the annotation should declare an error for unsupported return types.
      See Also:
        "The type attribute of the AD element of a Meta Type Resource."
      Default:
        org.osgi.service.metatype.annotations.AttributeType.STRING

    - #### cardinality

          public abstract int cardinality

      The cardinality of this AttributeDefinition.

      If not specified, the cardinality is derived from the return type of the annotated method. For an array return type, the cardinality is a large positive value. If the return type is `List`, `Set`, `Collection`, `Iterable` or some type which can be determined at annotation processing time to

      1. be a subtype of `Collection` and
      2. have a public no argument constructor,
      the cardinality is a large negative value. Otherwise, the cardinality is 0.
      See Also:
        "The cardinality attribute of the AD element of a Meta Type Resource."
      Default:
        0

    - #### min

          public abstract java.lang.String min

      The minimum value for this AttributeDefinition.

      If not specified, there is no minimum value.

      See Also:
        "The min attribute of the AD element of a Meta Type Resource."
      Default:
        ""

    - #### max

          public abstract java.lang.String max

      The maximum value for this AttributeDefinition.

      If not specified, there is no maximum value.

      See Also:
        "The max attribute of the AD element of a Meta Type Resource."
      Default:
        ""

    - #### defaultValue

          public abstract java.lang.String[] defaultValue

      The default value for this AttributeDefinition.

      The specified values are concatenated into a comma delimited list to become the value of the `default` attribute of the generated `AD` element.

      If not specified and the annotated method is an annotation element that has a `default` value, then the value of this element is the `default` value of the annotated element. Otherwise, there is no default value.

      See Also:
        "The default attribute of the AD element of a Meta Type Resource."
      Default:
        {}

    - #### required

          public abstract boolean required

      The required value for this AttributeDefinition.

      If not specified, the value is `true`.

      See Also:
        "The required attribute of the AD element of a Meta Type Resource."
      Default:
        true

    - #### options

          public abstract Option[] options

      The option information for this AttributeDefinition.

      For each specified `Option`, an `Option` element is generated for this AttributeDefinition.

      If not specified, the option information is derived from the return type of the annotated method. If the return type is an `enum`, a single dimensional array of an `enum`, or a `List`, `Set`, `Collection`, `Iterable` or some type which can be determined at annotation processing time to

      1. be a subtype of `Collection` and
      2. have a public no argument constructor,
      with a generic type of an `enum`, then the value of this element has an `Option` for each value of the `enum`. The label and value of each `Option` are set to the name of the corresponding `enum` value. Otherwise, no `Option` elements will be generated.
      See Also:
        "The Option element of a Meta Type Resource."
      Default:
        {}