Author: svkrish
Date: Mon Apr 21 00:03:03 2008
New Revision: 650031

URL: http://svn.apache.org/viewvc?rev=650031&view=rev
Log:
https://issues.apache.org/jira/browse/TUSCANY-2239

Modified:
    
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/BaseAssemblyProcessor.java
    
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java

Modified: 
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/BaseAssemblyProcessor.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/BaseAssemblyProcessor.java?rev=650031&r1=650030&r2=650031&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/BaseAssemblyProcessor.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/BaseAssemblyProcessor.java
 Mon Apr 21 00:03:03 2008
@@ -332,10 +332,8 @@
                 resolvePolicySets(contract.getPolicySets(), resolver);
                 resolvePolicySets(contract.getApplicablePolicySets(), 
resolver);
                 
-                //inherit the composite / component level policy intents and 
policysets
+                // Inherit the composite / component level applicable policy 
sets.
                 if ( parent != null && parent instanceof PolicySetAttachPoint 
)  {
-                    
addInheritedIntents(((PolicySetAttachPoint)parent).getRequiredIntents(), 
contract.getRequiredIntents());
-                    
addInheritedPolicySets(((PolicySetAttachPoint)parent).getPolicySets(), 
contract.getPolicySets());
                     
addInheritedPolicySets(((PolicySetAttachPoint)parent).getApplicablePolicySets(),
 contract.getApplicablePolicySets());
                 }
                 
@@ -344,9 +342,7 @@
                     resolvePolicySets(confOp.getPolicySets(), resolver);
                     resolvePolicySets(confOp.getApplicablePolicySets(), 
resolver);
                     
-                    //inherit intents and policysets from parent contract
-                    addInheritedIntents(contract.getRequiredIntents(), 
confOp.getRequiredIntents());
-                    addInheritedPolicySets(contract.getPolicySets(), 
confOp.getPolicySets());
+                    //inherit applicable policy sets from parent contract
                     addInheritedPolicySets(contract.getApplicablePolicySets(), 
confOp.getApplicablePolicySets());
                 }
                                 
@@ -399,11 +395,6 @@
                             
addInheritedPolicySets(((PolicySetAttachPoint)binding).getApplicablePolicySets(),
 
                                                    
confOp.getApplicablePolicySets());
                             PolicyValidationUtils.validatePolicySets(confOp, 
((PolicySetAttachPoint)binding).getType());
-                            
-                            
addInheritedIntents(((PolicySetAttachPoint)binding).getRequiredIntents(), 
-                                                confOp.getRequiredIntents());
-                            
addInheritedPolicySets(((PolicySetAttachPoint)binding).getPolicySets(), 
-                                                confOp.getPolicySets());
                         }
                     }
                 }
@@ -414,8 +405,6 @@
                     resolvePolicySets(contract.getCallback().getPolicySets(), 
resolver);
                     
resolvePolicySets(contract.getCallback().getApplicablePolicySets(), resolver);
                     //inherit the contract's policy intents and policysets
-                    addInheritedIntents(contract.getRequiredIntents(), 
contract.getCallback().getRequiredIntents());
-                    addInheritedPolicySets(contract.getPolicySets(), 
contract.getCallback().getPolicySets());
                     addInheritedPolicySets(contract.getApplicablePolicySets(), 
contract.getCallback().getApplicablePolicySets());
                     
                     for (int i = 0, n = 
contract.getCallback().getBindings().size(); i < n; i++) {

Modified: 
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java?rev=650031&r1=650030&r2=650031&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java
 Mon Apr 21 00:03:03 2008
@@ -23,6 +23,7 @@
 import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
 
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 import java.util.StringTokenizer;
 
@@ -68,6 +69,7 @@
 import org.apache.tuscany.sca.policy.PolicyFactory;
 import org.apache.tuscany.sca.policy.PolicySet;
 import org.apache.tuscany.sca.policy.PolicySetAttachPoint;
+import org.apache.tuscany.sca.policy.util.PolicyComputationUtils;
 import org.apache.tuscany.sca.policy.util.PolicyValidationException;
 import org.apache.tuscany.sca.policy.util.PolicyValidationUtils;
 import org.w3c.dom.Document;
@@ -799,8 +801,7 @@
             }
         }
         
-        //resolve intents and policysets first as they are going to be copied 
over
-        //to child elements as and when the child elements are being resolved
+        //resolve intents and policy sets
         List<Intent> compositeIntents = null;
         List<PolicySet> compositePolicySets = null;
         List<PolicySet> compositeApplicablePolicySets = null;
@@ -829,15 +830,17 @@
                 component.setConstrainingType(constrainingType);
             }
             
-            //resolve intents and policysets first as they are going to be 
copied over
-            //to child elements as and when the child elements are being 
resolved
+            //resolve intents and policy sets
             resolveIntents(component.getRequiredIntents(), resolver);
             resolvePolicySets(component.getPolicySets(), resolver);
             resolvePolicySets(component.getApplicablePolicySets(), resolver);
             
             //inherit composite intents and policysets
-            addInheritedIntents(compositeIntents, 
component.getRequiredIntents());
-            addInheritedPolicySets(compositePolicySets, 
component.getPolicySets());
+            PolicyComputationUtils.addDefaultPolicies(compositeIntents,
+                                                      compositePolicySets,
+                                                      
component.getRequiredIntents(),
+                                                      
component.getPolicySets());
+
             addInheritedPolicySets(compositeApplicablePolicySets, 
component.getApplicablePolicySets());
 
             //resolve component services and references 
