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