Author: nilsga Date: Sat Aug 11 13:20:33 2007 New Revision: 564967 URL: http://svn.apache.org/viewvc?view=rev&rev=564967 Log: WW-1713 Consider "method" tag attribute when creating urls
Modified: struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java Modified: struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java?view=diff&rev=564967&r1=564966&r2=564967 ============================================================================== --- struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java (original) +++ struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java Sat Aug 11 13:20:33 2007 @@ -50,7 +50,7 @@ String result; if (urlComponent.value == null && urlComponent.action != null) { - result = PortletUrlHelper.buildUrl(urlComponent.action, urlComponent.namespace, urlComponent.parameters, urlComponent.portletUrlType, urlComponent.portletMode, urlComponent.windowState); + result = PortletUrlHelper.buildUrl(urlComponent.action, urlComponent.namespace, urlComponent.method, urlComponent.parameters, urlComponent.portletUrlType, urlComponent.portletMode, urlComponent.windowState); } else { result = PortletUrlHelper.buildResourceUrl(urlComponent.value, urlComponent.parameters); } @@ -91,7 +91,7 @@ } } if (action != null) { - String result = PortletUrlHelper.buildUrl(action, formComponent.namespace, + String result = PortletUrlHelper.buildUrl(action, formComponent.namespace, null, formComponent.getParameters(), type, formComponent.portletMode, formComponent.windowState); formComponent.addParameter("action", result); Modified: struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java?view=diff&rev=564967&r1=564966&r2=564967 ============================================================================== --- struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java (original) +++ struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java Sat Aug 11 13:20:33 2007 @@ -59,15 +59,16 @@ * * @param action The action the URL should invoke. * @param namespace The namespace of the action to invoke. + * @param method The method of the action to invoke. * @param params The parameters of the URL. * @param type The type of the url, either <tt>action</tt> or <tt>render</tt> * @param mode The PortletMode of the URL. * @param state The WindowState of the URL. * @return The URL String. */ - public static String buildUrl(String action, String namespace, Map params, + public static String buildUrl(String action, String namespace, String method, Map params, String type, String mode, String state) { - return buildUrl(action, namespace, params, null, type, mode, state, + return buildUrl(action, namespace, method, params, null, type, mode, state, true, true); } @@ -76,9 +77,10 @@ * * @see #buildUrl(String, String, Map, String, String, String) */ - public static String buildUrl(String action, String namespace, Map params, + public static String buildUrl(String action, String namespace, String method, Map params, String scheme, String type, String portletMode, String windowState, boolean includeContext, boolean encodeResult) { + StringBuffer resultingAction = new StringBuffer(); RenderRequest request = PortletActionContext.getRenderRequest(); RenderResponse response = PortletActionContext.getRenderResponse(); LOG.debug("Creating url. Action = " + action + ", Namespace = " @@ -102,15 +104,17 @@ } } if (TextUtils.stringSet(namespace)) { - StringBuffer sb = new StringBuffer(); - sb.append(namespace); + resultingAction.append(namespace); if(!action.startsWith("/") && !namespace.endsWith("/")) { - sb.append("/"); + resultingAction.append("/"); } - action = sb.append(action).toString(); + resultingAction.append(action); LOG.debug("Resulting actionPath: " + action); } - params.put(PortletActionConstants.ACTION_PARAM, new String[] { action }); + if(TextUtils.stringSet(method)) { + resultingAction.append("!").append(method); + } + params.put(PortletActionConstants.ACTION_PARAM, new String[] { resultingAction.toString() }); PortletURL url = null; if ("action".equalsIgnoreCase(type)) { Modified: struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java?view=diff&rev=564967&r1=564966&r2=564967 ============================================================================== --- struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java (original) +++ struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java Sat Aug 11 13:20:33 2007 @@ -95,7 +95,7 @@ renderRequestControl.replay(); renderResponseControl.replay(); portletUrlControl.replay(); - PortletUrlHelper.buildUrl("testAction", null, + PortletUrlHelper.buildUrl("testAction", null, null, new HashMap(), null, null, null); portletUrlControl.verify(); renderRequestControl.verify(); @@ -113,7 +113,7 @@ renderRequestControl.replay(); renderResponseControl.replay(); portletUrlControl.replay(); - PortletUrlHelper.buildUrl("testAction", null, + PortletUrlHelper.buildUrl("testAction", null, null, new HashMap(), null, "edit", null); portletUrlControl.verify(); renderRequestControl.verify(); @@ -131,7 +131,7 @@ renderRequestControl.replay(); renderResponseControl.replay(); portletUrlControl.replay(); - PortletUrlHelper.buildUrl("testAction", null, + PortletUrlHelper.buildUrl("testAction", null, null, new HashMap(), null, null, "maximized"); portletUrlControl.verify(); renderRequestControl.verify(); @@ -149,7 +149,7 @@ renderRequestControl.replay(); renderResponseControl.replay(); portletUrlControl.replay(); - PortletUrlHelper.buildUrl("testAction", null, + PortletUrlHelper.buildUrl("testAction", null, null, new HashMap(), "action", null, null); portletUrlControl.verify(); renderRequestControl.verify(); Modified: struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java?view=diff&rev=564967&r1=564966&r2=564967 ============================================================================== --- struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java (original) +++ struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java Sat Aug 11 13:20:33 2007 @@ -306,6 +306,23 @@ mockJspWriter.verify(); } + public void testUrlWithMethod() throws Exception { + PortletMode mode = PortletMode.VIEW; + mockHttpReq.stubs().method("getQueryString").will(returnValue("")); + mockPortletRes.expects(once()).method("createRenderURL").will( + returnValue((PortletURL) mockPortletUrl.proxy())); + tag.setAction("testAction"); + Map paramMap = new HashMap(); + paramMap.put(PortletActionConstants.ACTION_PARAM, new String[]{"/view/testAction!input"}); + paramMap.put(PortletActionConstants.MODE_PARAM, new String[]{mode.toString()}); + mockPortletUrl.expects(once()).method("setParameters").with(new ParamMapConstraint(paramMap)); + mockPortletUrl.expects(once()).method("setPortletMode").with(eq(PortletMode.VIEW)); + mockPortletUrl.expects(once()).method("setWindowState").with(eq(WindowState.NORMAL)); + tag.setMethod("input"); + tag.doStartTag(); + tag.doEndTag(); + } + private static class ParamMapConstraint implements Constraint { private Map myExpectedMap = null; @@ -353,7 +370,17 @@ * @see org.jmock.core.SelfDescribing#describeTo(java.lang.StringBuffer) */ public StringBuffer describeTo(StringBuffer sb) { - return sb.append(myExpectedMap); + Iterator<String> it = myExpectedMap.keySet().iterator(); + while(it.hasNext()) { + String key = it.next(); + sb.append(key).append("="); + String[] value = (String[])myExpectedMap.get(key); + sb.append(value[0]); + if(it.hasNext()) { + sb.append(", "); + } + } + return sb; }