You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2012/03/31 23:22:05 UTC

svn commit: r1307906 - in /struts/struts2/trunk/core/src: main/java/org/apache/struts2/components/ main/java/org/apache/struts2/config/ main/java/org/apache/struts2/views/util/ test/java/org/apache/struts2/views/util/

Author: lukaszlenart
Date: Sat Mar 31 21:22:04 2012
New Revision: 1307906

URL: http://svn.apache.org/viewvc?rev=1307906&view=rev
Log:
WW-3779 adds description of missing extension points and removes some code duplications

Modified:
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/DefaultUrlHelper.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/util/DefaultUrlHelperTest.java

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java?rev=1307906&r1=1307905&r2=1307906&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java Sat Mar 31 21:22:04 2012
@@ -270,7 +270,7 @@ public class ServletUrlRenderer implemen
     }
     private void includeGetParameters(UrlProvider urlComponent) {
     	String query = extractQueryString(urlComponent);
-    	mergeRequestParameters(urlComponent.getValue(), urlComponent.getParameters(), urlHelper.parseQueryString(query));
+    	mergeRequestParameters(urlComponent.getValue(), urlComponent.getParameters(), urlHelper.parseQueryString(query, false));
     }
 
     private String extractQueryString(UrlProvider urlComponent) {
@@ -318,7 +318,7 @@ public class ServletUrlRenderer implemen
         if (value != null && value.trim().length() > 0 && value.indexOf("?") > 0) {
             String queryString = value.substring(value.indexOf("?")+1);
 
-            mergedParams = urlHelper.parseQueryString(queryString);
+            mergedParams = urlHelper.parseQueryString(queryString, false);
             for (Map.Entry<String, Object> entry : contextParameters.entrySet()) {
                 if (!mergedParams.containsKey(entry.getKey())) {
                     mergedParams.put(entry.getKey(), entry.getValue());

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java?rev=1307906&r1=1307905&r2=1307906&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java Sat Mar 31 21:22:04 2012
@@ -159,6 +159,36 @@ import java.util.StringTokenizer;
  *     <td>singleton</td>
  *     <td>Loads static resources (since 2.1)</td>
  *   </tr>
+ *   <tr>
+ *     <td>com.opensymphony.xwork2.conversion.impl.XWorkConverter</td>
+ *     <td>struts.xworkConverter</td>
+ *     <td>singleton</td>
+ *     <td>Handles conversion logic and allows to load custom converters per class or per action</td>
+ *   </tr>
+ *   <tr>
+ *     <td>com.opensymphony.xwork2.TextProvider</td>
+ *     <td>struts.xworkTextProvider</td>
+ *     <td>default</td>
+ *     <td>Allows provide custom TextProvider for whole application</td>
+ *   </tr>
+ *   <tr>
+ *     <td>org.apache.struts2.components.UrlRenderer</td>
+ *     <td>struts.urlRenderer</td>
+ *     <td>singleton</td>
+ *     <td>Allows provide custom implementation of environment specific URL rendering/creating class</td>
+ *   </tr>
+ *   <tr>
+ *     <td>com.opensymphony.xwork2.UnknownHandlerManager</td>
+ *     <td>struts.unknownHandlerManager</td>
+ *     <td>singleton</td>
+ *     <td>Implementation of this interface allows handle logic of unknown Actions, Methods or Results</td>
+ *   </tr>
+ *   <tr>
+ *     <td>org.apache.struts2.views.util.UrlHelper</td>
+ *     <td>struts.view.urlHelper</td>
+ *     <td>singleton</td>
+ *     <td>Helper class used with URLRenderer to provide exact logic for building URLs</td>
+ *   </tr>
  * </table>
  *
  * <!-- END SNIPPET: extensionPoints -->
@@ -233,31 +263,31 @@ public class BeanSelectionProvider imple
             props.setProperty("devMode", "false");
         }
 
-        if (props.containsKey(StrutsConstants.STRUTS_LOG_MISSING_PROPERTIES))
-            props.setProperty("logMissingProperties", props.getProperty(StrutsConstants.STRUTS_LOG_MISSING_PROPERTIES));
+        // Convert Struts properties into XWork properties
+        convertIfExist(props, StrutsConstants.STRUTS_LOG_MISSING_PROPERTIES, "logMissingProperties");
+        convertIfExist(props, StrutsConstants.STRUTS_ENABLE_OGNL_EXPRESSION_CACHE, "enableOGNLExpressionCache");
+        convertIfExist(props, StrutsConstants.STRUTS_ALLOW_STATIC_METHOD_ACCESS, "allowStaticMethodAccess");
 
-        if (props.containsKey(StrutsConstants.STRUTS_ENABLE_OGNL_EXPRESSION_CACHE))
-            props.setProperty("enableOGNLExpressionCache", props.getProperty(StrutsConstants.STRUTS_ENABLE_OGNL_EXPRESSION_CACHE));
+        LocalizedTextUtil.addDefaultResourceBundle("org/apache/struts2/struts-messages");
+        loadCustomResourceBundles(props);
+    }
 
-        String val = props.getProperty(StrutsConstants.STRUTS_ALLOW_STATIC_METHOD_ACCESS);
-        if (val != null) {
-            props.setProperty("allowStaticMethodAccess", val);
+    private void convertIfExist(LocatableProperties props, String fromKey, String toKey) {
+        if (props.containsKey(fromKey)) {
+            props.setProperty(toKey, props.getProperty(fromKey));
         }
+    }
 
-        // TODO: This should be moved to XWork after 2.0.4
-        // struts.custom.i18n.resources
-
-        LocalizedTextUtil.addDefaultResourceBundle("org/apache/struts2/struts-messages");
-
+    private void loadCustomResourceBundles(LocatableProperties props) {
         String bundles = props.getProperty(StrutsConstants.STRUTS_CUSTOM_I18N_RESOURCES);
         if (bundles != null && bundles.length() > 0) {
-            StringTokenizer customBundles = new StringTokenizer(props.getProperty(StrutsConstants.STRUTS_CUSTOM_I18N_RESOURCES), ", ");
+            StringTokenizer customBundles = new StringTokenizer(bundles, ", ");
 
             while (customBundles.hasMoreTokens()) {
                 String name = customBundles.nextToken();
                 try {
                     if (LOG.isInfoEnabled()) {
-                	LOG.info("Loading global messages from " + name);
+                	    LOG.info("Loading global messages from " + name);
                     }
                     LocalizedTextUtil.addDefaultResourceBundle(name);
                 } catch (Exception e) {
@@ -276,20 +306,20 @@ public class BeanSelectionProvider imple
             String foundName = props.getProperty(key, DEFAULT_BEAN_NAME);
             if (builder.contains(type, foundName)) {
                 if (LOG.isInfoEnabled()) {
-                    LOG.info("Choosing bean (" + foundName + ") for " + type);
+                    LOG.info("Choosing bean (#1) for (#2)", foundName, type.getName());
                 }
                 builder.alias(type, foundName, Container.DEFAULT_NAME);
             } else {
                 try {
                     Class cls = ClassLoaderUtil.loadClass(foundName, this.getClass());
                     if (LOG.isDebugEnabled()) {
-                        LOG.debug("Choosing bean ("+cls+") for "+type);
+                        LOG.debug("Choosing bean (#1) for (#2)", cls.getName(), type.getName());
                     }
                     builder.factory(type, cls, scope);
                 } catch (ClassNotFoundException ex) {
                     // Perhaps a spring bean id, so we'll delegate to the object factory at runtime
                     if (LOG.isDebugEnabled()) {
-                        LOG.debug("Choosing bean ("+foundName+") for "+type+" to be loaded from the ObjectFactory");
+                        LOG.debug("Choosing bean (#1) for (#2) to be loaded from the ObjectFactory", foundName, type.getName());
                     }
                     if (DEFAULT_BEAN_NAME.equals(foundName)) {
                         // Probably an optional bean, will ignore
@@ -297,14 +327,14 @@ public class BeanSelectionProvider imple
                         if (ObjectFactory.class != type) {
                             builder.factory(type, new ObjectFactoryDelegateFactory(foundName, type), scope);
                         } else {
-                            throw new ConfigurationException("Cannot locate the chosen ObjectFactory implementation: "+foundName);
+                            throw new ConfigurationException("Cannot locate the chosen ObjectFactory implementation: " + foundName);
                         }
                     }
                 }
             }
         } else {
             if (LOG.isWarnEnabled()) {
-        	LOG.warn("Unable to alias bean type "+type+", default mapping already assigned.");
+        	    LOG.warn("Unable to alias bean type (#1), default mapping already assigned.", type.getName());
             }
         }
     }

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/DefaultUrlHelper.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/DefaultUrlHelper.java?rev=1307906&r1=1307905&r2=1307906&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/DefaultUrlHelper.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/DefaultUrlHelper.java Sat Mar 31 21:22:04 2012
@@ -169,7 +169,7 @@ public class DefaultUrlHelper implements
 
         //if the action was not explicitly set grab the params from the request
         if (escapeAmp) {
-            buildParametersString(params, link);
+            buildParametersString(params, link, AMP);
         } else {
             buildParametersString(params, link, "&");
         }
@@ -190,10 +190,6 @@ public class DefaultUrlHelper implements
         return result;
     }
 
-    public void buildParametersString(Map<String, Object> params, StringBuilder link) {
-        buildParametersString(params, link, AMP);
-    }
-
     public void buildParametersString(Map<String, Object> params, StringBuilder link, String paramSeparator) {
         if ((params != null) && (params.size() > 0)) {
             if (!link.toString().contains("?")) {
@@ -285,10 +281,6 @@ public class DefaultUrlHelper implements
         return TextParseUtil.translateVariables(input, valueStack);
     }
 
-    public Map<String, Object> parseQueryString(String queryString) {
-        return parseQueryString(queryString, false);
-    }
-
     public Map<String, Object> parseQueryString(String queryString, boolean forceValueArray) {
         Map<String, Object> queryParams = new LinkedHashMap<String, Object>();
         if (queryString != null) {

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java?rev=1307906&r1=1307905&r2=1307906&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java Sat Mar 31 21:22:04 2012
@@ -32,12 +32,8 @@ public interface UrlHelper {
     String buildUrl(String action, HttpServletRequest request, HttpServletResponse response, Map<String, Object> params, String scheme,
                     boolean includeContext, boolean encodeResult, boolean forceAddSchemeHostAndPort, boolean escapeAmp);
 
-    void buildParametersString(Map<String, Object> params, StringBuilder link);
-
     void buildParametersString(Map<String, Object> params, StringBuilder link, String paramSeparator);
 
-    Map<String, Object> parseQueryString(String queryString);
-
     Map<String, Object> parseQueryString(String queryString, boolean forceValueArray);
 
 }

Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/util/DefaultUrlHelperTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/util/DefaultUrlHelperTest.java?rev=1307906&r1=1307905&r2=1307906&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/util/DefaultUrlHelperTest.java (original)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/util/DefaultUrlHelperTest.java Sat Mar 31 21:22:04 2012
@@ -106,7 +106,7 @@ public class DefaultUrlHelperTest extend
 
         StringBuilder url = new StringBuilder("http://localhost:8080/myContext/myPage.jsp?initParam=initValue");
 
-        urlHelper.buildParametersString(parameters, url);
+        urlHelper.buildParametersString(parameters, url, UrlHelper.AMP);
 
         assertEquals(
            expectedUrl, url.toString());
@@ -122,7 +122,7 @@ public class DefaultUrlHelperTest extend
 
         StringBuilder url = new StringBuilder("http://localhost:8080/myContext/myPage.jsp?initParam=initValue");
 
-        urlHelper.buildParametersString(parameters, url);
+        urlHelper.buildParametersString(parameters, url, UrlHelper.AMP);
 
         assertEquals(
            expectedUrl, url.toString());
@@ -355,7 +355,7 @@ public class DefaultUrlHelperTest extend
 
 
     public void testParseQuery() throws Exception {
-        Map result = urlHelper.parseQueryString("aaa=aaaval&bbb=bbbval&ccc=&%3Ca%22%3E=%3Cval%3E");
+        Map result = urlHelper.parseQueryString("aaa=aaaval&bbb=bbbval&ccc=&%3Ca%22%3E=%3Cval%3E", false);
 
         assertEquals(result.get("aaa"), "aaaval");
         assertEquals(result.get("bbb"), "bbbval");
@@ -364,14 +364,14 @@ public class DefaultUrlHelperTest extend
     }
 
     public void testParseEmptyQuery() throws Exception {
-        Map result = urlHelper.parseQueryString("");
+        Map result = urlHelper.parseQueryString("", false);
 
         assertNotNull(result);
         assertEquals(result.size(), 0);
     }
 
     public void testParseNullQuery() throws Exception {
-        Map result = urlHelper.parseQueryString(null);
+        Map result = urlHelper.parseQueryString(null, false);
 
         assertNotNull(result);
         assertEquals(result.size(), 0);