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 2010/04/09 17:55:49 UTC

svn commit: r932474 - in /tuscany/sca-java-2.x/trunk/modules: assembly/src/main/resources/org/apache/tuscany/sca/assembly/builder/ builder/src/main/java/org/apache/tuscany/sca/builder/impl/

Author: slaws
Date: Fri Apr  9 15:55:49 2010
New Revision: 932474

URL: http://svn.apache.org/viewvc?rev=932474&view=rev
Log:
TUSCANY-3531 - validate that composite reference don't override nonOverridable component references

Modified:
    tuscany/sca-java-2.x/trunk/modules/assembly/src/main/resources/org/apache/tuscany/sca/assembly/builder/assembly-validation-messages.properties
    tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositeComponentTypeBuilderImpl.java

Modified: tuscany/sca-java-2.x/trunk/modules/assembly/src/main/resources/org/apache/tuscany/sca/assembly/builder/assembly-validation-messages.properties
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/assembly/src/main/resources/org/apache/tuscany/sca/assembly/builder/assembly-validation-messages.properties?rev=932474&r1=932473&r2=932474&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/assembly/src/main/resources/org/apache/tuscany/sca/assembly/builder/assembly-validation-messages.properties (original)
+++ tuscany/sca-java-2.x/trunk/modules/assembly/src/main/resources/org/apache/tuscany/sca/assembly/builder/assembly-validation-messages.properties Fri Apr  9 15:55:49 2010
@@ -75,3 +75,4 @@ PropertXSDTypesDontMatch = [ASM_5036] Th
 PropertXSDElementsDontMatch = [ASM_5036] The property component {0} property {1} has XSD element {2} while its component type property has the XSD element {3}
 IntentNotSatisfied = The intent {0} associated with policy subject {1} has no matching policy set
 URIFoundOnServiceSCABinding = [ASM90005] The SCA binding {0} on component {1} service {2} should not have a URI and the URI is currently set to {3}
+CompositeReferencePromotesNonOverridableReference = [ASM50042] Composite reference promotes component reference with 1..1 multiplicity and nonOverridable flag set true: Composite = {0} Composite reference = {1} Component reference = {2}

Modified: tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositeComponentTypeBuilderImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositeComponentTypeBuilderImpl.java?rev=932474&r1=932473&r2=932474&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositeComponentTypeBuilderImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositeComponentTypeBuilderImpl.java Fri Apr  9 15:55:49 2010
@@ -267,6 +267,9 @@ public class CompositeComponentTypeBuild
                 
                 // promote multiplicity
                 reconcileReferenceMultiplicity(componentType, compositeReference, promotedComponentReference, monitor);
+                
+                // check nonOverridable
+                validateNonOverridable(componentType, compositeReference, promotedComponentReference, monitor);
 
                 // promote interface contracts
                 calculatePromotedReferenceInterfaceContract(compositeReference, promotedComponentReference, monitor);
@@ -586,6 +589,31 @@ public class CompositeComponentTypeBuild
         } else {
             return true;
         }
-    }    
-
+    }  
+    
+    /**
+     * ASM50042 - Checks that if a component reference with multiplicity="1..1" is marked
+     * as nonOveridable then there are no composite references that promote it
+     * 
+     * @param componentType
+     * @param compositeReference
+     * @param promotedComponentReference
+     * @param monitor
+     */
+    private void validateNonOverridable(ComponentType componentType,
+                                        Reference compositeReference, 
+                                        Reference promotedComponentReference,
+                                        Monitor monitor){
+        if ((promotedComponentReference.getMultiplicity() == Multiplicity.ONE_ONE) &&
+            (((ComponentReference)promotedComponentReference)).isNonOverridable() == true) {
+            Monitor.error(monitor, 
+                    this, 
+                    Messages.ASSEMBLY_VALIDATION,
+                    "CompositeReferencePromotesNonOverridableReference", 
+                    componentType.getURI(), 
+                    compositeReference.getName(),
+                    promotedComponentReference.getName());
+        }
+    }
+    
 } //end class