You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by sl...@apache.org on 2010/01/20 13:00:53 UTC

svn commit: r901151 - in /tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy: WSPolicyBuilder.java xml/WSPolicyProcessor.java

Author: slaws
Date: Wed Jan 20 12:00:53 2010
New Revision: 901151

URL: http://svn.apache.org/viewvc?rev=901151&view=rev
Log:
Dummy matching code. Needs to be replaced with a WS policy interception algorithm.

Modified:
    tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicyBuilder.java
    tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/xml/WSPolicyProcessor.java

Modified: tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicyBuilder.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicyBuilder.java?rev=901151&r1=901150&r2=901151&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicyBuilder.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicyBuilder.java Wed Jan 20 12:00:53 2010
@@ -77,13 +77,94 @@
     }
 
     public boolean build(EndpointReference endpointReference, Endpoint endpoint, BuilderContext context) {
+        
+        // TODO - neethi doesn't include code for matching ws policy 
+        //        cxf have the class Intersector http://svn.apache.org/repos/asf/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/Intersector.java
+        //        but this does its work based on the cxf AssertionBuilders and extension
+        //        registry mechanism. I don't want to commit to that at the moment. 
+        //       
+        //        At the moment we do the simplest top level QName based matching
+               
+        // match EPR policy sets 
+        for (PolicySet eprPolicySet : endpointReference.getPolicySets()){
+            for (PolicySet epPolicySet : endpoint.getPolicySets()){
+                if (!build(eprPolicySet, epPolicySet)){
+                    return false;
+                }
+            }
+        }
+        
+        // match EP policy sets 
+        for (PolicySet epPolicySet : endpoint.getPolicySets()){
+            for (PolicySet eprPolicySet : endpointReference.getPolicySets()){
+                if (!build(epPolicySet, eprPolicySet)){
+                    return false;
+                }
+            }
+        }        
+        
+        return true;
+    }   
+    
+    private boolean build(PolicySet policySet1, PolicySet policySet2){
+        
+        // extract the ws policy expressions out of the policy sets
+        List<PolicyExpression> policyExpressions1 = new ArrayList<PolicyExpression>();
+        List<PolicyExpression> policyExpressions2 = new ArrayList<PolicyExpression>();
+        
+        for (PolicyExpression policyExpression : policySet1.getPolicies()){
+            if (policyExpression.getName().equals(getPolicyType())){
+                policyExpressions1.add(policyExpression);
+            }
+        }
+        
+        for (PolicyExpression policyExpression : policySet2.getPolicies()){
+            if (policyExpression.getName().equals(getPolicyType())){
+                policyExpressions2.add(policyExpression);
+            }
+        }
+        
+        // Match the first set of expressions against the second set
+        for (PolicyExpression policyExpression1 : policyExpressions1){
+            for (PolicyExpression policyExpression2 : policyExpressions2){
+                if (!build((WSPolicy)policyExpression1.getPolicy(), 
+                           (WSPolicy)policyExpression2.getPolicy())){
+                    return false;
+                }
+            }
+        }
+        
+        // TODO set the reference policy set to include an interception of the
+        //      ws policy sets discovered here
+        //      Do we really need to do this?
+        //      The method is called in both directions (reference to service and
+        //      service to reference) so would need to fix that
+        
         return true;
     }
     
-    public PolicyExpression match(EndpointReference endpointReference, Endpoint endpoint, BuilderContext context) {
-        // Get the ws-policy elements from the endpoint reference and endpoint and work out the intersection
+    private boolean build(WSPolicy wsPolicy1, WSPolicy wsPolicy2){
+        // TODO - cheating here as we assume a flat policy structure
+        //        we've read all the policy assertions into Tuscany models
+        //        in the reader (without taking account of alternatives)
+        //        so we just compare those here
+        //        The real implementation of this comparison depends on how
+        //        we decide to represent the ws policy hierarchy
         
-        return null;
-    }    
+        for (Object policyAssertion1 : wsPolicy1.getPolicyAssertions()){
+            boolean matched = false;
+            for (Object policyAssertion2 : wsPolicy2.getPolicyAssertions()){
+                if (policyAssertion1.getClass() == policyAssertion2.getClass()){
+                    matched = true;
+                    break;
+                }
+            }
+            if(!matched){
+                return false;
+            }
+        }
+        
+        return true;
+    }
 
 }

Modified: tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/xml/WSPolicyProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/xml/WSPolicyProcessor.java?rev=901151&r1=901150&r2=901151&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/xml/WSPolicyProcessor.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/xml/WSPolicyProcessor.java Wed Jan 20 12:00:53 2010
@@ -111,6 +111,11 @@
     private void readPolicyAssertions(WSPolicy wsPolicy, PolicyComponent policyComponent, ProcessorContext context){
         
         // recurse into the policy alternatives
+        // TODO - lots of todos here as this just walks down the neethi hierarchy
+        //        looking for assertions to drive Tuscany processors without
+        //        regard to the policy alternatives. Undecided about whether to 
+        //        commit to prepresenting this hierarchy in Tuscany or whether
+        //        to rely on neethi
         if (policyComponent.getType() != Constants.TYPE_ASSERTION){
             PolicyOperator policyOperator = (PolicyOperator)policyComponent;
             for(Object childComponent : policyOperator.getPolicyComponents()){
@@ -122,7 +127,7 @@
             try {
                 // TODO - not sure we should keep the neethi model but hack for the
                 //        time being to get Tuscany processors to process the OMElements
-                //        help within the neethi model
+                //        within the neethi model
                 ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                 XMLStreamWriter writer = outputFactory.createXMLStreamWriter(outputStream);