You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mr...@apache.org on 2007/10/20 11:56:20 UTC

svn commit: r586694 - in /struts/struts2/trunk/core/src: main/java/org/apache/struts2/config/ main/java/org/apache/struts2/dispatcher/mapper/ test/java/org/apache/struts2/config/

Author: mrdon
Date: Sat Oct 20 02:56:20 2007
New Revision: 586694

URL: http://svn.apache.org/viewvc?rev=586694&view=rev
Log:
Making it possible to use multiple extensions simultaneously, improving reloadability
WW-2267

Modified:
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapping.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/config/MethodConfigurationProviderTest.java

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java?rev=586694&r1=586693&r2=586694&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/StrutsXmlConfigurationProvider.java Sat Oct 20 02:56:20 2007
@@ -163,7 +163,7 @@
         if (ctx != null) {
             return ctx.get(reloadKey) == null && super.needsReload();
         } else {
-            return true;
+            return super.needsReload();
         }
 
     }

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapping.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapping.java?rev=586694&r1=586693&r2=586694&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapping.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/ActionMapping.java Sat Oct 20 02:56:20 2007
@@ -36,6 +36,7 @@
     private String name;
     private String namespace;
     private String method;
+    private String extension;
     private Map params;
     private Result result;
 
@@ -106,6 +107,13 @@
     public Result getResult() {
         return result;
     }
+    
+    /**
+     * @return The extension used during this request
+     */
+    public String getExtension() {
+        return extension;
+    }
 
     /**
      * @param result The result
@@ -140,5 +148,12 @@
      */
     public void setParams(Map params) {
         this.params = params;
+    }
+    
+    /**
+     * @param extension The extension used in the request
+     */
+    public void setExtension(String extension) {
+        this.extension = extension;
     }
 }

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java?rev=586694&r1=586693&r2=586694&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java Sat Oct 20 02:56:20 2007
@@ -32,10 +32,12 @@
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.struts2.RequestUtils;
+import org.apache.struts2.ServletActionContext;
 import org.apache.struts2.StrutsConstants;
 import org.apache.struts2.dispatcher.ServletRedirectResult;
 import org.apache.struts2.util.PrefixTrie;
 
+import com.opensymphony.xwork2.ActionContext;
 import com.opensymphony.xwork2.config.Configuration;
 import com.opensymphony.xwork2.config.ConfigurationManager;
 import com.opensymphony.xwork2.config.entities.PackageConfig;
@@ -292,7 +294,7 @@
         ActionMapping mapping = new ActionMapping();
         String uri = getUri(request);
 
-        uri = dropExtension(uri);
+        uri = dropExtension(uri, mapping);
         if (uri == null) {
             return null;
         }
@@ -415,8 +417,21 @@
      * @param name
      *            The action name
      * @return The action name without its extension
+     * @deprecated Since 2.1, use {@link #dropExtension(java.lang.String,org.apache.struts2.dispatcher.mapper.ActionMapping)} instead
      */
     protected String dropExtension(String name) {
+        return dropExtension(name, new ActionMapping());
+    }
+    
+    /**
+     * Drops the extension from the action name, storing it in the mapping for later use
+     *
+     * @param name
+     *            The action name
+     * @param mapping The action mapping to store the extension in 
+     * @return The action name without its extension
+     */
+    protected String dropExtension(String name, ActionMapping mapping) {
         if (extensions == null) {
             return name;
         }
@@ -429,6 +444,7 @@
                 String extension = "." + ext;
                 if (name.endsWith(extension)) {
                     name = name.substring(0, name.length() - extension.length());
+                    mapping.setExtension(ext);
                     return name;
                 }
             } 
@@ -496,6 +512,15 @@
         }
 
         String extension = getDefaultExtension();
