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


Reply via email to