diff options
author | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2009-07-07 21:58:19 +0000 |
---|---|---|
committer | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2009-07-07 21:58:19 +0000 |
commit | 316800505584f2b1645d8d1ea5ce21f87a3785e9 (patch) | |
tree | 070e7d54ada523a2850b11de676ef08ef8c63897 /java/sca/modules/implementation-java/src/main/java/org/apache/tuscany | |
parent | b0de81edb24b9247af5120bef1a06ed0e250957c (diff) |
Handle the qualifier methods for the specific annotations
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@791988 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/sca/modules/implementation-java/src/main/java/org/apache/tuscany')
-rw-r--r-- | java/sca/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/PolicyProcessor.java | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/java/sca/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/PolicyProcessor.java b/java/sca/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/PolicyProcessor.java index ca644168ef..ac7187b1c7 100644 --- a/java/sca/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/PolicyProcessor.java +++ b/java/sca/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/PolicyProcessor.java @@ -21,7 +21,10 @@ package org.apache.tuscany.sca.implementation.java.introspect.impl; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashSet; import java.util.List; +import java.util.Set; import javax.xml.namespace.QName; @@ -41,6 +44,7 @@ import org.apache.tuscany.sca.policy.PolicyFactory; import org.apache.tuscany.sca.policy.PolicySet; import org.apache.tuscany.sca.policy.PolicySubject; import org.oasisopen.sca.annotation.PolicySets; +import org.oasisopen.sca.annotation.Qualifier; import org.oasisopen.sca.annotation.Requires; /** @@ -196,10 +200,32 @@ public class PolicyProcessor extends BaseJavaClassVisitor { } else { qname = new QName(intentAnnotation.targetNamespace(), intentAnnotation.localPart()); } - Intent intent = policyFactory.createIntent(); - intent.setUnresolved(true); - intent.setName(qname); - requiredIntents.add(intent); + Set<String> qualifiers = new HashSet<String>(); + for(Method m: a.annotationType().getMethods()) { + Qualifier qualifier = m.getAnnotation(Qualifier.class); + if (qualifier != null && m.getReturnType() == String[].class) { + try { + qualifiers.addAll(Arrays.asList((String[]) m.invoke(a))); + } catch (Throwable e) { + e.printStackTrace(); + } + } + } + qualifiers.remove(""); + if (qualifiers.isEmpty()) { + Intent intent = policyFactory.createIntent(); + intent.setUnresolved(true); + intent.setName(qname); + requiredIntents.add(intent); + } else { + for (String q : qualifiers) { + Intent intent = policyFactory.createIntent(); + intent.setUnresolved(true); + qname = new QName(qname.getNamespaceURI(), qname.getLocalPart() + "." + q); + intent.setName(qname); + requiredIntents.add(intent); + } + } } } |