Author: slaws
Date: Thu Apr 17 06:39:15 2008
New Revision: 649093

URL: http://svn.apache.org/viewvc?rev=649093&view=rev
Log:
TUSCANY-2109 First part of the changes to test compatibility of promoted and 
promoting interfaces. Needs more tests to compare interface namespaces to 
complete this JIRA. Thanks Wang Feng for the patch

Modified:
    
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeBuilderImpl.java
    
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeWireBuilderImpl.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?rev=649093&r1=649092&r2=649093&view=diff
==============================================================================
--- 
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
 Thu Apr 17 06:39:15 2008
@@ -30,6 +30,7 @@
 import org.apache.tuscany.sca.assembly.builder.Problem;
 import org.apache.tuscany.sca.assembly.builder.Problem.Severity;
 import org.apache.tuscany.sca.definitions.SCADefinitions;
+import 
org.apache.tuscany.sca.interfacedef.IncompatibleInterfaceContractException;
 import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper;
 import org.apache.tuscany.sca.policy.IntentAttachPointTypeFactory;
 
@@ -106,7 +107,11 @@
         configurationBuilder.configureComponents(composite);
 
         // Wire the composite
-        wireBuilder.wireComposite(composite);
+        try {
+                       wireBuilder.wireComposite(composite);
+               } catch (IncompatibleInterfaceContractException e) {
+                       throw new CompositeBuilderException(e);
+               }
 
         // Activate composite services
         configurationBuilder.activateCompositeServices(composite);

Modified: 
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/CompositeWireBuilderImpl.java?rev=649093&r1=649092&r2=649093&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/CompositeWireBuilderImpl.java
 Thu Apr 17 06:39:15 2008
@@ -45,7 +45,9 @@
 import org.apache.tuscany.sca.assembly.Wire;
 import org.apache.tuscany.sca.assembly.builder.CompositeBuilderMonitor;
 import org.apache.tuscany.sca.assembly.builder.Problem.Severity;
+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.policy.util.PolicyComputationUtils;
 
 public class CompositeWireBuilderImpl {
@@ -90,8 +92,9 @@
      * services/references to component services/references inside a composite.
      * 
      * @param composite
+     * @throws IncompatibleInterfaceContractException 
      */
-    public void wireComposite(Composite composite) {
+    public void wireComposite(Composite composite) throws 
IncompatibleInterfaceContractException {
 
         // Wire nested composites recursively
         for (Component component : composite.getComponents()) {
@@ -211,10 +214,11 @@
      * @param composite
      * @param componentServices
      * @param problems
+     * @throws IncompatibleInterfaceContractException 
      */
     private void connectCompositeServices(Composite composite,
                                           Map<String, Component> components,
-                                          Map<String, ComponentService> 
componentServices) {
+                                          Map<String, ComponentService> 
componentServices) throws IncompatibleInterfaceContractException {
     
         // Propagate interfaces from inner composite components' services to
         // their component services
@@ -257,8 +261,16 @@
     
                     // Use the interface contract from the component service if
                     // none is specified on the composite service
-                    if (compositeService.getInterfaceContract() == null) {
-                        
compositeService.setInterfaceContract(promotedService.getInterfaceContract());
+                    InterfaceContract compositeServiceInterfaceContract = 
compositeService.getInterfaceContract();
+                    InterfaceContract promotedServiceInterfaceContract = 
promotedService.getInterfaceContract();
+                    if (compositeServiceInterfaceContract == null) {
+                        
compositeService.setInterfaceContract(promotedServiceInterfaceContract);
+                    } else if (promotedServiceInterfaceContract != null) {
+                       // Check the compositeServiceInterfaceContract and 
promotedServiceInterfaceContract
+                       boolean isCompatible = 
interfaceContractMapper.isCompatible(compositeServiceInterfaceContract,promotedServiceInterfaceContract);
+                       if(!isCompatible){
+                               throw new 
IncompatibleInterfaceContractException("Interface of composite service 
"+promotedServiceName +" must be subset of the interface declared by promoted 
component service.", compositeServiceInterfaceContract, 
promotedServiceInterfaceContract);
+                       }
                     }
     
                 } else {
@@ -275,8 +287,9 @@
      * @param composite
      * @param componentReferences
      * @param problems
+     * @throws IncompatibleInterfaceContractException 
      */
-    private void connectCompositeReferences(Composite composite, Map<String, 
ComponentReference> componentReferences) {
+    private void connectCompositeReferences(Composite composite, Map<String, 
ComponentReference> componentReferences) throws 
IncompatibleInterfaceContractException {
     
         // Propagate interfaces from inner composite components' references to
         // their component references
@@ -311,10 +324,18 @@
                         // Use the interface contract from the component
                         // reference if none
                         // is specified on the composite reference
-                        if (compositeReference.getInterfaceContract() == null) 
{
-                            
compositeReference.setInterfaceContract(componentReference.getInterfaceContract());
+                        
+                        InterfaceContract compositeReferenceInterfaceContract 
= compositeReference.getInterfaceContract();
+                        InterfaceContract componentReferenceInterfaceContract 
= componentReference.getInterfaceContract();
+                        if (compositeReferenceInterfaceContract == null) {
+                            
compositeReference.setInterfaceContract(componentReferenceInterfaceContract);
+                        } else if (componentReferenceInterfaceContract != 
null) {
+                               // Check the compositeInterfaceContract and 
componentInterfaceContract
+                               boolean isCompatible = 
interfaceContractMapper.isCompatible(componentReferenceInterfaceContract,compositeReferenceInterfaceContract);
+                               if(!isCompatible){
+                                       throw new 
IncompatibleInterfaceContractException("Interface of composite reference 
"+componentReferenceName +" must be superset of the interface declared by 
promoted component reference.", componentReferenceInterfaceContract, 
compositeReferenceInterfaceContract);
+                               }
                         }
-    
                     } else {
                         warning("Promoted component reference not found: " + 
componentReferenceName, composite);
                     }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to