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 00:28:13 UTC

svn commit: r406454 - 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/context/ containers/container....

Author: jmarino
Date: Sun May 14 15:28:12 2006
New Revision: 406454

URL: http://svn.apache.org/viewcvs?rev=406454&view=rev
Log:
more extension and builder refactors

Added:
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/wire/system/
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/wire/system/WireServiceImpl.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/wire/jdk/JDKWireFactoryServiceTestCase.java
      - copied, changed from r406389, incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/wire/jdk/JDKWireFactoryFactoryTestCase.java
    incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentBuilderExtension.java
    incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/policy/
    incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/policy/PolicyBuilderRegistry.java
    incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/policy/SourcePolicyBuilder.java
    incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/policy/TargetPolicyBuilder.java
    incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/wire/WireService.java
Removed:
    incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/scopes/
    incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/wire/jdk/JDKWireFactoryFactoryTestCase.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/containers/container.java/src/test/java/org/apache/tuscany/container/java/context/MultiplicityTestCase.java
    incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/integration/JavaBuilderContextIntegrationTestCase.java
    incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.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/wire/jdk/JDKWireFactoryService.java
    incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/Component.java
    incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/PropertyValue.java
    incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/ReferenceTarget.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=406454&r1=406453&r2=406454&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 15:28:12 2006
@@ -16,18 +16,18 @@
 import org.apache.tuscany.model.JavaServiceContract;
 import org.apache.tuscany.model.Service;
 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;
+import org.apache.tuscany.spi.extension.ComponentBuilderExtension;
 import org.osoa.sca.annotations.Scope;
 
 /**
  * @version $$Rev$$ $$Date$$
  */
 @Scope("MODULE")
