You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by ni...@apache.org on 2007/09/27 21:45:06 UTC
svn commit: r580135 - in /struts/struts2/trunk/plugins/portlet/src:
main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java
test/java/org/apache/struts2/portlet/dispatcher/Jsr168DispatcherTest.java
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() {