You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by ke...@apache.org on 2006/01/27 01:55:05 UTC

svn commit: r372680 - in /beehive/trunk/controls: src/runtime/org/apache/beehive/controls/runtime/bean/ src/runtime/org/apache/beehive/controls/runtime/generator/ src/spi/org/apache/beehive/controls/spi/svc/ test/src/auxilaries/org/apache/beehive/contr...

Author: kentam
Date: Thu Jan 26 16:54:55 2006
New Revision: 372680

URL: http://svn.apache.org/viewcvs?rev=372680&view=rev
Log:
Fix BEEHIVE-1051: added return value and throwable params to Interceptor.postEvent() signature.

CR: Xibin Zeng


Modified:
    beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlBean.java
    beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBean.vm
    beehive/trunk/controls/src/spi/org/apache/beehive/controls/spi/svc/Interceptor.java
    beehive/trunk/controls/test/src/auxilaries/org/apache/beehive/controls/test/controls/interceptor/SampleInterceptor.java
    beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/interceptor/HelloIntercepted.java

Modified: beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlBean.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlBean.java?rev=372680&r1=372679&r2=372680&view=diff
==============================================================================
--- beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlBean.java (original)
+++ beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/bean/ControlBean.java Thu Jan 26 16:54:55 2006
@@ -1002,7 +1002,7 @@
         public void preInvoke( org.apache.beehive.controls.api.bean.ControlBean cb, Method m, Object [] args ) {}
         public void postInvoke( org.apache.beehive.controls.api.bean.ControlBean cb, Method m, Object [] args, Object retval, Throwable t) {}
         public void preEvent( org.apache.beehive.controls.api.bean.ControlBean cb, Class eventSet, Method m, Object [] args) {}
-        public void postEvent( org.apache.beehive.controls.api.bean.ControlBean cb, Class eventSet, Method m, Object [] args ) {}
+        public void postEvent( org.apache.beehive.controls.api.bean.ControlBean cb, Class eventSet, Method m, Object [] args, Object retval, Throwable t ) {}
     }
 
     /** BEGIN unsynchronized fields */

