diff options
Diffstat (limited to '')
-rw-r--r-- | sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/BasePolicyProvider.java | 28 |
1 files changed, 28 insertions, 0 deletions
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<T> implements PolicyProvider { return findPolicies(applicablePolicySets); } + /* + * return policies for the service as a whole not including + * operation specific policies + */ protected List<T> findPolicies() { return findPolicies(subject.getPolicySets()); } + /* + * return policies for the service as a whole including + * operation specific policies + */ + protected List<T> findPolicies(Operation operation) { + // collect together all the candidate policy sets + List<PolicySet> policySets = new ArrayList<PolicySet>(); + // 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<T> findPolicies(List<PolicySet> policySets) { List<T> policies = new ArrayList<T>(); |