Author: slaws
Date: Mon Nov 23 13:56:09 2009
New Revision: 883344
URL: http://svn.apache.org/viewvc?rev=883344&view=rev
Log:
For POL_4012 add code that tests for mutual exclusive intents within a single
policy subject. There is existing code to check for mutual exclusion between
two policy subjects.
Modified:
tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java
Modified:
tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java?rev=883344&r1=883343&r2=883344&view=diff
==============================================================================
---
tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java
(original)
+++
tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java
Mon Nov 23 13:56:09 2009
@@ -141,6 +141,28 @@
}
/**
+ * Check if a single policy subject requires multually exclusive intents
+ * @param subject1 - the policy subject to check
+ * @param context - context containing useful things like the monitor
instance
+ * @return true if the policy subject contains mutually exclusive intents
+ */
+ private boolean checkMutualExclusion(PolicySubject subject1,
BuilderContext context) {
+ if (subject1 == null) {
+ return false;
+ }
+ for (Intent i1 : subject1.getRequiredIntents()) {
+ for (Intent i2 : subject1.getRequiredIntents()) {
+ if ((i1 != i2) &&
+ (i1.getExcludedIntents().contains(i2) ||
i2.getExcludedIntents().contains(i1))) {
+ error(context.getMonitor(), "MutuallyExclusiveIntents",
new Object[] {subject1}, i1, i2);
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
* Check if two policy subjects requires multually exclusive intents
* @param subject1
* @param subject2
@@ -160,7 +182,7 @@
}
}
return false;
- }
+ }
private boolean resolveAndCheck(PolicySubject subject, BuilderContext
context) {
if (subject == null) {
@@ -368,159 +390,189 @@
}
protected void computePolicies(Composite composite, BuilderContext
context) {
- resolveAndCheck(composite, context);
-
- for (Service service : composite.getServices()) {
- CompositeService compositeService = (CompositeService)service;
- checkMutualExclusion(compositeService,
compositeService.getPromotedService(), context);
- }
-
- for (Reference reference : composite.getReferences()) {
- CompositeReference compositeReference =
(CompositeReference)reference;
- for (Reference promoted :
compositeReference.getPromotedReferences()) {
- checkMutualExclusion(compositeReference, promoted, context);
- }
- }
-
- // compute policies recursively
- for (Component component : composite.getComponents()) {
- Implementation implementation = component.getImplementation();
- resolveAndCheck(component, context);
-
- // Check component against implementation
- checkMutualExclusion(component, component.getImplementation(),
context);
-
- for (ComponentService componentService : component.getServices()) {
- resolveAndCheck(componentService, context);
- resolveAndCheck(componentService.getService(), context);
-
- // Check component/service against componentType/service
- checkMutualExclusion(componentService,
componentService.getService(), context);
-
- if (componentService.getInterfaceContract() != null &&
componentService.getService() != null) {
-
resolveAndCheck(componentService.getInterfaceContract().getInterface(),
context);
-
resolveAndCheck(componentService.getService().getInterfaceContract().getInterface(),
context);
-
-
checkMutualExclusion(componentService.getInterfaceContract().getInterface(),
componentService
- .getService().getInterfaceContract().getInterface(),
context);
-
-
resolveAndCheck(componentService.getInterfaceContract().getCallbackInterface(),
context);
-
resolveAndCheck(componentService.getService().getInterfaceContract().getCallbackInterface(),
- context);
-
-
checkMutualExclusion(componentService.getInterfaceContract().getCallbackInterface(),
-
componentService.getService().getInterfaceContract().getCallbackInterface(),
- context);
- }
-
- for (Endpoint ep : componentService.getEndpoints()) {
- // Inherit from the componentType.service.interface
- if (componentService.getService() != null &&
componentService.getService().getInterfaceContract() != null) {
- inherit(ep,
componentService.getService().getInterfaceContract().getInterface());
- }
- if (componentService.getInterfaceContract() != null) {
- // Inherit from the component.service.interface
- inherit(ep,
componentService.getInterfaceContract().getInterface());
- }
- // Inherit from the componentType/service
- inheritFromService(ep, composite, component,
componentService.getService());
- // Find the corresponding binding in the componentType and
inherit the intents/policySets
- if (componentService.getService() != null) {
- for (Binding binding :
componentService.getService().getBindings()) {
- resolveAndCheck((PolicySubject)binding, context);
- if (isEqual(ep.getBinding().getName(),
binding.getName()) && (binding instanceof PolicySubject)) {
-
checkMutualExclusion((PolicySubject)ep.getBinding(), (PolicySubject)binding,
context);
- // Inherit from componentType.service.binding
- inherit(ep, binding);
- break;
- }
- }
- }
- // Inherit from composite/component/service
- inheritFromService(ep, composite, ep.getComponent(),
ep.getService());
- // Inherit from binding
- inherit(ep, ep.getBinding());
-
- // Replace profile intents with their required intents
- // Remove the intents whose @contraints do not include the
current element
- // Replace unqualified intents if there is a qualified
intent in the list
- // Replace qualifiable intents with the default qualied
intent
- resolveAndNormalize(ep, context);
- }
- }
-
- for (ComponentReference componentReference :
component.getReferences()) {
- resolveAndCheck(componentReference, context);
- resolveAndCheck(componentReference.getReference(), context);
-
- // Check component/reference against componentType/reference
- checkMutualExclusion(componentReference,
componentReference.getReference(), context);
-
- if (componentReference.getInterfaceContract() != null &&
componentReference.getReference() != null) {
-
resolveAndCheck(componentReference.getInterfaceContract().getInterface(),
context);
-
resolveAndCheck(componentReference.getReference().getInterfaceContract().getInterface(),
context);
-
-
checkMutualExclusion(componentReference.getInterfaceContract().getInterface(),
componentReference
- .getReference().getInterfaceContract().getInterface(),
context);
-
-
resolveAndCheck(componentReference.getInterfaceContract().getCallbackInterface(),
context);
-
resolveAndCheck(componentReference.getReference().getInterfaceContract().getCallbackInterface(),
- context);
-
-
checkMutualExclusion(componentReference.getInterfaceContract().getCallbackInterface(),
-
componentReference.getReference().getInterfaceContract()
- .getCallbackInterface(),
- context);
- }
-
- for (EndpointReference epr :
componentReference.getEndpointReferences()) {
- // Inherit from the componentType.reference.interface
- if (componentReference.getReference() != null &&
componentReference.getReference()
- .getInterfaceContract() != null) {
- inherit(epr,
componentReference.getReference().getInterfaceContract().getInterface());
- }
- // Inherit from the component.reference.interface
- if (componentReference.getInterfaceContract() != null) {
- inherit(epr,
componentReference.getInterfaceContract().getInterface());
- }
- // Inherit from the componentType/reference
- inheritFromReference(epr, composite, component,
componentReference.getReference());
- // Find the corresponding binding in the componentType and
inherit the intents/policySets
- if (componentReference.getReference() != null) {
- for (Binding binding :
componentReference.getReference().getBindings()) {
- if (epr.getBinding() != null &&
isEqual(epr.getBinding().getName(), binding.getName())
- && (binding instanceof PolicySubject)) {
- resolveAndCheck((PolicySubject)binding,
context);
-
checkMutualExclusion((PolicySubject)epr.getBinding(), (PolicySubject)binding,
context);
- // Inherit from componentType.reference.binding
- inherit(epr, binding);
- break;
- }
- }
- }
- // Inherit from composite/component/reference/binding
- inheritFromReference(epr, composite, epr.getComponent(),
epr.getReference());
- inherit(epr, epr.getBinding());
-
- // Replace profile intents with their required intents
- // Remove the intents whose @contraints do not include the
current element
- // Replace unqualified intents if there is a qualified
intent in the list
- // Replace qualifiable intents with the default qualied
intent
- resolveAndNormalize(epr, context);
- }
- }
-
- if (implementation instanceof Composite) {
- inherit(implementation, component, composite);
- computePolicies((Composite)implementation, context);
- } else {
- resolveAndCheck(implementation, context);
- if (implementation != null) {
- inherit(implementation, component, composite);
- }
- }
+ Monitor monitor = context.getMonitor();
+ monitor.pushContext("Composite: " + composite.getName().toString());
+
+ try {
+ resolveAndCheck(composite, context);
+
+ for (Service service : composite.getServices()) {
+ CompositeService compositeService =
(CompositeService)service;
+ checkMutualExclusion(compositeService,
compositeService.getPromotedService(), context);
+ }
+
+ for (Reference reference : composite.getReferences()) {
+ CompositeReference compositeReference =
(CompositeReference)reference;
+ for (Reference promoted :
compositeReference.getPromotedReferences()) {
+ checkMutualExclusion(compositeReference, promoted,
context);
+ }
+ }
+
+ // compute policies recursively
+ for (Component component : composite.getComponents()) {
+ monitor.pushContext("Component: " +
component.getName().toString());
+
+ try {
+ Implementation implementation =
component.getImplementation();
+ resolveAndCheck(component, context);
+
+ // Check component against implementation
+ checkMutualExclusion(component,
component.getImplementation(), context);
+
+ for (ComponentService componentService :
component.getServices()) {
+ monitor.pushContext("Service: " +
componentService.getName().toString());
+
+ try {
+ resolveAndCheck(componentService,
context);
+
resolveAndCheck(componentService.getService(), context);
+
+ // Check component/service against
componentType/service
+ checkMutualExclusion(componentService,
componentService.getService(), context);
+
+ if
(componentService.getInterfaceContract() != null &&
componentService.getService() != null) {
+
resolveAndCheck(componentService.getInterfaceContract().getInterface(),
context);
+
resolveAndCheck(componentService.getService().getInterfaceContract().getInterface(),
context);
+
+
checkMutualExclusion(componentService.getInterfaceContract().getInterface(),
componentService
+
.getService().getInterfaceContract().getInterface(), context);
+
+
resolveAndCheck(componentService.getInterfaceContract().getCallbackInterface(),
context);
+
resolveAndCheck(componentService.getService().getInterfaceContract().getCallbackInterface(),
+ context);
+
+
checkMutualExclusion(componentService.getInterfaceContract().getCallbackInterface(),
+
componentService.getService().getInterfaceContract().getCallbackInterface(),
+ context);
+ }
+
+ for (Endpoint ep :
componentService.getEndpoints()) {
+ // Inherit from the
componentType.service.interface
+ if (componentService.getService()
!= null && componentService.getService().getInterfaceContract() != null) {
+ inherit(ep,
componentService.getService().getInterfaceContract().getInterface());
+ }
+ if
(componentService.getInterfaceContract() != null) {
+ // Inherit from the
component.service.interface
+ inherit(ep,
componentService.getInterfaceContract().getInterface());
+ }
+ // Inherit from the
componentType/service
+ inheritFromService(ep, composite,
component, componentService.getService());
+ // Find the corresponding binding
in the componentType and inherit the intents/policySets
+ if (componentService.getService()
!= null) {
+ for (Binding binding :
componentService.getService().getBindings()) {
+
resolveAndCheck((PolicySubject)binding, context);
+ if
(isEqual(ep.getBinding().getName(), binding.getName()) && (binding instanceof
PolicySubject)) {
+
checkMutualExclusion((PolicySubject)ep.getBinding(), (PolicySubject)binding,
context);
+ // Inherit from
componentType.service.binding
+ inherit(ep, binding);
+ break;
+ }
+ }
+ }
+ // Inherit from
composite/component/service
+ inheritFromService(ep, composite,
ep.getComponent(), ep.getService());
+ // Inherit from binding
+ inherit(ep, ep.getBinding());
+
+ // Replace profile intents with
their required intents
+ // Remove the intents whose
@contraints do not include the current element
+ // Replace unqualified intents if
there is a qualified intent in the list
+ // Replace qualifiable intents with
the default qualied intent
+ resolveAndNormalize(ep, context);
+
+ // check that the resulting
endpoint has no mutually exclusive intents
+ checkMutualExclusion(ep, context);
+ }
+ } finally {
+ monitor.popContext();
+ }
+ }
+
+ for (ComponentReference componentReference :
component.getReferences()) {
+ monitor.pushContext("Reference: " +
componentReference.getName().toString());
+
+ try {
+ resolveAndCheck(componentReference,
context);
+
resolveAndCheck(componentReference.getReference(), context);
+
+ // Check component/reference against
componentType/reference
+
checkMutualExclusion(componentReference, componentReference.getReference(),
context);
+
+ if
(componentReference.getInterfaceContract() != null &&
componentReference.getReference() != null) {
+
resolveAndCheck(componentReference.getInterfaceContract().getInterface(),
context);
+
resolveAndCheck(componentReference.getReference().getInterfaceContract().getInterface(),
context);
+
+
checkMutualExclusion(componentReference.getInterfaceContract().getInterface(),
componentReference
+
.getReference().getInterfaceContract().getInterface(), context);
+
+
resolveAndCheck(componentReference.getInterfaceContract().getCallbackInterface(),
context);
+
resolveAndCheck(componentReference.getReference().getInterfaceContract().getCallbackInterface(),
+ context);
+
+
checkMutualExclusion(componentReference.getInterfaceContract().getCallbackInterface(),
+
componentReference.getReference().getInterfaceContract()
+
.getCallbackInterface(),
+ context);
+ }
+
+ for (EndpointReference epr :
componentReference.getEndpointReferences()) {
+ // Inherit from the
componentType.reference.interface
+ if
(componentReference.getReference() != null && componentReference.getReference()
+ .getInterfaceContract() !=
null) {
+ inherit(epr,
componentReference.getReference().getInterfaceContract().getInterface());
+ }
+ // Inherit from the
component.reference.interface
+ if
(componentReference.getInterfaceContract() != null) {
+ inherit(epr,
componentReference.getInterfaceContract().getInterface());
+ }
+ // Inherit from the
componentType/reference
+ inheritFromReference(epr,
composite, component, componentReference.getReference());
+ // Find the corresponding binding
in the componentType and inherit the intents/policySets
+ if
(componentReference.getReference() != null) {
+ for (Binding binding :
componentReference.getReference().getBindings()) {
+ if (epr.getBinding() !=
null && isEqual(epr.getBinding().getName(), binding.getName())
+ && (binding instanceof
PolicySubject)) {
+
resolveAndCheck((PolicySubject)binding, context);
+
checkMutualExclusion((PolicySubject)epr.getBinding(), (PolicySubject)binding,
context);
+ // Inherit from
componentType.reference.binding
+ inherit(epr, binding);
+ break;
+ }
+ }
+ }
+ // Inherit from
composite/component/reference/binding
+ inheritFromReference(epr,
composite, epr.getComponent(), epr.getReference());
+ inherit(epr, epr.getBinding());
+
+ // Replace profile intents with
their required intents
+ // Remove the intents whose
@contraints do not include the current element
+ // Replace unqualified intents if
there is a qualified intent in the list
+ // Replace qualifiable intents with
the default qualied intent
+ resolveAndNormalize(epr, context);
+
+ // check that the resulting
endpoint reference has no mutually exclusive intents
+ checkMutualExclusion(epr, context);
+ }
+ } finally {
+ monitor.popContext();
+ }
+ }
+
+ if (implementation instanceof Composite) {
+ inherit(implementation, component, composite);
+ computePolicies((Composite)implementation,
context);
+ } else {
+ resolveAndCheck(implementation, context);
+ if (implementation != null) {
+ inherit(implementation, component,
composite);
+ }
+ }
+ } finally {
+ monitor.popContext();
+ }
+ }
+ } finally {
+ monitor.popContext();
}
-
}
private Set<QName> getPolicyNames(PolicySubject subject) {