You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by sl...@apache.org on 2008/04/17 15:39:19 UTC

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

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: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org