Author: jmarino
Date: Sun May 14 03:18:29 2006
New Revision: 406305

URL: http://svn.apache.org/viewcvs?rev=406305&view=rev
Log:
first cut at system builder

Added:
    
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/injection/LazyIntraCompositeResolver.java
    
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/builder/
    
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentBuilder.java
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/core2/src/main/java/org/apache/tuscany/core/model/PojoComponentType.java
    
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemImplementation.java
    
incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/ServiceContract.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=406305&r1=406304&r2=406305&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
 Sun May 14 03:18:29 2006
@@ -56,8 +56,10 @@
             serviceInterfaces.add(((JavaServiceContract) 
service.getServiceContract()).getInterfaceClass());
         }
         PojoObjectFactory<?> factory = new PojoObjectFactory(ctr, null, 
componentType.getInjectors());
-        return new JavaAtomicContext(name, serviceInterfaces, factory, 
componentType.isEagerInit(), componentType.getInitInvoker(),
-                componentType.getDestroyInvoker(), injectors, 
componentType.getMembers());
+        return null;
+        //TODO finish
+//        return new JavaAtomicContext(name, serviceInterfaces, factory, 
componentType.isEagerInit(), componentType.getInitInvoker(),
+//                componentType.getDestroyInvoker(), injectors, 
componentType.getMembers());
     }
 
 }

Added: 
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/injection/LazyIntraCompositeResolver.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/injection/LazyIntraCompositeResolver.java?rev=406305&view=auto
==============================================================================
--- 
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/injection/LazyIntraCompositeResolver.java
 (added)
+++ 
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/injection/LazyIntraCompositeResolver.java
 Sun May 14 03:18:29 2006
@@ -0,0 +1,47 @@
+package org.apache.tuscany.core.injection;
+
+import org.apache.tuscany.common.ObjectCreationException;
+import org.apache.tuscany.common.ObjectFactory;
+import org.apache.tuscany.spi.QualifiedName;
+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.ReferenceContext;
+
+/**
+ * @version $$Rev$$ $$Date$$
+ */
+public class LazyIntraCompositeResolver<T> implements ObjectFactory<T> {
+
+    private CompositeContext parent;
+    private QualifiedName name;
+    private Context context;
+
+    public LazyIntraCompositeResolver(CompositeContext parent, QualifiedName 
name) {
+        assert(parent != null): "Parent context was null";
+        assert(name != null): "Qualified name was null";
+        this.parent = parent;
+        this.name = name;
+    }
+
+    @SuppressWarnings("unchecked")
+    public T getInstance() throws ObjectCreationException {
+        if (context == null) {
+            context = parent.getContext(name.getPartName());
+            if (context == null) {
+                ObjectCreationException e = new 
ObjectCreationException("Target not found");
+                e.setIdentifier(name.getQualifiedName());
+                throw e;
+            }
+        }
+        if (context instanceof ComponentContext) {
+            return (T) ((CompositeContext) 
context).getService(name.getPortName());
+        } else if (context instanceof ReferenceContext) {
+            return (T) context.getService();
+        } else {
+            ObjectCreationException e = new ObjectCreationException("Invalid 
target type");
+            e.setIdentifier(context.getName());
+            throw e;
+        }
+    }
+}

Modified: 
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/model/PojoComponentType.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/model/PojoComponentType.java?rev=406305&r1=406304&r2=406305&view=diff
==============================================================================
--- 
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/model/PojoComponentType.java
 (original)
+++ 
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/model/PojoComponentType.java
 Sun May 14 03:18:29 2006
@@ -45,15 +45,15 @@
         injectors.add(injector);
     }
 