Modified: beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBean.vm
URL: http://svn.apache.org/viewcvs/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBean.vm?rev=372680&r1=372679&r2=372680&view=diff
==============================================================================
--- beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBean.vm (original)
+++ beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/ControlBean.vm Thu Jan 26 16:54:55 2006
@@ -313,6 +313,7 @@
     #set ($returnType = $event.returnType)
     public $returnType ${event.name}($event.argDecl) $event.throwsClause
     {
+        Throwable thrown = null;
         #if ($returnType != "void")
         $returnType retval = ${event.defaultReturnValue};
         #end
@@ -327,11 +328,13 @@
             //
             if (listener != null)
             {
-	            #if ($event.interceptorServiceNames.size() != 0)
 	            Object [] argArray = new Object[] {$event.argList};
+                #if ($event.interceptorServiceNames.size() != 0)
 	            String pivotedInterceptor = null;
+	            #end
 	            try
 	            {
+                #if ($event.interceptorServiceNames.size() != 0)
 	            preEvent($event.methodField, argArray, ${event.methodField}Interceptors);
 	            #end
                 #if ($returnType != "void")
@@ -339,8 +342,8 @@
                 #else
                 listener.${event.name}($event.argList);
                 #end
-	            #if ($event.interceptorServiceNames.size() != 0)
 	            }
+	            #if ($event.interceptorServiceNames.size() != 0)
 	            catch (org.apache.beehive.controls.spi.svc.InterceptorPivotException ipe)
 	            {
 	            	pivotedInterceptor = ipe.getInterceptorName();
@@ -348,33 +351,86 @@
 			    	retval = (#toObject ($returnType))ipe.getReturnValue();
 			    	#end
 	            }
-	            postEvent($event.methodField, argArray, ${event.methodField}Interceptors, pivotedInterceptor);
-	            #end
+                #end
+                catch (Throwable t)
+                {
+                    //
+                    // All exceptions are caught here, so postEvent processing has visibility into
+                    // the exception status.  Errors, RuntimExceptions, or declared checked exceptions will
+                    // be rethrown.
+                    //
+                    thrown = t;
+
+                    if (t instanceof Error) throw (Error)t;
+                    else if (t instanceof RuntimeException) throw (RuntimeException)t;
+                    #foreach ($thrownException in $event.throwsList)
+                    else if (t instanceof $thrownException) throw ($thrownException)t;
+                    #end
+
+                    throw new UndeclaredThrowableException(t);
+                }
+                #if ($event.interceptorServiceNames.size() != 0)
+                finally
+                {
+                    #if ($returnType == "void")
+                    Object rv = null;
+                    #else
+                    Object rv = retval;
+                    #end
+                    postEvent($event.methodField, argArray, rv, thrown, ${event.methodField}Interceptors, pivotedInterceptor);
+                }
+                #end
             }
             #if ($returnType != "void")
             return retval;
             #end
         #else
-            #if ($event.interceptorServiceNames.size() != 0)
             Object [] argArray = new Object[] {$event.argList};
+
+            #if ($event.interceptorServiceNames.size() != 0)
             String pivotedInterceptor = null;
-            try
-            {
-            preEvent($event.methodField, argArray, ${event.methodField}Interceptors);
             #end
             java.util.Iterator listenerIter = notifier.listenerIterator();
-            while (listenerIter.hasNext())
+
+            try
             {
-                $event.eventSet.formalShortName listener = ($eventSet.formalShortName)listenerIter.next();
-                listener.${event.name}($event.argList);
+                #if ($event.interceptorServiceNames.size() != 0)
+                preEvent($event.methodField, argArray, ${event.methodField}Interceptors);
+                #end
+                while (listenerIter.hasNext())
+                {
+                    $event.eventSet.formalShortName listener = ($eventSet.formalShortName)listenerIter.next();
+                    listener.${event.name}($event.argList);
+                }
             }
             #if ($event.interceptorServiceNames.size() != 0)
-            }
             catch (org.apache.beehive.controls.spi.svc.InterceptorPivotException ipe)
             {
             	pivotedInterceptor = ipe.getInterceptorName();
             }
-            postEvent($event.methodField, argArray, ${event.methodField}Interceptors, pivotedInterceptor);
+            #end
+            catch (Throwable t)
+            {
+                //
+                // All exceptions are caught here, so postEvent processing has visibility into
+                // the exception status.  Errors, RuntimExceptions, or declared checked exceptions will
+                // be rethrown.
+                //
+                thrown = t;
+
+                if (t instanceof Error) throw (Error)t;
+                else if (t instanceof RuntimeException) throw (RuntimeException)t;
+                #foreach ($thrownException in $event.throwsList)
+                else if (t instanceof $thrownException) throw ($thrownException)t;
+                #end
+
+                throw new UndeclaredThrowableException(t);
+            }
+            #if ($event.interceptorServiceNames.size() != 0)
+            finally
+            {
+                postEvent($event.methodField, argArray, null, thrown, ${event.methodField}Interceptors, pivotedInterceptor);
+            }
             #end
         #end
      }
@@ -403,10 +459,10 @@
     }
 #end
 ##
-## This macro defines the implementation of a preEvent method
+## This macro defines the implementation of a postEvent method
 ##
 #macro (declarePostEvent $eventSet)
-    private void postEvent(Method method, Object[] argArray, String[] interceptors, String pivotedInterceptor)
+    private void postEvent(Method method, Object[] argArray, Object retval, Throwable t, String[] interceptors, String pivotedInterceptor)
     {
         for (int cnt = interceptors.length - 1; cnt >= 0; cnt--)
         {
@@ -415,7 +471,7 @@
 	        {
 	        	pivotedInterceptor = null;
 	            org.apache.beehive.controls.spi.svc.Interceptor i = ensureInterceptor( n );
-    	        i.postEvent( ${bean.shortName}.this, ${eventSet.formalShortName}.class , method, argArray );
+    	        i.postEvent( ${bean.shortName}.this, ${eventSet.formalShortName}.class , method, argArray, retval, t );
     	    }
         }
     }

