summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/trunk/modules/policy-wspolicy
diff options
context:
space:
mode:
authorslaws <slaws@13f79535-47bb-0310-9956-ffa450edef68>2010-01-20 12:00:53 +0000
committerslaws <slaws@13f79535-47bb-0310-9956-ffa450edef68>2010-01-20 12:00:53 +0000
commitf04add1ce98eb1bd8885ce008490fe012673a06f (patch)
tree52f832a154fd363e1549264d992a172cf3f0bbc7 /sca-java-2.x/trunk/modules/policy-wspolicy
parent7d66ad16967e2cf721746109e6466ed71e4ed5fd (diff)
Dummy matching code. Needs to be replaced with a WS policy interception algorithm.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@901151 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-2.x/trunk/modules/policy-wspolicy')
-rw-r--r--sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicyBuilder.java89
-rw-r--r--sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/xml/WSPolicyProcessor.java7
2 files changed, 91 insertions, 5 deletions
diff --git a/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicyBuilder.java b/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicyBuilder.java
index 3bc0d0423d..aa883970de 100644
--- a/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicyBuilder.java
+++ b/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicyBuilder.java
@@ -77,13 +77,94 @@ public class WSPolicyBuilder implements PolicyBuilder<Policy> {
}
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;
+ }
}
diff --git a/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/xml/WSPolicyProcessor.java b/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/xml/WSPolicyProcessor.java
index 559cb3525d..33b1b8ee04 100644
--- a/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/xml/WSPolicyProcessor.java
+++ b/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/xml/WSPolicyProcessor.java
@@ -111,6 +111,11 @@ public class WSPolicyProcessor extends BaseStAXArtifactProcessor implements
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 @@ public class WSPolicyProcessor extends BaseStAXArtifactProcessor implements
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);