-    public Member getMember(String name) {
+    public Member getReferenceMember(String name) {
         return members.get(name);
     }
 
-    public void setMember(Member member) {
-        members.put(member.getName(),member);
+    public void setReferenceMember(String name, Member member) {
+        members.put(name,member);
     }
 
-    public Map<String,Member> getMembers() {
+    public Map<String,Member> getReferenceMembers() {
         return members;
     }
 

Added: 
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=406305&view=auto
==============================================================================
--- 
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentBuilder.java
 (added)
+++ 
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentBuilder.java
 Sun May 14 03:18:29 2006
@@ -0,0 +1,71 @@
+package org.apache.tuscany.core.system.builder;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tuscany.common.ObjectFactory;
+import org.apache.tuscany.core.injection.FieldInjector;
+import org.apache.tuscany.core.injection.Injector;
+import org.apache.tuscany.core.injection.LazyIntraCompositeResolver;
+import org.apache.tuscany.core.injection.MethodInjector;
+import org.apache.tuscany.core.injection.PojoObjectFactory;
+import org.apache.tuscany.core.model.PojoComponentType;
+import org.apache.tuscany.core.system.context.SystemAtomicContextImpl;
+import org.apache.tuscany.core.system.model.SystemImplementation;
+import org.apache.tuscany.core.util.JavaIntrospectionHelper;
+import org.apache.tuscany.model.Component;
+import org.apache.tuscany.model.ReferenceTarget;
+import org.apache.tuscany.model.Service;
+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.CompositeContext;
+import org.apache.tuscany.spi.context.Context;
+
+/**
+ * @version $$Rev$$ $$Date$$
+ */
[EMAIL PROTECTED]("unchecked")
+public class SystemComponentBuilder implements 
ComponentBuilder<SystemImplementation> {
+    public Context 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()) {
+            serviceInterfaces.add(service.getServiceContract().getInteface());
+        }
+        Constructor<?> constr;
+        try {
+            constr = JavaIntrospectionHelper.getDefaultConstructor(
+                    component.getImplementation().getImplementationClass());
+        } catch (NoSuchMethodException e) {
+            BuilderConfigException bce = new BuilderConfigException("Error 
building component", e);
+            bce.setIdentifier(component.getName());
+            bce.addContextName(parent.getName());
+            throw bce;
+        }
+        ObjectFactory<?> factory = new PojoObjectFactory(constr);
+        List<Injector> injectors = new ArrayList<Injector>();
+        injectors.addAll(componentType.getInjectors());
+        for (ReferenceTarget target : 
component.getReferenceTargets().values()) {
+            LazyIntraCompositeResolver resolver = new 
LazyIntraCompositeResolver(parent, new 
QualifiedName(target.getTarget().getPath()));
+            Member member = 
componentType.getReferenceMember(target.getReferenceName());
+            if (member == null) {
+                BuilderConfigException e = new 
BuilderConfigException("Reference not found");
+                e.setIdentifier(target.getReferenceName());
+                e.addContextName(component.getName());
+                e.addContextName(parent.getName());
+                throw e;
+            } else if (member instanceof Field) {
+                injectors.add(new FieldInjector((Field) member, resolver));
+            } else if (member instanceof Method) {
+                injectors.add(new MethodInjector((Method) member, resolver));
+            }
+        }
+        return new SystemAtomicContextImpl(component.getName(), 
serviceInterfaces, factory,
+                componentType.isEagerInit(), componentType.getInitInvoker(), 
componentType.getDestroyInvoker(), injectors);
+    }
+}

Modified: 
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemImplementation.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemImplementation.java?rev=406305&r1=406304&r2=406305&view=diff
==============================================================================
--- 
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemImplementation.java
 (original)
+++ 
incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/system/model/SystemImplementation.java
 Sun May 14 03:18:29 2006
@@ -16,13 +16,13 @@
  */
 package org.apache.tuscany.core.system.model;
 
+import org.apache.tuscany.core.model.PojoComponentType;
 import org.apache.tuscany.model.AtomicImplementation;
-import org.apache.tuscany.model.ComponentType;
 
 /**
  * @version $Rev$ $Date$
  */
-public class SystemImplementation extends AtomicImplementation<ComponentType> {
+public class SystemImplementation extends 
AtomicImplementation<PojoComponentType> {
     private Class<?> implementationClass;
 
     public Class<?> getImplementationClass() {

Modified: 
incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/ServiceContract.java
URL: 
http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/ServiceContract.java?rev=406305&r1=406304&r2=406305&view=diff
==============================================================================
--- 
incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/ServiceContract.java
 (original)
+++ 
incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/ServiceContract.java
 Sun May 14 03:18:29 2006
@@ -21,6 +21,15 @@
  */
 public abstract class ServiceContract extends ModelObject {
     private InteractionScope interactionScope;
+    private Class<?> intefaze;
+
+    public Class<?> getInteface() {
+        return intefaze;
+    }
+
+    public void setIntefaze(Class<?> intefaze) {
+        this.intefaze = intefaze;
+    }
 
     public InteractionScope getInteractionScope() {
         return interactionScope;
@@ -29,4 +38,5 @@
     public void setInteractionScope(InteractionScope interactionScope) {
         this.interactionScope = interactionScope;
     }
+
 }


Reply via email to