You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2011/03/15 23:07:16 UTC

svn commit: r1081961 - in /wicket/trunk/wicket-core/src: main/java/org/apache/wicket/ComponentEventSender.java test/java/org/apache/wicket/EventDispatcherTest.java

Author: mgrigorov
Date: Tue Mar 15 22:07:16 2011
New Revision: 1081961

URL: http://svn.apache.org/viewvc?rev=1081961&view=rev
Log:
WICKET-3516 Add behaviors to the event processing chain

Notify component's behaviors as well if they implement IEventSink.


Modified:
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ComponentEventSender.java
    wicket/trunk/wicket-core/src/test/java/org/apache/wicket/EventDispatcherTest.java

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ComponentEventSender.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ComponentEventSender.java?rev=1081961&r1=1081960&r2=1081961&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ComponentEventSender.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ComponentEventSender.java Tue Mar 15 22:07:16 2011
@@ -16,6 +16,9 @@
  */
 package org.apache.wicket;
 
+import java.util.List;
+
+import org.apache.wicket.behavior.Behavior;
 import org.apache.wicket.event.Broadcast;
 import org.apache.wicket.event.IEventSink;
 import org.apache.wicket.event.IEventSource;
@@ -277,6 +280,22 @@ final class ComponentEventSender impleme
 				visit.stop();
 			}
 
+			List<? extends Behavior> behaviors = object.getBehaviors();
+			for (Behavior behavior : behaviors)
+			{
+				if (behavior instanceof IEventSink)
+				{
+					IEventSink behaviorSink = (IEventSink)behavior;
+					dispatcher.dispatchEvent(behaviorSink, e);
+					if (e.isStop())
+					{
+						visit.stop();
+						break;
+					}
+				}
+			}
+
+
 			if (e.isShallow())
 			{
 				visit.dontGoDeeper();

Modified: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/EventDispatcherTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/EventDispatcherTest.java?rev=1081961&r1=1081960&r2=1081961&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/EventDispatcherTest.java (original)
+++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/EventDispatcherTest.java Tue Mar 15 22:07:16 2011
@@ -22,6 +22,7 @@ import java.lang.annotation.RetentionPol
 import java.lang.annotation.Target;
 import java.lang.reflect.Method;
 
+import org.apache.wicket.behavior.Behavior;
 import org.apache.wicket.event.Broadcast;
 import org.apache.wicket.event.IEvent;
 import org.apache.wicket.event.IEventSink;
@@ -45,11 +46,12 @@ public class EventDispatcherTest extends
 		page.add(testComponent);
 		page.send(page, Broadcast.DEPTH, null);
 		assertTrue(testComponent.callbackInvoked);
+		assertEquals(testComponent.getBehaviors(TestBehavior.class).get(0).invokationTimes, 2);
 	}
 
 	@Retention(RetentionPolicy.RUNTIME)
 	@Target(ElementType.METHOD)
-	@interface EvenCallback {
+	@interface EventCallback {
 
 	}
 
@@ -61,7 +63,7 @@ public class EventDispatcherTest extends
 			Method[] sinkMethods = sink.getClass().getMethods();
 			for (int i = 0; i < sinkMethods.length; i++)
 			{
-				if (sinkMethods[i].isAnnotationPresent(EvenCallback.class))
+				if (sinkMethods[i].isAnnotationPresent(EventCallback.class))
 				{
 					try
 					{
@@ -88,14 +90,35 @@ public class EventDispatcherTest extends
 		public TestComponent(String id)
 		{
 			super(id);
+
+			add(new TestBehavior());
 		}
 
 		/** */
-		@EvenCallback
+		@EventCallback
 		public void testCallback()
 		{
 			callbackInvoked = true;
 		}
 	}
 
+	private static class TestBehavior extends Behavior implements IEventSink
+	{
+
+		private static final long serialVersionUID = 1;
+
+		int invokationTimes = 0;
+
+		public void onEvent(IEvent<?> event)
+		{
+			invokationTimes++;
+		}
+
+		@EventCallback
+		public void testCallback()
+		{
+			invokationTimes++;
+		}
+	}
+
 }