Author: simonetripodi
Date: Sat Feb 12 16:33:10 2011
New Revision: 1070108

URL: http://svn.apache.org/viewvc?rev=1070108&view=rev
Log:
when looking for a specific implementation of RuleProvider in the registry, the 
namespace URI has to be checked as well with the matching pattern

Modified:
    
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/LinkedRuleBuilderImpl.java
    
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/ProvidersRegistry.java

Modified: 
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/LinkedRuleBuilderImpl.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/LinkedRuleBuilderImpl.java?rev=1070108&r1=1070107&r2=1070108&view=diff
==============================================================================
--- 
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/LinkedRuleBuilderImpl.java
 (original)
+++ 
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/LinkedRuleBuilderImpl.java
 Sat Feb 12 16:33:10 2011
@@ -142,7 +142,8 @@ final class LinkedRuleBuilderImpl implem
      */
     public NestedPropertiesBuilder setNestedProperties() {
         // that would be useful when adding rules via automatically generated 
rules binding (such annotations)
-        NestedPropertiesBuilder nestedPropertiesBuilder = 
this.providersRegistry.getProvider(this.keyPattern, 
NestedPropertiesBuilder.class);
+        NestedPropertiesBuilder nestedPropertiesBuilder =
+            this.providersRegistry.getProvider(this.keyPattern, 
this.namespaceURI, NestedPropertiesBuilder.class);
         if (nestedPropertiesBuilder != null) {
             return nestedPropertiesBuilder;
         }
@@ -167,7 +168,8 @@ final class LinkedRuleBuilderImpl implem
      */
     public SetPropertiesBuilder setProperties() {
         // that would be useful when adding rules via automatically generated 
rules binding (such annotations)
-        SetPropertiesBuilder setPropertiesBuilder = 
this.providersRegistry.getProvider(this.keyPattern, SetPropertiesBuilder.class);
+        SetPropertiesBuilder setPropertiesBuilder =
+            this.providersRegistry.getProvider(this.keyPattern, 
this.namespaceURI, SetPropertiesBuilder.class);
         if (setPropertiesBuilder != null) {
             return setPropertiesBuilder;
         }

Modified: 
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/ProvidersRegistry.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/ProvidersRegistry.java?rev=1070108&r1=1070107&r2=1070108&view=diff
==============================================================================
--- 
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/ProvidersRegistry.java
 (original)
+++ 
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/ProvidersRegistry.java
 Sat Feb 12 16:33:10 2011
@@ -40,7 +40,9 @@ final class ProvidersRegistry {
         indexedProviders.add(provider);
     }
 
-    public <R extends Rule, RP extends RuleProvider<R>> RP getProvider(String 
keyPattern, Class<RP> type) {
+    public <R extends Rule, RP extends RuleProvider<R>> RP getProvider(String 
keyPattern,
+            /* @Nullable */ String namespaceURI,
+            Class<RP> type) {
         List<RuleProvider<? extends Rule>> indexedProviders = 
this.providersIndex.get(keyPattern);
 
         if (indexedProviders == null || indexedProviders.isEmpty()) {
@@ -49,7 +51,14 @@ final class ProvidersRegistry {
 
         for (RuleProvider<? extends Rule> ruleProvider  : indexedProviders) {
             if (type.isInstance(ruleProvider)) {
-                return type.cast(ruleProvider);
+                if (namespaceURI == null) {
+                    if (ruleProvider.getNamespaceURI() == null) {
+                        return type.cast(ruleProvider);
+                    }
+                } else if (ruleProvider.getNamespaceURI() != null
+                        && 
namespaceURI.equals(ruleProvider.getNamespaceURI())) {
+                    return type.cast(ruleProvider);
+                }
             }
         }
 


Reply via email to