Package com.zfabrik.components

## Interface IComponentDescriptor

- All Known Implementing Classes:
    `AbstractComponentDescriptor`, `FSCRDBComponent`

      public interface IComponentDescriptor

  The Component Descriptor provides access to meta data as provided by component repositories (`IComponentsRepository` without requiring download of further component resources or other processing.

  A Component Descriptor can be retrieved by calling `IComponentsRepository.getComponent(String)` or by a component lookup passing this interface as expected result type:

  `IComponentsLookup.INSTANCE.lookup(<component name>,IComponentDescriptor.class);` Component metadata is provided as properties in the format of a `Properties` properties file. At least such property file should declare a component type:

       com.zfabrik.component.type=<component type>

  For example

       com.zfabrik.component.type=com.zfabrik.java

  would define a Java component.

  Component property values may be provided dynamically through implementations of `IComponentDescriptorProcessor`. Given a component property `someNameSpace.somePropertyName`, it may be further qualified with a processing style, such as JEXL3, by appending the style to the property name separated by a colon (that needs to be escaped in property file format). In the example this would look as follows:

       someNameSpace.somePropertyName\:JEXL3=....

  See the JEXL3 component descriptor processor documentation for more details.
  Author:
    hb
  See Also:
    `IComponentsRepository`, `IComponentsLookup`

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static java.lang.String` | `ANY_COMPONENT_TYPE` | Component type for "any" component.
    `static java.lang.String` | `COMPONENT_CLZ` | The class name of the component implementation.
    `static java.lang.String` | `COMPONENT_DESCRIPTOR_STYLE_PLAIN` | The default expression evaluation style for the component descriptor and default value of `#COMPONENT_DESCRIPTOR_STYLE`.
    `static java.lang.String` | `COMPONENT_NAME` | The name of the component.
    `static java.lang.String` | `COMPONENT_TYPE` | The type of a component.
    `static java.lang.String` | `DEPENDENCIES` | Components declare dependency on other components by specifying a comma-separated list of component names.
    `static java.lang.String` | `EXTENSION_POINTS` | A component may declare to an implementation of an extension point.
    `static java.lang.String` | `LINK_COMPONENT_TYPE` | Component type for component (symbolic) links.
    `static java.lang.String` | `LINK_TARGET_COMPONENT` | Component descriptor property defining the link target
    `static java.lang.String` | `REVISION_INFO` | Additional revision information.

  - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `java.lang.String` | `getName()` | Gets the name of the component.
    `java.util.Properties` | `getProperties()` | Get the properties of this component.
    `java.lang.String` | `getProperty​(java.lang.String name)` | Just a short hand for `getProperties().getProperty(String)`
    `java.util.Properties` | `getRawProperties()` | Get the raw properties of this component.
    `long` | `getRevision()` | Get the revision of the component.
    `java.lang.String` | `getType()` | Gets the type of the component.

- - ### Field Detail

    - #### COMPONENT_NAME

          static final java.lang.String COMPONENT_NAME

      The name of the component. This property can be used conveniently to convey a component name, e.g. on a servlet request or elsewhere.
      See Also:
        Constant Field Values

    - #### COMPONENT_TYPE

          static final java.lang.String COMPONENT_TYPE

      The type of a component. For example `com.zfabrik.java` for a Java component.
      See Also:
        Constant Field Values

    - #### COMPONENT_DESCRIPTOR_STYLE_PLAIN

          static final java.lang.String COMPONENT_DESCRIPTOR_STYLE_PLAIN

      The default expression evaluation style for the component descriptor and default value of `#COMPONENT_DESCRIPTOR_STYLE`. If set to this value, no expression evaluation will take place.
      See Also:
        Constant Field Values

    - #### COMPONENT_CLZ

          static final java.lang.String COMPONENT_CLZ

      The class name of the component implementation. Many component types support the use of this property, which is why it is declared here. It is by no means a necessary requirement of a component type to require an implementation class. Component's that do support specification of a component implementation class do, by convention, use JavaComponentUtil.html.loadImplementationClassFromJavaComponent() to load that implementation class.
      See Also:
        Constant Field Values

    - #### DEPENDENCIES

          static final java.lang.String DEPENDENCIES

      Components declare dependency on other components by specifying a comma-separated list of component names. All components will be queried for implementations of `IDependencyComponent` and correspondingly invoked before the component resource is even created. This is slightly different to dependencies for system states (see there) in that these dependencies will not be revisited upon synchronisations. The declaring component will be dependent on all declared dependency components.
      See Also:
        Constant Field Values

    - #### REVISION_INFO

          static final java.lang.String REVISION_INFO

      Additional revision information. This may be some original information as provided by the source.
      See Also:
        Constant Field Values

    - #### EXTENSION_POINTS

          static final java.lang.String EXTENSION_POINTS

      A component may declare to an implementation of an extension point. This property is used to express a list of extension points implemented.
      See Also:
        Constant Field Values

    - #### LINK_COMPONENT_TYPE

          static final java.lang.String LINK_COMPONENT_TYPE

      Component type for component (symbolic) links. A component link delegates all lookups and resource retrievals to another, named component that is specified using the `LINK_TARGET_COMPONENT` property. This is a low-level built-in component type.
      See Also:
        Constant Field Values

    - #### LINK_TARGET_COMPONENT

          static final java.lang.String LINK_TARGET_COMPONENT

      Component descriptor property defining the link target
      See Also:
        Constant Field Values

    - #### ANY_COMPONENT_TYPE

          static final java.lang.String ANY_COMPONENT_TYPE

      Component type for "any" component. The any component type requires specification of `COMPONENT_CLZ` and has behavior depending on the type of class:
      - If the class implements `Resource`, all `Resource` calls will be delegated.
      - If the class implements `Runnable`, it will be called upon system state attain operations.
      - Otherwise a check will be performed if the class is castable to the requested type and if so, the a singleton instance will be returned
      If no component type is specified on a component descriptor, it defaults to this type.
      See Also:
        Constant Field Values

  - ### Method Detail

    - #### getName

          java.lang.String getName()

      Gets the name of the component.

    - #### getType

          java.lang.String getType()

      Gets the type of the component. A short-hand for `getProperty(COMPONENT_TYPE)`.

    - #### getRevision

          long getRevision()

      Get the revision of the component. Minimum revision is zero. Revisions may not necessarily be strictly increasing, as components may be provided by different repositories over time.

    - #### getProperties

          java.util.Properties getProperties()

      Get the properties of this component. Note that these differ from the original configuration in these may be processed by some expression language evaluator.

    - #### getRawProperties

          java.util.Properties getRawProperties()

      Get the raw properties of this component. Note that unlike `getProperties()` the result of this method is data as defined in persistent component configuration-

    - #### getProperty

          java.lang.String getProperty​(java.lang.String name)

      Just a short hand for `getProperties().getProperty(String)`