Author: jboynes
Date: Wed Apr  5 18:20:49 2006
New Revision: 391872

URL: http://svn.apache.org/viewcvs?rev=391872&view=rev
Log:
simplify System implementation by moving introspection to loader

Modified:
    
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/Java5ComponentTypeIntrospector.java
    
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/StAXUtil.java
    
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/system/SystemImplementationLoader.java
    
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/SystemImplementation.java
    
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/impl/SystemImplementationImpl.java
    
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/loader/assembly/ComponentLoaderTestCase.java

Modified: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/Java5ComponentTypeIntrospector.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/Java5ComponentTypeIntrospector.java?rev=391872&r1=391871&r2=391872&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/Java5ComponentTypeIntrospector.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/Java5ComponentTypeIntrospector.java
 Wed Apr  5 18:20:49 2006
@@ -29,6 +29,8 @@
 import org.apache.tuscany.core.config.ComponentTypeIntrospector;
 import org.apache.tuscany.core.config.ConfigurationException;
 import org.apache.tuscany.core.config.JavaIntrospectionHelper;
+import org.apache.tuscany.core.system.assembly.SystemAssemblyFactory;
+import org.apache.tuscany.core.system.annotation.Autowire;
 import org.apache.tuscany.model.assembly.AssemblyFactory;
 import org.apache.tuscany.model.assembly.ComponentType;
 import org.apache.tuscany.model.assembly.Multiplicity;
@@ -44,13 +46,22 @@
  *
  * @version $Rev$ $Date$
  */
[EMAIL PROTECTED](interfaces = {ComponentTypeIntrospector.class})
 public class Java5ComponentTypeIntrospector implements 
