Author: jsdelfino
Date: Sat May 10 12:19:27 2008
New Revision: 655139
URL: http://svn.apache.org/viewvc?rev=655139&view=rev
Log:
Allow multiple types to be associated with a single model resolver. This will
help resolve policies for example, as we'll be able to use a single model
resolver for policy definitions and the policy set models that they contain.
Modified:
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ExtensibleModelResolver.java
Modified:
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ExtensibleModelResolver.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ExtensibleModelResolver.java?rev=655139&r1=655138&r2=655139&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ExtensibleModelResolver.java
(original)
+++
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ExtensibleModelResolver.java
Sat May 10 12:19:27 2008
@@ -33,28 +33,30 @@
* @version $Rev$ $Date$
*/
public class ExtensibleModelResolver implements ModelResolver {
- private final ModelResolverExtensionPoint resolvers;
- private final ModelFactoryExtensionPoint factories;
+ private final ModelResolverExtensionPoint resolverExtensions;
+ private final ModelFactoryExtensionPoint modelFactories;
private final Contribution contribution;
- private final ModelResolver defaultResolver;
- private final Map<Class<?>, ModelResolver> resolverInstances = new
HashMap<Class<?>, ModelResolver>();
+ private ModelResolver defaultResolver;
+ private final Map<Class<?>, ModelResolver> resolversByModelType = new
HashMap<Class<?>, ModelResolver>();
+ private final Map<Class<?>, ModelResolver> resolversByImplementationClass
= new HashMap<Class<?>, ModelResolver>();
private Map<Object, Object> map = new HashMap<Object, Object>();
/**
* Constructs an extensible model resolver
*
- * @param resolvers
* @param contribution
- * @param factories
+ * @param resolverExtensions
+ * @param modelFactories
+ * @param defaultResolver
*/
@Deprecated
public ExtensibleModelResolver(Contribution contribution,
- ModelResolverExtensionPoint resolvers,
- ModelFactoryExtensionPoint factories,
+ ModelResolverExtensionPoint
resolverExtensions,
+ ModelFactoryExtensionPoint modelFactories,
ModelResolver defaultResolver) {
this.contribution = contribution;
- this.resolvers = resolvers;
- this.factories = factories;
+ this.resolverExtensions = resolverExtensions;
+ this.modelFactories = modelFactories;
//FIXME Remove this default resolver, this is currently used to
resolve policy declarations
// but they should be handled by the contribution import/export
mechanism instead of this
// defaultResolver hack.
@@ -64,17 +66,16 @@
/**
* Constructs an extensible model resolver
*
- * @param resolvers
+ * @param resolverExtensions
* @param contribution
- * @param factories
+ * @param modelFactories
*/
public ExtensibleModelResolver(Contribution contribution,
- ModelResolverExtensionPoint resolvers,
- ModelFactoryExtensionPoint factories) {
+ ModelResolverExtensionPoint
resolverExtensions,
+ ModelFactoryExtensionPoint modelFactories) {
this.contribution = contribution;
- this.resolvers = resolvers;
- this.factories = factories;
- this.defaultResolver = null;
+ this.resolverExtensions = resolverExtensions;
+ this.modelFactories = modelFactories;
}
/**
@@ -96,24 +97,31 @@
for (Class<?> c : classes) {
// Look up an existing model resolver instance
- ModelResolver resolverInstance = resolverInstances.get(c);
+ ModelResolver resolverInstance = resolversByModelType.get(c);
if (resolverInstance != null) {
return resolverInstance;
}
// We don't have an instance, lookup a model resolver class
// and instantiate it
- Class<? extends ModelResolver> resolverClass =
resolvers.getResolver(c);
+ Class<? extends ModelResolver> resolverClass =
resolverExtensions.getResolver(c);
if (resolverClass != null) {
+
+ // Construct the model resolver instance and cache it
+ resolverInstance =
resolversByImplementationClass.get(resolverClass);
+ if (resolverInstance != null) {
+ resolversByModelType.put(c, resolverInstance);
+ return resolverInstance;
+ }
try {
Constructor<? extends ModelResolver> constructor =
resolverClass
.getConstructor(new Class[] {Contribution.class,
ModelFactoryExtensionPoint.class});
if (constructor != null) {
- // Construct the model resolver instance and cache it
- resolverInstance =
constructor.newInstance(contribution, factories);
- resolverInstances.put(c, resolverInstance);
+ resolverInstance =
constructor.newInstance(contribution, modelFactories);
+ resolversByImplementationClass.put(resolverClass,
resolverInstance);
+ resolversByModelType.put(c, resolverInstance);
return resolverInstance;
}
} catch (Exception e) {