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/16 00:54:20 UTC

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

Author: rfeng
Date: Sun Jul 15 15:54:19 2007
New Revision: 556471

URL: http://svn.apache.org/viewvc?view=rev&rev=556471
Log:
Work in progress: wiring for reference with multiple bindings and different multiplicity settings

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=556471&r1=556470&r2=556471
==============================================================================
--- 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 Sun Jul 15 15:54:19 2007
@@ -20,8 +20,10 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.tuscany.sca.assembly.AssemblyFactory;
 import org.apache.tuscany.sca.assembly.Binding;
@@ -681,6 +683,7 @@
                 }
             }
             for (ComponentReference componentReference : component.getReferences()) {
+                // FIXME: [rfeng] I don't think we should calculate the reference binding URI as follows.
                 String uri = component.getName() + '/' + componentReference.getName();
                 componentReferences.put(uri, componentReference);
 
@@ -906,6 +909,20 @@
                     }
                 }
             }
+            // [rfeng] For any targets, select the matching binding for the reference
+            List<Binding> selectedBindings = new ArrayList<Binding>();
+            for (ComponentService service : targets) {
+                Binding selected = resolveBindings(componentReference, service);
+                if (selected == null) {
+                    warning("Component reference doesn't have a matching binding", componentReference);
+                } else {
+                    selectedBindings.add(selected);
+                }
+            }
+            if (!targets.isEmpty()) {
+                componentReference.getBindings().clear();
+                componentReference.getBindings().addAll(selectedBindings);
+            }
         }
     }
 
@@ -1191,7 +1208,7 @@
             List<ComponentReference> promotedReferences = getPromotedComponentReferences(compositeReference);
             for (ComponentReference promotedReference : promotedReferences) {
 
-                consolidateBindings(compositeReference, promotedReference);
+                reconcileReferenceBindings(compositeReference, promotedReference);
                 if (compositeReference.getInterfaceContract() != null &&  // can be null in unit tests
                     compositeReference.getInterfaceContract().getCallbackInterface() != null) {
                     SCABinding scaCallbackBinding = promotedReference.getCallbackBinding(SCABinding.class);
@@ -1223,7 +1240,7 @@
                         for (ComponentReference promotedReference : promotedReferences) {
 
                             // Override the configuration of the promoted reference
-                            consolidateBindings(componentReference, promotedReference);
+                            reconcileReferenceBindings(componentReference, promotedReference);
                             if (componentReference.getInterfaceContract() != null &&  // can be null in unit tests
                                 componentReference.getInterfaceContract().getCallbackInterface() != null) {
                                 SCABinding scaCallbackBinding = promotedReference.getCallbackBinding(SCABinding.class);
@@ -1245,7 +1262,7 @@
                             // non-composite component services
                             if (promotedReference.getMultiplicity() == Multiplicity.ONE_ONE || promotedReference
                                     .getMultiplicity() == Multiplicity.ONE_ONE) {
-                                promotedReference.getTargets().clear();
+                                // promotedReference.getTargets().clear();
                             }
                             for (ComponentService target : componentReference.getTargets()) {
                                 if (target.getService() instanceof CompositeService) {
@@ -1290,21 +1307,22 @@
         }
     }
 
-    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().clear();
-            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());
+    /**
+     * Override the bindings for a promoted reference from an outer component reference
+     * @param reference
+     * @param promotedReference
+     */
+    private void reconcileReferenceBindings(Reference reference, ComponentReference promotedReference) {
+        Set<Binding> bindings = new HashSet<Binding>();
+        bindings.addAll(promotedReference.getBindings());
+        bindings.addAll(reference.getBindings());
+        promotedReference.getBindings().clear();
+        promotedReference.getBindings().addAll(bindings);
+        if (promotedReference.getMultiplicity() == Multiplicity.ONE_ONE || promotedReference.getMultiplicity() == Multiplicity.ZERO_ONE) {
+            if (bindings.size() > 1) {
+                warning("Component reference " + promotedReference.getName() + " has more than one wires",
+                        promotedReference);
+            }
         }
     }
 



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