@@ -867,7 +870,7 @@
                     resolveImplIntentsAndPolicySets(implementation, 
                                                     
component.getApplicablePolicySets(), 
                                                     resolver);
-                    
+
                     copyPoliciesToComponent(component, implementation, 
resolver, true);
                     
                     //now resolve the implementation so that even if there is 
a shared instance
@@ -920,10 +923,11 @@
                     
                     PolicyValidationUtils.validatePolicySets(implConfOp, 
policiedImpl.getType());
                     
-                    
addInheritedIntents(((PolicySetAttachPoint)implementation).getRequiredIntents(),
 
-                                        implConfOp.getRequiredIntents());
-                    
addInheritedPolicySets(((PolicySetAttachPoint)implementation).getPolicySets(), 
-                                           implConfOp.getPolicySets());
+                    PolicyComputationUtils.addDefaultPolicies(
+                                            
((PolicySetAttachPoint)implementation).getRequiredIntents(),
+                                            
((PolicySetAttachPoint)implementation).getPolicySets(),
+                                            implConfOp.getRequiredIntents(),
+                                            implConfOp.getPolicySets());
                 }
             }
         }
@@ -934,8 +938,44 @@
                                          ModelResolver resolver,
                                          boolean clearImplSettings) throws 
ContributionResolveException {
         if (implementation instanceof PolicySetAttachPoint) {
-            //add implementation policies into component... since 
implementation instance are 
-            //reused and its likely that this implementation instance will not 
hold after its resolution
+            // Add implementation policies into component, since 
implementation instances are 
+            // reused and it's likely that this implementation instance will 
not hold after its resolution.
+            // On the first call to this method (clearImplSettings=true), we 
are moving policies from the
+            // implementation XML element up to the component.  In this case 
if there are mutually exclusive
+            // policies we must clear the component policy so that the 
implementation policy "wins".
+            // On the second call to this method (clearImplSettings=false), we 
are moving policies from the
+            // componentType implementation up to the component.  In this case 
if there are mutually
+            // exclusive policies it is an error.  This error will be detected 
later in the PolicyComputer.
+            if (clearImplSettings) {
+                for (Intent intent : 
((PolicySetAttachPoint)implementation).getRequiredIntents()) {
+                    for (Intent excluded : intent.getExcludedIntents()) {
+                        if (component.getRequiredIntents().contains(excluded)) 
{
+                            component.getRequiredIntents().remove(excluded);
+                        }
+                        for (Iterator i = 
component.getPolicySets().iterator(); i.hasNext(); ) {
+                            PolicySet cmpPolicySet = (PolicySet) i.next();
+                            if 
(cmpPolicySet.getProvidedIntents().contains(excluded)) {
+                                i.remove();
+                            }
+                        }
+                    }
+                }
+                for (PolicySet policySet : 
((PolicySetAttachPoint)implementation).getPolicySets()) {
+                    for (Intent intent : policySet.getProvidedIntents()) {
+                        for (Intent excluded : intent.getExcludedIntents()) {
+                            if 
(component.getRequiredIntents().contains(excluded)) {
+                                
component.getRequiredIntents().remove(excluded);
+                            }
+                            for (Iterator i = 
component.getPolicySets().iterator(); i.hasNext(); ) {
+                                PolicySet cmpPolicySet = (PolicySet) i.next();
+                                if 
(cmpPolicySet.getProvidedIntents().contains(excluded)) {
+                                    i.remove();
+                                }
+                            }
+                        }
+                    }
+                }
+            }
             
component.getRequiredIntents().addAll(((PolicySetAttachPoint)implementation).getRequiredIntents());
             
component.getPolicySets().addAll(((PolicySetAttachPoint)implementation).getPolicySets());
             
component.getApplicablePolicySets().addAll(((PolicySetAttachPoint)implementation).getApplicablePolicySets());
@@ -950,10 +990,35 @@
                     for ( ConfiguredOperation compConfOp : 
((OperationsConfigurator)component).getConfiguredOperations() ) {
                         if ( implConfOp.getName().equals(compConfOp.getName()) 
) {
                             notFound = false;
+
+                            if (clearImplSettings) {
+                                for (Intent intent : 
implConfOp.getRequiredIntents()) {
+                                    for (Intent excluded : 
intent.getExcludedIntents()) {
+                                        if 
(compConfOp.getRequiredIntents().contains(excluded)) {
+                                            
compConfOp.getRequiredIntents().remove(excluded);
+                                        }
+                                    }
+                                }
+                                for (PolicySet policySet : 
implConfOp.getPolicySets()) {
+                                    for (Intent intent : 
policySet.getProvidedIntents()) {
+                                        for (Intent excluded : 
intent.getExcludedIntents()) {
+                                            if 
(compConfOp.getRequiredIntents().contains(excluded)) {
+                                                
compConfOp.getRequiredIntents().remove(excluded);
+                                            }
+                                            for (Iterator i = 
compConfOp.getPolicySets().iterator(); i.hasNext(); ) {
+                                                PolicySet cmpPolicySet = 
(PolicySet) i.next();
+                                                if 
(cmpPolicySet.getProvidedIntents().contains(excluded)) {
+                                                    i.remove();
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+
                             
addInheritedIntents(implConfOp.getRequiredIntents(), 
compConfOp.getRequiredIntents());
                             addInheritedPolicySets(implConfOp.getPolicySets(), 
compConfOp.getPolicySets());
                             
addInheritedPolicySets(implConfOp.getApplicablePolicySets(), 
compConfOp.getApplicablePolicySets());
-                            notFound = false;
                         }
                     }
                     



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to