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);


Reply via email to