You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jb...@apache.org on 2006/06/22 04:53:17 UTC
svn commit: r416228 - in /incubator/tuscany/sandbox/jboynes/sca:
core2/src/main/java/org/apache/tuscany/core/system/loader/
core2/src/test/java/org/apache/tuscany/core/deployer/
core2/src/test/resources/org/apache/tuscany/core/deployer/ spi/src/main/ja...
Author: jboynes
Date: Wed Jun 21 19:53:17 2006
New Revision: 416228
URL: http://svn.apache.org/viewvc?rev=416228&view=rev
Log:
Add rudimentary introspection for system implementation type.
This is a temporary hack to allow us to bootstrap the primordial deployer
so that we can make progress on running a simple sample without needing
the full blown, annotation/sidefile aware introspector.
Modified:
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemComponentTypeLoader.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java
incubator/tuscany/sandbox/jboynes/sca/core2/src/test/resources/org/apache/tuscany/core/deployer/boot1.scdl
incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/model/JavaMappedProperty.java
incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/model/JavaMappedReference.java
incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/model/ReferenceDefinition.java
Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemComponentTypeLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemComponentTypeLoader.java?rev=416228&r1=416227&r2=416228&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemComponentTypeLoader.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/loader/SystemComponentTypeLoader.java Wed Jun 21 19:53:17 2006
@@ -16,15 +16,21 @@
*/
package org.apache.tuscany.core.system.loader;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
import java.net.URL;
+import org.apache.tuscany.core.system.model.SystemImplementation;
+import org.apache.tuscany.core.util.JavaIntrospectionHelper;
import org.apache.tuscany.spi.deployer.DeploymentContext;
import org.apache.tuscany.spi.extension.ComponentTypeLoaderExtension;
import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.model.JavaMappedProperty;
+import org.apache.tuscany.spi.model.JavaMappedReference;
+import org.apache.tuscany.spi.model.JavaServiceContract;
import org.apache.tuscany.spi.model.PojoComponentType;
-
-import org.apache.tuscany.core.system.model.SystemImplementation;
-import org.apache.tuscany.core.util.JavaIntrospectionHelper;
+import org.apache.tuscany.spi.model.ServiceDefinition;
/**
* Loads a system component type
@@ -49,7 +55,51 @@
}
protected PojoComponentType loadByIntrospection(SystemImplementation implementation) {
- return new PojoComponentType();
+ PojoComponentType componentType = new PojoComponentType();
+
+ // FIXME: replace this rudimentary introspection mechanism
+ Class<?> implClass = implementation.getImplementationClass();
+ for (Class<?> serviceIntf : implClass.getInterfaces()) {
+ JavaServiceContract serviceContract = new JavaServiceContract(serviceIntf);
+ ServiceDefinition service = new ServiceDefinition(serviceIntf.getName(), serviceContract);
+ componentType.add(service);
+ }
+ for (Field field : implClass.getFields()) {
+ if (Modifier.isStatic(field.getModifiers())) {
+ continue;
+ }
+ String name = field.getName();
+ Class<?> javaType = field.getType();
+ if (javaType.isInterface()) {
+ JavaMappedReference reference = new JavaMappedReference(name, new JavaServiceContract(javaType), field);
+ componentType.add(reference);
+ } else {
+ JavaMappedProperty<?> property = new JavaMappedProperty(name, null, javaType, field);
+ componentType.add(property);
+ }
+ }
+ for (Method method : implClass.getMethods()) {
+ if (Modifier.isStatic(method.getModifiers())
+ || !(Void.TYPE == method.getReturnType())
+ || method.getParameterTypes().length != 1
+ || !method.getName().startsWith("set")
+ || !(method.getName().length() > 3)
+ ) {
+ continue;
+ }
+ String name = method.getName();
+ name = Character.toLowerCase(name.charAt(3)) + name.substring(4);
+ Class<?> javaType = method.getParameterTypes()[0];
+ if (javaType.isInterface()) {
+ JavaMappedReference reference = new JavaMappedReference(name, new JavaServiceContract(javaType), method);
+ componentType.add(reference);
+ } else {
+ JavaMappedProperty<?> property = new JavaMappedProperty(name, null, javaType, method);
+ componentType.add(property);
+ }
+ }
+
+ return componentType;
}
Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java?rev=416228&r1=416227&r2=416228&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java Wed Jun 21 19:53:17 2006
@@ -26,6 +26,11 @@
import org.apache.tuscany.spi.model.ComponentDefinition;
import org.apache.tuscany.spi.model.CompositeComponentType;
import org.apache.tuscany.spi.model.ServiceDefinition;
+import org.apache.tuscany.spi.model.Implementation;
+import org.apache.tuscany.spi.model.ComponentType;
+import org.apache.tuscany.spi.model.PropertyValue;
+import org.apache.tuscany.spi.model.Property;
+import org.apache.tuscany.spi.model.ReferenceDefinition;
import junit.framework.TestCase;
import org.apache.tuscany.core.bootstrap.DefaultBootstrapper;
@@ -45,20 +50,39 @@
private ComponentDefinition<SystemCompositeImplementation> componentDefinition;
private SystemCompositeImplementation implementation;
- public void testBoot1() throws LoaderException {
+ public void testBoot1Load() throws LoaderException {
URL scdl = BootstrapDeployerTestCase.class.getResource("boot1.scdl");
implementation.setScdlLocation(scdl);
deployer.load(componentDefinition, deploymentContext);
- CompositeComponentType componentType = implementation.getComponentType();
- assertNotNull(componentType);
- assertEquals("simple", componentType.getName());
- Map<String, ServiceDefinition> services = componentType.getServices();
+ CompositeComponentType composite = implementation.getComponentType();
+ assertNotNull(composite);
+ assertEquals("simple", composite.getName());
+
+ // check parse of <service>
+ Map<String, ServiceDefinition> services = composite.getServices();
assertEquals(1, services.size());
BoundServiceDefinition serviceDefinition = (BoundServiceDefinition) services.get("service");
assertNotNull(serviceDefinition);
assertEquals("service", serviceDefinition.getName());
assertEquals(BasicInterface.class, serviceDefinition.getServiceContract().getInterfaceClass());
assertTrue(serviceDefinition.getBinding() instanceof SystemBinding);
+
+ // check parse of <component>
+ Map<String, ComponentDefinition<? extends Implementation<?>>> components = composite.getComponents();
+ assertEquals(1, components.size());
+ ComponentDefinition<? extends Implementation<?>> component = components.get("component");
+ assertNotNull(component);
+ PropertyValue<?> propVal = component.getPropertyValues().get("publicProperty");
+ assertEquals("propval", propVal.getValueFactory().getInstance());
+
+ // check introspection of implementation
+ ComponentType<?,?,?> componentType = component.getImplementation().getComponentType();
+ ServiceDefinition service = componentType.getServices().get(BasicInterface.class.getName());
+ assertEquals(BasicInterface.class, service.getServiceContract().getInterfaceClass());
+ Property<?> property = componentType.getProperties().get("publicProperty");
+ assertEquals(String.class, property.getJavaType());
+ ReferenceDefinition referenceDefinition = componentType.getReferences().get("publicReference");
+ assertEquals(BasicInterface.class, referenceDefinition.getServiceContract().getInterfaceClass());
}
protected void setUp() throws Exception {
Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/resources/org/apache/tuscany/core/deployer/boot1.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/core2/src/test/resources/org/apache/tuscany/core/deployer/boot1.scdl?rev=416228&r1=416227&r2=416228&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/test/resources/org/apache/tuscany/core/deployer/boot1.scdl (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/test/resources/org/apache/tuscany/core/deployer/boot1.scdl Wed Jun 21 19:53:17 2006
@@ -24,9 +24,7 @@
<component name="component">
<system:implementation.system class="org.apache.tuscany.core.mock.component.BasicInterfaceImpl"/>
-<!--
<property name="publicProperty">propval</property>
<reference name="publicReference" target="target"/>
--->
</component>
</composite>
Modified: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/model/JavaMappedProperty.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/model/JavaMappedProperty.java?rev=416228&r1=416227&r2=416228&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/model/JavaMappedProperty.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/model/JavaMappedProperty.java Wed Jun 21 19:53:17 2006
@@ -31,10 +31,6 @@
public JavaMappedProperty() {
}
- public JavaMappedProperty(Member member) {
- this.member = member;
- }
-
public JavaMappedProperty(String name, QName xmlType, Class<T> javaType) {
super(name, xmlType, javaType);
}
Modified: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/model/JavaMappedReference.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/model/JavaMappedReference.java?rev=416228&r1=416227&r2=416228&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/model/JavaMappedReference.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/model/JavaMappedReference.java Wed Jun 21 19:53:17 2006
@@ -27,6 +27,14 @@
public class JavaMappedReference extends ReferenceDefinition {
private Member member;
+ public JavaMappedReference() {
+ }
+
+ public JavaMappedReference(String name, ServiceContract serviceContract, Member member) {
+ super(name, serviceContract);
+ this.member = member;
+ }
+
/**
* Returns the Member that this reference is mapped to.
*
Modified: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/model/ReferenceDefinition.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/model/ReferenceDefinition.java?rev=416228&r1=416227&r2=416228&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/model/ReferenceDefinition.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/model/ReferenceDefinition.java Wed Jun 21 19:53:17 2006
@@ -27,6 +27,14 @@
private Multiplicity multiplicity;
private boolean autowire;
+ public ReferenceDefinition() {
+ }
+
+ public ReferenceDefinition(String name, ServiceContract serviceContract) {
+ this.name = name;
+ this.serviceContract = serviceContract;
+ }
+
public String getName() {
return name;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org