From 3137ad2fcdd71981527740708af4c3ed30d84305 Mon Sep 17 00:00:00 2001 From: Keith Donald Date: Mon, 6 Apr 2009 16:23:41 +0000 Subject: [PATCH] polish --- .../context/portlet/PortletExternalContext.java | 10 ++++++++++ .../context/servlet/ServletExternalContext.java | 10 ++++++++++ .../webflow/test/MockExternalContext.java | 16 +++++++++++++--- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/spring-webflow/src/main/java/org/springframework/webflow/context/portlet/PortletExternalContext.java b/spring-webflow/src/main/java/org/springframework/webflow/context/portlet/PortletExternalContext.java index 3e66a321..7ad674f2 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/context/portlet/PortletExternalContext.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/context/portlet/PortletExternalContext.java @@ -238,6 +238,7 @@ public class PortletExternalContext implements ExternalContext { if (isRenderPhase()) { throw new IllegalStateException("Redirects are not allowed durring the portlet render phase"); } + assertResponseNotAlreadyCompleted(); flowExecutionRedirectRequested = true; recordResponseComplete(); } @@ -246,6 +247,7 @@ public class PortletExternalContext implements ExternalContext { if (isRenderPhase()) { throw new IllegalStateException("Redirects are not allowed durring the portlet render phase"); } + assertResponseNotAlreadyCompleted(); flowDefinitionRedirectFlowId = flowId; flowDefinitionRedirectFlowInput = input; recordResponseComplete(); @@ -255,6 +257,7 @@ public class PortletExternalContext implements ExternalContext { if (isRenderPhase()) { throw new IllegalStateException("Redirects are not allowed durring the portlet render phase"); } + assertResponseNotAlreadyCompleted(); externalRedirectUrl = uri; recordResponseComplete(); } @@ -359,4 +362,11 @@ public class PortletExternalContext implements ExternalContext { } } + private void assertResponseNotAlreadyCompleted() { + if (responseComplete) { + throw new IllegalStateException( + "The ExternalContext response has already been completed; this would have been done with a previous call to recordResponseComplete, requestFlowExecutionRedirect, requestFlowDefinitionRedirect, or requestExternalRedirect"); + } + } + } diff --git a/spring-webflow/src/main/java/org/springframework/webflow/context/servlet/ServletExternalContext.java b/spring-webflow/src/main/java/org/springframework/webflow/context/servlet/ServletExternalContext.java index 0505b11f..7e3b4bda 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/context/servlet/ServletExternalContext.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/context/servlet/ServletExternalContext.java @@ -228,16 +228,19 @@ public class ServletExternalContext implements ExternalContext { } public void requestFlowExecutionRedirect() { + assertResponseNotAlreadyCompleted(); flowExecutionRedirectRequested = true; recordResponseComplete(); } public void requestExternalRedirect(String location) { + assertResponseNotAlreadyCompleted(); externalRedirectUrl = location; recordResponseComplete(); } public void requestFlowDefinitionRedirect(String flowId, MutableAttributeMap input) { + assertResponseNotAlreadyCompleted(); flowDefinitionRedirectFlowId = flowId; flowDefinitionRedirectFlowInput = input; recordResponseComplete(); @@ -349,4 +352,11 @@ public class ServletExternalContext implements ExternalContext { this.flowUrlHandler = flowUrlHandler; } + private void assertResponseNotAlreadyCompleted() { + if (responseComplete) { + throw new IllegalStateException( + "The ExternalContext response has already been completed; this would have been done with a previous call to recordResponseComplete, requestFlowExecutionRedirect, requestFlowDefinitionRedirect, or requestExternalRedirect"); + } + } + } \ No newline at end of file diff --git a/spring-webflow/src/main/java/org/springframework/webflow/test/MockExternalContext.java b/spring-webflow/src/main/java/org/springframework/webflow/test/MockExternalContext.java index 1634ac64..a985975a 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/test/MockExternalContext.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/test/MockExternalContext.java @@ -63,7 +63,7 @@ public class MockExternalContext implements ExternalContext { private boolean ajaxRequest; - private boolean responseCompleted; + private boolean responseComplete; private boolean flowExecutionRedirectRequested; @@ -155,25 +155,28 @@ public class MockExternalContext implements ExternalContext { } public boolean isResponseComplete() { - return responseCompleted; + return responseComplete; } public void recordResponseComplete() throws IllegalStateException { - responseCompleted = true; + responseComplete = true; } public void requestFlowExecutionRedirect() { + assertResponseNotAlreadyCompleted(); flowExecutionRedirectRequested = true; recordResponseComplete(); } public void requestFlowDefinitionRedirect(String flowId, MutableAttributeMap input) { + assertResponseNotAlreadyCompleted(); flowDefinitionRedirectFlowId = flowId; flowDefinitionRedirectFlowInput = input; recordResponseComplete(); } public void requestExternalRedirect(String uri) { + assertResponseNotAlreadyCompleted(); externalRedirectUrl = uri; recordResponseComplete(); } @@ -397,6 +400,13 @@ public class MockExternalContext implements ExternalContext { return redirectInPopup; } + private void assertResponseNotAlreadyCompleted() { + if (responseComplete) { + throw new IllegalStateException( + "The ExternalContext response has already been completed; this would have been done with a previous call to recordResponseComplete, requestFlowExecutionRedirect, requestFlowDefinitionRedirect, or requestExternalRedirect"); + } + } + private class MockPrincipal implements Principal { private String name;