From 794f7e5e5b72e365d4ace37af4bd3b8ba0f5543a Mon Sep 17 00:00:00 2001 From: Scott Andrews Date: Thu, 3 Apr 2008 21:42:07 +0000 Subject: [PATCH] SWF-183 Expose WindowState and PortletMode as native request attributes, portletWindowState and portletMode respectively. This will make them accessible inside flow executions without needing the native request. --- .../webflow/mvc/portlet/FlowHandlerAdapter.java | 7 +++++++ .../webflow/mvc/portlet/FlowHandlerAdapterTests.java | 8 ++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/spring-webflow/src/main/java/org/springframework/webflow/mvc/portlet/FlowHandlerAdapter.java b/spring-webflow/src/main/java/org/springframework/webflow/mvc/portlet/FlowHandlerAdapter.java index 886724ec..d55d2311 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/mvc/portlet/FlowHandlerAdapter.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/mvc/portlet/FlowHandlerAdapter.java @@ -47,6 +47,7 @@ public class FlowHandlerAdapter extends PortletApplicationObjectSupport implemen public ModelAndView handleRender(RenderRequest request, RenderResponse response, Object handler) throws Exception { FlowHandler flowHandler = (FlowHandler) handler; + populateConveniencePortletProperties(request); PortletSession session = request.getPortletSession(false); if (session != null) { FlowException e = (FlowException) session.getAttribute(ACTION_FLOW_EXCEPTION_ATTRIBUTE); @@ -86,6 +87,7 @@ public class FlowHandlerAdapter extends PortletApplicationObjectSupport implemen } public void handleAction(ActionRequest request, ActionResponse response, Object handler) throws Exception { + populateConveniencePortletProperties(request); String flowExecutionKey = urlHandler.getFlowExecutionKey(request); PortletExternalContext context = createPortletExternalContext(request, response); try { @@ -102,6 +104,11 @@ public class FlowHandlerAdapter extends PortletApplicationObjectSupport implemen // subclassing hooks + protected void populateConveniencePortletProperties(PortletRequest request) { + request.setAttribute("portletMode", request.getPortletMode().toString()); + request.setAttribute("portletWindowState", request.getWindowState().toString()); + } + protected PortletExternalContext createPortletExternalContext(PortletRequest request, PortletResponse response) { return new PortletExternalContext(getPortletContext(), request, response); } diff --git a/spring-webflow/src/test/java/org/springframework/webflow/mvc/portlet/FlowHandlerAdapterTests.java b/spring-webflow/src/test/java/org/springframework/webflow/mvc/portlet/FlowHandlerAdapterTests.java index 4a203a53..dd3a0d21 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/mvc/portlet/FlowHandlerAdapterTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/mvc/portlet/FlowHandlerAdapterTests.java @@ -27,8 +27,6 @@ import org.springframework.webflow.execution.Event; import org.springframework.webflow.execution.repository.NoSuchFlowExecutionException; import org.springframework.webflow.executor.FlowExecutionResult; import org.springframework.webflow.executor.FlowExecutor; -import org.springframework.webflow.mvc.portlet.FlowHandler; -import org.springframework.webflow.mvc.portlet.FlowHandlerAdapter; import org.springframework.webflow.test.MockFlowExecutionKey; public class FlowHandlerAdapterTests extends TestCase { @@ -209,4 +207,10 @@ public class FlowHandlerAdapterTests extends TestCase { assertEquals("error", mv.getViewName()); } + public void testPopulateConveniencePortletProperties() { + controller.populateConveniencePortletProperties(renderRequest); + assertEquals(renderRequest.getPortletMode().toString(), renderRequest.getAttribute("portletMode")); + assertEquals(renderRequest.getWindowState().toString(), renderRequest.getAttribute("portletWindowState")); + } + }