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