@Revision(value="$Revision: 1.6 $", date="$Date: 2006/12/16 05:17:23 $", tag="$Name: $")

Package rcf.core.framework.component

The basis of the RCF component framework, on top of which all the bundling and application level indirection is built.

See:
          Description

Interface Summary
ComponentClass TODO: Javadoc
DynamicBound TODO: Javadoc
DynamicComponent TODO: Javadoc
DynamicOperation TODO: Javadoc
DynamicProperty<T> TODO: Javadoc
DynamicPropertyEvent<T,P extends DynamicProperty<T>> TODO: Javadoc
Mirror TODO: Javadoc All implementations MUST have a constructor which takes no arguments.
ReflectedBindable<DB extends DynamicBound> TODO: Javadoc
ReflectedComponent TODO: Javadoc
ReflectedOperation TODO: Javadoc
ReflectedParameter<T> TODO: Javadoc
ReflectedProperty TODO: Javadoc
 

Class Summary
AbstractDynamicProperty<T> TODO: Javadoc
AbstractDynamicProperty.BooleanUpdate TODO: Javadoc
AbstractDynamicProperty.DoubleUpdate TODO: Javadoc
AbstractDynamicProperty.EnumComboUpdate<T> TODO: Javadoc
AbstractDynamicProperty.EnumRadioUpdate<T> TODO: Javadoc
AbstractDynamicProperty.IntegerUpdate TODO: Javadoc
AbstractDynamicProperty.StringUpdate TODO: Javadoc
CompleteDynamicProperty<T> TODO: Javadoc
ComponentHelpers TODO: Javadoc
ComponentHelpers.FilterComponentInterface TODO: Javadoc
DefaultDynamicProperty<T> TODO: Javadoc
DynamicComponent.Abstract TODO: Javadoc
DynamicComponent.Default TODO: Javadoc
DynamicOperation.Default TODO: Javadoc
DynamicProperty.Default<T> TODO: Javadoc
DynamicPropertyEvent.Caused<T,P extends DynamicProperty<T>> TODO: Javadoc
DynamicPropertyEvent.Default<T,P extends DynamicProperty<T>> TODO: Javadoc
FilteredDynamicProperty<T> TODO: Javadoc
Mirror.Caching TODO: Javadoc
Mirror.Default TODO: Javadoc
ReflectedComponent.Default TODO: Javadoc
ReflectedOperation.Default TODO: Javadoc
ReflectedParameter.Default<T> TODO: Javadoc
ReflectedProperty.Default TODO: Javadoc
 

Enum Summary
DynamicBound.GUIType TODO: Javadoc
OperationType TODO: Javadoc
PropertyMode TODO: Javadoc
PropertyUse TODO: Javadoc
 

Annotation Types Summary
StaticComponent TODO: Javadoc
StaticGetMethod TODO: Javadoc Indicates that the annotated method is a get method for an option property.
StaticOperation TODO: Javadoc
StaticParameter TODO: Javadoc
StaticProperty TODO: Javadoc
StaticPropertyMethod TODO: Javadoc Indicates that a method will return a DynamicProperty representing the named property.
StaticSetMethod TODO: Javadoc Indicates that the annotated method is a set method for an option property.
 

Package rcf.core.framework.component Description

The basis of the RCF component framework, on top of which all the bundling and application level indirection is built.

Overview

As an introduction, using OOP terms a component is the rough equivalent of an object, an operation is a method and a property is a field. These terms are defined to avoid overlapping with the java reflection code in java.lang and java.lang.reflect.

The framework can be used to get a ReflectedComponent from a Class through the ComponentHelpers#mirror(Class) method. At the base an instance of Mirror provides the actual translation. There is a base mirror for StaticComponents: Mirror.Caching which includes support for caching these translations.

Once obtained a reflected component can be bound to an instance to get a dynamic component. This can then be used to get dynamic operations and dynamic properties, which can then manipulate the instance.

The framework can also be used to get a dynamic component directly from an instance using the ComponentHelpers.mirror(Object) method. An instance of a class which itself extends DynamicComponent does not require the framework for this step, as it directly supports this interface. The instance can be cast DynamicComponent.

This means that an instance may provide support for dynamic addition and removal of operations and properties. The component may also wish to specify a custom mirror to StaticComponent using the StaticComponent.value() in order to have the ReflectedComponent properly reflect these or other changes.

Properties

StaticGetMethod and StaticSetMethod are annotations for property change methods. StaticProperty is an annotation for an actual field, so that the property can be modified through an instance of DynamicProperty. StaticPropertyMethod is an annotation for a method returning a DynamicProperty for accessing a property; this allows a component to provide its own direct implementation of DynamicProperty for whatever reason. PropertyUse and OperationType are just for GUI generation and human consumption.

Operations

StaticOperation is an annotation for a method which does something, i.e. performs some useful computation. Parameters can be annotated using StaticParameter to indicate their use. PropertyUse and OperationType is just for GUI generation and human consumption.

Componenets

StaticComponent is an annotation indicating that an iterface or class is a component. Any class annotated with StaticComponent, or inheriting such an interface is a component class, and instance of such a class is a component object or component instance. A component class is represented by an instance of ReflectedComponent which is generated by the Mirror specified by the StaticComponent.value() attribute in the lowest component in the class inheritance hierarchy. A component object is represented by an instance of DynamicComponent, which may in fact be the component object itself. A component class directly implementing the DynamicComponent interface is a dynamic component.

Framework

ComponentHelpers.mirror(java.lang.Class) will return a ReflectedComponent from a component class. ComponentHelpers#mirror(java.lang.Object) will return a DynamicComponent from a component object. All calls to the above framework functions must use the DynamicComponent interface if it is supported by a component object.

Types of Components

Static
Declarative with annotations.
Dynamic
Supports DynamicComponent, may change its supported operations and properties.
Reflected
Auto-generated meta-data.
TODO: Javadoc
TODO: Javadoc review, Seal/Finalize
TODO: What about using an enum instead of string based names? Could the type of the names be a type parameter?

Author:
Greg Gibeling