Modified: beehive/trunk/controls/src/spi/org/apache/beehive/controls/spi/svc/Interceptor.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/controls/src/spi/org/apache/beehive/controls/spi/svc/Interceptor.java?rev=372680&r1=372679&r2=372680&view=diff
==============================================================================
--- beehive/trunk/controls/src/spi/org/apache/beehive/controls/spi/svc/Interceptor.java (original)
+++ beehive/trunk/controls/src/spi/org/apache/beehive/controls/spi/svc/Interceptor.java Thu Jan 26 16:54:55 2006
@@ -52,5 +52,5 @@
     	throws InterceptorPivotException;
 
     /** Called after a control event is fired (through a client proxy) */
-    public void postEvent( ControlBean cb, Class eventSet, Method m, Object [] args);
+    public void postEvent( ControlBean cb, Class eventSet, Method m, Object [] args, Object retval, Throwable t );
 }

Modified: beehive/trunk/controls/test/src/auxilaries/org/apache/beehive/controls/test/controls/interceptor/SampleInterceptor.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/controls/test/src/auxilaries/org/apache/beehive/controls/test/controls/interceptor/SampleInterceptor.java?rev=372680&r1=372679&r2=372680&view=diff
==============================================================================
--- beehive/trunk/controls/test/src/auxilaries/org/apache/beehive/controls/test/controls/interceptor/SampleInterceptor.java (original)
+++ beehive/trunk/controls/test/src/auxilaries/org/apache/beehive/controls/test/controls/interceptor/SampleInterceptor.java Thu Jan 26 16:54:55 2006
@@ -41,10 +41,12 @@
     public void preEvent( ControlBean cb, Class eventSet, Method m, Object [] args )
     	throws InterceptorPivotException
     {
+        System.out.println( "SampleInterceptor.preEvent() called: bean=" + cb.getControlID() + " es=" + eventSet.getName() + " m=" + m.getName() );
     }
 
     /** Called after a control event is fired (through a client proxy) */
-    public void postEvent( ControlBean cb, Class eventSet, Method m, Object [] args)
+    public void postEvent( ControlBean cb, Class eventSet, Method m, Object [] args, Object retval, Throwable t )
     {
+        System.out.println( "SampleInterceptor.postEvent() called: bean=" + cb.getControlID() + " es=" + eventSet.getName() + " m=" + m.getName() );
     }
 }

Modified: beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/interceptor/HelloIntercepted.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/interceptor/HelloIntercepted.java?rev=372680&r1=372679&r2=372680&view=diff
==============================================================================
--- beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/interceptor/HelloIntercepted.java (original)
+++ beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/interceptor/HelloIntercepted.java Thu Jan 26 16:54:55 2006
@@ -25,6 +25,7 @@
 
 import org.apache.beehive.controls.api.bean.ControlInterface;
 import org.apache.beehive.controls.api.properties.PropertySet;
+import org.apache.beehive.controls.api.events.EventSet;
 
 /**
  * Code-gen test for interceptors.  Note that there is currently no
@@ -34,6 +35,20 @@
 @ControlInterface
 public interface HelloIntercepted
 {
+    @EventSet
+    public interface multicastEvents
+    {
+        @SampleInterceptorAnnotation
+        public void multicastNotify(int a);
+    }
+
+    @EventSet( unicast=true )
+    public interface unicastEvents
+    {
+        @SampleInterceptorAnnotation
+        public int unicastNotify(Object b);
+    }
+
     //
     // A simple enumerated type used to customize the greeting by gender
     //