summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/BasePolicyProvider.java
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/BasePolicyProvider.java28
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>();