You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2016/04/24 20:38:21 UTC

[04/12] wicket git commit: WICKET-6129 let requestcycle execute scheduled and replaced handlers

WICKET-6129 let requestcycle execute scheduled and replaced handlers


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/c21edea3
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/c21edea3
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/c21edea3

Branch: refs/heads/master
Commit: c21edea380141297048001ccd03ee28a31924685
Parents: f2f0ba0
Author: Sven Meier <sv...@apache.org>
Authored: Wed Mar 23 10:46:22 2016 +0100
Committer: Sven Meier <sv...@apache.org>
Committed: Sun Apr 24 20:00:54 2016 +0200

----------------------------------------------------------------------
 .../wicket/request/cycle/RequestCycle.java      | 30 +++++++++++---------
 .../MultiRequestCycleListenerCallOrderTest.java |  4 +++
 .../wicket/request/RequestHandlerStack.java     | 19 +++----------
 3 files changed, 25 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/c21edea3/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java b/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
index cdd9cc5..f3ed05d 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
@@ -259,22 +259,26 @@ public class RequestCycle implements IRequestCycle, IEventSink
 	{
 		Args.notNull(handler, "handler");
 
-		try
-		{
-			listeners.onRequestHandlerResolved(this, handler);
-			requestHandlerExecutor.execute(handler);
-			listeners.onRequestHandlerExecuted(this, handler);
-		}
-		catch (RuntimeException e)
-		{
-			IRequestHandler replacement = requestHandlerExecutor.resolveHandler(e);
-			if (replacement != null)
+		while (handler != null) {
+			try
 			{
-				execute(replacement);
+				listeners.onRequestHandlerResolved(this, handler);
+				IRequestHandler next = requestHandlerExecutor.execute(handler);
+				listeners.onRequestHandlerExecuted(this, handler);
+				
+				handler = next;
 			}
-			else
+			catch (RuntimeException e)
 			{
-				throw e;
+				IRequestHandler replacement = requestHandlerExecutor.resolveHandler(e);
+				if (replacement != null)
+				{
+					handler = replacement;
+				}
+				else
+				{
+					throw e;
+				}
 			}
 		}
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/c21edea3/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderTest.java b/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderTest.java
index 725cbf1..ca203df 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderTest.java
@@ -119,6 +119,8 @@ public class MultiRequestCycleListenerCallOrderTest extends WicketTestCase
 			"first.onRequestHandlerResolved", "second.onRequestHandlerResolved",
 			"first.onRequestHandlerScheduled", "second.onRequestHandlerScheduled",
 			"first.onRequestHandlerExecuted", "second.onRequestHandlerExecuted",
+			"first.onRequestHandlerResolved", "second.onRequestHandlerResolved",
+			"first.onRequestHandlerExecuted", "second.onRequestHandlerExecuted", 
 			"second.onEndRequest", "first.onEndRequest", "second.onDetach", "first.onDetach");
 		List<String> redirectRequest = asList("first.onBeginRequest", "second.onBeginRequest",
 			"first.onRequestHandlerResolved", "second.onRequestHandlerResolved",
@@ -150,6 +152,8 @@ public class MultiRequestCycleListenerCallOrderTest extends WicketTestCase
 			"first.onRequestHandlerResolved", "second.onRequestHandlerResolved",
 			"first.onRequestHandlerScheduled", "second.onRequestHandlerScheduled",
 			"first.onRequestHandlerExecuted", "second.onRequestHandlerExecuted",
+			"first.onRequestHandlerResolved", "second.onRequestHandlerResolved",
+			"first.onRequestHandlerExecuted", "second.onRequestHandlerExecuted", 
 			"second.onEndRequest", "first.onEndRequest", "second.onDetach", "first.onDetach");
 
 		// with ajax requests we don't expect a redirect

http://git-wip-us.apache.org/repos/asf/wicket/blob/c21edea3/wicket-request/src/main/java/org/apache/wicket/request/RequestHandlerStack.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/RequestHandlerStack.java b/wicket-request/src/main/java/org/apache/wicket/request/RequestHandlerStack.java
index e3cbb33..6657a07 100644
--- a/wicket-request/src/main/java/org/apache/wicket/request/RequestHandlerStack.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/RequestHandlerStack.java
@@ -53,12 +53,9 @@ public abstract class RequestHandlerStack
 	/**
 	 * @param handler
 	 */
-	public void execute(final IRequestHandler handler)
+	public IRequestHandler execute(final IRequestHandler handler)
 	{
-		final boolean first = requestHandlers.isEmpty();
 		requestHandlers.add(handler);
-
-		IRequestHandler replacementHandler = null;
 		try
 		{
 			respond(handler);
@@ -73,11 +70,11 @@ public abstract class RequestHandlerStack
 				throw exception;
 			}
 
-			if (replacer.removeAll && !first)
+			if (replacer.removeAll)
 			{
+				scheduledAfterCurrent = null;
 				throw exception;
 			}
-			replacementHandler = replacer.replacementRequestHandler;
 		}
 		finally
 		{
@@ -87,15 +84,7 @@ public abstract class RequestHandlerStack
 
 		IRequestHandler scheduled = scheduledAfterCurrent;
 		scheduledAfterCurrent = null;
-
-		if (replacementHandler != null)
-		{
-			execute(replacementHandler);
-		}
-		else if (scheduled != null)
-		{
-			execute(scheduled);
-		}
+		return scheduled;
 	}
 
 	/**