Author: bdaniel
Date: Fri Jun 17 21:22:24 2011
New Revision: 1137033

URL: http://svn.apache.org/viewvc?rev=1137033&view=rev
Log:
Only create tx impl interceptors for valid policies

Modified:
    
tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/BasePolicyProvider.java
    
tuscany/sca-java-2.x/trunk/modules/policy-transaction-runtime/src/main/java/org/apache/tuscany/sca/policy/transaction/runtime/TransactionImplementationPolicyProvider.java

Modified: 
tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/BasePolicyProvider.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/BasePolicyProvider.java?rev=1137033&r1=1137032&r2=1137033&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/BasePolicyProvider.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/BasePolicyProvider.java
 Fri Jun 17 21:22:24 2011
@@ -30,6 +30,7 @@ import org.apache.tuscany.sca.assembly.E
 import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.invocation.InvocationChain;
 import org.apache.tuscany.sca.invocation.PhasedInterceptor;
+import org.apache.tuscany.sca.policy.Intent;
 import org.apache.tuscany.sca.policy.PolicyContainer;
 import org.apache.tuscany.sca.policy.PolicyExpression;
 import org.apache.tuscany.sca.policy.PolicySet;
@@ -52,9 +53,29 @@ public abstract class BasePolicyProvider
         this.subject = subject;
     }
 
+    protected List<T> findPoliciesWithProvidedIntents(List<Intent> intents) {
+       List<PolicySet> applicablePolicySets = new ArrayList<PolicySet>();
+       List<PolicySet> policySets = subject.getPolicySets();
+       for ( PolicySet ps : policySets ) {
+               List<Intent> provided = ps.getProvidedIntents();
+               for ( Intent intent : intents ) {               
+                       if ( provided.contains(intent) ) {
+                               applicablePolicySets.add(ps);
+                               continue;
+                       }
+                       
+               }
+       }
+       return findPolicies(applicablePolicySets);
+    }
+    
     protected List<T> findPolicies() {
+       return findPolicies(subject.getPolicySets());
+    }
+    
+    private List<T> findPolicies(List<PolicySet> policySets) {
         List<T> policies = new ArrayList<T>();
-        List<PolicySet> policySets = subject.getPolicySets();
+       
         for (PolicySet ps : policySets) {
             for (Object p : ps.getPolicies()) {
                 if (policyType.isInstance(p)) {

Modified: 
tuscany/sca-java-2.x/trunk/modules/policy-transaction-runtime/src/main/java/org/apache/tuscany/sca/policy/transaction/runtime/TransactionImplementationPolicyProvider.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/policy-transaction-runtime/src/main/java/org/apache/tuscany/sca/policy/transaction/runtime/TransactionImplementationPolicyProvider.java?rev=1137033&r1=1137032&r2=1137033&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/policy-transaction-runtime/src/main/java/org/apache/tuscany/sca/policy/transaction/runtime/TransactionImplementationPolicyProvider.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/policy-transaction-runtime/src/main/java/org/apache/tuscany/sca/policy/transaction/runtime/TransactionImplementationPolicyProvider.java
 Fri Jun 17 21:22:24 2011
@@ -40,7 +40,8 @@ public class TransactionImplementationPo
     }
 
     public PhasedInterceptor createInterceptor(Operation operation) {
-        List<TransactionPolicy> policies = findPolicies();
+       // Only create an interceptor for the policy that matches the required 
intent. 
+        List<TransactionPolicy> policies = 
findPoliciesWithProvidedIntents(subject.getRequiredIntents());       
         return policies.isEmpty() ? null : new TransactionInterceptor(helper, 
false, null, policies.get(0), getPhase());
     }
 


Reply via email to