You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2006/10/19 16:43:31 UTC

svn commit: r465644 - in /tapestry/tapestry5/tapestry-core/trunk/src: main/java/org/apache/tapestry/ main/java/org/apache/tapestry/internal/services/ main/java/org/apache/tapestry/internal/structure/ main/java/org/apache/tapestry/runtime/ main/java/org...

Author: hlship
Date: Thu Oct 19 07:43:30 2006
New Revision: 465644

URL: http://svn.apache.org/viewvc?view=rev&rev=465644
Log:
Move the triggerEvent() method to ComponentResources
Change the return value of triggerEvent() to indicate whether any event handler was invoked (rather than just if the event was aborted by an event handler)

Modified:
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResources.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/OnEventWorker.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElement.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/runtime/ComponentLifecycle.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TransformConstants.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/DefaultComponentLifecyle.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/OnEventWorkerTest.java

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResources.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResources.java?view=diff&rev=465644&r1=465643&r2=465644
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResources.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResources.java Thu Oct 19 07:43:30 2006
@@ -23,8 +23,6 @@
  * {@link #getComponent() component property}, and instance of a class provided by the application
  * developer (though transformed in many ways while being loaded) that is the true component. In
  * reality, it is the combination of the resources object with the lifecycle instance.
- * 
- * 
  */
 public interface ComponentResources
 {
@@ -95,4 +93,19 @@
      *            converted to a string an URI encoded
      */
     Link createActionLink(String action, boolean forForm, Object... context);
+
+    /**
+     * Triggers a component event. A search for a event handling method will occur, first in the
+     * component, then its container, and so on.
+     * 
+     * @param eventType
+     *            event type (as determined from the request, or otherwise by design)
+     * @param context
+     *            the request context (as extracted from the request)
+     * @param handler
+     *            the handler to be informed of the result
+     * @return true if any event handler was invoked (even if no event handler method returns a
+     *         non-null value)
+     */
+    boolean triggerEvent(String eventType, String[] context, ComponentEventHandler handler);
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/OnEventWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/OnEventWorker.java?view=diff&rev=465644&r1=465643&r2=465644
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/OnEventWorker.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/OnEventWorker.java Thu Oct 19 07:43:30 2006
@@ -30,8 +30,6 @@
  * Provides implementations of the
  * {@link ComponentLifecycle#handleComponentEvent(org.apache.tapestry.runtime.ComponentEvent)}
  * method, based on {@link OnEvent} annotations.
- * 
- * 
  */
 public class OnEventWorker implements ComponentClassTransformWorker
 {
@@ -47,7 +45,7 @@
         BodyBuilder builder = new BodyBuilder();
         builder.begin();
 
-        builder.addln("if ($1.isAborted()) return;");
+        builder.addln("if ($1.isAborted()) return $_;");
         builder.addln("String methodName = null;");
 
         for (MethodSignature method : methods)
@@ -97,6 +95,11 @@
 
             closeCount++;
         }
+
+        // Ensure that we return true, because *some* event handler method was invoked,
+        // even if it chose not to abort the event.
+
+        builder.addln("$_ = true;");
 
         // Several subsequent calls need to know the method name.
 

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElement.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElement.java?view=diff&rev=465644&r1=465643&r2=465644
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElement.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElement.java Thu Oct 19 07:43:30 2006
@@ -15,7 +15,6 @@
 package org.apache.tapestry.internal.structure;
 
 import org.apache.tapestry.Binding;
-import org.apache.tapestry.ComponentEventHandler;
 import org.apache.tapestry.internal.InternalComponentResources;
 import org.apache.tapestry.runtime.RenderCommand;
 import org.apache.tapestry.runtime.RenderQueue;
@@ -23,8 +22,6 @@
 /**
  * Extended version of {@link org.apache.tapestry.internal.structure.PageElement} for elements that
  * are, in fact, components (rather than just static markup).
- * 
- * 
  */
 public interface ComponentPageElement extends PageElement, InternalComponentResources,
         RenderCommand
@@ -78,19 +75,4 @@
 
     /** Invoked when the component should render its body. */
     void enqueueBeforeRenderBody(RenderQueue queue);
-
-    /**
-     * Triggers a component event. A search for a event handling method will occur, first in the
-     * component, then its container, and so on.
-     * 
-     * @param eventType
-     *            event type (as determined from the request)
-     * @param context
-     *            the request context (as extracted from the request)
-     * @param handler
-     *            the handler to be informed of the result
-     * @return true if the event was handled ("aborted", meaning a non-null result was obtained from
-     *         an event handler method)
-     */
-    boolean triggerEvent(String eventType, String[] context, ComponentEventHandler handler);
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java?view=diff&rev=465644&r1=465643&r2=465644
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java Thu Oct 19 07:43:30 2006
@@ -549,6 +549,8 @@
 
     public boolean triggerEvent(String eventType, String[] context, ComponentEventHandler handler)
     {
+        boolean result = false;
+
         ComponentEvent event = new ComponentEventImpl(eventType, _id, context, handler,
                 _typeCoercer);
 
@@ -556,17 +558,15 @@
 
         while (component != null)
         {
-            component.getComponent().handleComponentEvent(event);
+            result |= component.getComponent().handleComponentEvent(event);
 
             if (event.isAborted())
-                return true;
+                return result;
 
             component = component.getContainer();
         }
 
-        // Made it to the top and never found a handler to provide a result value.
-
-        return false;
+        return result;
     }
 
     public ComponentPageElement getEmbeddedElement(String embeddedId)

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/runtime/ComponentLifecycle.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/runtime/ComponentLifecycle.java?view=diff&rev=465644&r1=465643&r2=465644
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/runtime/ComponentLifecycle.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/runtime/ComponentLifecycle.java Thu Oct 19 07:43:30 2006
@@ -24,8 +24,6 @@
  * implemented as part of the component class transformation process.
  * <p>
  * This interface is likely to change without notice.
- * 
- * 
  */
 public interface ComponentLifecycle extends ComponentResourcesAware, PageLifecycleListener
 {
@@ -87,6 +85,7 @@
      * invoked until one returns a non-null value.
      * 
      * @param event
+     * @return true if any handler was found (and invoked), false otherwise
      */
-    void handleComponentEvent(ComponentEvent event);
+    boolean handleComponentEvent(ComponentEvent event);
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TransformConstants.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TransformConstants.java?view=diff&rev=465644&r1=465643&r2=465644
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TransformConstants.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TransformConstants.java Thu Oct 19 07:43:30 2006
@@ -40,7 +40,7 @@
      * @see org.apache.tapestry.annotations.OnEvent
      */
     public static final MethodSignature HANDLE_COMPONENT_EVENT = new MethodSignature(
-            Modifier.PUBLIC, "void", "handleComponentEvent", new String[]
+            Modifier.PUBLIC, "boolean", "handleComponentEvent", new String[]
             { ComponentEvent.class.getName() }, null);
 
     /**

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/DefaultComponentLifecyle.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/DefaultComponentLifecyle.java?view=diff&rev=465644&r1=465643&r2=465644
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/DefaultComponentLifecyle.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/bindings/DefaultComponentLifecyle.java Thu Oct 19 07:43:30 2006
@@ -67,8 +67,8 @@
     {
     }
 
-    public void handleComponentEvent(ComponentEvent event)
+    public boolean handleComponentEvent(ComponentEvent event)
     {
-
+        return false;
     }
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/OnEventWorkerTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/OnEventWorkerTest.java?view=diff&rev=465644&r1=465643&r2=465644
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/OnEventWorkerTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/OnEventWorkerTest.java Thu Oct 19 07:43:30 2006
@@ -31,14 +31,15 @@
 /**
  * I'd prefer to test these in terms of the behavior of the final class, rather than the generated
  * Javassist method bodies, but that'll have to be saved for later integration tests.
- * 
- * 
  */
 public class OnEventWorkerTest extends InternalBaseTestCase
 {
+
+    private static final String BOILERPLATE_1 = "if ($1.isAborted()) return $_;";
+
     private static final String BOILERPLATE_2 = "String methodName = null;";
 
-    private static final String BOILERPLATE_1 = "if ($1.isAborted()) return;";
+    private static final String BOILERPLATE_3 = "$_ = true;";
 
     @Test
     public void no_methods_with_annotation()
@@ -81,6 +82,7 @@
                 "{",
                 BOILERPLATE_1,
                 BOILERPLATE_2,
+                BOILERPLATE_3,
                 "methodName = \"foo.Bar.foo()\";",
                 "foo();",
                 "}");
@@ -125,6 +127,7 @@
                 BOILERPLATE_2,
                 "if ($1.matchesByEventType(_v))",
                 "{",
+                BOILERPLATE_3,
                 "methodName = \"foo.Bar.foo()\";",
                 "foo();",
                 "}",
@@ -171,6 +174,7 @@
                 BOILERPLATE_2,
                 "if ($1.matchesByComponentId(_res, _ids))",
                 "{",
+                BOILERPLATE_3,
                 "methodName = \"foo.Bar.foo()\";",
                 "foo();",
                 "}",
@@ -224,6 +228,7 @@
                 "{",
                 "if ($1.matchesByComponentId(_res, _ids))",
                 "{",
+                BOILERPLATE_3,
                 "methodName = \"foo.Bar.foo()\";",
                 "foo();",
                 "}",
@@ -264,6 +269,7 @@
                 "{",
                 BOILERPLATE_1,
                 BOILERPLATE_2,
+                BOILERPLATE_3,
                 "methodName = \"foo.Bar.foo()\";",
                 "if ($1.storeResult(foo(), methodName) return;",
                 "}");
@@ -302,6 +308,7 @@
                 "{",
                 BOILERPLATE_1,
                 BOILERPLATE_2,
+                BOILERPLATE_3,
                 "methodName = \"foo.Bar.foo(java.lang.String)\";",
                 "foo($1.coerceContext(0, \"java.lang.String\", methodName));",
                 "}");
@@ -340,6 +347,7 @@
                 "{",
                 BOILERPLATE_1,
                 BOILERPLATE_2,
+                BOILERPLATE_3,
                 "methodName = \"foo.Bar.foo(boolean)\";",
                 "foo(((java.lang.Boolean)$1.coerceContext(0, \"java.lang.Boolean\", methodName)).booleanValue());",
                 "}");
@@ -379,6 +387,7 @@
                 "{",
                 BOILERPLATE_1,
                 BOILERPLATE_2,
+                BOILERPLATE_3,
                 "methodName = \"foo.Bar.foo(java.lang.String, java.lang.Integer)\";",
                 "foo($1.coerceContext(0, \"java.lang.String\", methodName), ",
                 "$1.coerceContext(1, \"java.lang.Integer\", methodName));",