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