Author: nilsga Date: Thu Sep 27 12:45:06 2007 New Revision: 580135 URL: http://svn.apache.org/viewvc?rev=580135&view=rev Log: WW-2212 Added support for ! character in default action configuration
Modified: struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr168DispatcherTest.java Modified: struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java?rev=580135&r1=580134&r2=580135&view=diff ============================================================================== --- struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java (original) +++ struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java Thu Sep 27 12:45:06 2007 @@ -201,21 +201,21 @@ } portletNamespace = cfg.getInitParameter("portletNamespace"); LOG.debug("PortletNamespace: " + portletNamespace); - parseModeConfig(cfg, PortletMode.VIEW, "viewNamespace", + parseModeConfig(actionMap, cfg, PortletMode.VIEW, "viewNamespace", "defaultViewAction"); - parseModeConfig(cfg, PortletMode.EDIT, "editNamespace", + parseModeConfig(actionMap, cfg, PortletMode.EDIT, "editNamespace", "defaultEditAction"); - parseModeConfig(cfg, PortletMode.HELP, "helpNamespace", + parseModeConfig(actionMap, cfg, PortletMode.HELP, "helpNamespace", "defaultHelpAction"); - parseModeConfig(cfg, new PortletMode("config"), "configNamespace", + parseModeConfig(actionMap, cfg, new PortletMode("config"), "configNamespace", "defaultConfigAction"); - parseModeConfig(cfg, new PortletMode("about"), "aboutNamespace", + parseModeConfig(actionMap, cfg, new PortletMode("about"), "aboutNamespace", "defaultAboutAction"); - parseModeConfig(cfg, new PortletMode("print"), "printNamespace", + parseModeConfig(actionMap, cfg, new PortletMode("print"), "printNamespace", "defaultPrintAction"); - parseModeConfig(cfg, new PortletMode("preview"), "previewNamespace", + parseModeConfig(actionMap, cfg, new PortletMode("preview"), "previewNamespace", "defaultPreviewAction"); - parseModeConfig(cfg, new PortletMode("edit_defaults"), + parseModeConfig(actionMap, cfg, new PortletMode("edit_defaults"), "editDefaultsNamespace", "defaultEditDefaultsAction"); if (!TextUtils.stringSet(portletNamespace)) { portletNamespace = ""; @@ -234,14 +234,15 @@ /** * Parse the mode to namespace mappings configured in portlet.xml - * @param portletConfig The PortletConfig - * @param portletMode The PortletMode + * @param actionMap The map with mode <-> default action mapping. + * @param portletConfig The PortletConfig. + * @param portletMode The PortletMode. * @param nameSpaceParam Name of the init parameter where the namespace for the mode * is configured. * @param defaultActionParam Name of the init parameter where the default action to * execute for the mode is configured. */ - private void parseModeConfig(PortletConfig portletConfig, + void parseModeConfig(Map<PortletMode, ActionMapping> actionMap, PortletConfig portletConfig, PortletMode portletMode, String nameSpaceParam, String defaultActionParam) { String namespace = portletConfig.getInitParameter(nameSpaceParam); @@ -251,9 +252,14 @@ modeMap.put(portletMode, namespace); String defaultAction = portletConfig .getInitParameter(defaultActionParam); + String method = null; if (!TextUtils.stringSet(defaultAction)) { defaultAction = DEFAULT_ACTION_NAME; } + if(defaultAction.indexOf('!') >= 0) { + method = defaultAction.substring(defaultAction.indexOf('!') + 1); + defaultAction = defaultAction.substring(0, defaultAction.indexOf('!')); + } StringBuffer fullPath = new StringBuffer(); if (TextUtils.stringSet(portletNamespace)) { fullPath.append(portletNamespace); @@ -267,6 +273,9 @@ ActionMapping mapping = new ActionMapping(); mapping.setName(getActionName(fullPath.toString())); mapping.setNamespace(getNamespace(fullPath.toString())); + if(method != null) { + mapping.setMethod(method); + } actionMap.put(portletMode, mapping); } Modified: struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr168DispatcherTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr168DispatcherTest.java?rev=580135&r1=580134&r2=580135&view=diff ============================================================================== --- struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr168DispatcherTest.java (original) +++ struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/portlet/dispatcher/Jsr168DispatcherTest.java Thu Sep 27 12:45:06 2007 @@ -43,11 +43,14 @@ import org.apache.struts2.StrutsConstants; import org.apache.struts2.dispatcher.mapper.ActionMapper; +import org.apache.struts2.dispatcher.mapper.ActionMapping; import org.apache.struts2.portlet.PortletActionConstants; import org.easymock.EasyMock; import org.jmock.Mock; import org.jmock.cglib.MockObjectTestCase; import org.jmock.core.Constraint; +import org.springframework.mock.web.portlet.MockPortletConfig; +import org.springframework.mock.web.portlet.MockPortletContext; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionInvocation; @@ -111,6 +114,23 @@ mockActionProxy.expects(once()).method("setMethod"); mockInvocation.stubs().method("getStack").will(returnValue(stack)); + } + + public void testParseConfigWithBang() { + MockPortletContext portletContext = new MockPortletContext(); + MockPortletConfig portletConfig = new MockPortletConfig(portletContext); + + portletConfig.addInitParameter("viewNamespace", "/view"); + portletConfig.addInitParameter("defaultViewAction", "index!input"); + + Map<PortletMode, ActionMapping> actionMap = new HashMap<PortletMode, ActionMapping>(); + + dispatcher.parseModeConfig(actionMap, portletConfig, PortletMode.VIEW, "viewNamespace", "defaultViewAction"); + + ActionMapping mapping = actionMap.get(PortletMode.VIEW); + assertEquals("index", mapping.getName()); + assertEquals("/view", mapping.getNamespace()); + assertEquals("input", mapping.getMethod()); } public void testRender_ok() {