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 21:34:33 UTC

svn commit: r1065755 - /commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/RulesBinderImpl.java

Author: simonetripodi
Date: Mon Jan 31 20:34:33 2011
New Revision: 1065755

URL: http://svn.apache.org/viewvc?rev=1065755&view=rev
Log:
added the data structure where storing the rule providers binding + accessing method

Modified:
    commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/RulesBinderImpl.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=1065755&r1=1065754&r2=1065755&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 20:34:33 2011
@@ -19,6 +19,7 @@ package org.apache.commons.digester3;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -49,6 +50,28 @@ final class RulesBinderImpl implements R
     private final List<ErrorMessage> errors = new ArrayList<ErrorMessage>();
 
     /**
+     * The data structure where storing the providers binding.
+     */
+    private final Map<String, List<RuleProvider<? extends Rule>>> providers;
+
+    /**
+     * Creates a new {@link RulesBinder} instance with no bound providers.
+     */
+    public RulesBinderImpl() {
+        this(new LinkedHashMap<String, List<RuleProvider<? extends Rule>>>());
+    }
+
+    /**
+     * Creates a new {@link RulesBinder} instance with already bound providers,
+     * useful when creating child Digester from an existing configuration.
+     *
+     * @param providers the data structure where storing the providers binding.
+     */
+    public RulesBinderImpl(Map<String, List<RuleProvider<? extends Rule>>> providers) {
+        this.providers = providers;
+    }
+
+    /**
      * {@inheritDoc}
      */
     public void addError(String messagePattern, Object... arguments) {
@@ -403,6 +426,28 @@ final class RulesBinderImpl implements R
                 };
             }
 
+            /**
+             * Add a provider in the data structure where storing the providers binding.
+             *
+             * @param <R> The rule will be created by the given provider
+             * @param provider The provider has to be stored in the data structure
+             * @return The provider itself has to be stored in the data structure
+             */
+            private <R extends Rule> RuleProvider<R> addProvider(RuleProvider<R> provider) {
+                if (keyPattern == null) {
+                    return provider;
+                }
+
+                List<RuleProvider<? extends Rule>> providerLits = providers.get(keyPattern);
+                if (providerLits == null) {
+                    providerLits = new ArrayList<RuleProvider<? extends Rule>>();
+                    providers.put(keyPattern, providerLits);
+                }
+                providerLits.add(provider);
+
+                return provider;
+            }
+
         };
     }