Author: simonetripodi
Date: Tue Feb  1 12:35:58 2011
New Revision: 1066030

URL: http://svn.apache.org/viewvc?rev=1066030&view=rev
Log:
the rules binder implementation needs just to store the sequence which rule 
providers are registered, then the Rules implementation will take care to store 
them in the proper data structure

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=1066030&r1=1066029&r2=1066030&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
 Tue Feb  1 12:35:58 2011
@@ -18,8 +18,8 @@
 package org.apache.commons.digester3;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
-import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -52,13 +52,13 @@ final class RulesBinderImpl implements R
     /**
      * The data structure where storing the providers binding.
      */
-    private final Map<String, List<RuleProvider<? extends Rule>>> providers;
+    private final Collection<RegisteredProvider> providers;
 
     /**
      * Creates a new {@link RulesBinder} instance with no bound providers.
      */
     public RulesBinderImpl() {
-        this(new LinkedHashMap<String, List<RuleProvider<? extends Rule>>>());
+        this(new ArrayList<RegisteredProvider>());
     }
 
     /**
@@ -67,7 +67,7 @@ final class RulesBinderImpl implements R
      *
      * @param providers the data structure where storing the providers binding.
      */
-    public RulesBinderImpl(Map<String, List<RuleProvider<? extends Rule>>> 
providers) {
+    public RulesBinderImpl(Collection<RegisteredProvider> providers) {
         this.providers = providers;
     }
 
@@ -492,12 +492,7 @@ final class RulesBinderImpl implements R
                     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);
+                providers.add(new RegisteredProvider(keyPattern, provider));
 
                 return provider;
             }
@@ -518,6 +513,30 @@ final class RulesBinderImpl implements R
     }
 
     /**
+     * Used to associate rule providers with paths in the rules binder.
+     */
+    private static class RegisteredProvider {
+
+        private final String pattern;
+
+        private final RuleProvider<? extends Rule> provider;
+
+        public <R extends Rule> RegisteredProvider(String pattern, 
RuleProvider<R> provider) {
+            this.pattern = pattern;
+            this.provider = provider;
+        }
+
+        public String getPattern() {
+            return pattern;
+        }
+
+        public RuleProvider<? extends Rule> getProvider() {
+            return provider;
+        }
+
+    }
+
+    /**
      * Abstract {@link ParamTypeBuilder} implementation for {@code setNext()}, 
{@code setRoot()} and {@code setTop()}
      *
      * @param <R> The rule type has to be created


Reply via email to