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