Author: rfeng
Date: Thu Sep 13 18:37:37 2007
New Revision: 575510
URL: http://svn.apache.org/viewvc?rev=575510&view=rev
Log:
Check in a tactical fix for TUSCANY-1571 and now the itest-component-type is
working
Modified:
incubator/tuscany/java/sca/itest/component-type/src/main/java/calculator/CalculatorServiceImpl.java
incubator/tuscany/java/sca/itest/component-type/src/main/resources/Calculator.composite
incubator/tuscany/java/sca/itest/component-type/src/main/resources/calculator/MultiplyServiceImpl.componentType
incubator/tuscany/java/sca/itest/pom.xml
incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/sca/implementation/java/xml/JavaImplementationProcessor.java
Modified:
incubator/tuscany/java/sca/itest/component-type/src/main/java/calculator/CalculatorServiceImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/component-type/src/main/java/calculator/CalculatorServiceImpl.java?rev=575510&r1=575509&r2=575510&view=diff
==============================================================================
---
incubator/tuscany/java/sca/itest/component-type/src/main/java/calculator/CalculatorServiceImpl.java
(original)
+++
incubator/tuscany/java/sca/itest/component-type/src/main/java/calculator/CalculatorServiceImpl.java
Thu Sep 13 18:37:37 2007
@@ -18,7 +18,6 @@
*/
package calculator;
-import org.osoa.sca.annotations.Reference;
/**
Modified:
incubator/tuscany/java/sca/itest/component-type/src/main/resources/Calculator.composite
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/component-type/src/main/resources/Calculator.composite?rev=575510&r1=575509&r2=575510&view=diff
==============================================================================
---
incubator/tuscany/java/sca/itest/component-type/src/main/resources/Calculator.composite
(original)
+++
incubator/tuscany/java/sca/itest/component-type/src/main/resources/Calculator.composite
Thu Sep 13 18:37:37 2007
@@ -26,7 +26,7 @@
<implementation.java class="calculator.CalculatorServiceImpl"/>
<reference name="addService" target="AddServiceComponent/AddService"/>
<reference name="subtractService"
target="SubtractServiceComponent/SubtractService"/>
- <reference name="multiplyService"
target="MultiplyServiceComponent/MultipleService"/>
+ <reference name="multiplyService"
target="MultiplyServiceComponent/MultiplyService"/>
<reference name="divideService"
target="DivideServiceComponent/DivideService"/>
</component>
Modified:
incubator/tuscany/java/sca/itest/component-type/src/main/resources/calculator/MultiplyServiceImpl.componentType
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/component-type/src/main/resources/calculator/MultiplyServiceImpl.componentType?rev=575510&r1=575509&r2=575510&view=diff
==============================================================================
---
incubator/tuscany/java/sca/itest/component-type/src/main/resources/calculator/MultiplyServiceImpl.componentType
(original)
+++
incubator/tuscany/java/sca/itest/component-type/src/main/resources/calculator/MultiplyServiceImpl.componentType
Thu Sep 13 18:37:37 2007
@@ -19,7 +19,7 @@
-->
<componentType xmlns="http://www.osoa.org/xmlns/sca/1.0">
- <service name="MutiplyService">
+ <service name="MultiplyService">
<interface.java interface="calculator.MultiplyService"/>
</service>
Modified: incubator/tuscany/java/sca/itest/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/pom.xml?rev=575510&r1=575509&r2=575510&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/pom.xml (original)
+++ incubator/tuscany/java/sca/itest/pom.xml Thu Sep 13 18:37:37 2007
@@ -64,6 +64,7 @@
<module>recursive</module>
<module>references</module>
<module>services</module>
+ <module>component-type</module>
<module>interfaces</module>
<module>scopes</module>
<module>wsdl</module>
Modified:
incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/sca/implementation/java/xml/JavaImplementationProcessor.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/sca/implementation/java/xml/JavaImplementationProcessor.java?rev=575510&r1=575509&r2=575510&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/sca/implementation/java/xml/JavaImplementationProcessor.java
(original)
+++
incubator/tuscany/java/sca/modules/implementation-java-xml/src/main/java/org/apache/tuscany/sca/implementation/java/xml/JavaImplementationProcessor.java
Thu Sep 13 18:37:37 2007
@@ -21,12 +21,22 @@
import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.HashMap;
+import java.util.Map;
+
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.assembly.ComponentType;
+import org.apache.tuscany.sca.assembly.Property;
+import org.apache.tuscany.sca.assembly.Reference;
+import org.apache.tuscany.sca.assembly.Service;
import org.apache.tuscany.sca.assembly.xml.Constants;
import org.apache.tuscany.sca.assembly.xml.PolicyAttachPointProcessor;
import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
@@ -39,10 +49,14 @@
import org.apache.tuscany.sca.implementation.java.IntrospectionException;
import org.apache.tuscany.sca.implementation.java.JavaImplementation;
import org.apache.tuscany.sca.implementation.java.JavaImplementationFactory;
+import org.apache.tuscany.sca.implementation.java.impl.JavaElementImpl;
+import
org.apache.tuscany.sca.implementation.java.introspect.impl.JavaIntrospectionHelper;
+import org.apache.tuscany.sca.interfacedef.Interface;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
import org.apache.tuscany.sca.policy.PolicyFactory;
-public class JavaImplementationProcessor implements
- StAXArtifactProcessor<JavaImplementation>, JavaImplementationConstants {
+public class JavaImplementationProcessor implements
StAXArtifactProcessor<JavaImplementation>,
+ JavaImplementationConstants {
private JavaImplementationFactory javaFactory;
private AssemblyFactory assemblyFactory;
@@ -75,17 +89,18 @@
return javaImplementation;
}
- public void write(JavaImplementation javaImplementation, XMLStreamWriter
writer) throws ContributionWriteException, XMLStreamException {
+ public void write(JavaImplementation javaImplementation, XMLStreamWriter
writer) throws ContributionWriteException,
+ XMLStreamException {
// Write an <implementation.java>
policyProcessor.writePolicyPrefixes(javaImplementation, writer);
writer.writeStartElement(Constants.SCA10_NS, IMPLEMENTATION_JAVA);
policyProcessor.writePolicyAttributes(javaImplementation, writer);
-
+
if (javaImplementation.getName() != null) {
writer.writeAttribute(CLASS, javaImplementation.getName());
}
-
+
writer.writeEndElement();
}
@@ -107,10 +122,110 @@
throw new ContributionResolveException(e);
}
+ mergeComponentType(resolver, javaImplementation);
+
// FIXME the introspector should always create at least one service
if (javaImplementation.getServices().isEmpty()) {
javaImplementation.getServices().add(assemblyFactory.createService());
}
+ }
+
+ private JavaElementImpl getMemeber(JavaImplementation impl, String name,
Class<?> type) {
+ String setter = JavaIntrospectionHelper.toSetter(name);
+ try {
+ Method method = impl.getJavaClass().getDeclaredMethod(setter,
type);
+ int mod = method.getModifiers();
+ if ((Modifier.isPublic(mod) || Modifier.isProtected(mod)) &&
(!Modifier.isStatic(mod))) {
+ return new JavaElementImpl(method, 0);
+ }
+ } catch (NoSuchMethodException e) {
+ Field field;
+ try {
+ field = impl.getJavaClass().getDeclaredField(name);
+ int mod = field.getModifiers();
+ if ((Modifier.isPublic(mod) || Modifier.isProtected(mod)) &&
(!Modifier.isStatic(mod))) {
+ return new JavaElementImpl(field);
+ }
+ } catch (NoSuchFieldException e1) {
+ // Ignore
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Merge the componentType from introspection and external file
+ * @param resolver
+ * @param impl
+ */
+ private void mergeComponentType(ModelResolver resolver, JavaImplementation
impl) {
+ // FIXME: Need to clarify how to merge
+ ComponentType componentType = getComponentType(resolver, impl);
+ if (componentType != null && !componentType.isUnresolved()) {
+ Map<String, Reference> refMap = new HashMap<String, Reference>();
+ for (Reference ref : impl.getReferences()) {
+ refMap.put(ref.getName(), ref);
+ }
+ for (Reference reference : componentType.getReferences()) {
+ refMap.put(reference.getName(), reference);
+ }
+ impl.getReferences().clear();
+ impl.getReferences().addAll(refMap.values());
+
+ // Try to match references by type
+ Map<String, JavaElementImpl> refMembers =
impl.getReferenceMembers();
+ for (Reference ref : impl.getReferences()) {
+ if (ref.getInterfaceContract() != null) {
+ Interface i = ref.getInterfaceContract().getInterface();
+ if (i instanceof JavaInterface) {
+ Class<?> type = ((JavaInterface)i).getJavaClass();
+ if (!refMembers.containsKey(ref.getName())) {
+ JavaElementImpl e = getMemeber(impl,
ref.getName(), type);
+ if (e != null) {
+ refMembers.put(ref.getName(), e);
+ }
+ }
+ }
+ }
+ }
+
+ Map<String, Service> serviceMap = new HashMap<String, Service>();
+ for (Service svc : impl.getServices()) {
+ serviceMap.put(svc.getName(), svc);
+ }
+ for (Service service : componentType.getServices()) {
+ serviceMap.put(service.getName(), service);
+ }
+ impl.getServices().clear();
+ impl.getServices().addAll(serviceMap.values());
+
+ Map<String, Property> propMap = new HashMap<String, Property>();
+ for (Property prop : impl.getProperties()) {
+ propMap.put(prop.getName(), prop);
+ }
+ for (Property property : componentType.getProperties()) {
+ propMap.put(property.getName(), property);
+ }
+ impl.getProperties().clear();
+ impl.getProperties().addAll(propMap.values());
+
+ if (componentType.getConstrainingType() != null) {
+ impl.setConstrainingType(componentType.getConstrainingType());
+ }
+ }
+ }
+
+ private ComponentType getComponentType(ModelResolver resolver,
JavaImplementation impl) {
+ String className = impl.getJavaClass().getName();
+ String componentTypeURI = className.replace('.', '/') +
".componentType";
+ ComponentType componentType = assemblyFactory.createComponentType();
+ componentType.setUnresolved(true);
+ componentType.setURI(componentTypeURI);
+ componentType = resolver.resolveModel(ComponentType.class,
componentType);
+ if (!componentType.isUnresolved()) {
+ return componentType;
+ }
+ return null;
}
public QName getArtifactType() {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]