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/02/11 21:18:56 UTC
svn commit: r1069944 - in
/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder:
LinkedRuleBuilderImpl.java ProvidersRegistry.java RegisteredProvider.java
RulesBinderImpl.java
Author: simonetripodi
Date: Fri Feb 11 20:18:56 2011
New Revision: 1069944
URL: http://svn.apache.org/viewvc?rev=1069944&view=rev
Log:
plugged a more sophisticated RuleProvider registry instead of simple collection, with indexed provider for quick search
Added:
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/ProvidersRegistry.java (with props)
Removed:
commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/RegisteredProvider.java
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/RulesBinderImpl.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=1069944&r1=1069943&r2=1069944&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 Fri Feb 11 20:18:56 2011
@@ -17,8 +17,6 @@
*/
package org.apache.commons.digester3.internal.rulesbinder;
-import java.util.Collection;
-
import org.apache.commons.digester3.Rule;
import org.apache.commons.digester3.RulesBinder;
import org.apache.commons.digester3.rulesbinder.BeanPropertySetterBuilder;
@@ -49,7 +47,7 @@ final class LinkedRuleBuilderImpl implem
/**
* The data structure where storing the providers binding.
*/
- private final Collection<RegisteredProvider> providers;
+ private final ProvidersRegistry providersRegistry;
private final ClassLoader classLoader;
@@ -58,11 +56,11 @@ final class LinkedRuleBuilderImpl implem
private String namespaceURI;
public LinkedRuleBuilderImpl(final RulesBinder mainBinder,
- final Collection<RegisteredProvider> providers,
+ final ProvidersRegistry providersRegistry,
final ClassLoader classLoader,
final String keyPattern) {
this.mainBinder = mainBinder;
- this.providers = providers;
+ this.providersRegistry = providersRegistry;
this.classLoader = classLoader;
this.keyPattern = keyPattern;
}
@@ -233,7 +231,7 @@ final class LinkedRuleBuilderImpl implem
return provider;
}
- this.providers.add(new RegisteredProvider(this.keyPattern, provider));
+ this.providersRegistry.registerProvider(this.keyPattern, provider);
return provider;
}
Added: 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=1069944&view=auto
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/ProvidersRegistry.java (added)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/ProvidersRegistry.java Fri Feb 11 20:18:56 2011
@@ -0,0 +1,89 @@
+package org.apache.commons.digester3.internal.rulesbinder;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.digester3.Rule;
+import org.apache.commons.digester3.spi.RuleProvider;
+import org.apache.commons.digester3.spi.Rules;
+
+final class ProvidersRegistry {
+
+ /**
+ * The data structure where storing the providers binding.
+ */
+ private final Collection<RegisteredProvider> providers = new ArrayList<RegisteredProvider>();
+
+ private final Map<String, List<RuleProvider<? extends Rule>>> providersIndex =
+ new HashMap<String, List<RuleProvider<? extends Rule>>>();
+
+ /**
+ *
+ *
+ * @param <R>
+ * @param <RP>
+ * @param keyPattern
+ * @param provider
+ * @return
+ */
+ public <R extends Rule, RP extends RuleProvider<R>> void registerProvider(String keyPattern, RP provider) {
+ this.providers.add(new RegisteredProvider(keyPattern, provider));
+
+ List<RuleProvider<? extends Rule>> indexedProviders = this.providersIndex.get(keyPattern);
+ if (indexedProviders == null) {
+ indexedProviders = new ArrayList<RuleProvider<? extends Rule>>();
+ this.providersIndex.put(keyPattern, indexedProviders);
+ }
+ indexedProviders.add(provider);
+ }
+
+ public <R extends Rule, RP extends RuleProvider<R>> RP getProvider(String keyPattern, Class<RP> type) {
+ List<RuleProvider<? extends Rule>> indexedProviders = this.providersIndex.get(keyPattern);
+
+ if (indexedProviders == null || indexedProviders.isEmpty()) {
+ return null;
+ }
+
+ for (RuleProvider<? extends Rule> ruleProvider : indexedProviders) {
+ if (type.isInstance(ruleProvider)) {
+ return type.cast(ruleProvider);
+ }
+ }
+
+ return null;
+ }
+
+ public void registerRules(Rules rules) {
+ for (RegisteredProvider registeredProvider : this.providers) {
+ rules.add(registeredProvider.getPattern(), registeredProvider.getProvider().get());
+ }
+ }
+
+ /**
+ * Used to associate rule providers with paths in the rules binder.
+ */
+ private static final 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;
+ }
+
+ }
+
+}
Propchange: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/ProvidersRegistry.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/ProvidersRegistry.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/ProvidersRegistry.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/RulesBinderImpl.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/RulesBinderImpl.java?rev=1069944&r1=1069943&r2=1069944&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/RulesBinderImpl.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/RulesBinderImpl.java Fri Feb 11 20:18:56 2011
@@ -48,10 +48,7 @@ public final class RulesBinderImpl imple
*/
private final List<ErrorMessage> errors = new ArrayList<ErrorMessage>();
- /**
- * The data structure where storing the providers binding.
- */
- private final Collection<RegisteredProvider> providers = new ArrayList<RegisteredProvider>();
+ private final ProvidersRegistry providersRegistry = new ProvidersRegistry();
private final ClassLoader classLoader;
@@ -108,7 +105,7 @@ public final class RulesBinderImpl imple
}
}
- return new LinkedRuleBuilderImpl(this, this.providers, this.classLoader, keyPattern);
+ return new LinkedRuleBuilderImpl(this, this.providersRegistry, this.classLoader, keyPattern);
}
/**
@@ -166,9 +163,7 @@ public final class RulesBinderImpl imple
throw new DigesterLoadingException(fmt.toString());
}
- for (RegisteredProvider registeredProvider : this.providers) {
- rules.add(registeredProvider.getPattern(), registeredProvider.getProvider().get());
- }
+ this.providersRegistry.registerRules(rules);
}
}