You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by bd...@apache.org on 2010/08/17 20:19:20 UTC

svn commit: r986433 - in /tuscany/sca-java-2.x/trunk/modules/interface-java/src: main/java/org/apache/tuscany/sca/interfacedef/java/impl/ test/java/org/apache/tuscany/sca/interfacedef/java/introspection/impl/

Author: bdaniel
Date: Tue Aug 17 18:19:18 2010
New Revision: 986433

URL: http://svn.apache.org/viewvc?rev=986433&view=rev
Log:
Handle inheritance of intents and policy sets on java interfaces

Modified:
    tuscany/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/PolicyJavaInterfaceVisitor.java
    tuscany/sca-java-2.x/trunk/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/introspection/impl/PolicyProcessorTestCase.java

Modified: tuscany/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/PolicyJavaInterfaceVisitor.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/PolicyJavaInterfaceVisitor.java?rev=986433&r1=986432&r2=986433&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/PolicyJavaInterfaceVisitor.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/PolicyJavaInterfaceVisitor.java Tue Aug 17 18:19:18 2010
@@ -20,6 +20,7 @@ package org.apache.tuscany.sca.interface
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
@@ -41,6 +42,7 @@ import org.apache.tuscany.sca.interfaced
 import org.apache.tuscany.sca.policy.Intent;
 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;
@@ -78,7 +80,7 @@ public class PolicyJavaInterfaceVisitor 
      * @param clazz
      * @param requiredIntents
      */
-    private void readIntentsAndPolicySets(Class<?> clazz, List<Intent> requiredIntents, List<PolicySet> policySets) {
+    private void readIntentsAndPolicySets(Class<?> clazz, PolicySubject subject) {
         Requires intentAnnotation = clazz.getAnnotation(Requires.class);
         if (intentAnnotation != null) {
             String[] intentNames = intentAnnotation.value();
@@ -88,12 +90,12 @@ public class PolicyJavaInterfaceVisitor 
                     // Add each intent to the list
                     Intent intent = policyFactory.createIntent();
                     intent.setName(getQName(intentName));
-                    requiredIntents.add(intent);
+                    subject.getRequiredIntents().add(intent);
                 }
             }
         }
 
-        readSpecificIntents(clazz.getAnnotations(), requiredIntents);
+        readSpecificIntents(clazz.getAnnotations(), subject.getRequiredIntents());
         
         PolicySets policySetAnnotation = clazz.getAnnotation(PolicySets.class);
         if (policySetAnnotation != null) {
@@ -104,7 +106,7 @@ public class PolicyJavaInterfaceVisitor 
                     // Add each intent to the list
                     PolicySet policySet = policyFactory.createPolicySet();
                     policySet.setName(getQName(policySetName));
-                    policySets.add(policySet);
+                    subject.getPolicySets().add(policySet);
                 }
             }
         }
@@ -113,7 +115,7 @@ public class PolicyJavaInterfaceVisitor 
         	// add soap intent        	
             Intent intent = policyFactory.createIntent();
             intent.setName(Constants.SOAP_INTENT);
-            requiredIntents.add(intent);
+            subject.getRequiredIntents().add(intent);
         }
         
        
@@ -192,23 +194,45 @@ public class PolicyJavaInterfaceVisitor 
     public void visitInterface(JavaInterface javaInterface) throws InvalidInterfaceException {
 
         if (javaInterface.getJavaClass() != null) {
-            readIntentsAndPolicySets(javaInterface.getJavaClass(), javaInterface.getRequiredIntents(), javaInterface
-                .getPolicySets());
+        	readIntentsAndPolicySets(javaInterface.getJavaClass(), javaInterface);
 
             // Read intents on the service interface methods 
             List<Operation> operations = javaInterface.getOperations();
             for (Operation op : operations) {
                 JavaOperation operation = (JavaOperation)op;
                 Method method = operation.getJavaMethod();
+              
                 readIntents(method.getAnnotation(Requires.class), op.getRequiredIntents());
                 readSpecificIntents(method.getAnnotations(), op.getRequiredIntents());
                 readPolicySets(method.getAnnotation(PolicySets.class), op.getPolicySets());
                 readWebServicesAnnotations(method, javaInterface.getJavaClass(), javaInterface.getRequiredIntents());
+                inherit(javaInterface, op);
             }
         }
+        
+        
+     
+       
     }
 
-    private void readSpecificIntents(Annotation[] annotations, List<Intent> requiredIntents) {
+    private void inherit(JavaInterface javaInterface, Operation op) {
+    	List<Intent> interfaceIntents = new ArrayList<Intent>(javaInterface.getRequiredIntents());
+		for ( Intent intent : javaInterface.getRequiredIntents() ) {
+			
+			for ( Intent operationIntent : op.getRequiredIntents() ) {
+				if ( intent.getExcludedIntents().contains(operationIntent) || 
+						operationIntent.getExcludedIntents().contains(intent) ) {
+					interfaceIntents.remove(intent);
+					continue;
+				}
+			}
+		}
+		op.getRequiredIntents().addAll(interfaceIntents);
+		
+		op.getPolicySets().addAll(javaInterface.getPolicySets());
+	}
+
+	private void readSpecificIntents(Annotation[] annotations, List<Intent> requiredIntents) {
         for (Annotation a : annotations) {
             org.oasisopen.sca.annotation.Intent intentAnnotation =
                 a.annotationType().getAnnotation(org.oasisopen.sca.annotation.Intent.class);

Modified: tuscany/sca-java-2.x/trunk/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/introspection/impl/PolicyProcessorTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/introspection/impl/PolicyProcessorTestCase.java?rev=986433&r1=986432&r2=986433&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/introspection/impl/PolicyProcessorTestCase.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/interface-java/src/test/java/org/apache/tuscany/sca/interfacedef/java/introspection/impl/PolicyProcessorTestCase.java Tue Aug 17 18:19:18 2010
@@ -64,11 +64,11 @@ public class PolicyProcessorTestCase {
         JavaInterface type = factory.createJavaInterface(Interface3.class);
         // policyProcessor.visitInterface(type);
         assertEquals(2, type.getRequiredIntents().size());
-        assertEquals(1, type.getOperations().get(0).getRequiredIntents().size());
-        assertEquals(1, type.getOperations().get(1).getRequiredIntents().size());
+        assertEquals(3, type.getOperations().get(0).getRequiredIntents().size());
+        assertEquals(3, type.getOperations().get(1).getRequiredIntents().size());
         assertEquals(1, type.getPolicySets().size());
-        assertEquals(1, type.getOperations().get(0).getPolicySets().size());
-        assertEquals(1, type.getOperations().get(1).getPolicySets().size());
+        assertEquals(2, type.getOperations().get(0).getPolicySets().size());
+        assertEquals(2, type.getOperations().get(1).getPolicySets().size());
     }
 
     @Before