tuscany-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From edward...@apache.org
Subject svn commit: r711911 - /tuscany/sandbox/event/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/ConsumerProcessor.java
Date Thu, 06 Nov 2008 17:04:43 GMT
Author: edwardsmj
Date: Thu Nov  6 09:04:21 2008
New Revision: 711911

URL: http://svn.apache.org/viewvc?rev=711911&view=rev
Log:
Changes to enable consumers and producers to be connected via binding.sca

Modified:
    tuscany/sandbox/event/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/ConsumerProcessor.java

Modified: tuscany/sandbox/event/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/ConsumerProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/sandbox/event/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/ConsumerProcessor.java?rev=711911&r1=711910&r2=711911&view=diff
==============================================================================
--- tuscany/sandbox/event/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/ConsumerProcessor.java
(original)
+++ tuscany/sandbox/event/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/ConsumerProcessor.java
Thu Nov  6 09:04:21 2008
@@ -64,34 +64,83 @@
         }
         JavaElementImpl element = new JavaElementImpl(method.getDeclaringClass());
         try {
-			createConsumer(type, element, annotation.name(), method.getName());
+			createConsumer(type, element, annotation.name(), method);
 		} catch (InvalidInterfaceException e) {
 			throw new IntrospectionException(e);
 		}
     }
 
     /**
-     * @param type
-     * @param element
+     * Creates or updates a Consumer 
+     * @param type - the JavaImplementation to which the consumer applies
+     * @param element - the Java class implementing the consumer
+     * @param consumerName - the Name of the consumer
+     * @param operationName - the Name of the operation (ie Method) annotated with @Consumer
      * @throws IllegalConsumerException
      */
-    private void createConsumer(JavaImplementation type, JavaElementImpl element, String
consumerName, String operationName)
+    private void createConsumer(JavaImplementation type, JavaElementImpl element, 
+    		                    String consumerName, Method method )
         throws IllegalConsumerException, InvalidInterfaceException {
     	
-        Class<?> consumerClass = element.getType();
-        
-        org.apache.tuscany.sca.assembly.Consumer consumer = assemblyFactory.createConsumer();
-        JavaInterfaceContract interfaceContract = javaFactory.createJavaInterfaceContract();
-        consumer.setInterfaceContract(interfaceContract);
-        consumer.setName(consumerName);       
-        JavaInterface consumerInterface = javaFactory.createJavaInterface();
-        consumerInterface.setRemotable(true);
-        javaFactory.createJavaInterface(consumerInterface, consumerClass);
-        consumer.getInterfaceContract().setInterface(consumerInterface);
-        consumer.setOperationName(operationName);
+    	// First, see if the Consumer already exists
+    	org.apache.tuscany.sca.assembly.Consumer consumer = findConsumerByName( type, consumerName
); 
+    	
+    	if( consumer == null ) {
+    		// Create the consumer object and add it to the JavaImplementation
+	        Class<?> consumerClass = element.getType();
+	        
+	        consumer = assemblyFactory.createConsumer();
+	        JavaInterfaceContract interfaceContract = javaFactory.createJavaInterfaceContract();
+	        consumer.setInterfaceContract(interfaceContract);
+	        consumer.setName(consumerName);       
+	        JavaInterface consumerInterface = javaFactory.createJavaInterface();
+	        consumerInterface.setRemotable(true);
+	        javaFactory.createJavaInterface(consumerInterface, consumerClass);
+	        consumer.getInterfaceContract().setInterface(consumerInterface);
 
-        type.getConsumers().add(consumer);
-    }
+	        type.getConsumers().add(consumer);
+    	} // end if 
+    	
+    	// Add the operation to the consumer
+    	consumer.addOperation(method.getName(), getOperationEventTypes(method) );
+    	
+    } // end method createConsumer
+    
+    private static String getOperationEventTypes( Method method ) {
+    	// 1) If the method is annotated with @EventTypes, extract the supported event types
from the annotation
+    	org.osoa.sca.annotations.EventTypes annotation = method.getAnnotation(org.osoa.sca.annotations.EventTypes.class);
+        if (annotation != null) {
+            return annotation.value();
+        } // end if 
+
+    	// 2) If the method has a parameter that is NOT java.lang.Object, return its event type
or its base Java type
+        Class<?> parameter = method.getParameterTypes()[0];
+        String className = parameter.getCanonicalName();
+        if( !className.equals("java.lang.Object")) {
+        	org.osoa.sca.annotations.EventType eventType = parameter.getAnnotation(org.osoa.sca.annotations.EventType.class);
+            if (eventType != null) {
+                return eventType.name();
+            } else { 
+            	return className;
+            }// end if 
+        } // end if
+        
+    	// 3) Else, return "null" meaning that the method supports "any event type"
+    	return null;
+    } // end getOperationEventTypes
+    
+    /**
+     * Finds a Consumer within a Java implementation by the name of the consumer
+     * @param impl - the Java implementation
+     * @param name - the consumer name
+     * @return - the Consumer with the specified name, or null if it does not exist
+     */
+    private static org.apache.tuscany.sca.assembly.Consumer findConsumerByName( JavaImplementation
impl, String name ) {
+    	for( org.apache.tuscany.sca.assembly.Consumer consumer : impl.getConsumers() ) {
+    		if( name.equals(consumer.getName()) ) return consumer;
+    	} // end for
+    	return null;
+    } // end method findConsumerByName
     
 
 }



Mime
View raw message