From a6cb76239fe7e25565515fd6621ff82dc8c603f8 Mon Sep 17 00:00:00 2001 From: ramkumar Date: Thu, 26 Mar 2009 10:47:36 +0000 Subject: Fixes for TUSCANY-2941 git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@758591 13f79535-47bb-0310-9956-ffa450edef68 --- .../spring/xml/SpringBeanPojoProcessor.java | 38 +++++++++++++--------- 1 file changed, 23 insertions(+), 15 deletions(-) (limited to 'branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/xml/SpringBeanPojoProcessor.java') diff --git a/branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/xml/SpringBeanPojoProcessor.java b/branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/xml/SpringBeanPojoProcessor.java index 0510a6d338..fe632190ee 100644 --- a/branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/xml/SpringBeanPojoProcessor.java +++ b/branches/sca-java-1.x/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/xml/SpringBeanPojoProcessor.java @@ -81,10 +81,12 @@ import org.apache.tuscany.sca.implementation.java.introspect.impl.Resource; */ public class SpringBeanPojoProcessor extends BaseJavaClassVisitor { private JavaInterfaceFactory javaFactory; + private List conArgs; - public SpringBeanPojoProcessor(AssemblyFactory assemblyFactory, JavaInterfaceFactory javaFactory) { + public SpringBeanPojoProcessor(AssemblyFactory assemblyFactory, JavaInterfaceFactory javaFactory, List conArgs) { super(assemblyFactory); this.javaFactory = javaFactory; + this.conArgs = conArgs; } @Override @@ -280,6 +282,8 @@ public class SpringBeanPojoProcessor extends BaseJavaClassVisitor { private void evaluateConstructor(JavaImplementation type, Class clazz) throws IntrospectionException { // determine constructor if one is not annotated JavaConstructorImpl definition = type.getConstructor(); + Map props = type.getPropertyMembers(); + Map refs = type.getReferenceMembers(); Constructor constructor; boolean explict = false; if (definition != null && definition.getConstructor() @@ -298,37 +302,41 @@ public class SpringBeanPojoProcessor extends BaseJavaClassVisitor { // Only one constructor, take it constructor = constructors[0]; } else { - // FIXME multiple constructors, none yet done - Constructor selected = null; - int sites = type.getPropertyMembers().size() + type.getReferenceMembers().size(); + // multiple constructors scenario + Constructor selected = null; for (Constructor ctor : constructors) { if (ctor.getParameterTypes().length == 0) { selected = ctor; - } - if (ctor.getParameterTypes().length == sites) { - // TODO finish - // selected = constructor; - // select constructor - // break; + } else if (ctor.getParameterTypes().length == conArgs.size()) { + // we will find a constructor which has atleast one + // reference or property as its parameter types. + Class[] parametersTypes = ctor.getParameterTypes(); + for (Class pType: parametersTypes) { + for (JavaElementImpl property : props.values()) { + if (pType.equals(property.getType())) + selected = ctor; + } + for (JavaElementImpl reference : refs.values()) { + if (pType.equals(reference.getType())) + selected = ctor; + } + } } } if (selected == null) { throw new NoConstructorException(); } constructor = selected; - definition = type.getConstructors().get(selected); - type.setConstructor(definition); - // return; } definition = type.getConstructors().get(constructor); type.setConstructor(definition); } + JavaParameterImpl[] parameters = definition.getParameters(); if (parameters.length == 0) { return; } - Map props = type.getPropertyMembers(); - Map refs = type.getReferenceMembers(); + Annotation[][] annotations = constructor.getParameterAnnotations(); if (!explict) { // the constructor wasn't defined by an annotation, so check to see -- cgit v1.2.3