You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2008/04/24 09:21:35 UTC

svn commit: r651179 [2/4] - in /incubator/tuscany/java/sca: itest/domain/src/test/java/org/apache/tuscany/sca/itest/domain/ modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/ modules/assembly/src/main/java/org/apache/tuscany/sca/as...

Copied: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseWireBuilderImpl.java (from r650671, incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeWireBuilderImpl.java)
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseWireBuilderImpl.java?p2=incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseWireBuilderImpl.java&p1=incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeWireBuilderImpl.java&r1=650671&r2=651179&rev=651179&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeWireBuilderImpl.java (original)
+++ incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseWireBuilderImpl.java Thu Apr 24 00:21:13 2008
@@ -44,22 +44,24 @@
 import org.apache.tuscany.sca.assembly.Service;
 import org.apache.tuscany.sca.assembly.Wire;
 import org.apache.tuscany.sca.interfacedef.IncompatibleInterfaceContractException;
-import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper;
 import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper;
 import org.apache.tuscany.sca.monitor.Monitor;
 import org.apache.tuscany.sca.monitor.Problem;
 import org.apache.tuscany.sca.monitor.Problem.Severity;
 import org.apache.tuscany.sca.policy.util.PolicyComputationUtils;
 
-public class CompositeWireBuilderImpl {
+/**
+ * A composite builder that handles wiring inside a composite.
+ *
+ * @version $Rev$ $Date$
+ */
+class BaseWireBuilderImpl {
 
     private Monitor monitor;
     private AssemblyFactory assemblyFactory;
     private InterfaceContractMapper interfaceContractMapper;
     
-    private BindingPolicyComputer bindingPolicyComputer = null;
-    private ImplementationPolicyComputer implPolicyComputer = null;
-    
     //Represents a target component and service
     private class Target {
         Component component;
@@ -79,15 +81,13 @@
         }
     };
     
-    public CompositeWireBuilderImpl(AssemblyFactory assemblyFactory, InterfaceContractMapper interfaceContractMapper, Monitor monitor) {
+    protected BaseWireBuilderImpl(AssemblyFactory assemblyFactory, InterfaceContractMapper interfaceContractMapper, Monitor monitor) {
         this.assemblyFactory = assemblyFactory;
         this.interfaceContractMapper = interfaceContractMapper;
         this.monitor = monitor;
         
-        this.bindingPolicyComputer = new BindingPolicyComputer();
-        this.implPolicyComputer = new ImplementationPolicyComputer();
     }
-
+    
     /**
      * Wire component references to component services and connect promoted
      * services/references to component services/references inside a composite.
@@ -95,13 +95,13 @@
      * @param composite
      * @throws IncompatibleInterfaceContractException 
      */
-    public void wireComposite(Composite composite) throws IncompatibleInterfaceContractException {
+    protected void wireComponentReferences(Composite composite) throws IncompatibleInterfaceContractException {
 
         // Wire nested composites recursively
         for (Component component : composite.getComponents()) {
             Implementation implementation = component.getImplementation();
             if (implementation instanceof Composite) {
-                wireComposite((Composite)implementation);
+                wireComponentReferences((Composite)implementation);
             }
         }
 
@@ -128,7 +128,7 @@
         // Validate that references are wired or promoted, according
         // to their multiplicity
         for (ComponentReference componentReference : componentReferences.values()) {
-            if (!ReferenceUtil.validateMultiplicityAndTargets(componentReference.getMultiplicity(), componentReference
+            if (!ReferenceConfigurationUtil.validateMultiplicityAndTargets(componentReference.getMultiplicity(), componentReference
                 .getTargets(), componentReference.getBindings())) {
                 if (componentReference.getTargets().isEmpty()) {
 
@@ -142,7 +142,8 @@
                         }
                     }
                     if (!promoted && !componentReference.isCallback()) {
-                        warning("No targets for reference: " + componentReference.getName(), composite);
+                        /*warning("No targets for reference: " + componentReference.getName(), composite);*/
+				warning("ReferenceWithoutTargets", composite, componentReference.getName());
                     }
                 } else {
                     warning("Too many targets on reference: " + componentReference.getName(), composite);
@@ -205,8 +206,8 @@
      * @param message
      * @param model
      */
-    private void warning(String message, Object model) {
-        Problem problem = new ProblemImpl(this.getClass().getName(), "assembly-validation-messages", Severity.WARNING, model, message);
+    private void warning(String message, Object model, String... messageParameters) {
+        Problem problem = new ProblemImpl(this.getClass().getName(), "assembly-validation-messages", Severity.WARNING, model, message, (Object[])messageParameters);
         monitor.problem(problem);
     }
 
@@ -276,7 +277,8 @@
                     }
     
                 } else {
-                    warning("Promoted component service not found: " + promotedServiceName, composite);
+                    /*warning("Promoted component service not found: " + promotedServiceName, composite);*/
+			    warning("PromotedServiceNotFound", composite, promotedServiceName);
                 }
             }
         }
@@ -339,7 +341,8 @@
                         	}
                         }
                     } else {
-                        warning("Promoted component reference not found: " + componentReferenceName, composite);
+                        /*warning("Promoted component reference not found: " + componentReferenceName, composite);*/
+				warning("PromotedReferenceNotFound", composite, componentReferenceName);
                     }
                 }
             }
