You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by sl...@apache.org on 2008/07/24 11:58:29 UTC

svn commit: r679334 - in /tuscany/branches/sca-java-1.3: itest/builder/src/main/resources/scenario12/ itest/builder/src/test/java/org/apache/tuscany/sca/itest/builder/ modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/ modules/assembly/src...

Author: slaws
Date: Thu Jul 24 02:58:24 2008
New Revision: 679334

URL: http://svn.apache.org/viewvc?rev=679334&view=rev
Log:
Extend TUSCANY-2324 to ensure that interface contracts are copied down alongside bindings in the multiplicity > 1 case.

Modified:
    tuscany/branches/sca-java-1.3/itest/builder/src/main/resources/scenario12/scenario12.composite
    tuscany/branches/sca-java-1.3/itest/builder/src/main/resources/scenario12/scenario12a.composite
    tuscany/branches/sca-java-1.3/itest/builder/src/test/java/org/apache/tuscany/sca/itest/builder/BuilderTestCase.java
    tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Endpoint.java
    tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseWireBuilderImpl.java
    tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ComponentReferencePromotionWireBuilderImpl.java
    tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeBuilderImpl.java
    tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeReferenceWireBuilderImpl.java
    tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ReferenceConfigurationUtil.java
    tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ComponentReferenceImpl.java
    tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/EndpointImpl.java

Modified: tuscany/branches/sca-java-1.3/itest/builder/src/main/resources/scenario12/scenario12.composite
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3/itest/builder/src/main/resources/scenario12/scenario12.composite?rev=679334&r1=679333&r2=679334&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3/itest/builder/src/main/resources/scenario12/scenario12.composite (original)
+++ tuscany/branches/sca-java-1.3/itest/builder/src/main/resources/scenario12/scenario12.composite Thu Jul 24 02:58:24 2008
@@ -30,6 +30,7 @@
     </reference>
     <reference name="reference1a" promote="ComponentB/reference2a">
         <!-- bindings and/or interfaces may or may not be specified explicitly here -->
+        <binding.ws uri="http://foo.com/bar"/>
     </reference>    
 
     <component name="ComponentB">
@@ -43,7 +44,7 @@
         <reference name="reference2">
             <!-- bindings and/or interfaces may or may not be specified explicitly here -->
         </reference>
-        <reference name="reference2a" target="ComponentF">
+        <reference name="reference2a">
             <!-- bindings and/or interfaces may or may not be specified explicitly here -->
         </reference>        
     </component>

Modified: tuscany/branches/sca-java-1.3/itest/builder/src/main/resources/scenario12/scenario12a.composite
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3/itest/builder/src/main/resources/scenario12/scenario12a.composite?rev=679334&r1=679333&r2=679334&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3/itest/builder/src/main/resources/scenario12/scenario12a.composite (original)
+++ tuscany/branches/sca-java-1.3/itest/builder/src/main/resources/scenario12/scenario12a.composite Thu Jul 24 02:58:24 2008
@@ -42,11 +42,9 @@
         </service>
         <service name="Service3a">
             <!-- bindings and/or interfaces may or may not be specified explicitly here -->
-            <binding.ws uri="http://foo.com/bar" />
         </service>
         <reference name="reference3" target="ComponentD/Service3a">
             <!-- bindings and/or interfaces may or may not be specified explicitly here -->
-            <binding.ws/>
         </reference>
         <reference name="reference3a" target="ComponentE">
             <!-- bindings and/or interfaces may or may not be specified explicitly here -->

Modified: tuscany/branches/sca-java-1.3/itest/builder/src/test/java/org/apache/tuscany/sca/itest/builder/BuilderTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3/itest/builder/src/test/java/org/apache/tuscany/sca/itest/builder/BuilderTestCase.java?rev=679334&r1=679333&r2=679334&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3/itest/builder/src/test/java/org/apache/tuscany/sca/itest/builder/BuilderTestCase.java (original)
+++ tuscany/branches/sca-java-1.3/itest/builder/src/test/java/org/apache/tuscany/sca/itest/builder/BuilderTestCase.java Thu Jul 24 02:58:24 2008
@@ -50,7 +50,7 @@
     protected void tearDown() throws Exception {
     }
 
-    
+
     // Scenario 1: <binding.ws> on outer composite service CompositeA/Service1
     public void testScenario1() throws Exception {
         System.out.println("====>Running testScenario1");
@@ -779,7 +779,7 @@
                 componentRef = reference;
                 assertTrue(reference.getBindings().size() == 2);
                 assertTrue(reference.getBindings().get(0) instanceof SCABinding);
-                assertTrue(reference.getBindings().get(1) instanceof SCABinding);
+                assertTrue(reference.getBindings().get(1) instanceof WebServiceBinding);
             }
         }
         assertTrue(componentRef != null);