ComponentTypeIntrospector {
-    private final AssemblyFactory factory;
+    private AssemblyFactory factory;
+
+    public Java5ComponentTypeIntrospector() {
+    }
 
     public Java5ComponentTypeIntrospector(AssemblyFactory factory) {
         this.factory = factory;
     }
 
+    @Autowire
+    public void setFactory(SystemAssemblyFactory factory) {
+        this.factory = factory;
+    }
+
     /**
      * Returns a component type for the given class
      *
@@ -141,9 +152,7 @@
         }
 
         // no @Service annotation, add all implemented interfaces with an 
@Remotable annotation
-        Class[] interfaces = implClass.getInterfaces();
-        for (int i = 0; i < interfaces.length; i++) {
-            Class<?> intf = interfaces[i];
+        for (Class<?> intf : implClass.getInterfaces()) {
             if (intf.isAnnotationPresent(Remotable.class)) {
                 addService(services, intf);
             }

Modified: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/StAXUtil.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/StAXUtil.java?rev=391872&r1=391871&r2=391872&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/StAXUtil.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/StAXUtil.java
 Wed Apr  5 18:20:49 2006
@@ -40,6 +40,9 @@
 import org.apache.tuscany.core.system.assembly.SystemAssemblyFactory;
 import org.apache.tuscany.core.system.assembly.SystemImplementation;
 import org.apache.tuscany.core.system.assembly.impl.SystemAssemblyFactoryImpl;
+import org.apache.tuscany.core.config.ComponentTypeIntrospector;
+import org.apache.tuscany.core.config.ConfigurationException;
+import org.apache.tuscany.core.config.impl.Java5ComponentTypeIntrospector;
 import org.apache.tuscany.model.assembly.AssemblyModelContext;
 import org.apache.tuscany.model.assembly.Component;
 import org.apache.tuscany.model.assembly.EntryPoint;
@@ -95,40 +98,48 @@
 
     public static ModuleComponent bootstrapLoader(String name, 
AssemblyModelContext context) {
         SystemAssemblyFactory factory = new SystemAssemblyFactoryImpl();
+        ComponentTypeIntrospector introspector = new 
Java5ComponentTypeIntrospector(factory);
+
         Module module = factory.createModule();
         module.setName("org.apache.tuscany.core.system.loader");
 
         List<Component> components = module.getComponents();
 
-        components.add(bootstrapLoader(factory, ComponentLoader.class));
-        components.add(bootstrapLoader(factory, ComponentTypeLoader.class));
-        components.add(bootstrapLoader(factory, EntryPointLoader.class));
-        components.add(bootstrapLoader(factory, ExternalServiceLoader.class));
-        components.add(bootstrapLoader(factory, InterfaceJavaLoader.class));
-        components.add(bootstrapLoader(factory, InterfaceWSDLLoader.class));
-        components.add(bootstrapLoader(factory, ModuleFragmentLoader.class));
-        components.add(bootstrapLoader(factory, ModuleLoader.class));
-        components.add(bootstrapLoader(factory, PropertyLoader.class));
-        components.add(bootstrapLoader(factory, ReferenceLoader.class));
-        components.add(bootstrapLoader(factory, ServiceLoader.class));
+        components.add(bootstrapLoader(factory, introspector, 
ComponentLoader.class));
+        components.add(bootstrapLoader(factory, introspector, 
ComponentTypeLoader.class));
+        components.add(bootstrapLoader(factory, introspector, 
EntryPointLoader.class));
+        components.add(bootstrapLoader(factory, introspector, 
ExternalServiceLoader.class));
+        components.add(bootstrapLoader(factory, introspector, 
InterfaceJavaLoader.class));
+        components.add(bootstrapLoader(factory, introspector, 
InterfaceWSDLLoader.class));
+        components.add(bootstrapLoader(factory, introspector, 
ModuleFragmentLoader.class));
+        components.add(bootstrapLoader(factory, introspector, 
ModuleLoader.class));
+        components.add(bootstrapLoader(factory, introspector, 
PropertyLoader.class));
+        components.add(bootstrapLoader(factory, introspector, 
ReferenceLoader.class));
+        components.add(bootstrapLoader(factory, introspector, 
ServiceLoader.class));
 
-        components.add(bootstrapLoader(factory, 
SystemImplementationLoader.class));
-        components.add(bootstrapLoader(factory, SystemBindingLoader.class));
+        components.add(bootstrapLoader(factory, introspector, 
SystemImplementationLoader.class));
+        components.add(bootstrapLoader(factory, introspector, 
SystemBindingLoader.class));
 
         bootstrapService(factory, module, StAXLoaderRegistry.class, 
StAXLoaderRegistryImpl.class);
         bootstrapService(factory, module, SystemAssemblyFactory.class, 
SystemAssemblyFactoryImpl.class);
+        bootstrapService(factory, module, ComponentTypeIntrospector.class, 
Java5ComponentTypeIntrospector.class);
+
 
         ModuleComponent mc = factory.createModuleComponent();
         mc.setName(name);
         mc.setModuleImplementation(module);
-
         mc.initialize(context);
         return mc;
     }
 
-    private static Component bootstrapLoader(SystemAssemblyFactory factory, 
Class<?> loaderClass) {
+    private static Component bootstrapLoader(SystemAssemblyFactory factory, 
ComponentTypeIntrospector introspector, Class<?> loaderClass) {
         SystemImplementation implementation = 
factory.createSystemImplementation();
         implementation.setImplementationClass(loaderClass);
+        try {
+            
implementation.setComponentType(introspector.introspect(loaderClass));
+        } catch (ConfigurationException e) {
+            throw (AssertionError) new AssertionError("Invalid bootstrap 
loader").initCause(e);
+        }
         Component component = factory.createSimpleComponent();
         component.setName(loaderClass.getName());
         component.setComponentImplementation(implementation);

Modified: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/system/SystemImplementationLoader.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/system/SystemImplementationLoader.java?rev=391872&r1=391871&r2=391872&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/system/SystemImplementationLoader.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/loader/system/SystemImplementationLoader.java
 Wed Apr  5 18:20:49 2006
@@ -22,10 +22,13 @@
 
 import org.osoa.sca.annotations.Scope;
 
+import org.apache.tuscany.common.resource.ResourceLoader;
+import org.apache.tuscany.core.config.ComponentTypeIntrospector;
+import org.apache.tuscany.core.config.ConfigurationException;
+import org.apache.tuscany.core.config.ConfigurationLoadException;
 import org.apache.tuscany.core.loader.StAXUtil;
+import org.apache.tuscany.core.system.annotation.Autowire;
 import org.apache.tuscany.core.system.assembly.SystemImplementation;
-import org.apache.tuscany.core.config.ConfigurationLoadException;
-import org.apache.tuscany.common.resource.ResourceLoader;
 
 /**
  * @version $Rev$ $Date$
@@ -34,6 +37,13 @@
 public class SystemImplementationLoader extends AbstractLoader {
     public static final QName SYSTEM_IMPLEMENTATION = new 
QName("http://org.apache.tuscany/xmlns/system/0.9";, "implementation.system");
 
+    private ComponentTypeIntrospector introspector;
+
+    @Autowire
+    public void setIntrospector(ComponentTypeIntrospector introspector) {
+        this.introspector = introspector;
+    }
+
     public QName getXMLType() {
         return SYSTEM_IMPLEMENTATION;
     }
@@ -46,9 +56,18 @@
         assert SYSTEM_IMPLEMENTATION.equals(reader.getName());
         SystemImplementation implementation = 
factory.createSystemImplementation();
         String implClass = reader.getAttributeValue(null, "class");
+        Class<?> implementationClass;
         try {
-            
implementation.setImplementationClass(resourceLoader.loadClass(implClass));
+            implementationClass = resourceLoader.loadClass(implClass);
+            implementation.setImplementationClass(implementationClass);
         } catch (ClassNotFoundException e) {
+            throw (ConfigurationLoadException) new 
ConfigurationLoadException(e.getMessage()).initCause(e);
+        }
+
+        // todo we should allow componentType sidefiles for system 
implementations
+        try {
+            
implementation.setComponentType(introspector.introspect(implementationClass));
+        } catch (ConfigurationException e) {
             throw (ConfigurationLoadException) new 
ConfigurationLoadException(e.getMessage()).initCause(e);
         }
 

Modified: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/SystemImplementation.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/SystemImplementation.java?rev=391872&r1=391871&r2=391872&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/SystemImplementation.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/SystemImplementation.java
 Wed Apr  5 18:20:49 2006
@@ -28,11 +28,11 @@
     /**
      * Returns the implementation class of the system component
      */
-    Class getImplementationClass();
+    Class<?> getImplementationClass();
 
     /**
      * Sets the implementation class of the system component
      */
-    void setImplementationClass(Class value);
+    void setImplementationClass(Class<?> value);
 
 }