@@ -408,11 +411,12 @@
                         // see if an sca binding is associated with a resolved target or not
                         componentService.setUnresolved(false);
                     } else {
-                        warning("Incompatible interfaces on component reference and target: " + componentReference
+                        /*warning("Incompatible interfaces on component reference and target: " + componentReference
                                     .getName()
                                     + " : "
                                     + componentService.getName(),
-                                composite);
+                                composite);*/
+				warning("ReferenceIncompatibleInterface", composite, componentReference.getName(), componentService.getName());
                     }
                 } else {
                     // add all the reference bindings into the target so that they
@@ -422,7 +426,8 @@
                     // The bindings will be cloned back into the reference when the 
                     // target is finally resolved. 
                     
-                    warning("Component reference target not found, it might be a remote service: " + componentService.getName(), composite);
+                    /*warning("Component reference target not found, it might be a remote service: " + componentService.getName(), composite);*/
+			    warning("ComponentReferenceTargetNotFound", composite, componentService.getName());
                 }
             }
         } else if (componentReference.getReference() != null) {
@@ -515,25 +520,25 @@
                 if (targetComponentService.getService() instanceof CompositeService) {
                     CompositeService compositeService = (CompositeService) targetComponentService.getService();
                     // Find the promoted component service
-                    targetComponentService = CompositeConfigurationBuilderImpl.getPromotedComponentService(compositeService);
+                    targetComponentService = ServiceConfigurationUtil.getPromotedComponentService(compositeService);
                 }
                 
                 try  {
-                    bindingPolicyComputer.determineApplicableBindingPolicySets(componentReference, targetComponentService);
+                    PolicyConfigurationUtil.determineApplicableBindingPolicySets(componentReference, targetComponentService);
                 } catch ( Exception e ) {
                     warning("Policy related exception: " + e, e);
                     //throw new RuntimeException(e);
                 }
 
                 // Match the binding against the bindings of the target service
-                Binding selected = BindingUtil.resolveBindings(componentReference, targetComponent, targetComponentService);
+                Binding selected = BindingConfigurationUtil.resolveBindings(componentReference, targetComponent, targetComponentService);
                 if (selected == null) {
                     warning("Component reference doesn't have a matching binding", componentReference);
                 } else {
                     selectedBindings.add(selected);
                 }
                 if (bidirectional) {
-                    Binding selectedCallback = BindingUtil.resolveCallbackBindings(componentReference, targetComponent, targetComponentService);
+                    Binding selectedCallback = BindingConfigurationUtil.resolveCallbackBindings(componentReference, targetComponent, targetComponentService);
                     if (selectedCallback != null) {
                         selectedCallbackBindings.add(selectedCallback);
                     }
@@ -650,7 +655,7 @@
      * @param composite
      * @param problems
      */
-    public void wireCompositeReferences(Composite composite) {
+    protected void wireCompositeReferences(Composite composite) {
     
         // Process nested composites recursively
         for (Component component : composite.getComponents()) {
@@ -731,7 +736,7 @@
                                     // promoted by a composite service
                                     CompositeService compositeService = (CompositeService)target.getService();
                                     // Find the promoted component service
-                                    ComponentService componentService = CompositeConfigurationBuilderImpl.getPromotedComponentService(compositeService);
+                                    ComponentService componentService = ServiceConfigurationUtil.getPromotedComponentService(compositeService);
                                     if (componentService != null) {
                                         promotedReference.getTargets().add(componentService);
                                     }
@@ -865,7 +870,7 @@
     }
 
     
-    public void computePolicies(Composite composite) {
+    private void computePolicies(Composite composite) {
     
         for (Component component : composite.getComponents()) {
 
@@ -873,12 +878,12 @@
             // This must be done BEFORE computing implementation policies because the
             // implementation policy computer removes from the component any
             // intents and policy sets that don't apply to implementations.
-            bindingPolicyComputer.inheritDefaultPolicies(component, component.getServices());
-            bindingPolicyComputer.inheritDefaultPolicies(component, component.getReferences());
+            PolicyConfigurationUtil.inheritDefaultPolicies(component, component.getServices());
+            PolicyConfigurationUtil.inheritDefaultPolicies(component, component.getReferences());
 
             Implementation implemenation = component.getImplementation(); 
             try {
-                implPolicyComputer.computeImplementationIntentsAndPolicySets(implemenation, component);
+                PolicyConfigurationUtil.computeImplementationIntentsAndPolicySets(implemenation, component);
             } catch ( Exception e ) {
                 warning("Policy related exception: " + e, e);
                 //throw new RuntimeException(e);
@@ -913,11 +918,11 @@
                 
                 try {
                     //compute the intents for operations under service element
-                    bindingPolicyComputer.computeIntentsForOperations(componentService);
+                    PolicyConfigurationUtil.computeIntentsForOperations(componentService);
                     //compute intents and policyset for each binding
                     //addInheritedOpConfOnBindings(componentService);
-                    bindingPolicyComputer.computeBindingIntentsAndPolicySets(componentService);
-                    bindingPolicyComputer.determineApplicableBindingPolicySets(componentService, null);
+                    PolicyConfigurationUtil.computeBindingIntentsAndPolicySets(componentService);
+                    PolicyConfigurationUtil.determineApplicableBindingPolicySets(componentService, null);
     
                 } catch ( Exception e ) {
                     warning("Policy related exception: " + e, e);
@@ -936,11 +941,11 @@
                
                 try {
                     //compute the intents for operations under reference element
-                    bindingPolicyComputer.computeIntentsForOperations(componentReference);
+                    PolicyConfigurationUtil.computeIntentsForOperations(componentReference);
                     //compute intents and policyset for each binding
                     //addInheritedOpConfOnBindings(componentReference);
-                    bindingPolicyComputer.computeBindingIntentsAndPolicySets(componentReference);
-                    bindingPolicyComputer.determineApplicableBindingPolicySets(componentReference, null);
+                    PolicyConfigurationUtil.computeBindingIntentsAndPolicySets(componentReference);
+                    PolicyConfigurationUtil.determineApplicableBindingPolicySets(componentReference, null);
     
                 
                     if ( componentReference.getCallback() != null ) {
@@ -957,19 +962,19 @@
             }
         }
 
-        bindingPolicyComputer.inheritDefaultPolicies(composite, composite.getServices());
-        bindingPolicyComputer.inheritDefaultPolicies(composite, composite.getReferences());
+        PolicyConfigurationUtil.inheritDefaultPolicies(composite, composite.getServices());
+        PolicyConfigurationUtil.inheritDefaultPolicies(composite, composite.getReferences());
 
         //compute policies for composite service bindings
         for (Service service : composite.getServices()) {
             addPoliciesFromPromotedService((CompositeService)service);
             try {
                 //compute the intents for operations under service element
-                bindingPolicyComputer.computeIntentsForOperations(service);
+                PolicyConfigurationUtil.computeIntentsForOperations(service);
                 //add or merge service operations to the binding
                 //addInheritedOpConfOnBindings(service);
-                bindingPolicyComputer.computeBindingIntentsAndPolicySets(service);
-                bindingPolicyComputer.determineApplicableBindingPolicySets(service, null);
+                PolicyConfigurationUtil.computeBindingIntentsAndPolicySets(service);
+                PolicyConfigurationUtil.determineApplicableBindingPolicySets(service, null);
             } catch ( Exception e ) {
                 warning("Policy related exception: " + e, e);
                 //throw new RuntimeException(e);
@@ -982,7 +987,7 @@
             addPoliciesFromPromotedReference(compReference);
             try {
                 //compute the intents for operations under service element
-                bindingPolicyComputer.computeIntentsForOperations(reference);
+                PolicyConfigurationUtil.computeIntentsForOperations(reference);
                 //addInheritedOpConfOnBindings(reference);
                 
                 if (compReference.getCallback() != null) {
@@ -993,8 +998,8 @@
                                            false);
                 }
                 
-                bindingPolicyComputer.computeBindingIntentsAndPolicySets(reference);
-                bindingPolicyComputer.determineApplicableBindingPolicySets(reference, null);
+                PolicyConfigurationUtil.computeBindingIntentsAndPolicySets(reference);
+                PolicyConfigurationUtil.determineApplicableBindingPolicySets(reference, null);
             } catch ( Exception e ) {
                 warning("Policy related exception: " + e, e);
                 //throw new RuntimeException(e);

Propchange: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseWireBuilderImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BaseWireBuilderImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Copied: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BindingConfigurationUtil.java (from r651126, incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BindingUtil.java)
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BindingConfigurationUtil.java?p2=incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BindingConfigurationUtil.java&p1=incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BindingUtil.java&r1=651126&r2=651179&rev=651179&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BindingUtil.java (original)
+++ incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BindingConfigurationUtil.java Thu Apr 24 00:21:13 2008
@@ -33,7 +33,7 @@
 /**
  * This class encapsulates utility methods to deal with binding definitions
  */
-class BindingUtil {
+abstract class BindingConfigurationUtil {
     private static boolean hasCompatiblePolicySets(Binding refBinding, Binding svcBinding) {
         boolean isCompatible = true;
         if ( refBinding instanceof PolicySetAttachPoint && svcBinding instanceof PolicySetAttachPoint ) {
@@ -56,7 +56,7 @@
     }
     
     
-    public static Binding matchBinding(Component component, ComponentService service, List<Binding> source, List<Binding> target) {
+    static Binding matchBinding(Component component, ComponentService service, List<Binding> source, List<Binding> target) {
         List<Binding> matched = new ArrayList<Binding>();
         // Find the corresponding bindings from the service side
         for (Binding binding : source) {

Propchange: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BindingConfigurationUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/BindingConfigurationUtil.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Copied: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ComponentConfigurationBuilderImpl.java (from r651053, incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeConfigurationBuilderImpl.java)
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ComponentConfigurationBuilderImpl.java?p2=incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ComponentConfigurationBuilderImpl.java&p1=incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeConfigurationBuilderImpl.java&r1=651053&r2=651179&rev=651179&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeConfigurationBuilderImpl.java (original)
+++ incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ComponentConfigurationBuilderImpl.java Thu Apr 24 00:21:13 2008
@@ -19,1417 +19,32 @@
 
 package org.apache.tuscany.sca.assembly.builder.impl;
 
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.namespace.QName;
-
 import org.apache.tuscany.sca.assembly.AssemblyFactory;
-import org.apache.tuscany.sca.assembly.Binding;
-import org.apache.tuscany.sca.assembly.Component;
-import org.apache.tuscany.sca.assembly.ComponentProperty;
-import org.apache.tuscany.sca.assembly.ComponentReference;
-import org.apache.tuscany.sca.assembly.ComponentService;
 import org.apache.tuscany.sca.assembly.Composite;
-import org.apache.tuscany.sca.assembly.CompositeService;
-import org.apache.tuscany.sca.assembly.Implementation;
-import org.apache.tuscany.sca.assembly.Property;
-import org.apache.tuscany.sca.assembly.Reference;
-import org.apache.tuscany.sca.assembly.SCABinding;
 import org.apache.tuscany.sca.assembly.SCABindingFactory;
-import org.apache.tuscany.sca.assembly.Service;
-import org.apache.tuscany.sca.assembly.builder.ComponentPreProcessor;
+import org.apache.tuscany.sca.assembly.builder.CompositeBuilder;
 import org.apache.tuscany.sca.assembly.builder.CompositeBuilderException;
 import org.apache.tuscany.sca.definitions.SCADefinitions;
-import org.apache.tuscany.sca.interfacedef.InterfaceContract;
 import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper;
 import org.apache.tuscany.sca.monitor.Monitor;
-import org.apache.tuscany.sca.monitor.Problem;
-import org.apache.tuscany.sca.monitor.Problem.Severity;
-import org.apache.tuscany.sca.policy.IntentAttachPoint;
-import org.apache.tuscany.sca.policy.IntentAttachPointType;
-import org.apache.tuscany.sca.policy.IntentAttachPointTypeFactory;
-
-public class CompositeConfigurationBuilderImpl {
-    private final static String SCA10_NS = "http://www.osoa.org/xmlns/sca/1.0";
-    private final static String BINDING_SCA = "binding.sca";
-    private final static QName BINDING_SCA_QNAME = new QName(SCA10_NS, BINDING_SCA);
 
-    private AssemblyFactory assemblyFactory;
-    private SCABindingFactory scaBindingFactory;
-    private Monitor monitor;
-    private InterfaceContractMapper interfaceContractMapper;
-    private IntentAttachPointTypeFactory  intentAttachPointTypeFactory;
-    private SCADefinitions scaDefinitions = null;
+/**
+ * A composite builder that handles the configuration of components.
+ *
+ * @version $Rev$ $Date$
+ */
+public class ComponentConfigurationBuilderImpl extends BaseConfigurationBuilderImpl implements CompositeBuilder {
 
-    public CompositeConfigurationBuilderImpl(AssemblyFactory assemblyFactory,
+    public ComponentConfigurationBuilderImpl(AssemblyFactory assemblyFactory,
                                              SCABindingFactory scaBindingFactory,
-                                             IntentAttachPointTypeFactory  intentAttachPointTypeFactory,
                                              InterfaceContractMapper interfaceContractMapper,
+                                             SCADefinitions policyDefinitions,
                                              Monitor monitor) {
-        this.assemblyFactory = assemblyFactory;
-        this.scaBindingFactory = scaBindingFactory;
-        this.intentAttachPointTypeFactory = intentAttachPointTypeFactory;
-        this.interfaceContractMapper = interfaceContractMapper;
-        this.monitor = monitor;
-    }
-
-    /**
-     * Configure components in the composite.
-     * 
-     * @param composite
-     * @param problems
-     */
-    public void configureComponents(Composite composite) throws CompositeBuilderException {
-        configureComponents(composite, null);
-        configureSourcedProperties(composite, null);
-        configureBindingURIs(composite, null, null);
-    }
-
-    /**
-     * Configure components in the composite.
-     * 
-     * @param composite
-     * @param uri
-     * @param problems
-     */
-    private void configureComponents(Composite composite, String uri) {
-        String parentURI = uri;
-
-        // Process nested composites recursively
-        for (Component component : composite.getComponents()) {
-
-            // Initialize component URI
-            String componentURI;
-            if (parentURI == null) {
-                componentURI = component.getName();
-            } else {
-                componentURI = URI.create(parentURI + '/').resolve(component.getName()).toString();
-            }
-            component.setURI(componentURI);
-
-            Implementation implementation = component.getImplementation();
-            if (implementation instanceof Composite) {
-
-                // Process nested composite
-                configureComponents((Composite)implementation, componentURI);
-            }
-        }
-
-        // Initialize service bindings
-        List<Service> compositeServices = composite.getServices();
-        for (Service service : compositeServices) {
-            // Set default binding names 
-            
-            // Create default SCA binding
-            if (service.getBindings().isEmpty()) {
-                SCABinding scaBinding = createSCABinding();
-                service.getBindings().add(scaBinding);
-            }
-
-            // Initialize binding names and URIs
-            for (Binding binding : service.getBindings()) {
-                
-                // Binding name defaults to the service name
-                if (binding.getName() == null) {
-                    binding.setName(service.getName());
-                }
-            }
-            
-            if (service.getCallback() != null) {
-                for (Binding binding : service.getCallback().getBindings()) {
-                    if (binding.getName() == null) {
-                        binding.setName(service.getName());
-                    }
-                }
-            }
-        }
-
-        // Initialize reference bindings
-        for (Reference reference : composite.getReferences()) {
-            // Create default SCA binding
-            if (reference.getBindings().isEmpty()) {
-                SCABinding scaBinding = createSCABinding();
-                reference.getBindings().add(scaBinding);
-            }
-
-            // Set binding names
-            for (Binding binding : reference.getBindings()) {
-                if (binding.getName() == null) {
-                    binding.setName(reference.getName());
-                }
-            }
-
-            if (reference.getCallback() != null) {
-                for (Binding binding : reference.getCallback().getBindings()) {
-                    if (binding.getName() == null) {
-                        binding.setName(reference.getName());
-                    }
-                }
-            }
-        }
-
-        // Initialize all component services and references
-        Map<String, Component> components = new HashMap<String, Component>();
-        for (Component component : composite.getComponents()) {
-
-            // Index all components and check for duplicates
-            if (components.containsKey(component.getName())) {
-                /*                
-                warning("Duplicate component name: " + composite.getName()
-                        + " : "
-                        + component.getName(), composite);
-                */
-                warning("DuplicateComponentName", component, composite.getName().toString(), component.getName());
-            } else {
-                components.put(component.getName(), component);
-            }
-
-            // Propagate the autowire flag from the composite to components
-            if (component.getAutowire() == null) {
-                component.setAutowire(composite.getAutowire());
-            }
-
-            if (component.getImplementation() instanceof ComponentPreProcessor) {
-                ((ComponentPreProcessor)component.getImplementation()).preProcess(component);
-            }
-
-            // Index properties, services and references
-            Map<String, Service> services = new HashMap<String, Service>();
-            Map<String, Reference> references = new HashMap<String, Reference>();
-            Map<String, Property> properties = new HashMap<String, Property>();
-            indexImplementationPropertiesServicesAndReferences(component,
-                                                               services,
-                                                               references,
-                                                               properties);
-
-            // Index component services, references and properties
-            // Also check for duplicates
-            Map<String, ComponentService> componentServices =
-                new HashMap<String, ComponentService>();
-            Map<String, ComponentReference> componentReferences =
-                new HashMap<String, ComponentReference>();
-            Map<String, ComponentProperty> componentProperties =
-                new HashMap<String, ComponentProperty>();
-            indexComponentPropertiesServicesAndReferences(component,
-                                                          componentServices,
-                                                          componentReferences,
-                                                          componentProperties);
-
-            // Reconcile component services/references/properties and
-            // implementation services/references and create component
-            // services/references/properties for the services/references
-            // declared by the implementation
-            reconcileServices(component, services, componentServices);
-            reconcileReferences(component, references, componentReferences);
-            reconcileProperties(component, properties, componentProperties);
-
-            // Configure or create callback services for component's references
-            // with callbacks
-            configureCallbackServices(component, componentServices);
-
-            // Configure or create callback references for component's services
-            // with callbacks
-            configureCallbackReferences(component, componentReferences);
-
-            // Create self references to the component's services
-//            if (!(component.getImplementation() instanceof Composite)) {
-//                createSelfReferences(component);
-//            }
-
-            // Initialize service bindings
-            for (ComponentService componentService : component.getServices()) {
-
-                // Create default SCA binding
-                if (componentService.getBindings().isEmpty()) {
-                    SCABinding scaBinding = createSCABinding();
-                    componentService.getBindings().add(scaBinding);
-                }
-
-                // Set binding names
-                for (Binding binding : componentService.getBindings()) {
-                    
-                    // Binding name defaults to the service name
-                    if (binding.getName() == null) {
-                        binding.setName(componentService.getName());
-                    }
-                }
-                if (componentService.getCallback() != null) {
-                    for (Binding binding : componentService.getCallback().getBindings()) {
-                        if (binding.getName() == null) {
-                            binding.setName(componentService.getName());
-                        }
-                    }
-                }
-            }
-
-            // Initialize reference bindings
-            for (ComponentReference componentReference : component.getReferences()) {
-
-                // Create default SCA binding
-                if (componentReference.getBindings().isEmpty()) {
-                    SCABinding scaBinding = createSCABinding();
-                    componentReference.getBindings().add(scaBinding);
-                }
-
-                // Set binding names
-                for (Binding binding : componentReference.getBindings()) {
-                    if (binding.getName() == null) {
-                        binding.setName(componentReference.getName());
-                    }
-                }
-                if (componentReference.getCallback() != null) {
-                    for (Binding binding : componentReference.getCallback().getBindings()) {
-                        if (binding.getName() == null) {
-                            binding.setName(componentReference.getName());
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Report a warning.
-     * 
-     * @param problems
-     * @param message
-     * @param model
-     */
-    private void warning(String message, Object model, String... messageParameters) {
-        Problem problem = new ProblemImpl(this.getClass().getName(), "assembly-validation-messages", Severity.WARNING, model, message, (Object[])messageParameters);
-        monitor.problem(problem);
-    }
-
-    /**
-     * Reconcile component properties and the properties defined by the
-     * component type.
-     * 
-     * @param component
-     * @param properties
-     * @param componentProperties
-     * @param problems
-     */
-    private void reconcileProperties(Component component,
-                                     Map<String, Property> properties,
-                                     Map<String, ComponentProperty> componentProperties) {
-
-        // Connect component properties to their properties
-        for (ComponentProperty componentProperty : component.getProperties()) {
-            Property property = properties.get(componentProperty.getName());
-            if (property != null) {
-                componentProperty.setProperty(property);
-            } else {
-                /*warning("Property not found for component property: " + component.getName()
-                    + "/"
-                    + componentProperty.getName(), component);*/
-			warning("PropertyNotFound", component, component.getName().toString(), componentProperty.getName());
-            }
-        }
-
-        // Create component properties for all properties
-        if (component.getImplementation() != null) {
-            for (Property property : component.getImplementation().getProperties()) {
-                if (!componentProperties.containsKey(property.getName())) {
-                    ComponentProperty componentProperty = assemblyFactory.createComponentProperty();
-                    componentProperty.setName(property.getName());
-                    componentProperty.setMany(property.isMany());
-                    componentProperty.setXSDElement(property.getXSDElement());
-                    componentProperty.setXSDType(property.getXSDType());
-                    componentProperty.setProperty(property);
-                    component.getProperties().add(componentProperty);
-                }
-            }
-        }
-
-        // Reconcile component properties and their properties
-        for (ComponentProperty componentProperty : component.getProperties()) {
-            Property property = componentProperty.getProperty();
-            if (property != null) {
-
-                // Check that a component property does not override the
-                // mustSupply attribute
-                if (!property.isMustSupply() && componentProperty.isMustSupply()) {
-                    /*warning("Component property mustSupply attribute incompatible with property: " + component
-                                .getName()
-                                + "/"
-                                + componentProperty.getName(),
-                            component);*/
-			warning("PropertyMustSupplyIncompatible", component, component.getName().toString(), componentProperty.getName());
-                }
-
-                // Default to the mustSupply attribute specified on the property
-                if (!componentProperty.isMustSupply())
-                    componentProperty.setMustSupply(property.isMustSupply());
-
-                // Default to the value specified on the property
-                if (componentProperty.getValue() == null) {
-                    componentProperty.setValue(property.getValue());
-                }
-                
-                // Override the property value for the composite
-                if(component.getImplementation() instanceof Composite) {
-                    property.setValue(componentProperty.getValue());
-                }
-
-                // Check that a value is supplied
-                if (componentProperty.getValue() == null && property.isMustSupply()) {
-                    /*warning("No value configured on a mustSupply property: " + component.getName()
-                        + "/"
-                        + componentProperty.getName(), component);*/
-			warning("PropertyMustSupplyNull", component, component.getName().toString(), componentProperty.getName());
-                }
-
-                // Check that a a component property does not override the
-                // many attribute
-                if (!property.isMany() && componentProperty.isMany()) {
-                    /*warning("Component property many attribute incompatible with property: " + component
-                                .getName()
-                                + "/"
-                                + componentProperty.getName(),
-                            component);*/
-			warning("PropertyOverrideManyAttribute", component, component.getName().toString(), componentProperty.getName());
-                }
-
-                // Default to the many attribute defined on the property
-                componentProperty.setMany(property.isMany());
-
-                // Default to the type and element defined on the property
-                if (componentProperty.getXSDType() == null) {
-                    componentProperty.setXSDType(property.getXSDType());
-                }
-                if (componentProperty.getXSDElement() == null) {
-                    componentProperty.setXSDElement(property.getXSDElement());
-                }
-
-                // Check that a type or element are specified
-                if (componentProperty.getXSDElement() == null && componentProperty.getXSDType() == null) {
-                    warning("No type specified on component property: " + component.getName()
-                        + "/"
-                        + componentProperty.getName(), component);
-                }
-            }
-        }
+        super(assemblyFactory, scaBindingFactory, interfaceContractMapper, policyDefinitions, monitor);
     }
 
-    /**
-     * Reconcile component references with the references defined on the
-     * component type.
-     * 
-     * @param component
-     * @param references
-     * @param componentReferences
-     * @param problems
-     */
-    private void reconcileReferences(Component component,
-                                     Map<String, Reference> references,
-                                     Map<String, ComponentReference> componentReferences) {
-
-        // Connect each component reference to the corresponding reference
-        for (ComponentReference componentReference : component.getReferences()) {
-            if (componentReference.getReference() != null || componentReference.isCallback()) {
-                continue;
-            }
-            Reference reference = references.get(componentReference.getName());
-            if (reference != null) {
-                componentReference.setReference(reference);
-            } else {
-                if (!componentReference.getName().startsWith("$self$.")) {
-                    /*warning("Reference not found for component reference: " + component.getName()
-                        + "/"
-                        + componentReference.getName(), component);*/
-			warning("ReferenceNotFound", component, component.getName().toString(), componentReference.getName());
-                }
-            }
-        }
-
-        // Create a component reference for each reference
-        if (component.getImplementation() != null) {
-            for (Reference reference : component.getImplementation().getReferences()) {
-                if (!componentReferences.containsKey(reference.getName())) {
-                    ComponentReference componentReference =
-                        assemblyFactory.createComponentReference();
-                    componentReference.setIsCallback(reference.isCallback());
-                    componentReference.setName(reference.getName());
-                    componentReference.setReference(reference);
-                    component.getReferences().add(componentReference);
-                }
-            }
-        }
-
-        // Reconcile each component reference with its reference
-        for (ComponentReference componentReference : component.getReferences()) {
-            Reference reference = componentReference.getReference();
-            if (reference != null) {
-                // Reconcile multiplicity
-                if (componentReference.getMultiplicity() != null) {
-                    if (!ReferenceUtil.isValidMultiplicityOverride(reference.getMultiplicity(),
-                                                                   componentReference
-                                                                       .getMultiplicity())) {
-                        /*warning("Component reference multiplicity incompatible with reference multiplicity: " + component
-                                    .getName()
-                                    + "/"
-                                    + componentReference.getName(),
-                                component);*/
-				warning("ReferenceIncompatibleMultiplicity", component, component.getName().toString(), componentReference.getName());
-                    }
-                } else {
-                    componentReference.setMultiplicity(reference.getMultiplicity());
-                }
-
-                // Reconcile interface
-                InterfaceContract interfaceContract = reference.getInterfaceContract();
-                if (componentReference.getInterfaceContract() != null) {
-                    if (interfaceContract != null && !componentReference.getInterfaceContract().equals(reference
-                        .getInterfaceContract())) {
-                        if (!interfaceContractMapper.isCompatible(componentReference.getInterfaceContract(),
-                                                                  interfaceContract)) {
-                            /*warning("Component reference interface incompatible with reference interface: " + component
-                                .getName()
-                                + "/"
-                                + componentReference.getName(), component);*/
-					warning("ReferenceIncompatibleComponentInterface", component, component.getName().toString(), componentReference.getName());
-                        }
-                    }
-                } else {
-                    componentReference.setInterfaceContract(interfaceContract);
-                }
-
-                // Reconcile bindings 
-                if (componentReference.getBindings().isEmpty()) {
-                    componentReference.getBindings().addAll(reference.getBindings());
-                }
-                
-                // Reconcile callback bindings
-                if (componentReference.getCallback() == null) {
-                    componentReference.setCallback(reference.getCallback());
-                    if (componentReference.getCallback() == null) {
-                        // Create an empty callback to avoid null check
-                        componentReference.setCallback(assemblyFactory.createCallback());
-                    }
-
-                } else if (componentReference.getCallback().getBindings().isEmpty() && reference
-                    .getCallback() != null) {
-                    componentReference.getCallback().getBindings().addAll(reference.getCallback()
-                        .getBindings());
-                }
-                
-                // Propagate autowire setting from the component
-                if (componentReference.getAutowire() == null) {
-                    componentReference.setAutowire(component.getAutowire());
-                }
-
-                // Reconcile targets
-                if (componentReference.getTargets().isEmpty()) {
-                    componentReference.getTargets().addAll(reference.getTargets());
-                }
-            }
-        }
+    public void build(Composite composite) throws CompositeBuilderException {
+        configureComponents(composite);
     }
-
-    /**
-     * Reconcile component services and services defined on the component type.
-     * 
-     * @param component
-     * @param services
-     * @param componentServices
-     * @param problems
-     */
-    private void reconcileServices(Component component,
-                                   Map<String, Service> services,
-                                   Map<String, ComponentService> componentServices) {
-
-        // Connect each component service to the corresponding service
-        for (ComponentService componentService : component.getServices()) {
-            if (componentService.getService() != null || componentService.isCallback()) {
-                continue;
-            }
-            Service service = services.get(componentService.getName());
-            if (service != null) {
-                componentService.setService(service);
-            } else {
-                /*warning("Service not found for component service: " + component.getName()
-                    + "/"
-                    + componentService.getName(), component);*/
-			warning("ServiceNotFoundForComponentService", component, component.getName().toString(), componentService.getName());
-            }
-        }
-
-        // Create a component service for each service
-        if (component.getImplementation() != null) {
-            for (Service service : component.getImplementation().getServices()) {
-                if (!componentServices.containsKey(service.getName())) {
-                    ComponentService componentService = assemblyFactory.createComponentService();
-                    componentService.setIsCallback(service.isCallback());
-                    String name = service.getName();
-                    componentService.setName(name);
-                    componentService.setService(service);
-                    component.getServices().add(componentService);
-                    componentServices.put(name, componentService);
-                }
-            }
-        }
-
-        //Reconcile each component service with its service
-        for (ComponentService componentService : component.getServices()) {
-            Service service = componentService.getService();
-            if (service != null) {
-                // Reconcile interface
-                InterfaceContract interfaceContract = service.getInterfaceContract();
-                if (componentService.getInterfaceContract() != null) {
-                    if (interfaceContract != null && !componentService.getInterfaceContract().equals(interfaceContract)) {
-                        if (!interfaceContractMapper.isCompatible(componentService.getInterfaceContract(),
-                                                                  interfaceContract)) {
-                            warning("Component service interface incompatible with service interface: " + component
-                                .getName()
-                                + "/"
-                                + componentService.getName(), component);
-                        }
-                    }
-                } else {
-                    componentService.setInterfaceContract(interfaceContract);
-                }
-
-                // Reconcile bindings
-                if (componentService.getBindings().isEmpty()) {
-                    componentService.getBindings().addAll(service.getBindings());
-                }
-                
-                // Reconcile callback bindings
-                if (componentService.getCallback() == null) {
-                    componentService.setCallback(service.getCallback());
-                    if (componentService.getCallback() == null) {
-                        // Create an empty callback to avoid null check
-                        componentService.setCallback(assemblyFactory.createCallback());
-                    }
-                } else if (componentService.getCallback().getBindings().isEmpty() && service
-                    .getCallback() != null) {
-                    componentService.getCallback().getBindings().addAll(service.getCallback()
-                        .getBindings());
-                }
-            }
-        }
-    }
-
-    private void indexComponentPropertiesServicesAndReferences(Component component,
-                                                               Map<String, ComponentService> componentServices,
-                                                               Map<String, ComponentReference> componentReferences,
-                                                               Map<String, ComponentProperty> componentProperties) {
-        for (ComponentService componentService : component.getServices()) {
-            if (componentServices.containsKey(componentService.getName())) {
-                /*warning("Duplicate component service name: " + component.getName()
-                    + "/"
-                    + componentService.getName(), component);*/
-			warning("DuplicateComponentServiceName", component, component.getName().toString(), componentService.getName());
-            } else {
-                componentServices.put(componentService.getName(), componentService);
-            }
-        }
-        for (ComponentReference componentReference : component.getReferences()) {
-            if (componentReferences.containsKey(componentReference.getName())) {
-                /*warning("Duplicate component reference name: " + component.getName()
-                    + "/"
-                    + componentReference.getName(), component);*/
-			warning("DuplicateComponentReferenceName", component, component.getName().toString(), componentReference.getName());
-            } else {
-                componentReferences.put(componentReference.getName(), componentReference);
-            }
-        }
-        for (ComponentProperty componentProperty : component.getProperties()) {
-            if (componentProperties.containsKey(componentProperty.getName())) {
-                /*warning("Duplicate component property name: " + component.getName()
-                    + "/"
-                    + componentProperty.getName(), component);*/
-			warning("DuplicateComponentPropertyName", component, component.getName().toString(), componentProperty.getName());
-            } else {
-                componentProperties.put(componentProperty.getName(), componentProperty);
-            }
-        }
-
-    }
-
-    private void indexImplementationPropertiesServicesAndReferences(Component component,
-                                                                    Map<String, Service> services,
-                                                                    Map<String, Reference> references,
-                                                                    Map<String, Property> properties) {
-        // First check that the component has a resolved implementation
-        Implementation implementation = component.getImplementation();
-        if (implementation == null) {
-
-            // A component must have an implementation
-            /*warning("No implementation for component: " + component.getName(), component);*/
-		warning("NoComponentImplementation", component, component.getName().toString());
-
-        } else if (implementation.isUnresolved()) {
-
-            // The implementation must be fully resolved
-            /*warning("Component implementation not found: " + component.getName()
-                + " : "
-                + implementation.getURI(), component);*/
-		warning("UnresolvedComponentImplementation", component, component.getName().toString(), implementation.getURI());
-
-        } else {
-
-            // Index properties, services and references, also check for
-            // duplicates
-            for (Property property : implementation.getProperties()) {
-                if (properties.containsKey(property.getName())) {
-                    /*warning("Duplicate property name: " + component.getName()
-                        + "/"
-                        + property.getName(), component);*/
-			warning("DuplicateImplementationPropertyName", component, component.getName().toString(), property.getName());
-                } else {
-                    properties.put(property.getName(), property);
-                }
-            }
-            for (Service service : implementation.getServices()) {
-                if (services.containsKey(service.getName())) {
-                    warning("Duplicate service name: " + component.getName()
-                        + "/"
-                        + service.getName(), component);
-                } else {
-                    services.put(service.getName(), service);
-                }
-            }
-            for (Reference reference : implementation.getReferences()) {
-                if (references.containsKey(reference.getName())) {
-                    /*warning("Duplicate reference name: " + component.getName()
-                        + "/"
-                        + reference.getName(), component);*/
-			warning("DuplicateImplementationReferenceName", component, component.getName().toString(), reference.getName());
-                } else {
-                    references.put(reference.getName(), reference);
-                }
-            }
-        }
-
-    }
-
-    /**
-     * For all the references with callbacks, create a corresponding callback
-     * service.
-     * 
-     * @param component
-     */
-    private void configureCallbackServices(Component component,
-                                           Map<String, ComponentService> componentServices) {
-        for (ComponentReference reference : component.getReferences()) {
-            if (reference.getInterfaceContract() != null && // can be null in
-                                                            // unit tests
-            reference.getInterfaceContract().getCallbackInterface() != null) {
-                ComponentService service =
-                    componentServices.get(reference.getName());
-                if (service == null) {
-                    service = createCallbackService(component, reference);
-                }
-                if (reference.getCallback() != null) {
-                    if (service.getBindings().isEmpty()) {
-                        service.getBindings().addAll(reference.getCallback().getBindings());
-                    }
-                }
-                reference.setCallbackService(service);
-            }
-        }
-    }
-
-    /**
-     * Create a callback service for a component reference
-     * 
-     * @param component
-     * @param reference
-     */
-    private ComponentService createCallbackService(Component component, ComponentReference reference) {
-        ComponentService componentService = assemblyFactory.createComponentService();
-        componentService.setIsCallback(true);
-        componentService.setName(reference.getName());
-        try {
-            InterfaceContract contract =
-                (InterfaceContract)reference.getInterfaceContract().clone();
-            contract.setInterface(contract.getCallbackInterface());
-            contract.setCallbackInterface(null);
-            componentService.setInterfaceContract(contract);
-        } catch (CloneNotSupportedException e) {
-            // will not happen
-        }
-        Reference implReference = reference.getReference();
-        if (implReference != null) {
-            Service implService = assemblyFactory.createService();
-            implService.setName(implReference.getName());
-            try {
-                InterfaceContract implContract =
-                    (InterfaceContract)implReference.getInterfaceContract().clone();
-                implContract.setInterface(implContract.getCallbackInterface());
-                implContract.setCallbackInterface(null);
-                implService.setInterfaceContract(implContract);
-            } catch (CloneNotSupportedException e) {
-                // will not happen
-            }
-            componentService.setService(implService);
-        }
-        component.getServices().add(componentService);
-        return componentService;
-    }
-
-    /**
-     * For all the services with callbacks, create a corresponding callback
-     * reference.
-     * 
-     * @param component
-     */
-    private void configureCallbackReferences(Component component,
-                                             Map<String, ComponentReference> componentReferences) {
-        for (ComponentService service : component.getServices()) {
-            if (service.getInterfaceContract() != null && // can be null in
-                                                            // unit tests
-            service.getInterfaceContract().getCallbackInterface() != null) {
-                ComponentReference reference =
-                    componentReferences.get(service.getName());
-                if (reference == null) {
-                    reference = createCallbackReference(component, service);
-                }
-                if (service.getCallback() != null) {
-                    if (reference.getBindings().isEmpty()) {
-                        reference.getBindings().addAll(service.getCallback().getBindings());
-                    }
-                }
-                service.setCallbackReference(reference);
-            }
-        }
-    }
-
-    /**
-     * Create a callback reference for a component service
-     * 
-     * @param component
-     * @param service
-     */
-    private ComponentReference createCallbackReference(Component component, ComponentService service) {
-        ComponentReference componentReference = assemblyFactory.createComponentReference();
-        componentReference.setIsCallback(true);
-        componentReference.setName(service.getName());
-        try {
-            InterfaceContract contract = (InterfaceContract)service.getInterfaceContract().clone();
-            contract.setInterface(contract.getCallbackInterface());
-            contract.setCallbackInterface(null);
-            componentReference.setInterfaceContract(contract);
-        } catch (CloneNotSupportedException e) {
-            // will not happen
-        }
-        Service implService = service.getService();
-        if (implService != null) {
-            Reference implReference = assemblyFactory.createReference();
-            implReference.setName(implService.getName());
-            try {
-                InterfaceContract implContract =
-                    (InterfaceContract)implService.getInterfaceContract().clone();
-                implContract.setInterface(implContract.getCallbackInterface());
-                implContract.setCallbackInterface(null);
-                implReference.setInterfaceContract(implContract);
-            } catch (CloneNotSupportedException e) {
-                // will not happen
-            }
-            componentReference.setReference(implReference);
-        }
-        component.getReferences().add(componentReference);
-        return componentReference;
-    }
-
-    /**
-     * Activate composite services in nested composites.
-     * 
-     * @param composite
-     * @param problems
-     */
-    public void activateCompositeServices(Composite composite) {
-
-        // Process nested composites recursively
-        activateNestedCompositeServices(composite);
-
-        // Process top level composite services
-        for (Service service : composite.getServices()) {
-            CompositeService compositeService = (CompositeService)service;
-
-            // Get the inner most promoted service
-            ComponentService promotedService = getPromotedComponentService(compositeService);
-            if (promotedService != null) {
-                Component promotedComponent = getPromotedComponent(compositeService);
-
-                // Default to use the interface from the promoted service
-                if (compositeService.getInterfaceContract() == null && promotedService.getInterfaceContract() != null) {
-                    compositeService.setInterfaceContract(promotedService.getInterfaceContract());
-                }
-
-                // Create a new component service to represent this composite
-                // service on the promoted component
-                ComponentService newComponentService = assemblyFactory.createComponentService();
-                newComponentService.setName("$promoted$." + compositeService.getName());
-                promotedComponent.getServices().add(newComponentService);
-                newComponentService.setService(promotedService.getService());
-                newComponentService.getBindings().addAll(compositeService.getBindings());
-                newComponentService.setInterfaceContract(compositeService.getInterfaceContract());
-                if (compositeService.getInterfaceContract() != null && compositeService
-                    .getInterfaceContract().getCallbackInterface() != null) {
-                    newComponentService.setCallback(assemblyFactory.createCallback());
-                    if (compositeService.getCallback() != null) {
-                        newComponentService.getCallback().getBindings().addAll(compositeService
-                            .getCallback().getBindings());
-                    }
-                }
-
-                // Change the composite service to now promote the newly
-                // created component service directly
-                compositeService.setPromotedComponent(promotedComponent);
-                compositeService.setPromotedService(newComponentService);
-            }
-        }
-    }
-
-    /**
-     * Activate composite services in nested composites.
-     * 
-     * @param composite
-     * @param problems
-     */
-    public void activateNestedCompositeServices(Composite composite) {
-
-        // Process nested composites recursively
-        for (Component component : composite.getComponents()) {
-            Implementation implementation = component.getImplementation();
-            if (implementation instanceof Composite) {
-
-                // First process nested composites
-                activateNestedCompositeServices((Composite)implementation);
-
-                // Process the component services declared on components
-                // in this composite
-                for (ComponentService componentService : component.getServices()) {
-                    Service implService = componentService.getService();
-                    if (implService != null && implService instanceof CompositeService) {
-                        CompositeService compositeService = (CompositeService)implService;
-
-                        // Get the inner most promoted service
-                        ComponentService promotedService =
-                            getPromotedComponentService(compositeService);
-                        if (promotedService != null) {
-                            Component promotedComponent = getPromotedComponent(compositeService);
-
-                            // Default to use the interface from the promoted
-                            // service
-                            if (compositeService.getInterfaceContract() == null) {
-                                compositeService.setInterfaceContract(promotedService
-                                    .getInterfaceContract());
-                            }
-                            if (componentService.getInterfaceContract() == null) {
-                                componentService.setInterfaceContract(promotedService
-                                    .getInterfaceContract());
-                            }
-
-                            // Create a new component service to represent this
-                            // composite service on the promoted component
-                            ComponentService newComponentService =
-                                assemblyFactory.createComponentService();
-                            newComponentService.setName("$promoted$." + componentService.getName());
-                            promotedComponent.getServices().add(newComponentService);
-                            newComponentService.setService(promotedService.getService());
-                            newComponentService.getBindings()
-                                .addAll(componentService.getBindings());
-                            newComponentService.setInterfaceContract(componentService
-                                .getInterfaceContract());
-                            if (componentService.getInterfaceContract() != null && componentService
-                                .getInterfaceContract().getCallbackInterface() != null) {
-                                newComponentService.setCallback(assemblyFactory.createCallback());
-                                if (componentService.getCallback() != null) {
-                                    newComponentService.getCallback().getBindings()
-                                        .addAll(componentService.getCallback().getBindings());
-                                }
-                            }
-
-                            // Change the composite service to now promote the
-                            // newly created component service directly
-                            compositeService.setPromotedComponent(promotedComponent);
-                            compositeService.setPromotedService(newComponentService);
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * @param composite
-     */
-    private void configureSourcedProperties(Composite composite, List<ComponentProperty> propertySettings) {
-        // Resolve properties
-        Map<String, Property> compositeProperties = new HashMap<String, Property>();
-        ComponentProperty componentProperty = null;
-        for (Property p : composite.getProperties()) {
-            componentProperty = getComponentPropertyByName(p.getName(), propertySettings);
-            if (componentProperty != null) {
-                compositeProperties.put(p.getName(), componentProperty);
-            } else {
-                compositeProperties.put(p.getName(), p);
-            }
-        }
     
-        for (Component component : composite.getComponents()) {
-            try {
-                PropertyUtil.sourceComponentProperties(compositeProperties, component);
-            } catch (Exception e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            }
-            Implementation impl = component.getImplementation();
-            if (impl instanceof Composite) {
-                configureSourcedProperties((Composite)impl, component.getProperties());
-            }
-        }
-    }
-
-    /**
-     * Follow a service promotion chain down to the inner most (non composite)
-     * component service.
-     * 
-     * @param topCompositeService
-     * @return
-     */
-    static ComponentService getPromotedComponentService(CompositeService compositeService) {
-        ComponentService componentService = compositeService.getPromotedService();
-        if (componentService != null) {
-            Service service = componentService.getService();
-            if (componentService.getName() != null && service instanceof CompositeService) {
-
-                // Continue to follow the service promotion chain
-                return getPromotedComponentService((CompositeService)service);
-
-            } else {
-
-                // Found a non-composite service
-                return componentService;
-            }
-        } else {
-
-            // No promoted service
-            return null;
-        }
-    }
-
-    /**
-     * Follow a service promotion chain down to the inner most (non composite)
-     * component.
-     * 
-     * @param compositeService
-     * @return
-     */
-    private static Component getPromotedComponent(CompositeService compositeService) {
-        ComponentService componentService = compositeService.getPromotedService();
-        if (componentService != null) {
-            Service service = componentService.getService();
-            if (componentService.getName() != null && service instanceof CompositeService) {
-
-                // Continue to follow the service promotion chain
-                return getPromotedComponent((CompositeService)service);
-
-            } else {
-
-                // Found a non-composite service
-                return compositeService.getPromotedComponent();
-            }
-        } else {
-
-            // No promoted service
-            return null;
-        }
-    }
-
-    private ComponentProperty getComponentPropertyByName(String propertyName, List<ComponentProperty> properties) {
-        if (properties != null) {
-            for (ComponentProperty aProperty : properties) {
-                if (aProperty.getName().equals(propertyName)) {
-                    return aProperty;
-                }
-            }
-        }
-        return null;
-    }
-    
-    private SCABinding createSCABinding() {
-        SCABinding scaBinding = scaBindingFactory.createSCABinding();
-        
-        if ( scaDefinitions != null ) {
-            for ( IntentAttachPointType attachPointType : scaDefinitions.getBindingTypes() ) {
-                if ( attachPointType.getName().equals(BINDING_SCA_QNAME)) {
-                    ((IntentAttachPoint)scaBinding).setType(attachPointType);
-                }
-            }
-        }
-        
-        return scaBinding;
-    }
-
-     /**
-      * Fully resolve the binding URIs based on available information. This includes information
-      * from the ".composite" files, from resources associated with the binding, e.g. WSDL files, 
-      * from any associated policies and from the default information for each binding type.
-      * 
-      * TODO: Share the  URL calculation algorithm with the configureComponents() method above
-      *       although keeping the configureComponents() methods signature as is because when
-      *       a composite is actually build in a node the node default information is currently
-      *       available
-      *  
-      * @param composite the composite to be configured
-      * @param uri the path to the composite provided through any nested composite component implementations
-      * @param defaultBindings list of default binding configurations
-      */
-    public void configureBindingURIs(Composite composite, String uri, List<Binding> defaultBindings) throws CompositeBuilderException {
-        
-        String parentComponentURI = uri;
-        
-        // Process nested composites recursively
-        for (Component component : composite.getComponents()) {
-
-            // Initialize component URI
-            String componentURI;
-            if (parentComponentURI == null) {
-                componentURI = component.getName();
-            } else {
-                componentURI = URI.create(parentComponentURI + '/').resolve(component.getName()).toString();
-            }
-            component.setURI(componentURI);
-
-            Implementation implementation = component.getImplementation();
-            if (implementation instanceof Composite) {
-
-                // Process nested composite
-                configureBindingURIs((Composite)implementation, componentURI, defaultBindings);
-            }
-        }  
-        
-        // Initialize composite service binding URIs
-        List<Service> compositeServices = composite.getServices();
-        for (Service service : compositeServices) {
-            // Set default binding names 
-            
-            // Create default SCA binding
-            if (service.getBindings().isEmpty()) {
-                SCABinding scaBinding = createSCABinding();
-                service.getBindings().add(scaBinding);
-            }
-    
-            // Initialize binding names and URIs
-            for (Binding binding : service.getBindings()) {  
-                constructBindingName(service, binding);
-                constructBindingURI(parentComponentURI, composite, service, binding, defaultBindings);
-            }
-        }
-        
-        // Initialize component service binding URIs
-        for (Component component : composite.getComponents()) {
-            
-            // Index properties, services and references
-            Map<String, Service> services = new HashMap<String, Service>();
-            Map<String, Reference> references = new HashMap<String, Reference>();
-            Map<String, Property> properties = new HashMap<String, Property>();
-            indexImplementationPropertiesServicesAndReferences(component,
-                                                               services,
-                                                               references,
-                                                               properties);
-
-            // Index component services, references and properties
-            // Also check for duplicates
-            Map<String, ComponentService> componentServices =
-                new HashMap<String, ComponentService>();
-            Map<String, ComponentReference> componentReferences =
-                new HashMap<String, ComponentReference>();
-            Map<String, ComponentProperty> componentProperties =
-                new HashMap<String, ComponentProperty>();
-            indexComponentPropertiesServicesAndReferences(component,
-                                                          componentServices,
-                                                          componentReferences,
-                                                          componentProperties);
-
-            // Reconcile component services/references/properties and
-            // implementation services/references and create component
-            // services/references/properties for the services/references
-            // declared by the implementation
-            reconcileServices(component, services, componentServices);
-            reconcileReferences(component, references, componentReferences);
-            reconcileProperties(component, properties, componentProperties);
-            
-            for (ComponentService service : component.getServices()) {
-    
-                // Create default SCA binding
-                if (service.getBindings().isEmpty()) {
-                    SCABinding scaBinding = createSCABinding();
-                    service.getBindings().add(scaBinding);
-                }
-    
-                // Initialize binding names and URIs
-                for (Binding binding : service.getBindings()) {
-                    
-                    constructBindingName(service, binding);
-                    constructBindingURI(component, service, binding, defaultBindings);
-                }
-            } 
-        }
-    }
-    
-    /**
-     * If a binding name is not provided by the user construct it based on the service name
-     * 
-     * @param service
-     * @param binding
-     */
-    private void constructBindingName(Service service, Binding binding) throws CompositeBuilderException{
-        
-        // set the default binding name if one is required        
-        // if there is no name on the binding then set it to the service name 
-        if (binding.getName() == null){
-            binding.setName(service.getName());
-        }
-            
-        // Check that multiple bindings do not have the same name
-        for (Binding otherBinding : service.getBindings()) {
-            if (otherBinding == binding) {
-                // Skip the current binding
-                continue;
-            }
-            if (binding.getClass() != otherBinding.getClass()) {
-                // Look for a binding of the same type
-                continue;
-            }
-            if (binding.getName().equals(otherBinding.getName())) {
-                /*warning("Multiple bindings for service " + 
-                                                    service.getName() + 
-                                                    " have the same binding type and name " +
-                                                    binding.getName() +
-                                                    ". Tuscany SCA can't create unique URIs to differentiate these bindings ", binding);*/
-			warning("MultipleBindingsForService", binding, service.getName(), binding.getName());
-            }
-        }
-    }
-
-    /**
-     * URI construction for composite bindings based on Assembly Specification section 1.7.2, This method
-     * assumes that the component URI part of the binding URI is formed from the part to the 
-     * composite in question and just calls the generic constructBindingURI method with this 
-     * information
-     * 
-     * @param parentComponentURI
-     * @param composite
-     * @param service
-     * @param binding
-     * @param defaultBindings
-     */
-    private void constructBindingURI(String parentComponentURI, Composite composite, Service service, Binding binding, List<Binding> defaultBindings) 
-    throws CompositeBuilderException{
-        // This is a composite service so there is no component to provide a component URI
-        // The path to this composite (through nested composites) is used.
-        boolean includeBindingName = composite.getServices().size() != 1;
-        constructBindingURI(parentComponentURI, service, binding, includeBindingName, defaultBindings);
-    }
-
-     /**
-      * URI construction for component bindings based on Assembly Specification section 1.7.2. This method
-      * calculates the component URI part based on component information before calling the generic
-      * constructBindingURI method
-      *
-      * @param component the component that holds the service
-      * @param service the service that holds the binding
-      * @param binding the binding for which the URI is being constructed
-      * @param defaultBindings the list of default binding configurations
-      */
-    private void constructBindingURI(Component component, Service service, Binding binding, List<Binding> defaultBindings)
-    throws CompositeBuilderException{
-        boolean includeBindingName = component.getServices().size() != 1;
-        constructBindingURI(component.getURI(), service, binding, includeBindingName, defaultBindings);
-    }
-            
-    /**
-     * Generic URI construction for bindings based on Assembly Specification section 1.7.2
-     * 
-     * @param componentURIString the string version of the URI part that comes from the component name
-     * @param service the service in question
-     * @param binding the binding for which the URI is being constructed
-     * @param includeBindingName when set true the serviceBindingURI part should be used
-     * @param defaultBindings the list of default binding configurations
-     * @throws CompositeBuilderException
-     */
-    private void constructBindingURI(String componentURIString, Service service, Binding binding, boolean includeBindingName, List<Binding> defaultBindings) 
-      throws CompositeBuilderException{
-        
-        try {
-            // calculate the service binding URI
-            URI bindingURI;
-            if (binding.getURI() != null){
-                bindingURI = new URI(binding.getURI());
-
-                // if the user has provided an absolute binding URI then use it
-                if (bindingURI.isAbsolute()){
-                    binding.setURI(bindingURI.toString());
-                    return;
-                }
-            } else {
-                bindingURI = null;
-            }
-            
-            // Get the service binding name
-            URI bindingName;
-            if (binding.getName() != null) {
-                bindingName = new URI(binding.getName());
-            } else {
-                bindingName = new URI("");
-            }
-            
-            // calculate the component URI  
-            URI componentURI;
-            if (componentURIString != null) {
-                componentURI = new URI(addSlashToPath(componentURIString));
-            } else {
-                componentURI = null;
-            }
-            
-            // if the user has provided an absolute component URI then use it
-            if (componentURI != null && componentURI.isAbsolute()){
-                binding.setURI(constructBindingURI(null, componentURI, bindingURI, includeBindingName, bindingName));
-                return;
-            }         
-            
-            // calculate the base URI
-            
-            // get the protocol for this binding/URI
-/* some code that allows binding specific code to run. Being discussed on ML            
-            BindingURICalculator uriCalculator = bindingURICalcualtorExtensionPoint.getBindingURICalculator(binding);
-            
-            if  (uriCalculator != null){
-                String protocol = uriCalculator.getProtocol(binding);
-                
-                // find the default binding with the right protocol
-                Binding defaultBinding = nodeInfo.getBindingDefault(binding, protocol);
-                
-                if (defaultBinding != null){
-                    baseURI = new URI(defaultBinding.getURI());
-                } else {
-                    baseURI = null;
-                }
-                
-            } else {
-                baseURI = null;
-            }
-*/
-            // as a simpler alternative to the above commented out code. 
-            URI baseURI = null;
-            if (defaultBindings != null) {
-                for (Binding defaultBinding : defaultBindings){
-                    if (binding.getClass() == defaultBinding.getClass()){
-                        baseURI = new URI(addSlashToPath(defaultBinding.getURI()));
-                        break;
-                    }
-                }
-            }
-            
-            binding.setURI(constructBindingURI(baseURI, componentURI, bindingURI, includeBindingName, bindingName));
-        } catch (URISyntaxException ex) {
-            warning("URLSyntaxException when creating binding URI at component " +
-                                                componentURIString +
-                                                " service " + 
-                                                service.getName() +
-                                                " binding " + 
-                                                binding.getName(),
-                                                ex);
-        }      
-    }
-    
-    /**
-     * Use to ensure that URI paths end in "/" as here we want to maintain the
-     * last path element of an base URI when other URI are resolved against it. This is
-     * not the default behaviour of URI resolution as defined in RFC 2369
-     * 
-     * @param path the path string to which the "/" is to be added
-     * @return the resulting path with a "/" added if it not already there
-     */
-    private String addSlashToPath(String path){
-        if (path.endsWith("/")){
-            return path;
-        } else {
-            return path + "/";
-        }
-    }
-    
-    /**
-     * Concatenate binding URI parts together based on Assembly Specification section 1.7.2
-     * 
-     * @param baseURI the base of the binding URI
-     * @param componentURI the middle part of the binding URI derived from the component name
-     * @param bindingURI the end part of the binding URI
-     * @param includeBindingName when set true the binding name part should be used
-     * @param bindingName the binding name
-     * @return the resulting URI as a string
-     */
-    private String constructBindingURI(URI baseURI, URI componentURI, URI bindingURI, boolean includeBindingName, URI bindingName){        
-        String uriString;
-        
-        if (baseURI == null) {
-            if (componentURI == null){
-                if (bindingURI != null ) {
-                    uriString = bindingURI.toString();
-                } else {
-                    uriString = bindingName.toString();
-                }
-            } else {
-                if (bindingURI != null ) {
-                    uriString = componentURI.resolve(bindingURI).toString();
-                } else {
-                    if (includeBindingName) {
-                        uriString = componentURI.resolve(bindingName).toString();
-                    } else {
-                        uriString = componentURI.toString();
-                    }
-                }
-            }
-        } else {
-            if (componentURI == null){
-                if (bindingURI != null ) {
-                    uriString = baseURI.resolve(bindingURI).toString();
-                } else {
-                    if (includeBindingName) {
-                        uriString = baseURI.resolve(bindingName).toString();
-                    } else {
-                        uriString = baseURI.toString();
-                    }
-                }
-            } else {
-                if (bindingURI != null ) {
-                    uriString = baseURI.resolve(componentURI).resolve(bindingURI).toString();
-                } else {
-                    if (includeBindingName) {
-                        uriString = baseURI.resolve(componentURI).resolve(bindingName).toString();
-                    } else {
-                        uriString = baseURI.resolve(componentURI).toString();
-                    }
-                }
-            }
-        }
-        
-        // tidy up by removing any trailing "/"
-        if (uriString.endsWith("/")){
-            uriString = uriString.substring(0, uriString.length()-1);   
-        }
-        
-        URI uri = URI.create(uriString);
-        if (!uri.isAbsolute()) {
-            uri = URI.create("/").resolve(uri);
-        }
-        return uri.toString();
-    }
-
-    public SCADefinitions getScaDefinitions() {
-        return scaDefinitions;
-    }
-
-    public void setScaDefinitions(SCADefinitions scaDefinitions) {
-        this.scaDefinitions = scaDefinitions;
-    }    
 }

Propchange: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ComponentConfigurationBuilderImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ComponentConfigurationBuilderImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date