Modified: tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Endpoint.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Endpoint.java?rev=679334&r1=679333&r2=679334&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Endpoint.java (original)
+++ tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/Endpoint.java Thu Jul 24 02:58:24 2008
@@ -20,6 +20,8 @@
 
 import java.util.List;
 
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+
 /**
  * Represents an endpoint (primarily a combination of a target service name and a set of
  * candidate bindings)
@@ -147,5 +149,19 @@
      * 
      * @param binding target binding
      */
-    void setTargetBinding(Binding binding);       
+    void setTargetBinding(Binding binding); 
+    
+    /**
+     * Returns the interface contract defining the interface 
+     * 
+     * @return the interface contract
+     */
+    InterfaceContract getInterfaceContract();
+    
+    /**
+     * Sets the interface contract defining the interface 
+     * 
+     * @param interfaceContract the interface contract
+     */
+    void setInterfaceContract(InterfaceContract interfaceContract);    
 }

Modified: tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseWireBuilderImpl.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseWireBuilderImpl.java?rev=679334&r1=679333&r2=679334&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseWireBuilderImpl.java (original)
+++ tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseWireBuilderImpl.java Thu Jul 24 02:58:24 2008
@@ -424,6 +424,7 @@
                             endpoint.setTargetName(targetComponent.getName());
                             endpoint.setSourceComponent(null); // TODO - fixed up at start
                             endpoint.setSourceComponentReference(componentReference);
+                            endpoint.setInterfaceContract(componentReference.getInterfaceContract());
                             endpoint.setTargetComponent(targetComponent);
                             endpoint.setTargetComponentService(targetComponentService);
                             endpoint.getCandidateBindings().addAll(componentReference.getBindings());
@@ -477,7 +478,8 @@
                         Endpoint endpoint = endpointFactory.createEndpoint();
                         endpoint.setTargetName(targetComponent.getName());
                         endpoint.setSourceComponent(null); // TODO - fixed up at start
-                        endpoint.setSourceComponentReference(componentReference);                        
+                        endpoint.setSourceComponentReference(componentReference);     
+                        endpoint.setInterfaceContract(componentReference.getInterfaceContract());
                         endpoint.setTargetComponent(targetComponent);
                         endpoint.setTargetComponentService(targetComponentService);
                         endpoint.getCandidateBindings().addAll(componentReference.getBindings());
@@ -498,7 +500,8 @@
                     Endpoint endpoint = endpointFactory.createEndpoint();
                     endpoint.setTargetName(name);
                     endpoint.setSourceComponent(null); // TODO - fixed up at start
-                    endpoint.setSourceComponentReference(componentReference);                    
+                    endpoint.setSourceComponentReference(componentReference);  
+                    endpoint.setInterfaceContract(componentReference.getInterfaceContract());
                     endpoint.getCandidateBindings().addAll(componentReference.getBindings());
                     endpoints.add(endpoint);
                     
@@ -536,7 +539,8 @@
                         Endpoint endpoint = endpointFactory.createEndpoint();
                         endpoint.setTargetName(targetComponent.getName());
                         endpoint.setSourceComponent(null); // TODO - fixed up at start
-                        endpoint.setSourceComponentReference(componentReference);                        
+                        endpoint.setSourceComponentReference(componentReference);  
+                        endpoint.setInterfaceContract(componentReference.getInterfaceContract());
                         endpoint.setTargetComponent(targetComponent);
                         endpoint.setTargetComponentService(targetComponentService);
                         endpoint.getCandidateBindings().addAll(componentReference.getBindings());
@@ -560,7 +564,8 @@
                     Endpoint endpoint = endpointFactory.createEndpoint();
                     endpoint.setTargetName(name);
                     endpoint.setSourceComponent(null); // TODO - fixed up at start
-                    endpoint.setSourceComponentReference(componentReference);                    
+                    endpoint.setSourceComponentReference(componentReference);  
+                    endpoint.setInterfaceContract(componentReference.getInterfaceContract());
                     endpoint.getCandidateBindings().addAll(componentReference.getBindings());
                     endpoints.add(endpoint);                    
                     
@@ -625,7 +630,8 @@
                         Endpoint endpoint = endpointFactory.createEndpoint();
                         endpoint.setTargetName(targetComponent.getName());
                         endpoint.setSourceComponent(null); // TODO - fixed up at start
