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());