From fbcd4c322ba39715d1ba5e88b88a7ebd7342656d Mon Sep 17 00:00:00 2001 From: rfeng Date: Tue, 12 Jul 2011 19:54:10 +0000 Subject: Allow other collection types for multiplicity injection git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1145739 13f79535-47bb-0310-9956-ffa450edef68 --- .../injection/ListMultiplicityObjectFactory.java | 34 ++++++++++++++++------ .../invocation/JavaInstanceFactoryProvider.java | 4 +-- 2 files changed, 27 insertions(+), 11 deletions(-) (limited to 'sca-java-2.x/trunk/modules') diff --git a/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/ListMultiplicityObjectFactory.java b/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/ListMultiplicityObjectFactory.java index 2906897e96..a0af933c71 100644 --- a/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/ListMultiplicityObjectFactory.java +++ b/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/ListMultiplicityObjectFactory.java @@ -19,7 +19,12 @@ package org.apache.tuscany.sca.implementation.java.injection; import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; import java.util.List; +import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; import org.apache.tuscany.sca.core.factory.ObjectCreationException; import org.apache.tuscany.sca.core.factory.ObjectFactory; @@ -30,21 +35,32 @@ import org.apache.tuscany.sca.core.factory.ObjectFactory; * * @version $Rev$ $Date$ */ -public class ListMultiplicityObjectFactory implements ObjectFactory> { +public class ListMultiplicityObjectFactory implements ObjectFactory> { - private ObjectFactory[] factories; + private Collection> factories; + private Class collectionType; - public ListMultiplicityObjectFactory(List> factories) { + public ListMultiplicityObjectFactory(List> factories, Class collectionType) { assert factories != null : "Object factories were null"; - this.factories = factories.toArray(new ObjectFactory[factories.size()]); + this.factories = factories; + this.collectionType = collectionType; } - public List getInstance() throws ObjectCreationException { - List list = new ArrayList(); - for (ObjectFactory factory : factories) { - list.add(factory.getInstance()); + public Collection getInstance() throws ObjectCreationException { + Collection collection = null; + if (SortedSet.class.isAssignableFrom(collectionType)) { + collection = new TreeSet(); + } else if (Set.class.isAssignableFrom(collectionType)) { + collection = new HashSet(); + } else if (List.class.isAssignableFrom(collectionType)) { + collection = new ArrayList(); + } else { + collection = new ArrayList(); } - return list; + for (ObjectFactory factory : factories) { + collection.add(factory.getInstance()); + } + return collection; } } diff --git a/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaInstanceFactoryProvider.java b/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaInstanceFactoryProvider.java index 1f1f1eefdc..e89b618cfe 100644 --- a/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaInstanceFactoryProvider.java +++ b/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaInstanceFactoryProvider.java @@ -151,14 +151,14 @@ public class JavaInstanceFactoryProvider implements InstanceFactoryProvider(field, new ArrayMultiplicityObjectFactory(interfaceType, factories)); } else { - return new FieldInjector(field, new ListMultiplicityObjectFactory(factories)); + return new FieldInjector(field, new ListMultiplicityObjectFactory(factories, field.getType())); } } else if (element.getAnchor() instanceof Method) { Method method = (Method)element.getAnchor(); if (method.getParameterTypes()[0].isArray()) { return new MethodInjector(method, new ArrayMultiplicityObjectFactory(interfaceType, factories)); } else { - return new MethodInjector(method, new ListMultiplicityObjectFactory(factories)); + return new MethodInjector(method, new ListMultiplicityObjectFactory(factories, method.getParameterTypes()[0])); } } else { throw new InvalidAccessorException("Member must be a field or method: " + element.getName()); -- cgit v1.2.3