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 2011/01/31 14:18:21 UTC
svn commit: r1065598 - in
/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3:
RulesBinderImpl.java rulesbinder/LinkedRuleBuilder.java
Author: simonetripodi
Date: Mon Jan 31 13:18:20 2011
New Revision: 1065598
URL: http://svn.apache.org/viewvc?rev=1065598&view=rev
Log:
added EDSL methods to allow users bind custom rules/rules built by custom providers
Modified:
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/RulesBinderImpl.java
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rulesbinder/LinkedRuleBuilder.java
Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/RulesBinderImpl.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/RulesBinderImpl.java?rev=1065598&r1=1065597&r2=1065598&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/RulesBinderImpl.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/RulesBinderImpl.java Mon Jan 31 13:18:20 2011
@@ -20,6 +20,7 @@ package org.apache.commons.digester3;
import java.util.ArrayList;
import java.util.List;
+import org.apache.commons.digester3.rulesbinder.BackToLinkedRuleBuilder;
import org.apache.commons.digester3.rulesbinder.BeanPropertySetterBuilder;
import org.apache.commons.digester3.rulesbinder.CallMethodBuilder;
import org.apache.commons.digester3.rulesbinder.CallParamBuilder;
@@ -33,6 +34,7 @@ import org.apache.commons.digester3.rule
import org.apache.commons.digester3.rulesbinder.PathCallParamBuilder;
import org.apache.commons.digester3.rulesbinder.SetPropertiesBuilder;
import org.apache.commons.digester3.rulesbinder.SetPropertyBuilder;
+import org.apache.commons.digester3.spi.RuleProvider;
/**
* The Digester EDSL implementation.
@@ -175,7 +177,9 @@ final class RulesBinderImpl implements R
return null;
}
- return new ObjectCreateRule(this.className, this.attributeName);
+ ObjectCreateRule rule = new ObjectCreateRule(this.className, this.attributeName);
+ rule.setNamespaceURI(namespaceURI);
+ return rule;
}
public LinkedRuleBuilder then() {
@@ -217,6 +221,44 @@ final class RulesBinderImpl implements R
return null;
}
+ /**
+ *
+ */
+ public <R extends Rule> BackToLinkedRuleBuilder<R> addRule(final R rule) {
+ if (rule == null) {
+ addError("{forPattern(\"%s\").addRule()} null rule not valid", keyPattern);
+ }
+
+ return this.addRuleCreatedBy(new RuleProvider<R>() {
+
+ public R get() {
+ return rule;
+ }
+
+ });
+ }
+
+ /**
+ *
+ */
+ public <R extends Rule> BackToLinkedRuleBuilder<R> addRuleCreatedBy(final RuleProvider<R> provider) {
+ if (provider == null) {
+ addError("{forPattern(\"%s\").addRuleCreatedBy()} null rule not valid", keyPattern);
+ }
+
+ return new BackToLinkedRuleBuilder<R>() {
+
+ public LinkedRuleBuilder then() {
+ return mainBuilder;
+ }
+
+ public R get() {
+ return provider.get();
+ }
+
+ };
+ }
+
};
}
Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rulesbinder/LinkedRuleBuilder.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rulesbinder/LinkedRuleBuilder.java?rev=1065598&r1=1065597&r2=1065598&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rulesbinder/LinkedRuleBuilder.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rulesbinder/LinkedRuleBuilder.java Mon Jan 31 13:18:20 2011
@@ -17,10 +17,12 @@
*/
package org.apache.commons.digester3.rulesbinder;
+import org.apache.commons.digester3.Rule;
import org.apache.commons.digester3.SetNextRule;
import org.apache.commons.digester3.SetRootRule;
import org.apache.commons.digester3.SetTopRule;
import org.apache.commons.digester3.spi.ObjectCreationFactory;
+import org.apache.commons.digester3.spi.RuleProvider;
/**
* Builder invoked to bind one or more rules to a pattern.
@@ -119,4 +121,22 @@ public interface LinkedRuleBuilder {
*/
ParamTypeBuilder<SetTopRule> setTop(String methodName);
+ /**
+ * Add a custom user rule in the specified pattern.
+ *
+ * @param <R>
+ * @param rule
+ * @return
+ */
+ <R extends Rule> BackToLinkedRuleBuilder<R> addRule(R rule);
+
+ /**
+ * Add a custom user rule in the specified pattern built by the given provider.
+ *
+ * @param <R>
+ * @param provider
+ * @return
+ */
+ <R extends Rule> BackToLinkedRuleBuilder<R> addRuleCreatedBy(RuleProvider<R> provider);
+
}