You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by si...@apache.org on 2010/01/27 09:58:45 UTC
svn commit: r903570 - in
/commons/sandbox/at-digester/trunk/src/java/org/apache/commons/digester/annotations:
FromAnnotationsRuleSet.java handlers/DefaultLoaderHandler.java
handlers/MethodHandler.java utils/AnnotationRuleProviderUtils.java
Author: simonetripodi
Date: Wed Jan 27 08:58:44 2010
New Revision: 903570
URL: http://svn.apache.org/viewvc?rev=903570&view=rev
Log:
moved the AnnotationRuleProviderUtils code to the FromAnnotationsRuleSet
removed the useless class AnnotationRuleProviderUtils
Removed:
commons/sandbox/at-digester/trunk/src/java/org/apache/commons/digester/annotations/utils/AnnotationRuleProviderUtils.java
Modified:
commons/sandbox/at-digester/trunk/src/java/org/apache/commons/digester/annotations/FromAnnotationsRuleSet.java
commons/sandbox/at-digester/trunk/src/java/org/apache/commons/digester/annotations/handlers/DefaultLoaderHandler.java
commons/sandbox/at-digester/trunk/src/java/org/apache/commons/digester/annotations/handlers/MethodHandler.java
Modified: commons/sandbox/at-digester/trunk/src/java/org/apache/commons/digester/annotations/FromAnnotationsRuleSet.java
URL: http://svn.apache.org/viewvc/commons/sandbox/at-digester/trunk/src/java/org/apache/commons/digester/annotations/FromAnnotationsRuleSet.java?rev=903570&r1=903569&r2=903570&view=diff
==============================================================================
--- commons/sandbox/at-digester/trunk/src/java/org/apache/commons/digester/annotations/FromAnnotationsRuleSet.java (original)
+++ commons/sandbox/at-digester/trunk/src/java/org/apache/commons/digester/annotations/FromAnnotationsRuleSet.java Wed Jan 27 08:58:44 2010
@@ -26,6 +26,7 @@
import java.util.Set;
import java.util.Map.Entry;
+import org.apache.commons.beanutils.ConstructorUtils;
import org.apache.commons.digester.Digester;
import org.apache.commons.digester.Rule;
import org.apache.commons.digester.RuleSet;
@@ -75,6 +76,35 @@
}
/**
+ * Builds and register an {@link AnnotationRuleProvider} for a specific
+ * pattern.
+ *
+ * @param <T> the {@link AnnotationRuleProvider} type.
+ * @param pattern the pattern has to be associated to the rule provider.
+ * @param klass the {@link AnnotationRuleProvider} type has to be instantiated.
+ * @param annotation the current visited annotation.
+ * @param element the current visited element.
+ */
+ public <T extends AnnotationRuleProvider<? extends Annotation, ? extends AnnotatedElement, ? extends Rule>> void addRuleProvider(String pattern,
+ Class<T> klass,
+ Annotation annotation,
+ AnnotatedElement element) {
+ Object[] args = new Object[] { annotation, element };
+ Class<?>[] parameterTypes = new Class<?>[] { annotation.annotationType(), element.getClass() };
+
+ try {
+ Object o = ConstructorUtils.invokeExactConstructor(klass,
+ args,
+ parameterTypes);
+ this.addRuleProvider(pattern, klass.cast(o));
+ } catch (Throwable t) {
+ throw new DigesterLoadingException("Impossible to instantiate provider of type '"
+ + klass.getName()
+ + "', see nested exceptions", t);
+ }
+ }
+
+ /**
* Register an {@link AnnotationRuleProvider} for a specific pattern.
*
* @param pattern the pattern has to be associated to the rule provider.
Modified: commons/sandbox/at-digester/trunk/src/java/org/apache/commons/digester/annotations/handlers/DefaultLoaderHandler.java
URL: http://svn.apache.org/viewvc/commons/sandbox/at-digester/trunk/src/java/org/apache/commons/digester/annotations/handlers/DefaultLoaderHandler.java?rev=903570&r1=903569&r2=903570&view=diff
==============================================================================
--- commons/sandbox/at-digester/trunk/src/java/org/apache/commons/digester/annotations/handlers/DefaultLoaderHandler.java (original)
+++ commons/sandbox/at-digester/trunk/src/java/org/apache/commons/digester/annotations/handlers/DefaultLoaderHandler.java Wed Jan 27 08:58:44 2010
@@ -23,7 +23,6 @@
import org.apache.commons.digester.annotations.DigesterLoaderHandler;
import org.apache.commons.digester.annotations.DigesterRule;
import org.apache.commons.digester.annotations.FromAnnotationsRuleSet;
-import org.apache.commons.digester.annotations.utils.AnnotationRuleProviderUtils;
import org.apache.commons.digester.annotations.utils.AnnotationUtils;
/**
@@ -41,7 +40,9 @@
public void handle(Annotation annotation, AnnotatedElement element, FromAnnotationsRuleSet ruleSet) {
DigesterRule digesterRule = annotation.annotationType().getAnnotation(DigesterRule.class);
ruleSet.addRuleProvider(AnnotationUtils.getAnnotationPattern(annotation),
- AnnotationRuleProviderUtils.newProvider(digesterRule.providedBy(), annotation, element));
+ digesterRule.providedBy(),
+ annotation,
+ element);
}
}
Modified: commons/sandbox/at-digester/trunk/src/java/org/apache/commons/digester/annotations/handlers/MethodHandler.java
URL: http://svn.apache.org/viewvc/commons/sandbox/at-digester/trunk/src/java/org/apache/commons/digester/annotations/handlers/MethodHandler.java?rev=903570&r1=903569&r2=903570&view=diff
==============================================================================
--- commons/sandbox/at-digester/trunk/src/java/org/apache/commons/digester/annotations/handlers/MethodHandler.java (original)
+++ commons/sandbox/at-digester/trunk/src/java/org/apache/commons/digester/annotations/handlers/MethodHandler.java Wed Jan 27 08:58:44 2010
@@ -27,7 +27,6 @@
import org.apache.commons.digester.annotations.DigesterRule;
import org.apache.commons.digester.annotations.DigesterRuleList;
import org.apache.commons.digester.annotations.FromAnnotationsRuleSet;
-import org.apache.commons.digester.annotations.utils.AnnotationRuleProviderUtils;
import org.apache.commons.digester.annotations.utils.AnnotationUtils;
/**
@@ -113,7 +112,9 @@
DigesterRule digesterRule = methodAnnotation.annotationType().getAnnotation(DigesterRule.class);
ruleSet.addRuleProvider(AnnotationUtils.getAnnotationPattern(annotation),
- AnnotationRuleProviderUtils.newProvider(digesterRule.providedBy(), methodAnnotation, method));
+ digesterRule.providedBy(),
+ methodAnnotation,
+ method);
} else if (annotation.annotationType().isAnnotationPresent(DigesterRuleList.class)) {
// check if it is one of the *.List annotation
Annotation[] annotations = AnnotationUtils.getAnnotationsArrayValue(annotation);