From c79fbcb63cc5b097533f0d36b43e4c32782c71b1 Mon Sep 17 00:00:00 2001 From: slaws Date: Wed, 19 Oct 2011 14:03:07 +0000 Subject: Resolve operation policy and take account of it in base policy processor. git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1186226 13f79535-47bb-0310-9956-ffa450edef68 --- .../tuscany/sca/provider/BasePolicyProvider.java | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'sca-java-2.x/trunk/modules/core-spi/src') diff --git a/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/BasePolicyProvider.java b/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/BasePolicyProvider.java index ab1b33ac3c..ba6d6f5df0 100644 --- a/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/BasePolicyProvider.java +++ b/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/BasePolicyProvider.java @@ -69,10 +69,38 @@ public abstract class BasePolicyProvider implements PolicyProvider { return findPolicies(applicablePolicySets); } + /* + * return policies for the service as a whole not including + * operation specific policies + */ protected List findPolicies() { return findPolicies(subject.getPolicySets()); } + /* + * return policies for the service as a whole including + * operation specific policies + */ + protected List findPolicies(Operation operation) { + // collect together all the candidate policy sets + List policySets = new ArrayList(); + // add endpoint or endpoint reference policy sets + policySets.addAll(subject.getPolicySets()); + // add interface operation policy sets + policySets.addAll(operation.getPolicySets()); + // add implementation operation policy sets + if (subject instanceof Endpoint){ + for(Operation op :((Endpoint)subject).getComponent().getImplementation().getOperations()){ + if (op.getName().equals(operation.getName())){ + policySets.addAll(op.getPolicySets()); + break; + } + } + } + + return findPolicies(policySets); + } + private List findPolicies(List policySets) { List policies = new ArrayList(); -- cgit v1.2.3