You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2007/07/09 18:56:38 UTC

svn commit: r554706 - /incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeBuilderImpl.java

Author: rfeng
Date: Mon Jul  9 09:56:37 2007
New Revision: 554706

URL: http://svn.apache.org/viewvc?view=rev&rev=554706
Log:
Deal with binding override based on the multiplicity of the reference

Modified:
    incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeBuilderImpl.java

Modified: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeBuilderImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeBuilderImpl.java?view=diff&rev=554706&r1=554705&r2=554706
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeBuilderImpl.java (original)
+++ incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeBuilderImpl.java Mon Jul  9 09:56:37 2007
@@ -1093,11 +1093,7 @@
             List<ComponentReference> promotedReferences = getPromotedComponentReferences(compositeReference);
             for (ComponentReference promotedReference : promotedReferences) {
 
-                // Override the configuration of the promoted reference
-                SCABinding scaBinding = promotedReference.getBinding(SCABinding.class);
-                promotedReference.getBindings().clear();
-                promotedReference.getBindings().add(scaBinding);
-                promotedReference.getBindings().addAll(compositeReference.getBindings());
+                consolidateBindings(compositeReference, promotedReference);
             }
         }
 
@@ -1112,12 +1108,8 @@
                         List<ComponentReference> promotedReferences = getPromotedComponentReferences(compositeReference);
                         for (ComponentReference promotedReference : promotedReferences) {
 
-                            // Override the configuration of the promoted
-                            // reference
-                            SCABinding scaBinding = promotedReference.getBinding(SCABinding.class);
-                            promotedReference.getBindings().clear();
-                            promotedReference.getBindings().add(scaBinding);
-                            promotedReference.getBindings().addAll(componentReference.getBindings());
+                            // Override the configuration of the promoted reference
+                            consolidateBindings(componentReference, promotedReference);
 
                             // Wire the promoted reference to the actual
                             // non-composite component services
@@ -1165,6 +1157,23 @@
         }
     }
 
+    private void consolidateBindings(Reference reference, ComponentReference promotedReference) {
+        Multiplicity multiplicity = promotedReference.getMultiplicity();
+        if(multiplicity == Multiplicity.ZERO_N || multiplicity == Multiplicity.ONE_N) {
+            // Merging for 0..N or 1..N
+            promotedReference.getBindings().addAll(reference.getBindings());
+        } else {
+            // Override the configuration of the promoted reference for 0..1 or 1..1
+            SCABinding scaBinding = promotedReference.getBinding(SCABinding.class);
+            promotedReference.getBindings().clear();
+            // FIXME: [rfeng] I don't think we should keep the SCABinding
+            if (scaBinding != null) {
+                promotedReference.getBindings().add(scaBinding);
+            }
+            promotedReference.getBindings().addAll(reference.getBindings());
+        }
+    }
+
     /**
      * Wire component references to component services and connect promoted
      * services/references to component services/references inside a composite.
@@ -1316,6 +1325,30 @@
             componentReference.setMultiplicity(Multiplicity.ONE_ONE);
             component.getReferences().add(componentReference);
         }
+    }
+    
+    // Choose a binding for the reference based on the bindings available on the service 
+    protected Binding resolveBindings(ComponentReference reference, ComponentService service) {
+        List<Binding> refBindings = new ArrayList<Binding>(reference.getBindings());
+        for(Binding binding: reference.getBindings()){
+            for(Binding serviceBinding: service.getBindings()) {
+                if(binding.getClass() == serviceBinding.getClass()) {
+                    refBindings.add(binding);
+                    break;
+                }
+            }
+        }
+        if(refBindings.isEmpty()) {
+           return null; 
+        } else {
+            for(Binding binding: refBindings) {
+                if(SCABinding.class.isInstance(binding)) {
+                    return binding;
+                }
+            }
+            return refBindings.get(0);
+        }
+        
     }
     
     /**



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org