summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java
diff options
context:
space:
mode:
authorslaws <slaws@13f79535-47bb-0310-9956-ffa450edef68>2010-03-02 17:00:06 +0000
committerslaws <slaws@13f79535-47bb-0310-9956-ffa450edef68>2010-03-02 17:00:06 +0000
commit7056169666242148a7ef510da0c8d44f327e78d8 (patch)
tree84189f695464243ad0e7ec1d506739bcd9e4bc36 /sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java
parent1b7dae00ac4ff8e658fe052c854860b449b13a62 (diff)
Add first bits of code to start enabling the use of policies nested inside of WS Policy and policy alternatives rather than having to sit at the top level. Based on this the next step is to understand how tuscany defined and non-tuscany defined policies are managed.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@918111 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java')
-rw-r--r--sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicy.java14
-rw-r--r--sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicyBuilder.java31
-rw-r--r--sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/xml/WSPolicyProcessor.java29
3 files changed, 52 insertions, 22 deletions
diff --git a/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicy.java b/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicy.java
index 2893072165..843f370df6 100644
--- a/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicy.java
+++ b/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicy.java
@@ -33,6 +33,7 @@ import org.apache.tuscany.sca.assembly.EndpointReference;
import org.apache.tuscany.sca.assembly.Implementation;
import org.apache.tuscany.sca.assembly.builder.BuilderContext;
import org.apache.tuscany.sca.assembly.builder.PolicyBuilder;
+import org.apache.tuscany.sca.policy.PolicyContainer;
import org.apache.tuscany.sca.policy.PolicyExpression;
import org.apache.tuscany.sca.policy.PolicySet;
import org.apache.tuscany.sca.policy.PolicySubject;
@@ -41,7 +42,7 @@ import org.apache.tuscany.sca.policy.wspolicy.xml.WSPolicyProcessor;
/**
* The WS-Policy model. Currently defers to the Neethi policy model under the covers.
*/
-public class WSPolicy {
+public class WSPolicy implements PolicyContainer {
public final static String WS_POLICY_NS = "http://schemas.xmlsoap.org/ws/2004/09/policy";
public final static String WS_POLICY = "Policy";
@@ -71,4 +72,15 @@ public class WSPolicy {
public String toString() {
return "WSPolicy [" + neethiPolicy + "]";
}
+
+ public <T> Object getChildPolicy(Class<T> policyType) {
+ for (Object alternative : policyAssertions){
+ for (Object policy : (List<Object>)alternative){
+ if (policyType.isInstance(policy)){
+ return policy;
+ }
+ }
+ }
+ return null;
+ }
}
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 e42086abe1..d6bd710ed9 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
@@ -34,7 +34,6 @@ import org.apache.tuscany.sca.assembly.builder.PolicyBuilder;
import org.apache.tuscany.sca.policy.PolicyExpression;
import org.apache.tuscany.sca.policy.PolicySet;
import org.apache.tuscany.sca.policy.PolicySubject;
-import org.apache.tuscany.sca.policy.wspolicy.xml.WSPolicyProcessor;
/**
* Processing for WS-Policy objects
@@ -43,19 +42,19 @@ import org.apache.tuscany.sca.policy.wspolicy.xml.WSPolicyProcessor;
public class WSPolicyBuilder implements PolicyBuilder<Policy> {
public boolean build(Endpoint endpoint, BuilderContext context) {
- List<Policy> polices = getPolicies(endpoint);
+ List<WSPolicy> polices = getPolicies(endpoint);
System.out.println(endpoint + ": " + polices);
return true;
}
public boolean build(EndpointReference endpointReference, BuilderContext context) {
- List<Policy> polices = getPolicies(endpointReference);
+ List<WSPolicy> polices = getPolicies(endpointReference);
System.out.println(endpointReference + ": " + polices);
return true;
}
public boolean build(Component component, Implementation implementation, BuilderContext context) {
- List<Policy> polices = getPolicies(implementation);
+ List<WSPolicy> polices = getPolicies(implementation);
System.out.println(implementation + ": " + polices);
return true;
}
@@ -68,18 +67,6 @@ public class WSPolicyBuilder implements PolicyBuilder<Policy> {
return null;
}
- private List<Policy> getPolicies(PolicySubject subject) {
- List<Policy> polices = new ArrayList<Policy>();
- for (PolicySet ps : subject.getPolicySets()) {
- for (PolicyExpression exp : ps.getPolicies()) {
- if (getPolicyType().equals(exp.getName())) {
- polices.add((Policy)exp.getPolicy());
- }
- }
- }
- return polices;
- }
-
public boolean build(EndpointReference endpointReference, Endpoint endpoint, BuilderContext context) {
// TODO - neethi doesn't include code for matching ws policy
@@ -147,6 +134,18 @@ public class WSPolicyBuilder implements PolicyBuilder<Policy> {
return true;
}
+ private List<WSPolicy> getPolicies(PolicySubject subject) {
+ List<WSPolicy> polices = new ArrayList<WSPolicy>();
+ for (PolicySet ps : subject.getPolicySets()) {
+ for (PolicyExpression exp : ps.getPolicies()) {
+ if (getPolicyType().equals(exp.getName())) {
+ polices.add((WSPolicy)exp.getPolicy());
+ }
+ }
+ }
+ return polices;
+ }
+
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
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 33b1b8ee04..ee2d539be3 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
@@ -23,6 +23,8 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.List;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLInputFactory;
@@ -102,13 +104,24 @@ public class WSPolicyProcessor extends BaseStAXArtifactProcessor implements
WSPolicy wsPolicy = new WSPolicy();
wsPolicy.setNeethiPolicy(neethiPolicy);
- // read policy assertions
- readPolicyAssertions(wsPolicy,neethiPolicy, context);
+ // normalize the neethi tree so we can easily identify
+ // the policy alternatives
+ neethiPolicy.normalize(true);
+
+ // top-level children of ExactlyOne are policy alternatives so
+ // for each child create a policy model list and pull the
+ // policies out
+ for(Object alternative : neethiPolicy.getPolicyComponents()) {
+ List<Object> assertions = new ArrayList<Object>();
+ readPolicyAssertions(assertions, (PolicyComponent)alternative, context);
+ wsPolicy.getPolicyAssertions().add(assertions);
+ }
+
return wsPolicy;
}
- private void readPolicyAssertions(WSPolicy wsPolicy, PolicyComponent policyComponent, ProcessorContext context){
+ private void readPolicyAssertions(List<Object> policyAssertions, PolicyComponent policyComponent, ProcessorContext context){
// recurse into the policy alternatives
// TODO - lots of todos here as this just walks down the neethi hierarchy
@@ -116,12 +129,14 @@ public class WSPolicyProcessor extends BaseStAXArtifactProcessor implements
// regard to the policy alternatives. Undecided about whether to
// commit to prepresenting this hierarchy in Tuscany or whether
// to rely on neethi
+ // Should this be in the builder? Not really as this drives the
+ // Tuscany specific readers
if (policyComponent.getType() != Constants.TYPE_ASSERTION){
PolicyOperator policyOperator = (PolicyOperator)policyComponent;
for(Object childComponent : policyOperator.getPolicyComponents()){
// TODO - create assertion hierarchy in wsPolicy model
// how we do this depends on if we continue to use neethi
- readPolicyAssertions(wsPolicy, (PolicyComponent)childComponent, context);
+ readPolicyAssertions(policyAssertions, (PolicyComponent)childComponent, context);
}
} else {
try {
@@ -136,10 +151,14 @@ public class WSPolicyProcessor extends BaseStAXArtifactProcessor implements
ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
XMLStreamReader reader = inputFactory.createXMLStreamReader(inputStream);
+ Object neethiAssertion = policyComponent;
Object tuscanyAssertion = extensionProcessor.read(reader, context);
if (tuscanyAssertion != null) {
- wsPolicy.getPolicyAssertions().add(tuscanyAssertion);
+ policyAssertions.add(tuscanyAssertion);
+ } else {
+ // add neethi assertion
+ policyAssertions.add(neethiAssertion);
}
} catch (Exception ex) {
// TODO - report the error properly