You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2011/07/12 21:54:10 UTC

svn commit: r1145739 - in /tuscany/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java: injection/ListMultiplicityObjectFactory.java invocation/JavaInstanceFactoryProvider.java

Author: rfeng
Date: Tue Jul 12 19:54:10 2011
New Revision: 1145739

URL: http://svn.apache.org/viewvc?rev=1145739&view=rev
Log:
Allow other collection types for multiplicity injection

Modified:
    tuscany/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/ListMultiplicityObjectFactory.java
    tuscany/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaInstanceFactoryProvider.java

Modified: tuscany/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/ListMultiplicityObjectFactory.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/ListMultiplicityObjectFactory.java?rev=1145739&r1=1145738&r2=1145739&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/ListMultiplicityObjectFactory.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/ListMultiplicityObjectFactory.java Tue Jul 12 19:54:10 2011
@@ -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.facto
  *
  * @version $Rev$ $Date$
  */
-public class ListMultiplicityObjectFactory implements ObjectFactory<List<?>> {
+public class ListMultiplicityObjectFactory implements ObjectFactory<Collection<?>> {
 
-    private ObjectFactory[] factories;
+    private Collection<ObjectFactory<?>> factories;
+    private Class<?> collectionType;
 
-    public ListMultiplicityObjectFactory(List<ObjectFactory<?>> factories) {
+    public ListMultiplicityObjectFactory(List<ObjectFactory<?>> 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<Object> list = new ArrayList<Object>();
-        for (ObjectFactory factory : factories) {
-            list.add(factory.getInstance());
+    public Collection<?> getInstance() throws ObjectCreationException {
+        Collection<Object> collection = null;
+        if (SortedSet.class.isAssignableFrom(collectionType)) {
+            collection = new TreeSet<Object>();
+        } else if (Set.class.isAssignableFrom(collectionType)) {
+            collection = new HashSet<Object>();
+        } else if (List.class.isAssignableFrom(collectionType)) {
+            collection = new ArrayList<Object>();
+        } else {
+            collection = new ArrayList<Object>();
         }
-        return list;
+        for (ObjectFactory<?> factory : factories) {
+            collection.add(factory.getInstance());
+        }
+        return collection;
     }
 
 }

Modified: tuscany/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaInstanceFactoryProvider.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaInstanceFactoryProvider.java?rev=1145739&r1=1145738&r2=1145739&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaInstanceFactoryProvider.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaInstanceFactoryProvider.java Tue Jul 12 19:54:10 2011
@@ -151,14 +151,14 @@ public class JavaInstanceFactoryProvider
             if (field.getType().isArray()) {
                 return new FieldInjector<T>(field, new ArrayMultiplicityObjectFactory(interfaceType, factories));
             } else {
-                return new FieldInjector<T>(field, new ListMultiplicityObjectFactory(factories));
+                return new FieldInjector<T>(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<T>(method, new ArrayMultiplicityObjectFactory(interfaceType, factories));
             } else {
-                return new MethodInjector<T>(method, new ListMultiplicityObjectFactory(factories));
+                return new MethodInjector<T>(method, new ListMultiplicityObjectFactory(factories, method.getParameterTypes()[0]));
             }
         } else {
             throw new InvalidAccessorException("Member must be a field or method: " + element.getName());