Author: rfeng
Date: Tue Jul  7 21:58:19 2009
New Revision: 791988

URL: http://svn.apache.org/viewvc?rev=791988&view=rev
Log:
Handle the qualifier methods for the specific annotations

Modified:
    
tuscany/java/sca/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/PolicyProcessor.java
    
tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/PolicyJavaInterfaceVisitor.java
    
tuscany/java/sca/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/introspection/impl/PolicyProcessorTestCase.java

Modified: 
tuscany/java/sca/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/PolicyProcessor.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/PolicyProcessor.java?rev=791988&r1=791987&r2=791988&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/PolicyProcessor.java
 (original)
+++ 
tuscany/java/sca/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/PolicyProcessor.java
 Tue Jul  7 21:58:19 2009
@@ -21,7 +21,10 @@
 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.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 @@
             } 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);
+                }
+            }
         }
     }
 

Modified: 
tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/PolicyJavaInterfaceVisitor.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/PolicyJavaInterfaceVisitor.java?rev=791988&r1=791987&r2=791988&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/PolicyJavaInterfaceVisitor.java
 (original)
+++ 
tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/PolicyJavaInterfaceVisitor.java
 Tue Jul  7 21:58:19 2009
@@ -20,7 +20,10 @@
 
 import java.lang.annotation.Annotation;
 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;
 
@@ -33,6 +36,7 @@
 import org.apache.tuscany.sca.policy.PolicyFactory;
 import org.apache.tuscany.sca.policy.PolicySet;
 import org.oasisopen.sca.annotation.PolicySets;
+import org.oasisopen.sca.annotation.Qualifier;
 import org.oasisopen.sca.annotation.Requires;
 
 /**
@@ -151,10 +155,9 @@
             for (Operation op : operations) {
                 JavaOperation operation = (JavaOperation)op;
                 Method method = operation.getJavaMethod();
-                if (method.getAnnotation(Requires.class) != null || 
method.getAnnotation(PolicySets.class) != null) {
-                    readIntents(method.getAnnotation(Requires.class), 
op.getRequiredIntents());
-                    readPolicySets(method.getAnnotation(PolicySets.class), 
op.getPolicySets());
-                }
+                readIntents(method.getAnnotation(Requires.class), 
op.getRequiredIntents());
+                readSpecificIntents(method.getAnnotations(), 
op.getRequiredIntents());
+                readPolicySets(method.getAnnotation(PolicySets.class), 
op.getPolicySets());
             }
         }
     }
@@ -173,10 +176,32 @@
             } 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);
+                }
+            }
         }
     }
 

Modified: 
tuscany/java/sca/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/introspection/impl/PolicyProcessorTestCase.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/introspection/impl/PolicyProcessorTestCase.java?rev=791988&r1=791987&r2=791988&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/introspection/impl/PolicyProcessorTestCase.java
 (original)
+++ 
tuscany/java/sca/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/introspection/impl/PolicyProcessorTestCase.java
 Tue Jul  7 21:58:19 2009
@@ -52,7 +52,7 @@
         JavaInterface type = factory.createJavaInterface(Interface2.class);
         policyProcessor.visitInterface(type);
         assertEquals(0, type.getRequiredIntents().size());
-        assertEquals(1, 
type.getOperations().get(0).getRequiredIntents().size());
+        assertEquals(3, 
type.getOperations().get(0).getRequiredIntents().size());
         assertEquals(1, 
type.getOperations().get(1).getRequiredIntents().size());
         assertEquals(0, type.getPolicySets().size());
         assertEquals(1, type.getOperations().get(0).getPolicySets().size());
@@ -92,7 +92,7 @@
 
     private interface Interface2 {
         @Requires( {"transaction.global"})
-        @Confidentiality({"message"})
+        @Confidentiality({"message", "transport"})
         @PolicySets( {"{http://ns1}PS1"})
         int method1();
 


Reply via email to