Author: simonetripodi Date: Tue Jul 20 08:48:34 2010 New Revision: 965758 URL: http://svn.apache.org/viewvc?rev=965758&view=rev Log: added Providers and Handlers description
Modified: commons/sandbox/at-digester/trunk/src/java/org/apache/commons/digester/annotations/package.html Modified: commons/sandbox/at-digester/trunk/src/java/org/apache/commons/digester/annotations/package.html URL: http://svn.apache.org/viewvc/commons/sandbox/at-digester/trunk/src/java/org/apache/commons/digester/annotations/package.html?rev=965758&r1=965757&r2=965758&view=diff ============================================================================== --- commons/sandbox/at-digester/trunk/src/java/org/apache/commons/digester/annotations/package.html (original) +++ commons/sandbox/at-digester/trunk/src/java/org/apache/commons/digester/annotations/package.html Tue Jul 20 08:48:34 2010 @@ -147,6 +147,72 @@ public @interface ObjectCreate { }</pre> + <h4>Rule provider implementation</h4> + <p>A Digester rule provider implementation performs the rule creation + of a given annotation for a given annotated element. The implementation + classes are specified by the <code>providedBy</code> element of the + <code>@DigesterRule</code> annotation that decorates the rule annotation + definition. The rule provider implementation implements the + <code>org.apache.commons.digester.annotations.AnnotationRuleProvider<A extends Annotation, E extends AnnotatedElement, R extends Rule></code> + interface.</p> + + <h4>Example</h4> + <pre>class ObjectCreateRuleProvider implements AnnotationRuleProvider<ObjectCreate, Class<?>, ObjectCreateRule> { + + private Class<?> clazz; + + public void init(ObjectCreate annotation, Class<?> element) { + this.clazz = element; + } + + public ObjectCreateRule get() { + return new ObjectCreateRule(this.clazz); + } + +}</pre> + + <h5>Notes</h5> + <p>A new instance of the provider will be created each time the Digester + annotations processor will meet the relative rule that requests it.</p> + <p>To supply the missing <code>AnnotatedElement</code> for methods + <code>PARAMETER</code>s, the Digester annotation processor come with the + <code>org.apache.commons.digester.annotations.reflect.MethodArgument</code> + class.</p> + + <h4>Digester loader handler implementation</h4> + <p>The Digester loader handler is an <code>AnnotatedElement</code> + interceptor invoked when meeting a particular Digester rule annotation + while analyzing the target class.</p> + + <p>By default, the Digester annotations processor, when meeting a + Digester annotation rule, extracts the rule pattern and the relative + rule provider to store it in the + <code>org.apache.commons.digester.annotations.FromAnnotationsRuleSet</code>, + an <code>org.apache.commons.digester.RuleSet</code> implementation.</p> + + <p>If designers have the need of a more elaborate annottaion processing, + they can specify the <code>handledBy</code> element of the + <code>@DigesterRule</code> annotation that decorates the rule annotation + definition. The Digester loader handler implementation implements the + <code>DigesterLoaderHandler<A extends Annotation, E extends AnnotatedElement></code> + interface.</p> + + <h4>Example</h4> + <pre>class SetPropertiesLoaderHandler implements DigesterLoaderHandler<SetProperty, Field> { + + public void handle(SetProperty annotation, Field element, FromAnnotationsRuleSet ruleSet) { + SetPropertiesRuleProvider ruleProvider = ruleSet.getProvider(annotation.pattern(), SetPropertiesRuleProvider.class); + + if (ruleProvider == null) { + ruleProvider = new SetPropertiesRuleProvider(); + ruleSet.addRuleProvider(annotation.pattern(), ruleProvider); + } + + ruleProvider.addAlias(annotation, element); + } + +}</pre> + <a name="doc.BuiltinRules"></a> <h3>Built-in Rules</h3>