-public class JavaComponentBuilder implements ComponentBuilder<JavaImplementation> {
+public class JavaComponentBuilder extends ComponentBuilderExtension<JavaImplementation> {
 
-    public Context build(CompositeContext parent, Component<JavaImplementation> component) throws BuilderConfigException {
+    protected JavaAtomicContext createContext(CompositeContext parent, Component<JavaImplementation> component)
+            throws BuilderConfigException {
         PojoComponentType componentType = component.getImplementation().getComponentType();
         List<Class<?>> serviceInterfaces = new ArrayList<Class<?>>();
         for (Service service : componentType.getServices().values()) {
@@ -35,8 +35,7 @@
         }
         Constructor<?> constr;
         try {
-            constr = JavaIntrospectionHelper.getDefaultConstructor(
-                    component.getImplementation().getImplementationClass());
+            constr = JavaIntrospectionHelper.getDefaultConstructor(component.getImplementation().getImplementationClass());
         } catch (NoSuchMethodException e) {
             BuilderConfigException bce = new BuilderConfigException("Error building component", e);
             bce.setIdentifier(component.getName());
@@ -48,8 +47,7 @@
         injectors.addAll(componentType.getInjectors());
         for (Injector injector : injectors) {
             if (injector instanceof ContextInjector) {
-                // a context injector is found; iterate and determine if the parent context
-                // implements the interface
+                //iterate and determine if the parent context implements the interface
                 Class contextType = JavaIntrospectionHelper.introspectGeneric(injector.getClass(), 0);
                 if (contextType.isAssignableFrom(parent.getClass())) {
                     ((ContextInjector) injector).setContext(parent);
@@ -64,5 +62,6 @@
                 componentType.isEagerInit(), componentType.getInitInvoker(), componentType.getDestroyInvoker(),
                 injectors, componentType.getReferenceMembers());
     }
+
 
 }

Modified: incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/context/MultiplicityTestCase.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/context/MultiplicityTestCase.java?rev=406454&r1=406453&r2=406454&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/context/MultiplicityTestCase.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/context/MultiplicityTestCase.java Sun May 14 15:28:12 2006
@@ -45,7 +45,7 @@
 //        CompositeContextImpl context = new CompositeContextImpl();
 //        context.setName("system.context");
 //        List<ContextFactoryBuilder>builders = MockFactory.createSystemBuilders();
-//        WireFactoryService wireService = new DefaultWireFactoryService(new MessageFactoryImpl(), new JDKWireFactoryService(), new DefaultPolicyBuilderRegistry());
+//        WireService wireService = new DefaultWireFactoryService(new MessageFactoryImpl(), new JDKWireFactoryService(), new DefaultPolicyBuilderRegistry());
 //        builders.add(new JavaContextFactoryBuilder(wireService));
 //        List<WireBuilder> wireBuilders = new ArrayList<WireBuilder>();
 //        wireBuilders.add(new JavaTargetWireBuilder());

Modified: incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/integration/JavaBuilderContextIntegrationTestCase.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/integration/JavaBuilderContextIntegrationTestCase.java?rev=406454&r1=406453&r2=406454&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/integration/JavaBuilderContextIntegrationTestCase.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/containers/container.java/src/test/java/org/apache/tuscany/container/java/integration/JavaBuilderContextIntegrationTestCase.java Sun May 14 15:28:12 2006
@@ -35,7 +35,7 @@
 //import org.apache.tuscany.core.runtime.RuntimeContextImpl;
 //import org.apache.tuscany.core.wire.jdk.JDKWireFactoryService;
 //import org.apache.tuscany.core.wire.service.DefaultWireFactoryService;
-//import org.apache.tuscany.core.wire.service.WireFactoryService;
+//import org.apache.tuscany.core.wire.service.WireService;
 
 /**
  * Verifies that the composite context implementation and java component builders construct references properly
@@ -67,7 +67,7 @@
 //        MockInterceptorBuilder interceptorBuilder = new MockInterceptorBuilder(mockInterceptor, true);
 //        PolicyBuilderRegistry policyRegistry = new DefaultPolicyBuilderRegistry();
 //        policyRegistry.registerSourceBuilder(interceptorBuilder);
-//        WireFactoryService wireFactory = new DefaultWireFactoryService(new MessageFactoryImpl(), new JDKWireFactoryService(), policyRegistry);
+//        WireService wireFactory = new DefaultWireFactoryService(new MessageFactoryImpl(), new JDKWireFactoryService(), policyRegistry);
 //        JavaContextFactoryBuilder javaBuilder = new JavaContextFactoryBuilder(wireFactory);
 //
 //        builderRegistry.register(javaBuilder);
@@ -98,7 +98,7 @@
 //        PolicyBuilderRegistry policyRegistry = new DefaultPolicyBuilderRegistry();
 //        policyRegistry.registerSourceBuilder(interceptorBuilder);
 //        policyRegistry.registerSourceBuilder(handlerBuilder);
-//        WireFactoryService wireFactory = new DefaultWireFactoryService(new MessageFactoryImpl(), new JDKWireFactoryService(), policyRegistry);
+//        WireService wireFactory = new DefaultWireFactoryService(new MessageFactoryImpl(), new JDKWireFactoryService(), policyRegistry);
 //        JavaContextFactoryBuilder javaBuilder = new JavaContextFactoryBuilder(wireFactory);
 //
 //        builderRegistry.register(javaBuilder);
@@ -130,7 +130,7 @@
 //        PolicyBuilderRegistry policyRegistry = new DefaultPolicyBuilderRegistry();
 //        policyRegistry.registerSourceBuilder(interceptorBuilder);
 //        policyRegistry.registerSourceBuilder(handlerBuilder);
-//        WireFactoryService wireFactory = new DefaultWireFactoryService(new MessageFactoryImpl(), new JDKWireFactoryService(), policyRegistry);
+//        WireService wireFactory = new DefaultWireFactoryService(new MessageFactoryImpl(), new JDKWireFactoryService(), policyRegistry);
 //        JavaContextFactoryBuilder javaBuilder = new JavaContextFactoryBuilder(wireFactory);
 //
 //        builderRegistry.register(javaBuilder);
@@ -160,7 +160,7 @@
 //        MockInterceptorBuilder interceptorBuilder = new MockInterceptorBuilder(mockInterceptor, false);
 //        PolicyBuilderRegistry policyRegistry = new DefaultPolicyBuilderRegistry();
 //        policyRegistry.registerSourceBuilder(interceptorBuilder);
-//        WireFactoryService wireFactory = new DefaultWireFactoryService(new MessageFactoryImpl(), new JDKWireFactoryService(), policyRegistry);
+//        WireService wireFactory = new DefaultWireFactoryService(new MessageFactoryImpl(), new JDKWireFactoryService(), policyRegistry);
 //        JavaContextFactoryBuilder javaBuilder = new JavaContextFactoryBuilder(wireFactory);
 //
 //        builderRegistry.register(javaBuilder);

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java?rev=406454&r1=406453&r2=406454&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java Sun May 14 15:28:12 2006
@@ -107,7 +107,7 @@
         ReferenceTarget referenceTarget = new ReferenceTarget();
         referenceTarget.setReferenceName(name);
         try {
-            referenceTarget.setTarget(new URI(target));
+            referenceTarget.addTarget(new URI(target));
         } catch (URISyntaxException e) {
             InvalidReferenceException le = new InvalidReferenceException(e);
             le.setIdentifier(target);

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=406454&r1=406453&r2=406454&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 Sun May 14 15:28:12 2006
@@ -32,7 +32,7 @@
  */
 //@SuppressWarnings("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<?>>();
@@ -67,7 +67,9 @@
             }
         }
         for (ReferenceTarget target : component.getReferenceTargets().values()) {
-            LazyIntraCompositeResolver resolver = new LazyIntraCompositeResolver(parent, new QualifiedName(target.getTarget().getPath()));
+            //FIXME support multiplicity!
+            assert(target.getTargets().size() == 1): "Multiplicity not yet implemented";
+            LazyIntraCompositeResolver resolver = new LazyIntraCompositeResolver(parent, new QualifiedName(target.getTargets().get(0).getPath()));
             Member member = componentType.getReferenceMember(target.getReferenceName());
             if (member == null) {
                 BuilderConfigException e = new BuilderConfigException("Reference not found");

Modified: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/wire/jdk/JDKWireFactoryService.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/wire/jdk/JDKWireFactoryService.java?rev=406454&r1=406453&r2=406454&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/wire/jdk/JDKWireFactoryService.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/wire/jdk/JDKWireFactoryService.java Sun May 14 15:28:12 2006
@@ -24,7 +24,7 @@
 import java.lang.reflect.Proxy;
 
 /**
- * A system service that creates JDK dynamic proxy-based wire factories
+ * A system service that creates JDK dynamic proxy-based wires
  *
  * @version $Rev$ $Date$
  */

Added: incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/wire/system/WireServiceImpl.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/wire/system/WireServiceImpl.java?rev=406454&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/wire/system/WireServiceImpl.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/main/java/org/apache/tuscany/core/wire/system/WireServiceImpl.java Sun May 14 15:28:12 2006
@@ -0,0 +1,105 @@
+package org.apache.tuscany.core.wire.system;
+
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.tuscany.core.util.JavaIntrospectionHelper;
+import org.apache.tuscany.core.wire.SourceInvocationChainImpl;
+import org.apache.tuscany.core.wire.TargetInvocationChainImpl;
+import org.apache.tuscany.model.Reference;
+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.policy.PolicyBuilderRegistry;
+import org.apache.tuscany.spi.wire.SourceInvocationChain;
+import org.apache.tuscany.spi.wire.SourceWire;
+import org.apache.tuscany.spi.wire.TargetWire;
+import org.apache.tuscany.spi.wire.WireFactoryService;
+import org.apache.tuscany.spi.wire.TargetInvocationChain;
+import org.apache.tuscany.spi.wire.WireService;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Scope;
+
+/**
+ * The default implementation of a <code>WireFactory</code>
+ *
+ * @version $$Rev$$ $$Date$$
+ */
+@Scope("MODULE")
+@org.osoa.sca.annotations.Service(interfaces = {WireService.class})
+public class WireServiceImpl implements WireService {
+
+    private WireFactoryService wireFactoryService;
+    private PolicyBuilderRegistry policyRegistry;
+
+
+    public WireServiceImpl() {
+
+    }
+
+    public WireServiceImpl(WireFactoryService wireFactoryService, PolicyBuilderRegistry registry) {
+        this.wireFactoryService = wireFactoryService;
+        this.policyRegistry = registry;
+    }
+
+    @Autowire
+    public void setWireFactoryService(WireFactoryService service) {
+        this.wireFactoryService = service;
+    }
+
+
+    @Autowire
+    public void setPolicyRegistry(PolicyBuilderRegistry policyRegistry) {
+        this.policyRegistry = policyRegistry;
+    }
+
+    @Init(eager = true)
+    public void init() {
+    }
+
+    public SourceWire createSourceWire(Reference reference) throws BuilderConfigException {
+        String name = reference.getName();
+        Class interfaze = reference.getServiceContract().getInteface();
+        SourceWire<?> wire = wireFactoryService.createSourceWire();
+        wire.setBusinessInterface(interfaze);
+        wire.setReferenceName(name);
+
+        Map<Method, SourceInvocationChain> chains = new HashMap<Method, SourceInvocationChain>();
+        Set<Method> javaMethods = JavaIntrospectionHelper.getAllUniqueMethods(interfaze);
+        for (Method method : javaMethods) {
+            SourceInvocationChain chain = new SourceInvocationChainImpl(method);
+            chains.put(method, chain);
+        }
+        wire.setInvocationChains(chains);
+        if (policyRegistry != null) {
+            // invoke policy builders
+            policyRegistry.buildSource(reference, wire);
+        }
+        return wire;
+    }
+
+    public TargetWire createTargetWire(Service service) {
+        String name = service.getName();
+        Class interfaze = service.getServiceContract().getInteface();
+        TargetWire<?> wire = wireFactoryService.createTargetWire();
+        wire.setBusinessInterface(interfaze);
+        wire.setServiceName(name);
+
+        Map<Method, TargetInvocationChain> chains = new HashMap<Method, TargetInvocationChain>();
+        Set<Method> javaMethods = JavaIntrospectionHelper.getAllUniqueMethods(interfaze);
+        for (Method method : javaMethods) {
+            TargetInvocationChain chain = new TargetInvocationChainImpl(method);
+            chains.put(method, chain);
+        }
+        wire.setInvocationChains(chains);
+        if (policyRegistry != null) {
+            // invoke policy builders
+            policyRegistry.buildTarget(service, wire);
+        }
+        return wire;
+    }
+
+
+}

Copied: incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/wire/jdk/JDKWireFactoryServiceTestCase.java (from r406389, incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/wire/jdk/JDKWireFactoryFactoryTestCase.java)
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/wire/jdk/JDKWireFactoryServiceTestCase.java?p2=incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/wire/jdk/JDKWireFactoryServiceTestCase.java&p1=incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/wire/jdk/JDKWireFactoryFactoryTestCase.java&r1=406389&r2=406454&rev=406454&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/wire/jdk/JDKWireFactoryFactoryTestCase.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/core2/src/test/java/org/apache/tuscany/core/wire/jdk/JDKWireFactoryServiceTestCase.java Sun May 14 15:28:12 2006
@@ -28,11 +28,11 @@
 import org.apache.tuscany.spi.wire.SourceInvocationChain;
 import org.apache.tuscany.spi.wire.TargetInvocationChain;
 
-public class JDKWireFactoryFactoryTestCase extends TestCase {
+public class JDKWireFactoryServiceTestCase extends TestCase {
 
     private Method hello;
 
-    public JDKWireFactoryFactoryTestCase(String arg0) {
+    public JDKWireFactoryServiceTestCase(String arg0) {
         super(arg0);
     }
 

Modified: incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/Component.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/Component.java?rev=406454&r1=406453&r2=406454&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/Component.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/Component.java Sun May 14 15:28:12 2006
@@ -54,9 +54,23 @@
 
     public void add(PropertyValue<?> value) {
         propertyValues.put(value.getName(), value);
+        if (implementation != null && implementation.getComponentType() != null) {
+            Property property = implementation.getComponentType().getProperties().get(
+                    value.getName());
+            if (property != null) {
+                value.setProperty(property);
+            }
+        }
     }
 
     public void add(ReferenceTarget target) {
         referenceTargets.put(target.getReferenceName(), target);
+        if (implementation != null && implementation.getComponentType() != null) {
+            Reference reference = implementation.getComponentType().getReferences().get(
+                    target.getReferenceName());
+            if (reference != null) {
+                target.setReference(reference);
+            }
+        }
     }
 }

Modified: incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/PropertyValue.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/PropertyValue.java?rev=406454&r1=406453&r2=406454&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/PropertyValue.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/PropertyValue.java Sun May 14 15:28:12 2006
@@ -24,6 +24,7 @@
 public class PropertyValue<T> extends ModelObject {
     private String name;
     private ObjectFactory<T> valueFactory;
+    private Property<?> property;
 
     public String getName() {
         return name;
@@ -40,4 +41,13 @@
     public void setValueFactory(ObjectFactory<T> valueFactory) {
         this.valueFactory = valueFactory;
     }
+
+    public Property<?> getProperty() {
+        return property;
+    }
+
+    public void setProperty(Property<?> property) {
+        this.property = property;
+    }
+
 }

Modified: incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/ReferenceTarget.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/ReferenceTarget.java?rev=406454&r1=406453&r2=406454&view=diff
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/ReferenceTarget.java (original)
+++ incubator/tuscany/sandbox/jboynes/sca/model/src/main/java/org/apache/tuscany/model/ReferenceTarget.java Sun May 14 15:28:12 2006
@@ -17,13 +17,16 @@
 package org.apache.tuscany.model;
 
 import java.net.URI;
+import java.util.List;
+import java.util.ArrayList;
 
 /**
  * @version $Rev$ $Date$
  */
 public class ReferenceTarget extends ModelObject {
     private String referenceName;
-    private URI target;
+    private List<URI> targets = new ArrayList<URI>();
+    private Reference reference;
 
     public String getReferenceName() {
         return referenceName;
@@ -33,11 +36,20 @@
         this.referenceName = referenceName;
     }
 
-    public URI getTarget() {
-        return target;
+    public List<URI> getTargets() {
+        return targets;
     }
 
-    public void setTarget(URI target) {
-        this.target = target;
+    public void addTarget(URI target) {
+       targets.add(target);
     }
+
+    public Reference getReference(){
+        return reference;
+    }
+
+    public void setReference(Reference reference){
+         this.reference = reference;
+    }
+
 }

Added: 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=406454&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentBuilderExtension.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentBuilderExtension.java Sun May 14 15:28:12 2006
@@ -0,0 +1,57 @@
+package org.apache.tuscany.spi.extension;
+
+import org.apache.tuscany.spi.builder.ComponentBuilder;
+import org.apache.tuscany.spi.builder.BuilderConfigException;
+import org.apache.tuscany.spi.builder.BuilderRegistry;
+import org.apache.tuscany.spi.context.Context;
+import org.apache.tuscany.spi.context.CompositeContext;
+import org.apache.tuscany.spi.context.ComponentContext;
+import org.apache.tuscany.spi.annotation.Autowire;
+import org.apache.tuscany.spi.wire.WireService;
+import org.apache.tuscany.spi.wire.TargetWire;
+import org.apache.tuscany.spi.wire.SourceWire;
+import org.apache.tuscany.model.Implementation;
+import org.apache.tuscany.model.Component;
+import org.apache.tuscany.model.Service;
+import org.apache.tuscany.model.ComponentType;
+import org.apache.tuscany.model.Reference;
+import org.osoa.sca.annotations.Scope;
+import org.osoa.sca.annotations.Init;
+
+/**
+ * @version $$Rev$$ $$Date$$
+ */
+@Scope("MODULE")
+public abstract class ComponentBuilderExtension<I extends Implementation<?>> implements ComponentBuilder<I> {
+
+    protected BuilderRegistry registry;
+    protected WireService wireService;
+
+    @Autowire
+    public void setRegistry(BuilderRegistry registry) {
+        this.registry = registry;
+    }
+
+    @Init(eager = true)
+    public void init(){
+        registry.register(this);
+    }
+
+    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);
+        }
+        return context;
+    }
+
+    protected abstract ComponentContext createContext(CompositeContext parent, Component<I> component);
+}

Added: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/policy/PolicyBuilderRegistry.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/policy/PolicyBuilderRegistry.java?rev=406454&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/policy/PolicyBuilderRegistry.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/policy/PolicyBuilderRegistry.java Sun May 14 15:28:12 2006
@@ -0,0 +1,74 @@
+package org.apache.tuscany.spi.policy;
+
+import java.util.List;
+
+import org.apache.tuscany.model.Reference;
+import org.apache.tuscany.model.Service;
+import org.apache.tuscany.spi.builder.BuilderException;
+import org.apache.tuscany.spi.wire.SourceWire;
+import org.apache.tuscany.spi.wire.TargetWire;
+
+/**
+ * A System registry for policy builders.
+ * <p/>
+ * Policy builders operate on either a source- or target-side wire and typically are registered by runtime
+ * extensions through {@link #registerTargetBuilder} or {@link #registerSourceBuilder}
+ *
+ * @version $Rev$ $Date$
+ */
+public interface PolicyBuilderRegistry {
+
+    /**
+     * Registers a target-side policy builder. Called by extensions to register their builders.
+     *
+     * @param builder the builder to register
+     */
+    public void registerTargetBuilder(TargetPolicyBuilder builder);
+
+    /**
+     * De-registers a target-side builder. Called by extensions to register their builders.
+     *
+     * @param builder the builder to register
+     */
+    public void unregisterTargetBuilder(TargetPolicyBuilder builder);
+
+    /**
+     * Registers a source-side policy builder. Called by extensions to register their builders.
+     *
+     * @param builder the builder to register
+     */
+    public void registerSourceBuilder(SourcePolicyBuilder builder);
+
+    /**
+     * De-registers a source-side builder. Called by extensions to register their builders.
+     *
+     * @param builder the builder to register
+     */
+    public void unregisterSourceBuilder(SourcePolicyBuilder builder);
+
+    /**
+     * Returns the list of registered target-side builders
+     */
+    public List<TargetPolicyBuilder> getTargetBuilders();
+
+    /**
+     * Returns the list of registered source-side builders
+     */
+    public List<SourcePolicyBuilder> getSourceBuilders();
+
+    /**
+     * Evaluates source-side policy metadata for reference and updates the curresponding collection of wire
+     * configurations
+     *
+     * @throws BuilderException
+     */
+    public void buildSource(Reference reference, SourceWire wire) throws BuilderException;
+
+    /**
+     * Evaluates target-side policy metadata for configured reference and updates the curresponding collection
+     * of wire configurations
+     *
+     * @throws BuilderException
+     */
+    public void buildTarget(Service service, TargetWire wire) throws BuilderException;
+}

Added: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/policy/SourcePolicyBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/policy/SourcePolicyBuilder.java?rev=406454&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/policy/SourcePolicyBuilder.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/policy/SourcePolicyBuilder.java Sun May 14 15:28:12 2006
@@ -0,0 +1,20 @@
+package org.apache.tuscany.spi.policy;
+
+import java.util.List;
+
+import org.apache.tuscany.model.ReferenceTarget;
+import org.apache.tuscany.model.Reference;
+import org.apache.tuscany.spi.wire.SourceWire;
+import org.apache.tuscany.spi.builder.BuilderException;
+
+/**
+ * Implementations contribute {@link org.apache.tuscany.spi.wire.Interceptor}s or {@link
+ * org.apache.tuscany.spi.wire.MessageHandler}s that handle source-side policy on a wire.
+ *
+ * @version $$Rev$$ $$Date$$
+ */
+public interface SourcePolicyBuilder {
+
+    public void build(Reference reference, SourceWire wire) throws BuilderException;
+
+}

Added: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/policy/TargetPolicyBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/policy/TargetPolicyBuilder.java?rev=406454&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/policy/TargetPolicyBuilder.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/policy/TargetPolicyBuilder.java Sun May 14 15:28:12 2006
@@ -0,0 +1,18 @@
+package org.apache.tuscany.spi.policy;
+
+import org.apache.tuscany.model.Service;
+import org.apache.tuscany.spi.wire.SourceWire;
+import org.apache.tuscany.spi.wire.TargetWire;
+import org.apache.tuscany.spi.builder.BuilderException;
+
+/**
+ * Implementations contribute {@link org.apache.tuscany.spi.wire.Interceptor}s or {@link
+ * org.apache.tuscany.spi.wire.MessageHandler}s that handle target-side policy on a wire.
+ *
+ * @version $$Rev$$ $$Date$$
+ */
+public interface TargetPolicyBuilder{
+
+    public void build(Service service, TargetWire wire) throws BuilderException;
+
+}

Added: incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/wire/WireService.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/wire/WireService.java?rev=406454&view=auto
==============================================================================
--- incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/wire/WireService.java (added)
+++ incubator/tuscany/sandbox/jboynes/sca/spi/src/main/java/org/apache/tuscany/spi/wire/WireService.java Sun May 14 15:28:12 2006
@@ -0,0 +1,31 @@
+package org.apache.tuscany.spi.wire;
+
+import org.apache.tuscany.model.Reference;
+import org.apache.tuscany.model.Service;
+import org.apache.tuscany.spi.builder.BuilderConfigException;
+
+/**
+ * Implementations provide a system service that creates {@link org.apache.tuscany.spi.wire.SourceWire}s and
+ * {@link org.apache.tuscany.spi.wire.TargetWire}s. This service is typically resolved through autowire.
+ *
+ * @version $$Rev$$ $$Date$$
+ */
+public interface WireService {
+
+    /**
+     * Creates the source-side wire for a reference
+     *
+     * @param reference the reference to create the wire factory for
+     * @throws BuilderConfigException
+     */
+    public SourceWire createSourceWire(Reference reference) throws BuilderConfigException;
+
+    /**
+     * Creates a target-side wire for a service implementing a given interface
+     *
+     * @param service the service to create the wire factory for
+     * @throws BuilderConfigException
+     */
+    public TargetWire createTargetWire(Service service) throws BuilderConfigException;
+
+}