You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jm...@apache.org on 2006/05/15 10:14:33 UTC

svn commit: r406580 - in /incubator/tuscany/sandbox/jboynes/sca: containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/ containers/container.java/src/test/java/org/apache/tuscany/container/java/builder/ core2/src/main/java/o...

Author: jmarino
Date: Mon May 15 01:14:29 2006
New Revision: 406580

URL: http://svn.apache.org/viewcvs?rev=406580&view=rev
Log:
builder registry refactors

Modified:
    incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentBuilder.java
    incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/builder/JavaComponentBuilderTestCase.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentBuilder.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/util/JavaIntrospectionHelper.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java
    incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/ComponentBuilder.java
    incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentBuilderExtension.java

Modified: incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentBuilder.java?rev=406580&r1=406579&r2=406580&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentBuilder.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentBuilder.java Mon May 15 01:14:29 2006
@@ -26,7 +26,7 @@
 @Scope("MODULE")
 public class JavaComponentBuilder extends ComponentBuilderExtension<JavaImplementation> {
 
-    protected JavaAtomicContext createContext(CompositeContext parent, Component<JavaImplementation> component)
+    public JavaAtomicContext build(CompositeContext parent, Component<JavaImplementation> component)
             throws BuilderConfigException {
         PojoComponentType componentType = component.getImplementation().getComponentType();
 

Modified: incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/builder/JavaComponentBuilderTestCase.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/builder/JavaComponentBuilderTestCase.java?rev=406580&r1=406579&r2=406580&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/builder/JavaComponentBuilderTestCase.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/builder/JavaComponentBuilderTestCase.java Mon May 15 01:14:29 2006
@@ -13,6 +13,7 @@
 import org.apache.tuscany.core.model.PojoComponentType;
 import org.apache.tuscany.core.wire.jdk.JDKWireFactoryService;
 import org.apache.tuscany.core.wire.system.WireServiceImpl;
+import org.apache.tuscany.core.builder.BuilderRegistryImpl;
 import org.apache.tuscany.model.Component;
 import org.apache.tuscany.model.JavaServiceContract;
 import org.apache.tuscany.model.Scope;
@@ -22,6 +23,7 @@
 import org.apache.tuscany.spi.context.ScopeRegistry;
 import org.apache.tuscany.spi.context.WorkContext;
 import org.apache.tuscany.spi.wire.WireService;
+import org.apache.tuscany.spi.builder.BuilderRegistry;
 
 /**
  * @version $$Rev$$ $$Date$$
@@ -53,10 +55,12 @@
         sourceImpl.setImplementationClass(SourceImpl.class);
         Component<JavaImplementation> sourceComponent = new Component<JavaImplementation>(sourceImpl);
 
+        BuilderRegistry builderRegistry = new BuilderRegistryImpl(wireService,scopeRegistry);
         JavaComponentBuilder builder = new JavaComponentBuilder();
-        builder.setWireService(wireService);
-        builder.setScopeRegistry(scopeRegistry);
-        JavaAtomicContext<Source> ctx = (JavaAtomicContext<Source>) builder.build(parent, sourceComponent);
+        builderRegistry.register(builder);
+        JavaAtomicContext<Source> ctx = (JavaAtomicContext<Source>) builderRegistry.build(parent, sourceComponent);
+
+
         ctx.start();
         Source source = ctx.getService();
         assertNotNull(source);

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java?rev=406580&r1=406579&r2=406580&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/builder/BuilderRegistryImpl.java Mon May 15 01:14:29 2006
@@ -25,15 +25,27 @@
 import org.apache.tuscany.model.BoundReference;
 import org.apache.tuscany.model.BoundService;
 import org.apache.tuscany.model.Component;
+import org.apache.tuscany.model.ComponentType;
 import org.apache.tuscany.model.Implementation;
+import org.apache.tuscany.model.Reference;
+import org.apache.tuscany.model.Scope;
+import org.apache.tuscany.model.Service;
+import org.apache.tuscany.spi.annotation.Autowire;
 import org.apache.tuscany.spi.builder.BindingBuilder;
+import org.apache.tuscany.spi.builder.BuilderConfigException;
 import org.apache.tuscany.spi.builder.BuilderRegistry;
 import org.apache.tuscany.spi.builder.ComponentBuilder;
 import org.apache.tuscany.spi.builder.WireBuilder;
+import org.apache.tuscany.spi.context.AtomicContext;
+import org.apache.tuscany.spi.context.ComponentContext;
 import org.apache.tuscany.spi.context.CompositeContext;
 import org.apache.tuscany.spi.context.Context;
+import org.apache.tuscany.spi.context.ScopeContext;
+import org.apache.tuscany.spi.context.ScopeRegistry;
 import org.apache.tuscany.spi.wire.SourceWire;
 import org.apache.tuscany.spi.wire.TargetWire;
+import org.apache.tuscany.spi.wire.WireService;
+import org.apache.tuscany.core.util.JavaIntrospectionHelper;
 
 /**
  * @version $Rev$ $Date$
@@ -42,21 +54,48 @@
     private final Map<Class<? extends Implementation<?>>, ComponentBuilder<? extends Implementation<?>>> componentBuilders = new HashMap<Class<? extends Implementation<?>>, ComponentBuilder<? extends Implementation<?>>>();
     private final Map<Class<? extends Binding>, BindingBuilder<? extends Binding>> bindingBuilders = new HashMap<Class<? extends Binding>, BindingBuilder<? extends Binding>>();
 
+    protected WireService wireService;
+    protected ScopeRegistry scopeRegistry;
+
+    public BuilderRegistryImpl() {
+    }
+
+    public BuilderRegistryImpl(WireService wireService, ScopeRegistry scopeRegistry) {
+        this.wireService = wireService;
+        this.scopeRegistry = scopeRegistry;
+    }
+
+    @Autowire
+    public void setWireService(WireService wireService) {
+        this.wireService = wireService;
+    }
+
+    @Autowire
+    public void setScopeRegistry(ScopeRegistry scopeRegistry) {
+        this.scopeRegistry = scopeRegistry;
+    }
+
     public <I extends Implementation<?>> void register(ComponentBuilder<I> builder) {
-        Type[] interfaces = builder.getClass().getGenericInterfaces();
-        for (Type type : interfaces) {
-            if (! (type instanceof ParameterizedType)) {
-                continue;
-            }
-            ParameterizedType interfaceType = (ParameterizedType) type;
-            if (!ComponentBuilder.class.equals(interfaceType.getRawType())) {
-                continue;
-            }
-            Class<I> implClass = (Class<I>) interfaceType.getActualTypeArguments()[0];
-            register(implClass, builder);
-            return;
-        }
-        throw new IllegalArgumentException("builder is not generified");
+       //Class<I> implClass = (Class<I>) recurseInterfaces(builder.getClass());
+       Class<I> implClass = JavaIntrospectionHelper.introspectGeneric(builder.getClass(),0);
+       if (implClass == null){
+          throw new IllegalArgumentException("builder is not generified");
+       }
+       register(implClass, builder);
+//        Type[] interfaces = builder.getClass().getGenericInterfaces();
+//        for (Type type : interfaces) {
+//            if (! (type instanceof ParameterizedType)) {
+//                continue;
+//            }
+//            ParameterizedType interfaceType = (ParameterizedType) type;
+//            if (!ComponentBuilder.class.equals(interfaceType.getRawType())) {
+//                continue;
+//            }
+//            Class<I> implClass = (Class<I>) interfaceType.getActualTypeArguments()[0];
+//            register(implClass, builder);
+//            return;
+//        }
+//        throw new IllegalArgumentException("builder is not generified");
     }
 
     public <I extends Implementation<?>> void register(Class<I> implClass, ComponentBuilder<I> builder) {
@@ -66,7 +105,34 @@
     public <I extends Implementation<?>> Context build(CompositeContext parent, Component<I> component) {
         Class<I> implClass = (Class<I>) component.getImplementation().getClass();
         ComponentBuilder<I> componentBuilder = (ComponentBuilder<I>) componentBuilders.get(implClass);
-        return componentBuilder.build(parent, component);
+
+        ComponentContext context = componentBuilder.build(parent, component);
+        ComponentType componentType = component.getImplementation().getComponentType();
+        assert(componentType != null): "Component type must be set";
+        // create target wires
+        for (Service service : componentType.getServices().values()) {
+            TargetWire wire = wireService.createTargetWire(service);
+            context.addTargetWire(wire);
+        }
+        // create source wires
+        for (Reference reference : componentType.getReferences().values()) {
+            SourceWire wire = wireService.createSourceWire(reference);
+            context.addSourceWire(wire);
+        }
+        if (context instanceof AtomicContext) {
+            AtomicContext ctx = (AtomicContext) context;
+            Scope scope = ctx.getScope();
+            if (scope == null) {
+                scope = Scope.STATELESS;
+            }
+            ScopeContext scopeContext = scopeRegistry.getScopeContext(scope);
+            if (scopeContext == null) {
+                throw new BuilderConfigException("Scope context not registered for scope " + scope);
+            }
+            ctx.setScopeContext(scopeContext);
+            scopeContext.register(ctx);
+        }
+        return context;
     }
 
     public <B extends Binding> void register(BindingBuilder<B> builder) {

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentBuilder.java?rev=406580&r1=406579&r2=406580&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentBuilder.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentBuilder.java Mon May 15 01:14:29 2006
@@ -24,16 +24,16 @@
 import org.apache.tuscany.spi.QualifiedName;
 import org.apache.tuscany.spi.builder.BuilderConfigException;
 import org.apache.tuscany.spi.builder.ComponentBuilder;
+import org.apache.tuscany.spi.context.ComponentContext;
 import org.apache.tuscany.spi.context.CompositeContext;
-import org.apache.tuscany.spi.context.Context;
 
 /**
  * @version $$Rev$$ $$Date$$
  */
 //@SuppressWarnings("unchecked")
 public class SystemComponentBuilder implements ComponentBuilder<SystemImplementation> {
-   
-    public Context build(CompositeContext parent, Component<SystemImplementation> component) throws BuilderConfigException {
+
+    public ComponentContext build(CompositeContext parent, Component<SystemImplementation> component) throws BuilderConfigException {
         PojoComponentType componentType = component.getImplementation().getComponentType();
         List<Class<?>> serviceInterfaces = new ArrayList<Class<?>>();
         for (Service service : componentType.getServices().values()) {

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/util/JavaIntrospectionHelper.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/util/JavaIntrospectionHelper.java?rev=406580&r1=406579&r2=406580&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/util/JavaIntrospectionHelper.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/util/JavaIntrospectionHelper.java Mon May 15 01:14:29 2006
@@ -438,7 +438,7 @@
      */
     public static Class introspectGeneric(Class clazz, int pos) {
         assert(clazz != null): "No class specified";
-        Type type = clazz.getClass().getGenericSuperclass();
+        Type type = clazz.getGenericSuperclass();
         if (type instanceof ParameterizedType) {
             Type[] args = ((ParameterizedType) type).getActualTypeArguments();
             if (args.length <= pos) {
@@ -446,7 +446,16 @@
             }
             return (Class) ((ParameterizedType) type).getActualTypeArguments()[pos];
         } else {
-            throw new AssertionError("Subclasses of " + clazz.getName() + " must be genericized");
+            Type[] interfaces = clazz.getGenericInterfaces();
+            for (Type itype : interfaces) {
+                if (! (itype instanceof ParameterizedType)) {
+                    continue;
+                }
+                ParameterizedType interfaceType = (ParameterizedType) itype;
+                return (Class) interfaceType.getActualTypeArguments()[0];
+            }
+
+            throw new AssertionError(clazz.getName() + " must be genericized");
         }
 
     }

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java?rev=406580&r1=406579&r2=406580&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java Mon May 15 01:14:29 2006
@@ -19,9 +19,10 @@
 import junit.framework.TestCase;
 import org.apache.tuscany.model.Component;
 import org.apache.tuscany.model.CompositeImplementation;
+import org.apache.tuscany.model.CompositeComponentType;
 import org.apache.tuscany.spi.builder.ComponentBuilder;
+import org.apache.tuscany.spi.context.ComponentContext;
 import org.apache.tuscany.spi.context.CompositeContext;
-import org.apache.tuscany.spi.context.Context;
 
 /**
  * @version $Rev$ $Date$
@@ -33,6 +34,7 @@
         GenerifiedBuilder builder = new GenerifiedBuilder();
         registry.register(builder);
         Component<CompositeImplementation> component = new Component(new CompositeImplementation());
+        component.getImplementation().setComponentType(new CompositeComponentType());
         registry.build(null, component);
     }
 
@@ -40,6 +42,7 @@
         RawBuilder builder = new RawBuilder();
         registry.register(CompositeImplementation.class, builder);
         Component<CompositeImplementation> component = new Component(new CompositeImplementation());
+        component.getImplementation().setComponentType(new CompositeComponentType());
         registry.build(null, component);
     }
 
@@ -49,14 +52,14 @@
     }
 
     public static class GenerifiedBuilder implements ComponentBuilder<CompositeImplementation> {
-        public Context build(CompositeContext parent, Component<CompositeImplementation> component) {
+        public ComponentContext build(CompositeContext parent, Component<CompositeImplementation> component) {
             return null;
         }
     }
 
     @SuppressWarnings({"RawUseOfParameterizedType"})
     public static class RawBuilder implements ComponentBuilder {
-        public Context build(CompositeContext parent, Component component) {
+        public ComponentContext build(CompositeContext parent, Component component) {
             return null;
         }
     }

Modified: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/ComponentBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/ComponentBuilder.java?rev=406580&r1=406579&r2=406580&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/ComponentBuilder.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/builder/ComponentBuilder.java Mon May 15 01:14:29 2006
@@ -18,12 +18,12 @@
 
 import org.apache.tuscany.model.Component;
 import org.apache.tuscany.model.Implementation;
+import org.apache.tuscany.spi.context.ComponentContext;
 import org.apache.tuscany.spi.context.CompositeContext;
-import org.apache.tuscany.spi.context.Context;
 
 /**
  * @version $Rev$ $Date$
  */
 public interface ComponentBuilder<I extends Implementation<?>> {
-    Context build(CompositeContext parent, Component<I> component) throws BuilderConfigException;
+    ComponentContext build(CompositeContext parent, Component<I> component) throws BuilderConfigException;
 }

Modified: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentBuilderExtension.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentBuilderExtension.java?rev=406580&r1=406579&r2=406580&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentBuilderExtension.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentBuilderExtension.java Mon May 15 01:14:29 2006
@@ -1,24 +1,9 @@
 package org.apache.tuscany.spi.extension;
 
-import org.apache.tuscany.model.Component;
-import org.apache.tuscany.model.ComponentType;
 import org.apache.tuscany.model.Implementation;
-import org.apache.tuscany.model.Reference;
-import org.apache.tuscany.model.Scope;
-import org.apache.tuscany.model.Service;
 import org.apache.tuscany.spi.annotation.Autowire;
-import org.apache.tuscany.spi.builder.BuilderConfigException;
 import org.apache.tuscany.spi.builder.BuilderRegistry;
 import org.apache.tuscany.spi.builder.ComponentBuilder;
-import org.apache.tuscany.spi.context.AtomicContext;
-import org.apache.tuscany.spi.context.ComponentContext;
-import org.apache.tuscany.spi.context.CompositeContext;
-import org.apache.tuscany.spi.context.Context;
-import org.apache.tuscany.spi.context.ScopeRegistry;
-import org.apache.tuscany.spi.context.ScopeContext;
-import org.apache.tuscany.spi.wire.SourceWire;
-import org.apache.tuscany.spi.wire.TargetWire;
-import org.apache.tuscany.spi.wire.WireService;
 import org.osoa.sca.annotations.Init;
 
 /**
@@ -28,60 +13,15 @@
 public abstract class ComponentBuilderExtension<I extends Implementation<?>> implements ComponentBuilder<I> {
 
     protected BuilderRegistry builderRegistry;
-    protected WireService wireService;
-    protected ScopeRegistry scopeRegistry;
 
     @Autowire
     public void setBuilderRegistry(BuilderRegistry registry) {
         this.builderRegistry = registry;
     }
 
-    @Autowire
-    public void setWireService(WireService wireService) {
-        this.wireService = wireService;
-    }
-
-    @Autowire
-    public void setScopeRegistry(ScopeRegistry scopeRegistry) {
-        this.scopeRegistry = scopeRegistry;
-    }
-
     @Init(eager = true)
     public void init() {
         builderRegistry.register(this);
     }
 
-    @SuppressWarnings("unchecked")
-    public Context build(CompositeContext parent, Component<I> component) throws BuilderConfigException {
-        ComponentType componentType = component.getImplementation().getComponentType();
-        ComponentContext context = createContext(parent, component);
-        // create target wires
-        for (Service service : componentType.getServices().values()) {
-            TargetWire wire = wireService.createTargetWire(service);
-            context.addTargetWire(wire);
-        }
-        // create source wires
-        for (Reference reference : componentType.getReferences().values()) {
-            SourceWire wire = wireService.createSourceWire(reference);
-            context.addSourceWire(wire);
-        }
-        //TODO this could be moved up to the runtime
-        if (context instanceof AtomicContext) {
-            AtomicContext ctx = (AtomicContext) context;
-            Scope scope = ctx.getScope();
-            if (scope == null) {
-                scope = Scope.STATELESS;
-            }
-            ScopeContext scopeContext = scopeRegistry.getScopeContext(scope);
-            if (scopeContext == null){
-                throw new BuilderConfigException("Scope context not registered for scope "+ scope);
-            }
-            ctx.setScopeContext(scopeContext);
-            scopeContext.register(ctx);
-
-        }
-        return context;
-    }
-
-    protected abstract ComponentContext createContext(CompositeContext parent, Component<I> component);
 }