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 @@
* [EMAIL PROTECTED] #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
* [EMAIL PROTECTED]
ComponentLifecycle#handleComponentEvent(org.apache.tapestry.runtime.ComponentEvent)}
* method, based on [EMAIL PROTECTED] 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 [EMAIL PROTECTED]
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));",