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);
+
 }