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() {


Reply via email to