Modified: 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/impl/SystemImplementationImpl.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/impl/SystemImplementationImpl.java?rev=391872&r1=391871&r2=391872&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/impl/SystemImplementationImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/impl/SystemImplementationImpl.java
 Wed Apr  5 18:20:49 2006
@@ -45,50 +45,12 @@
     protected SystemImplementationImpl() {
     }
 
-    public Class getImplementationClass() {
+    public Class<?> getImplementationClass() {
         return implementationClass;
     }
 
-    public void setImplementationClass(Class value) {
+    public void setImplementationClass(Class<?> value) {
         checkNotFrozen();
         implementationClass = value;
-    }
-
-    public void initialize(AssemblyModelContext context) {
-        if (isInitialized())
-            return;
-        this.modelContext = context;
-        // Initialize the component type
-        ComponentType componentType = getComponentType();
-        if (componentType == null) {
-            componentType = createComponentType(implementationClass);
-            setComponentType(componentType);
-        }
-        super.initialize(modelContext);
-    }
-
-    /**
-     * Creates the component type
-     */
-    private ComponentType createComponentType(Class<?> implClass) {
-        ComponentType componentType;
-        String baseName = JavaIntrospectionHelper.getBaseName(implClass);
-        URL componentTypeFile = implClass.getResource(baseName + 
".componentType");
-        if (componentTypeFile != null) {
-            componentType = 
modelContext.getAssemblyLoader().loadComponentType(componentTypeFile.toString());
-            // FIXME workaround for TUSCANY-46 where the scope is not read - 
default system implementations to MODULE scope
-            for (Service service : componentType.getServices()) {
-                service.getServiceContract().setScope(Scope.MODULE);
-            }
-        } else {
-            AssemblyFactory factory = new AssemblyFactoryImpl();
-            ComponentTypeIntrospector introspector = new 
Java5ComponentTypeIntrospector(factory);
-            try {
-                componentType = introspector.introspect(implClass);
-            } catch (ConfigurationException e) {
-                throw new IllegalArgumentException("Unable to introspect 
implementation class: " + implClass.getName(), e);
-            }
-        }
-        return componentType;
     }
 }

Modified: 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/loader/assembly/ComponentLoaderTestCase.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/loader/assembly/ComponentLoaderTestCase.java?rev=391872&r1=391871&r2=391872&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/loader/assembly/ComponentLoaderTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/loader/assembly/ComponentLoaderTestCase.java
 Wed Apr  5 18:20:49 2006
@@ -26,6 +26,9 @@
 import org.apache.tuscany.common.resource.ResourceLoader;
 import org.apache.tuscany.common.resource.impl.ResourceLoaderImpl;
 import org.apache.tuscany.core.config.ConfigurationLoadException;
+import org.apache.tuscany.core.config.ComponentTypeIntrospector;
+import org.apache.tuscany.core.config.ConfigurationException;
+import org.apache.tuscany.core.config.impl.Java5ComponentTypeIntrospector;
 import org.apache.tuscany.core.system.assembly.SystemAssemblyFactory;
 import org.apache.tuscany.core.system.assembly.SystemImplementation;
 import org.apache.tuscany.core.system.assembly.impl.SystemAssemblyFactoryImpl;
@@ -47,6 +50,7 @@
     private SystemAssemblyFactory assemblyFactory;
     private ResourceLoader resourceLoader;
     private AssemblyModelContext modelContext;
+    private ComponentTypeIntrospector introspector;
 
     public void testStringProperty() throws XMLStreamException, 
ConfigurationLoadException {
         String xml = 
"<properties><propString>HelloWorld</propString></properties>";
@@ -91,7 +95,12 @@
     private Component createFooComponent() {
         SystemImplementation impl = 
assemblyFactory.createSystemImplementation();
         impl.setImplementationClass(ServiceImpl.class);
-        impl.initialize(modelContext);
+        try {
+            impl.setComponentType(introspector.introspect(ServiceImpl.class));
+        } catch (ConfigurationException e) {
+            throw new AssertionError();
+        }
+        impl.initialize(null);
         Component component = assemblyFactory.createSimpleComponent();
         component.setComponentImplementation(impl);
         return component;
@@ -105,6 +114,7 @@
         loader = new ComponentLoader();
         loader.setFactory(assemblyFactory);
         modelContext = new AssemblyModelContextImpl(assemblyFactory, null, 
resourceLoader);
+        introspector = new Java5ComponentTypeIntrospector(assemblyFactory);
     }
 
     public static interface Service {


Reply via email to