-                        endpoint.setSourceComponentReference(componentReference);                        
+                        endpoint.setSourceComponentReference(componentReference); 
+                        endpoint.setInterfaceContract(componentReference.getInterfaceContract());
                         endpoint.setTargetComponent(targetComponent);
                         endpoint.setTargetComponentService(targetComponentService);
                         endpoint.getCandidateBindings().add(binding);
@@ -643,7 +649,8 @@
                     Endpoint endpoint = endpointFactory.createEndpoint();
                     endpoint.setTargetName(uri);
                     endpoint.setSourceComponent(null); // TODO - fixed up at start
-                    endpoint.setSourceComponentReference(componentReference);                        
+                    endpoint.setSourceComponentReference(componentReference);   
+                    endpoint.setInterfaceContract(componentReference.getInterfaceContract());
                     endpoint.setSourceBinding(binding);
                     endpoints.add(endpoint); 
                 }

Modified: tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ComponentReferencePromotionWireBuilderImpl.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ComponentReferencePromotionWireBuilderImpl.java?rev=679334&r1=679333&r2=679334&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ComponentReferencePromotionWireBuilderImpl.java (original)
+++ tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ComponentReferencePromotionWireBuilderImpl.java Thu Jul 24 02:58:24 2008
@@ -28,6 +28,7 @@
 import org.apache.tuscany.sca.assembly.Composite;
 import org.apache.tuscany.sca.assembly.CompositeReference;
 import org.apache.tuscany.sca.assembly.CompositeService;
+import org.apache.tuscany.sca.assembly.EndpointFactory;
 import org.apache.tuscany.sca.assembly.Implementation;
 import org.apache.tuscany.sca.assembly.Multiplicity;
 import org.apache.tuscany.sca.assembly.Reference;