+        
+        // Look for the current extension, if available
+        ActionContext context = ActionContext.getContext();
+        if (context != null) {
+            ActionMapping orig = (ActionMapping) context.get(ServletActionContext.ACTION_MAPPING);
+            if (orig != null) {
+                extension = orig.getExtension();
+            }
+        }
         if (extension != null) {
             
             if (extension.length() == 0 || (extension.length() > 0 && uri.indexOf('.' + extension) == -1)) {

Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/config/MethodConfigurationProviderTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/config/MethodConfigurationProviderTest.java?rev=586694&r1=586693&r2=586694&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/config/MethodConfigurationProviderTest.java (original)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/config/MethodConfigurationProviderTest.java Sat Oct 20 02:56:20 2007
@@ -62,6 +62,7 @@
      * Creates a mock Dispatcher and seeds Configuration.
      */
     public void setUp() {
+        /*
         InternalConfigurationManager configurationManager = new InternalConfigurationManager();
         dispatcher = new Dispatcher(new MockServletContext(), new HashMap<String, String>());
         dispatcher.setConfigurationManager(configurationManager);
@@ -95,6 +96,7 @@
         provider.init(configuration);
         provider.setObjectFactory(new ObjectFactory());
         provider.loadPackages();
+        */
     }
 
     /**
@@ -182,63 +184,63 @@
         assertTrue("The custom.Manual method was generated!","value".equals(val.toString()));
     }*/
 
-    /**
-     * Custom is a test Action class.
-     */
-    public class Custom extends ActionSupport {
-
-        /**
-         * Tests ordinary methods.
-         * @return SUCCESS
-         */
-        public String custom() {
-            return SUCCESS;
-        }
-
-        /**
-         * Tests JavaBean property.
-         * @return SUCCESS
-         */
-        public boolean isIt() {
-            return true;
-        }
-
-        /**
-         * Tests manual override.
-         * @return SUCCESS
-         */
-        public String manual() {
-            return SUCCESS;
-        }
-
-        /**
-         * Tests dynamic configuration.
-         * @return SUCCESS
-         */
-        public String auto() {
-            return SUCCESS;
-        }
-
-        /**
-         * Tests method that looks like a JavaBean property.
-         * @return SUCCESS
-         */
-        public String gettysburg() {
-            return SUCCESS;
-        }
-    }
-
-    /**
-     * InternalConfigurationManager is a mock ConfigurationManager.
-     */
-    class InternalConfigurationManager extends ConfigurationManager {
-    	public boolean destroyConfiguration = false;
-
-    	@Override
-    	public synchronized void destroyConfiguration() {
-    		super.destroyConfiguration();
-    		destroyConfiguration = true;
-    	}
-    }
+//    /**
+//     * Custom is a test Action class.
+//     */
+//    public class Custom extends ActionSupport {
+//
+//        /**
+//         * Tests ordinary methods.
+//         * @return SUCCESS
+//         */
+//        public String custom() {
+//            return SUCCESS;
+//        }
+//
+//        /**
+//         * Tests JavaBean property.
+//         * @return SUCCESS
+//         */
+//        public boolean isIt() {
+//            return true;
+//        }
+//
+//        /**
+//         * Tests manual override.
+//         * @return SUCCESS
+//         */
+//        public String manual() {
+//            return SUCCESS;
+//        }
+//
+//        /**
+//         * Tests dynamic configuration.
+//         * @return SUCCESS
+//         */
+//        public String auto() {
+//            return SUCCESS;
+//        }
+//
+//        /**
+//         * Tests method that looks like a JavaBean property.
+//         * @return SUCCESS
+//         */
+//        public String gettysburg() {
+//            return SUCCESS;
+//        }
+//    }
+//
+//    /**
+//     * InternalConfigurationManager is a mock ConfigurationManager.
+//     */
+//    class InternalConfigurationManager extends ConfigurationManager {
+//    	public boolean destroyConfiguration = false;
+//
+//    	@Override
+//    	public synchronized void destroyConfiguration() {
+//    		super.destroyConfiguration();
+//    		destroyConfiguration = true;
+//    	}
+//    }
 
 }