@@ -43,10 +44,12 @@
  */
 public class ComponentReferencePromotionWireBuilderImpl implements CompositeBuilder {
     private AssemblyFactory assemblyFactory;
+    private EndpointFactory endpointFactory;
     private Monitor monitor;
 
-    public ComponentReferencePromotionWireBuilderImpl(AssemblyFactory assemblyFactory, Monitor monitor) {
+    public ComponentReferencePromotionWireBuilderImpl(AssemblyFactory assemblyFactory, EndpointFactory endpointFactory, Monitor monitor) {
         this.assemblyFactory = assemblyFactory;
+        this.endpointFactory = endpointFactory;
         this.monitor = monitor;
     }
 
@@ -91,7 +94,7 @@
                                 ReferenceConfigurationUtil.getPromotedComponentReferences(compositeReference);
                             for (ComponentReference promotedReference : promotedReferences) {
                                 ReferenceConfigurationUtil.reconcileReferenceBindings(
-                                        componentReference, promotedReference, assemblyFactory, monitor);
+                                        componentReference, promotedReference, assemblyFactory, endpointFactory, monitor);
                                 if (componentReference.getInterfaceContract() != null && // can be null in unit tests
                                     componentReference.getInterfaceContract().getCallbackInterface() != null) {
                                     SCABinding scaCallbackBinding = promotedReference.getCallbackBinding(SCABinding.class);

Modified: tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeBuilderImpl.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeBuilderImpl.java?rev=679334&r1=679333&r2=679334&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeBuilderImpl.java (original)
+++ tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeBuilderImpl.java Thu Jul 24 02:58:24 2008
@@ -99,8 +99,8 @@
         
         compositeIncludeBuilder = new CompositeIncludeBuilderImpl(monitor); 
         componentReferenceWireBuilder = new ComponentReferenceWireBuilderImpl(assemblyFactory, endpointFactory, interfaceContractMapper, monitor);
-        componentReferencePromotionWireBuilder = new ComponentReferencePromotionWireBuilderImpl(assemblyFactory, monitor);
-        compositeReferenceWireBuilder = new CompositeReferenceWireBuilderImpl(assemblyFactory, monitor);
+        componentReferencePromotionWireBuilder = new ComponentReferencePromotionWireBuilderImpl(assemblyFactory, endpointFactory, monitor);
+        compositeReferenceWireBuilder = new CompositeReferenceWireBuilderImpl(assemblyFactory, endpointFactory, monitor);
         compositeCloneBuilder = new CompositeCloneBuilderImpl(monitor);
         componentConfigurationBuilder = new ComponentConfigurationBuilderImpl(assemblyFactory, scaBindingFactory, interfaceContractMapper, policyDefinitions, monitor);
         compositeServiceConfigurationBuilder = new CompositeServiceConfigurationBuilderImpl(assemblyFactory);

Modified: tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeReferenceWireBuilderImpl.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeReferenceWireBuilderImpl.java?rev=679334&r1=679333&r2=679334&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeReferenceWireBuilderImpl.java (original)
+++ tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeReferenceWireBuilderImpl.java Thu Jul 24 02:58:24 2008
@@ -26,6 +26,7 @@
 import org.apache.tuscany.sca.assembly.ComponentReference;
 import org.apache.tuscany.sca.assembly.Composite;
 import org.apache.tuscany.sca.assembly.CompositeReference;
+import org.apache.tuscany.sca.assembly.EndpointFactory;
 import org.apache.tuscany.sca.assembly.Implementation;
 import org.apache.tuscany.sca.assembly.Reference;
 import org.apache.tuscany.sca.assembly.SCABinding;
@@ -40,10 +41,12 @@
  */
 public class CompositeReferenceWireBuilderImpl implements CompositeBuilder {
     private AssemblyFactory assemblyFactory;
+    private EndpointFactory endpointFactory;
     private Monitor monitor;
 
-    public CompositeReferenceWireBuilderImpl(AssemblyFactory assemblyFactory, Monitor monitor) {
+    public CompositeReferenceWireBuilderImpl(AssemblyFactory assemblyFactory, EndpointFactory endpointFactory, Monitor monitor) {
         this.assemblyFactory = assemblyFactory;
+        this.endpointFactory = endpointFactory;
         this.monitor = monitor;
     }
 
@@ -68,7 +71,7 @@
                     ReferenceConfigurationUtil.getPromotedComponentReferences(compositeReference);
                 for (ComponentReference promotedReference : promotedReferences) {
                     ReferenceConfigurationUtil.reconcileReferenceBindings(
-                            compositeReference, promotedReference, assemblyFactory, monitor);
+                            compositeReference, promotedReference, assemblyFactory, endpointFactory, monitor);
                     if (compositeReference.getInterfaceContract() != null && // can be null in unit tests
                         compositeReference.getInterfaceContract().getCallbackInterface() != null) {
                         SCABinding scaCallbackBinding = promotedReference.getCallbackBinding(SCABinding.class);

Modified: tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ReferenceConfigurationUtil.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ReferenceConfigurationUtil.java?rev=679334&r1=679333&r2=679334&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ReferenceConfigurationUtil.java (original)
+++ tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ReferenceConfigurationUtil.java Thu Jul 24 02:58:24 2008
@@ -28,6 +28,7 @@
 import org.apache.tuscany.sca.assembly.ComponentReference;
 import org.apache.tuscany.sca.assembly.CompositeReference;
 import org.apache.tuscany.sca.assembly.Endpoint;
+import org.apache.tuscany.sca.assembly.EndpointFactory;
 import org.apache.tuscany.sca.assembly.Multiplicity;
 import org.apache.tuscany.sca.assembly.OptimizableBinding;
 import org.apache.tuscany.sca.assembly.Reference;
@@ -167,6 +168,7 @@
     static void reconcileReferenceBindings(Reference reference,
                                            ComponentReference promotedReference,
                                            AssemblyFactory assemblyFactory,
+                                           EndpointFactory endpointFactory,
                                            Monitor monitor) {
               
         if (promotedReference.getMultiplicity() == Multiplicity.ONE_ONE ||
@@ -175,26 +177,40 @@
             // if necessary override the promoted endpoints (and bindings) with the top level bindings
             if (reference.getBindings().size() > 0 ){
                 
-                if (reference instanceof ComponentReference){
-                    promotedReference.getEndpoints().clear();
-                    promotedReference.getEndpoints().addAll(((ComponentReference)reference).getEndpoints());
-                }
-                
-                promotedReference.getBindings().clear();
+                List<Binding> bindingsToCopyDown = new ArrayList<Binding>();
+                List<Endpoint> endpointsToCopyDown = new ArrayList<Endpoint>();
                 
                 for (Binding binding : reference.getBindings()) {
                     if ((!(binding instanceof OptimizableBinding)) || binding.getURI() != null) {
-                        promotedReference.getBindings().add(binding);
-                        // TUSCANY-2324: ensure that the promoted reference can identify the
-                        //               correct interface contract for this binding
-                        // TODO - Remove and use Reference.getInterfaceContract(binding)
-                        //        in any binding that needs to use the interface contract
-                        //        from the promoting reference
-                        promotedReference.setInterfaceContract(reference.getInterfaceContract());
+                        bindingsToCopyDown.add(binding);
+                        
+                        if (reference instanceof ComponentReference){
+                            for (Endpoint endpoint : ((ComponentReference)reference).getEndpoints()){
+                                if ( endpoint.getSourceBinding() == binding){
+                                    endpointsToCopyDown.add(endpoint);
+                                    break;
+                                }
+                            }
+                        } else {
+                            // create a new endpoint to represent this promoted binding
+                            Endpoint endpoint = endpointFactory.createEndpoint();
+                            endpoint.setTargetName(binding.getURI());
+                            endpoint.setSourceComponent(null); // TODO - fixed up at start
+                            endpoint.setSourceComponentReference(promotedReference);  
+                            endpoint.setInterfaceContract(reference.getInterfaceContract());
+                            endpoint.setSourceBinding(binding);
+                            endpointsToCopyDown.add(endpoint); 
+                        }
                     }
                 }
                 
-
+                if (bindingsToCopyDown.size() > 0) {
+                    promotedReference.getBindings().clear();
+                    promotedReference.getBindings().addAll(bindingsToCopyDown);
+                    
+                    promotedReference.getEndpoints().clear();
+                    promotedReference.getEndpoints().addAll(endpointsToCopyDown);
+                }
             }
             
             if (promotedReference.getBindings().size() > 1) {
@@ -204,21 +220,29 @@
             // if necessary merge the promoted endpoints (and bindings) with the top level bindings
             if (reference.getBindings().size() > 0 ){
                 
-                if (reference instanceof ComponentReference){
-                    promotedReference.getEndpoints().addAll(((ComponentReference)reference).getEndpoints());
-                }
-                               
                 for (Binding binding : reference.getBindings()) {
                     if ((!(binding instanceof OptimizableBinding)) || binding.getURI() != null) {
                         promotedReference.getBindings().add(binding);
-                        // TUSCANY-2324: ensure that the promoted reference can identify the
-                        //               correct interface contract for this binding
-                        // TODO: use Reference.getInterfaceContract(binding) when the interface contract is required
-                        //        in any binding that needs to use the interface contract
-                        //        from the promoting reference
-                        //promotedReference.setInterfaceContract(binding, reference.getInterfaceContract());                             
+                        
+                        if (reference instanceof ComponentReference){
+                            for (Endpoint endpoint : ((ComponentReference)reference).getEndpoints()){
+                                if ( endpoint.getSourceBinding() == binding){
+                                    promotedReference.getEndpoints().add(endpoint);
+                                    break;
+                                }
+                            }
+                        } else {
+                            // create a new endpoint to represent this promoted binding
+                            Endpoint endpoint = endpointFactory.createEndpoint();
+                            endpoint.setTargetName(binding.getURI());
+                            endpoint.setSourceComponent(null); // TODO - fixed up at start
+                            endpoint.setSourceComponentReference(promotedReference); 
+                            endpoint.setInterfaceContract(reference.getInterfaceContract());
+                            endpoint.setSourceBinding(binding);
+                            promotedReference.getEndpoints().add(endpoint); 
+                        }
                     }
-                }
+                }                
             }            
         }
         

Modified: tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ComponentReferenceImpl.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ComponentReferenceImpl.java?rev=679334&r1=679333&r2=679334&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ComponentReferenceImpl.java (original)
+++ tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/ComponentReferenceImpl.java Thu Jul 24 02:58:24 2008
@@ -100,7 +100,7 @@
         
         for (Endpoint theEndpoint : endpoints){
             if (theEndpoint.getSourceBinding() == binding){
-                interfaceContract = theEndpoint.getSourceComponentReference().getInterfaceContract();
+                interfaceContract = theEndpoint.getInterfaceContract();
             }
         }
         

Modified: tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/EndpointImpl.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/EndpointImpl.java?rev=679334&r1=679333&r2=679334&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/EndpointImpl.java (original)
+++ tuscany/branches/sca-java-1.3/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/EndpointImpl.java Thu Jul 24 02:58:24 2008
@@ -26,6 +26,7 @@
 import org.apache.tuscany.sca.assembly.ComponentReference;
 import org.apache.tuscany.sca.assembly.ComponentService;
 import org.apache.tuscany.sca.assembly.Endpoint;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
 
 /**
  * The assembly model object for an endpoint.
@@ -48,6 +49,8 @@
     private Binding targetBinding;
     private Binding targetCallbackBinding;
     
+    private InterfaceContract interfaceContract;
+    
     protected EndpointImpl() {
     }
           
@@ -140,4 +143,12 @@
     public void setTargetCallbackBinding(Binding targetCallbackBinding){
         this.targetCallbackBinding = targetCallbackBinding;   
     } 
+    
+    public InterfaceContract getInterfaceContract() {
+        return interfaceContract;
+    }
+    
+    public void setInterfaceContract(InterfaceContract interfaceContract) {
+        this.interfaceContract = interfaceContract;
+    }
 }