[09/10] struts git commit: WW-4749 Renames local variable to better express its meaning
WW-4749 Renames local variable to better express its meaning Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/b842a4c7 Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/b842a4c7 Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/b842a4c7 Branch: refs/heads/master Commit: b842a4c779e45e1193e6319970c2dc6f52ec6bf1 Parents: 38a2ebb Author: Lukasz LenartAuthored: Wed May 10 10:08:48 2017 +0200 Committer: Lukasz Lenart Committed: Wed May 10 10:08:48 2017 +0200 -- .../apache/struts2/views/freemarker/FreemarkerResult.java| 8 1 file changed, 4 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/b842a4c7/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java -- diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java b/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java index da631d9..c9130ac 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java @@ -144,16 +144,16 @@ public class FreemarkerResult extends StrutsResultSupport { // Give subclasses a chance to hook into preprocessing if (preTemplateProcess(template, model)) { try { -final boolean willUseBufferedWriter; +final boolean willWriteIfCompleted; if (writeIfCompleted != null) { -willUseBufferedWriter = isWriteIfCompleted(); +willWriteIfCompleted = isWriteIfCompleted(); } else { -willUseBufferedWriter = template.getTemplateExceptionHandler() == TemplateExceptionHandler.RETHROW_HANDLER; +willWriteIfCompleted = template.getTemplateExceptionHandler() == TemplateExceptionHandler.RETHROW_HANDLER; } // Process the template Writer writer = getWriter(); -if (willUseBufferedWriter){ +if (willWriteIfCompleted){ CharArrayWriter parentCharArrayWriter = (CharArrayWriter) req.getAttribute(PARENT_TEMPLATE_WRITER); boolean isTopTemplate; if (isTopTemplate = (parentCharArrayWriter == null)) {
[08/10] struts git commit: WW-4749 Uses writeIfCompleted to keep backward compatibility
WW-4749 Uses writeIfCompleted to keep backward compatibility Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/38a2ebb7 Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/38a2ebb7 Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/38a2ebb7 Branch: refs/heads/master Commit: 38a2ebb72abd90c74bd52d6a81e3a0d967965c7b Parents: 3034b3a Author: Lukasz LenartAuthored: Fri Apr 28 13:14:30 2017 +0200 Committer: Lukasz Lenart Committed: Fri Apr 28 13:14:30 2017 +0200 -- .../struts2/views/freemarker/FreemarkerResult.java | 16 .../views/freemarker/FreeMarkerResultTest.java | 14 +- 2 files changed, 9 insertions(+), 21 deletions(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/38a2ebb7/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java -- diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java b/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java index b083796..da631d9 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java @@ -60,7 +60,7 @@ public class FreemarkerResult extends StrutsResultSupport { protected ObjectWrapper wrapper; protected FreemarkerManager freemarkerManager; private Writer writer; -private Boolean useBufferedWriter = null; +private Boolean writeIfCompleted = null; /* * Struts results are constructed for each result execution @@ -145,8 +145,8 @@ public class FreemarkerResult extends StrutsResultSupport { if (preTemplateProcess(template, model)) { try { final boolean willUseBufferedWriter; -if (useBufferedWriter != null) { -willUseBufferedWriter = isUseBufferedWriter(); +if (writeIfCompleted != null) { +willUseBufferedWriter = isWriteIfCompleted(); } else { willUseBufferedWriter = template.getTemplateExceptionHandler() == TemplateExceptionHandler.RETHROW_HANDLER; } @@ -356,14 +356,14 @@ public class FreemarkerResult extends StrutsResultSupport { return (Boolean) ObjectUtils.defaultIfNull(attribute, Boolean.FALSE); } -public boolean isUseBufferedWriter() { -return useBufferedWriter != null && useBufferedWriter; +public boolean isWriteIfCompleted() { +return writeIfCompleted != null && writeIfCompleted; } /** - * @param useBufferedWriter template is processed and flushed according to freemarker library policies + * @param writeIfCompleted template is processed and flushed according to freemarker library policies */ -public void setUseBufferedWriter(Boolean useBufferedWriter) { -this.useBufferedWriter = useBufferedWriter; +public void setWriteIfCompleted(Boolean writeIfCompleted) { +this.writeIfCompleted = writeIfCompleted; } } http://git-wip-us.apache.org/repos/asf/struts/blob/38a2ebb7/core/src/test/java/org/apache/struts2/views/freemarker/FreeMarkerResultTest.java -- diff --git a/core/src/test/java/org/apache/struts2/views/freemarker/FreeMarkerResultTest.java b/core/src/test/java/org/apache/struts2/views/freemarker/FreeMarkerResultTest.java index ec8ec05..1d8cb8f 100644 --- a/core/src/test/java/org/apache/struts2/views/freemarker/FreeMarkerResultTest.java +++ b/core/src/test/java/org/apache/struts2/views/freemarker/FreeMarkerResultTest.java @@ -22,32 +22,20 @@ package org.apache.struts2.views.freemarker; import com.opensymphony.xwork2.ActionContext; -import com.opensymphony.xwork2.ActionProxy; import com.opensymphony.xwork2.mock.MockActionInvocation; import com.opensymphony.xwork2.mock.MockActionProxy; -import com.opensymphony.xwork2.util.ClassLoaderUtil; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.util.fs.DefaultFileManagerFactory; -import freemarker.template.Configuration; -import freemarker.template.TemplateExceptionHandler; import org.apache.struts2.ServletActionContext; import org.apache.struts2.StrutsInternalTestCase; import org.apache.struts2.StrutsStatics; -import org.apache.struts2.dispatcher.Dispatcher; -import org.apache.struts2.dispatcher.mapper.ActionMapper; -import org.apache.struts2.dispatcher.mapper.ActionMapping; import org.apache.struts2.views.jsp.StrutsMockHttpServletResponse; import org.apache.struts2.views.jsp.StrutsMockServletContext; -import org.easymock.EasyMock; import
[10/10] struts git commit: WW-4749 Implements buffer/flush behaviour in FreemarkerResult
WW-4749 Implements buffer/flush behaviour in FreemarkerResult Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/5a0f2e1a Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/5a0f2e1a Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/5a0f2e1a Branch: refs/heads/master Commit: 5a0f2e1aaf8d420bd74033175e6e459883160487 Parents: 0314ddc b842a4c Author: Lukasz LenartAuthored: Wed May 10 16:39:41 2017 +0200 Committer: Lukasz Lenart Committed: Wed May 10 16:39:41 2017 +0200 -- .../views/freemarker/FreemarkerResult.java | 83 .../views/freemarker/FreeMarkerResultTest.java | 12 --- 2 files changed, 16 insertions(+), 79 deletions(-) --
[07/10] struts git commit: WW-4749 Uses Boolean to allow define behaviour per result
WW-4749 Uses Boolean to allow define behaviour per result Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/3034b3a9 Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/3034b3a9 Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/3034b3a9 Branch: refs/heads/master Commit: 3034b3a97050bcb24e34f39b203a960a0ddca93e Parents: 6dad53c Author: Lukasz LenartAuthored: Fri Apr 28 13:00:09 2017 +0200 Committer: Lukasz Lenart Committed: Fri Apr 28 13:00:09 2017 +0200 -- .../struts2/views/freemarker/FreemarkerResult.java | 13 + 1 file changed, 9 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/3034b3a9/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java -- diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java b/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java index c9683b8..b083796 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java @@ -60,7 +60,7 @@ public class FreemarkerResult extends StrutsResultSupport { protected ObjectWrapper wrapper; protected FreemarkerManager freemarkerManager; private Writer writer; -private boolean useBufferedWriter = false; +private Boolean useBufferedWriter = null; /* * Struts results are constructed for each result execution @@ -144,7 +144,12 @@ public class FreemarkerResult extends StrutsResultSupport { // Give subclasses a chance to hook into preprocessing if (preTemplateProcess(template, model)) { try { -final boolean willUseBufferedWriter = isUseBufferedWriter() || template.getTemplateExceptionHandler() == TemplateExceptionHandler.RETHROW_HANDLER; +final boolean willUseBufferedWriter; +if (useBufferedWriter != null) { +willUseBufferedWriter = isUseBufferedWriter(); +} else { +willUseBufferedWriter = template.getTemplateExceptionHandler() == TemplateExceptionHandler.RETHROW_HANDLER; +} // Process the template Writer writer = getWriter(); @@ -352,13 +357,13 @@ public class FreemarkerResult extends StrutsResultSupport { } public boolean isUseBufferedWriter() { -return useBufferedWriter; +return useBufferedWriter != null && useBufferedWriter; } /** * @param useBufferedWriter template is processed and flushed according to freemarker library policies */ -public void setUseBufferedWriter(boolean useBufferedWriter) { +public void setUseBufferedWriter(Boolean useBufferedWriter) { this.useBufferedWriter = useBufferedWriter; } }
[03/10] struts git commit: WW-4749 Defines setter to allow specify useBufferedWriter
WW-4749 Defines setter to allow specify useBufferedWriter Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/f5125bcd Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/f5125bcd Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/f5125bcd Branch: refs/heads/master Commit: f5125bcd1bb97a75ab54e266399c2bf96987c1dc Parents: 787150d Author: Lukasz LenartAuthored: Wed Apr 26 08:51:45 2017 +0200 Committer: Lukasz Lenart Committed: Wed Apr 26 08:51:45 2017 +0200 -- .../struts2/views/freemarker/FreemarkerResult.java | 13 - 1 file changed, 12 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/f5125bcd/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java -- diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java b/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java index 226fb70..7ea7fe3 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java @@ -147,7 +147,7 @@ public class FreemarkerResult extends StrutsResultSupport { try { final boolean willUseBufferedWriter; if (useBufferedWriter != null) { -willUseBufferedWriter = Boolean.parseBoolean(useBufferedWriter); +willUseBufferedWriter = isUseBufferedWriter(); } else { willUseBufferedWriter = isWriteIfCompleted() || template.getTemplateExceptionHandler() == TemplateExceptionHandler.RETHROW_HANDLER; } @@ -370,4 +370,15 @@ public class FreemarkerResult extends StrutsResultSupport { public void setWriteIfCompleted(boolean writeIfCompleted) { this.writeIfCompleted = writeIfCompleted; } + +public boolean isUseBufferedWriter() { +return useBufferedWriter != null && Boolean.parseBoolean(useBufferedWriter); +} + +/** + * @param useBufferedWriter template is processed and flushed according to freemarker library policies + */ +public void setUseBufferedWriter(String useBufferedWriter) { +this.useBufferedWriter = useBufferedWriter; +} }
[04/10] struts git commit: WW-4749 Drops writeIfCompleted and uses Boolean instead String
WW-4749 Drops writeIfCompleted and uses Boolean instead String Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/1df89792 Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/1df89792 Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/1df89792 Branch: refs/heads/master Commit: 1df89792f93fa71f374eef8a2b1a72b43cc28eab Parents: f5125bc Author: Lukasz LenartAuthored: Fri Apr 28 09:32:47 2017 +0200 Committer: Lukasz Lenart Committed: Fri Apr 28 09:32:47 2017 +0200 -- .../views/freemarker/FreemarkerResult.java | 28 +++- 1 file changed, 4 insertions(+), 24 deletions(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/1df89792/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java -- diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java b/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java index 7ea7fe3..4ff393d 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java @@ -60,8 +60,7 @@ public class FreemarkerResult extends StrutsResultSupport { protected ObjectWrapper wrapper; protected FreemarkerManager freemarkerManager; private Writer writer; -private boolean writeIfCompleted = false; -private String useBufferedWriter; +private Boolean useBufferedWriter = null; /* * Struts results are constructed for each result execution @@ -145,12 +144,7 @@ public class FreemarkerResult extends StrutsResultSupport { // Give subclasses a chance to hook into preprocessing if (preTemplateProcess(template, model)) { try { -final boolean willUseBufferedWriter; -if (useBufferedWriter != null) { -willUseBufferedWriter = isUseBufferedWriter(); -} else { -willUseBufferedWriter = isWriteIfCompleted() || template.getTemplateExceptionHandler() == TemplateExceptionHandler.RETHROW_HANDLER; -} +final boolean willUseBufferedWriter = isUseBufferedWriter() || template.getTemplateExceptionHandler() == TemplateExceptionHandler.RETHROW_HANDLER; // Process the template Writer writer = getWriter(); @@ -357,28 +351,14 @@ public class FreemarkerResult extends StrutsResultSupport { return (Boolean) ObjectUtils.defaultIfNull(attribute, Boolean.FALSE); } -/** - * @return true write to the stream only when template processing completed successfully (false by default) - */ -public boolean isWriteIfCompleted() { -return writeIfCompleted; -} - -/** - * @param writeIfCompleted Writes to the stream only when template processing completed successfully - */ -public void setWriteIfCompleted(boolean writeIfCompleted) { -this.writeIfCompleted = writeIfCompleted; -} - public boolean isUseBufferedWriter() { -return useBufferedWriter != null && Boolean.parseBoolean(useBufferedWriter); +return useBufferedWriter != null && useBufferedWriter; } /** * @param useBufferedWriter template is processed and flushed according to freemarker library policies */ -public void setUseBufferedWriter(String useBufferedWriter) { +public void setUseBufferedWriter(Boolean useBufferedWriter) { this.useBufferedWriter = useBufferedWriter; } }
[02/10] struts git commit: Moves documentation to wiki
Moves documentation to wiki Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/787150d0 Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/787150d0 Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/787150d0 Branch: refs/heads/master Commit: 787150d041e32e8e579df5d44c1258881fad6c94 Parents: d739be3 Author: Lukasz LenartAuthored: Wed Apr 26 08:48:01 2017 +0200 Committer: Lukasz Lenart Committed: Wed Apr 26 08:48:01 2017 +0200 -- .../views/freemarker/FreemarkerResult.java | 51 1 file changed, 51 deletions(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/787150d0/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java -- diff --git a/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java b/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java index 0c7de59..226fb70 100644 --- a/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java +++ b/core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java @@ -1,6 +1,4 @@ /* - * $Id$ - * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information @@ -48,57 +46,8 @@ import java.io.IOException; import java.io.Writer; import java.util.Locale; - /** - * - * * Renders a view using the Freemarker template engine. - * - * The FreemarkarManager class configures the template loaders so that the - * template location can be either - * - * - * - * - * relative to the web root folder. eg /WEB-INF/views/home.ftl - * - * - * a classpath resuorce. eg /com/company/web/views/home.ftl - * - * - * - * - * - * This result type takes the following parameters: - * - * - * - * - * - * location (default) - the location of the template to process. - * - * parse - true by default. If set to false, the location param will - * not be parsed for Ognl expressions. - * - * contentType - defaults to "text/html" unless specified. - * - * writeIfCompleted - false by default, write to stream only if there isn't any error - * processing the template. Setting template_exception_handler=rethrow in freemarker.properties - * will have the same effect. - * - * - * - * - * - * Example: - * - * - * - * - * result name="success" type="freemarker"foo.ftl/result - * - * - * */ public class FreemarkerResult extends StrutsResultSupport {
[struts] Git Push Summary
Repository: struts Updated Branches: refs/heads/default-provider [deleted] bb19a6209
[6/6] struts git commit: WW-4762 Introduces default provider which only uses default bundles
WW-4762 Introduces default provider which only uses default bundles Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/bb19a620 Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/bb19a620 Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/bb19a620 Branch: refs/heads/default-provider Commit: bb19a6209886795b76385e48fd86424c144ee029 Parents: 2e23d7a Author: Lukasz LenartAuthored: Wed Apr 26 20:28:11 2017 +0200 Committer: Lukasz Lenart Committed: Wed Apr 26 20:28:11 2017 +0200 -- .../util/AbstractLocalizedTextProvider.java | 145 - .../util/DefaultLocalizedTextProvider.java | 310 +++ .../util/StrutsLocalizedTextProvider.java | 161 +- 3 files changed, 461 insertions(+), 155 deletions(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/bb19a620/core/src/main/java/com/opensymphony/xwork2/util/AbstractLocalizedTextProvider.java -- diff --git a/core/src/main/java/com/opensymphony/xwork2/util/AbstractLocalizedTextProvider.java b/core/src/main/java/com/opensymphony/xwork2/util/AbstractLocalizedTextProvider.java index a2578bc..8c377c1 100644 --- a/core/src/main/java/com/opensymphony/xwork2/util/AbstractLocalizedTextProvider.java +++ b/core/src/main/java/com/opensymphony/xwork2/util/AbstractLocalizedTextProvider.java @@ -20,11 +20,12 @@ import java.util.Map; import java.util.MissingResourceException; import java.util.ResourceBundle; import java.util.Set; +import java.util.TreeSet; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.CopyOnWriteArrayList; -public abstract class AbstractLocalizedTextProvider implements LocalizedTextProvider { +abstract class AbstractLocalizedTextProvider implements LocalizedTextProvider { private static final Logger LOG = LogManager.getLogger(AbstractLocalizedTextProvider.class); @@ -302,6 +303,26 @@ public abstract class AbstractLocalizedTextProvider implements LocalizedTextProv } /** + * Determines if we found the text in the bundles. + * + * @param result the result so far + * @return true if we could not find the text, false if the text was found (=success). + */ +protected boolean unableToFindTextForKey(GetDefaultMessageReturnArg result) { +if (result == null || result.message == null) { +return true; +} + +// did we find it in the bundle, then no problem? +if (result.foundInBundle) { +return false; +} + +// not found in bundle +return true; +} + +/** * Creates a key to used for lookup/storing in the bundle misses cache. * * @param prefix the prefix for the returning String - it is supposed to be the ClassLoader hash code. @@ -313,6 +334,128 @@ public abstract class AbstractLocalizedTextProvider implements LocalizedTextProv return prefix + aBundleName + "_" + locale.toString(); } +/** + * @return the default message. + */ +protected GetDefaultMessageReturnArg getDefaultMessage(String key, Locale locale, ValueStack valueStack, Object[] args, +String defaultMessage) { +GetDefaultMessageReturnArg result = null; +boolean found = true; + +if (key != null) { +String message = findDefaultText(key, locale); + +if (message == null) { +message = defaultMessage; +found = false; // not found in bundles +} + +// defaultMessage may be null +if (message != null) { +MessageFormat mf = buildMessageFormat(TextParseUtil.translateVariables(message, valueStack), locale); + +String msg = formatWithNullDetection(mf, args); +result = new GetDefaultMessageReturnArg(msg, found); +} +} + +return result; +} + +/** + * @return the message from the named resource bundle. + */ +protected String getMessage(String bundleName, Locale locale, String key, ValueStack valueStack, Object[] args) { +ResourceBundle bundle = findResourceBundle(bundleName, locale); +if (bundle == null) { +return null; +} +if (valueStack != null) +reloadBundles(valueStack.getContext()); +try { + String message = bundle.getString(key); + if (valueStack != null) + message = TextParseUtil.translateVariables(bundle.getString(key), valueStack); +MessageFormat mf =
[5/6] struts git commit: WW-4762 Extracts base abstract class
WW-4762 Extracts base abstract class Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/2e23d7a0 Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/2e23d7a0 Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/2e23d7a0 Branch: refs/heads/default-provider Commit: 2e23d7a07ea4313136dc38b8de2451b04c882064 Parents: 8bf77a1 Author: Lukasz LenartAuthored: Wed Apr 26 12:24:57 2017 +0200 Committer: Lukasz Lenart Committed: Wed Apr 26 12:24:57 2017 +0200 -- .../util/AbstractLocalizedTextProvider.java | 355 ++ .../util/StrutsLocalizedTextProvider.java | 368 +-- 2 files changed, 363 insertions(+), 360 deletions(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/2e23d7a0/core/src/main/java/com/opensymphony/xwork2/util/AbstractLocalizedTextProvider.java -- diff --git a/core/src/main/java/com/opensymphony/xwork2/util/AbstractLocalizedTextProvider.java b/core/src/main/java/com/opensymphony/xwork2/util/AbstractLocalizedTextProvider.java new file mode 100644 index 000..a2578bc --- /dev/null +++ b/core/src/main/java/com/opensymphony/xwork2/util/AbstractLocalizedTextProvider.java @@ -0,0 +1,355 @@ +package com.opensymphony.xwork2.util; + +import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.LocalizedTextProvider; +import com.opensymphony.xwork2.inject.Inject; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.struts2.StrutsConstants; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.text.MessageFormat; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.MissingResourceException; +import java.util.ResourceBundle; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.CopyOnWriteArrayList; + +public abstract class AbstractLocalizedTextProvider implements LocalizedTextProvider { + +private static final Logger LOG = LogManager.getLogger(AbstractLocalizedTextProvider.class); + +public static final String XWORK_MESSAGES_BUNDLE = "com/opensymphony/xwork2/xwork-messages"; +public static final String STRUTS_MESSAGES_BUNDLE = "org/apache/struts2/struts-messages"; + +private static final String TOMCAT_RESOURCE_ENTRIES_FIELD = "resourceEntries"; +private final String RELOADED = "com.opensymphony.xwork2.util.LocalizedTextProvider.reloaded"; + +protected final ConcurrentMap bundlesMap = new ConcurrentHashMap<>(); +protected boolean devMode = false; +protected boolean reloadBundles = false; + +private final ConcurrentMap messageFormats = new ConcurrentHashMap<>(); +private final ConcurrentMap classLoaderMap = new ConcurrentHashMap<>(); +private final Set missingBundles = Collections.synchronizedSet(new HashSet()); +private final ConcurrentMap delegatedClassLoaderMap = new ConcurrentHashMap<>(); + +/** + * Add's the bundle to the internal list of default bundles. + * If the bundle already exists in the list it will be re-added. + * + * @param resourceBundleName the name of the bundle to add. + */ +@Override +public void addDefaultResourceBundle(String resourceBundleName) { +//make sure this doesn't get added more than once +final ClassLoader ccl = getCurrentThreadContextClassLoader(); +synchronized (XWORK_MESSAGES_BUNDLE) { +List bundles = classLoaderMap.get(ccl.hashCode()); +if (bundles == null) { +bundles = new CopyOnWriteArrayList<>(); +classLoaderMap.put(ccl.hashCode(), bundles); +} +bundles.remove(resourceBundleName); +bundles.add(0, resourceBundleName); +} + +if (LOG.isDebugEnabled()) { +LOG.debug("Added default resource bundle '{}' to default resource bundles for the following classloader '{}'", resourceBundleName, ccl.toString()); +} +} + +protected List getCurrentBundleNames() { +return classLoaderMap.get(getCurrentThreadContextClassLoader().hashCode()); +} + +protected ClassLoader getCurrentThreadContextClassLoader() { +return Thread.currentThread().getContextClassLoader(); +} + +/** + * Returns a localized message for the specified key, aTextName. Neither the key nor
[2/6] struts git commit: WW-4762 Drops unused imports
WW-4762 Drops unused imports Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/3ffc9b84 Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/3ffc9b84 Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/3ffc9b84 Branch: refs/heads/default-provider Commit: 3ffc9b8450845d7a90a623607e3b4bb05888e2f9 Parents: 45d1a49 Author: Lukasz LenartAuthored: Wed Apr 26 11:56:09 2017 +0200 Committer: Lukasz Lenart Committed: Wed Apr 26 11:56:09 2017 +0200 -- .../java/com/opensymphony/xwork2/DefaultTextProvider.java| 8 +--- .../main/java/org/apache/struts2/dispatcher/Dispatcher.java | 1 - .../struts2/config/PropertiesConfigurationProviderTest.java | 1 - 3 files changed, 1 insertion(+), 9 deletions(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/3ffc9b84/core/src/main/java/com/opensymphony/xwork2/DefaultTextProvider.java -- diff --git a/core/src/main/java/com/opensymphony/xwork2/DefaultTextProvider.java b/core/src/main/java/com/opensymphony/xwork2/DefaultTextProvider.java index 51ed449..116a0a1 100644 --- a/core/src/main/java/com/opensymphony/xwork2/DefaultTextProvider.java +++ b/core/src/main/java/com/opensymphony/xwork2/DefaultTextProvider.java @@ -16,7 +16,6 @@ package com.opensymphony.xwork2; import com.opensymphony.xwork2.inject.Inject; -import com.opensymphony.xwork2.util.DefaultLocalizedTextProvider; import com.opensymphony.xwork2.util.ValueStack; import java.io.Serializable; @@ -27,12 +26,7 @@ import java.util.List; import java.util.ResourceBundle; /** - * DefaultTextProvider gets texts from only the default resource bundles associated with the - * LocalizedTextUtil. - * - * @author Jason Carreira jcarre...@gmail.com - * @author Rainer Hermanns - * @see DefaultLocalizedTextProvider#addDefaultResourceBundle(String) + * DefaultTextProvider gets texts from only the default resource bundles associated with the default bundles. */ public class DefaultTextProvider implements TextProvider, Serializable, Unchainable { http://git-wip-us.apache.org/repos/asf/struts/blob/3ffc9b84/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java -- diff --git a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java index 667f37d..55707a4 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java @@ -32,7 +32,6 @@ import com.opensymphony.xwork2.inject.ContainerBuilder; import com.opensymphony.xwork2.inject.Inject; import com.opensymphony.xwork2.interceptor.Interceptor; import com.opensymphony.xwork2.util.ClassLoaderUtil; -import com.opensymphony.xwork2.util.DefaultLocalizedTextProvider; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.util.ValueStackFactory; import com.opensymphony.xwork2.util.location.LocatableProperties; http://git-wip-us.apache.org/repos/asf/struts/blob/3ffc9b84/core/src/test/java/org/apache/struts2/config/PropertiesConfigurationProviderTest.java -- diff --git a/core/src/test/java/org/apache/struts2/config/PropertiesConfigurationProviderTest.java b/core/src/test/java/org/apache/struts2/config/PropertiesConfigurationProviderTest.java index b4fd408..a82a8c6 100644 --- a/core/src/test/java/org/apache/struts2/config/PropertiesConfigurationProviderTest.java +++ b/core/src/test/java/org/apache/struts2/config/PropertiesConfigurationProviderTest.java @@ -23,7 +23,6 @@ package org.apache.struts2.config; import com.opensymphony.xwork2.inject.Container; import com.opensymphony.xwork2.inject.ContainerBuilder; -import com.opensymphony.xwork2.util.DefaultLocalizedTextProvider; import com.opensymphony.xwork2.util.location.LocatableProperties; import junit.framework.TestCase; import org.apache.commons.lang3.LocaleUtils;
[3/6] struts git commit: WW-4762 Uses Struts prefix for the main implementation
http://git-wip-us.apache.org/repos/asf/struts/blob/8bf77a1d/core/src/test/java/com/opensymphony/xwork2/util/DefaultLocalizedTextProviderTest.java -- diff --git a/core/src/test/java/com/opensymphony/xwork2/util/DefaultLocalizedTextProviderTest.java b/core/src/test/java/com/opensymphony/xwork2/util/DefaultLocalizedTextProviderTest.java deleted file mode 100644 index a9dca08..000 --- a/core/src/test/java/com/opensymphony/xwork2/util/DefaultLocalizedTextProviderTest.java +++ /dev/null @@ -1,267 +0,0 @@ -/* - * Copyright 2002-2006,2009 The Apache Software Foundation. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.opensymphony.xwork2.util; - -import com.mockobjects.dynamic.Mock; -import com.opensymphony.xwork2.*; -import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider; -import com.opensymphony.xwork2.test.ModelDrivenAction2; -import com.opensymphony.xwork2.test.TestBean2; - -import java.text.DateFormat; -import java.text.ParseException; -import java.util.Date; -import java.util.HashMap; -import java.util.Locale; -import java.util.ResourceBundle; - - -/** - * Unit test for {@link DefaultLocalizedTextProvider}. - * - * @author jcarreira - * @author tm_jee - * - * @version $Date$ $Id$ - */ -public class DefaultLocalizedTextProviderTest extends XWorkTestCase { - -private LocalizedTextProvider localizedTextProvider; - - public void testNpeWhenClassIsPrimitive() throws Exception { - ValueStack stack = ActionContext.getContext().getValueStack(); - stack.push(new MyObject()); - String result = localizedTextProvider.findText(MyObject.class, "someObj.someI18nKey", Locale.ENGLISH, "default message", null, stack); - System.out.println(result); - } - - public static class MyObject extends ActionSupport { - public boolean getSomeObj() { - return true; - } - } - - public void testActionGetTextWithNullObject() throws Exception { - MyAction action = new MyAction(); -container.inject(action); - - Mock mockActionInvocation = new Mock(ActionInvocation.class); -mockActionInvocation.expectAndReturn("getAction", action); -ActionContext.getContext().setActionInvocation((ActionInvocation) mockActionInvocation.proxy()); - ActionContext.getContext().getValueStack().push(action); - - String message = action.getText("barObj.title"); - assertEquals("Title:", message); - } - - - public static class MyAction extends ActionSupport { - private Bar testBean2; - - public Bar getBarObj() { - return testBean2; - } - public void setBarObj(Bar testBean2) { - this.testBean2 = testBean2; - } - } - -public void testActionGetText() throws Exception { -ModelDrivenAction2 action = new ModelDrivenAction2(); -container.inject(action); - -TestBean2 bean = (TestBean2) action.getModel(); -Bar bar = new Bar(); -bean.setBarObj(bar); - -Mock mockActionInvocation = new Mock(ActionInvocation.class); -mockActionInvocation.expectAndReturn("getAction", action); -ActionContext.getContext().setActionInvocation((ActionInvocation) mockActionInvocation.proxy()); -ActionContext.getContext().getValueStack().push(action); -ActionContext.getContext().getValueStack().push(action.getModel()); - -String message = action.getText("barObj.title"); -assertEquals("Title:", message); -} - -public void testNullKeys() { -localizedTextProvider.findText(this.getClass(), null, Locale.getDefault()); -} - -public void testActionGetTextXXX() throws Exception { - localizedTextProvider.addDefaultResourceBundle("com/opensymphony/xwork2/util/FindMe"); - -SimpleAction action = new SimpleAction(); -container.inject(action); - -Mock mockActionInvocation = new Mock(ActionInvocation.class); -mockActionInvocation.expectAndReturn("getAction", action); -ActionContext.getContext().setActionInvocation((ActionInvocation) mockActionInvocation.proxy()); -
[1/6] struts git commit: WW-4762 Drops unused code
Repository: struts Updated Branches: refs/heads/default-provider [created] bb19a6209 WW-4762 Drops unused code Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/45d1a491 Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/45d1a491 Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/45d1a491 Branch: refs/heads/default-provider Commit: 45d1a491311a82f6b2404d839e7e18269a26192f Parents: b46a6e7 Author: Lukasz LenartAuthored: Wed Apr 26 11:55:49 2017 +0200 Committer: Lukasz Lenart Committed: Wed Apr 26 11:55:49 2017 +0200 -- .../org/apache/struts2/util/StrutsTestCaseHelper.java| 11 --- 1 file changed, 11 deletions(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/45d1a491/core/src/main/java/org/apache/struts2/util/StrutsTestCaseHelper.java -- diff --git a/core/src/main/java/org/apache/struts2/util/StrutsTestCaseHelper.java b/core/src/main/java/org/apache/struts2/util/StrutsTestCaseHelper.java index 9c449f5..f8994d1 100644 --- a/core/src/main/java/org/apache/struts2/util/StrutsTestCaseHelper.java +++ b/core/src/main/java/org/apache/struts2/util/StrutsTestCaseHelper.java @@ -23,7 +23,6 @@ package org.apache.struts2.util; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.inject.Container; -import com.opensymphony.xwork2.util.DefaultLocalizedTextProvider; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.util.ValueStackFactory; import org.apache.struts2.dispatcher.Dispatcher; @@ -40,16 +39,6 @@ import java.util.Map; */ public class StrutsTestCaseHelper { -/** - * Sets up the configuration settings, XWork configuration, and - * message resources - * - * @throws Exception in case of any error - */ -public static void setUp() throws Exception { -DefaultLocalizedTextProvider.clearDefaultResourceBundles(); -} - public static Dispatcher initDispatcher(ServletContext ctx, Map params) { if (params == null) { params = new HashMap<>();
[4/6] struts git commit: WW-4762 Uses Struts prefix for the main implementation
WW-4762 Uses Struts prefix for the main implementation Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/8bf77a1d Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/8bf77a1d Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/8bf77a1d Branch: refs/heads/default-provider Commit: 8bf77a1d19d31dbc8574dcbf958c3da2a4724c84 Parents: 3ffc9b8 Author: Lukasz LenartAuthored: Wed Apr 26 11:56:48 2017 +0200 Committer: Lukasz Lenart Committed: Wed Apr 26 11:56:48 2017 +0200 -- .../config/impl/DefaultConfiguration.java |2 +- .../providers/XWorkConfigurationProvider.java |4 +- .../util/DefaultLocalizedTextProvider.java | 1000 -- .../util/StrutsLocalizedTextProvider.java | 1000 ++ core/src/main/resources/struts-default.xml |2 +- .../util/DefaultLocalizedTextProviderTest.java | 267 - .../util/StrutsLocalizedTextProviderTest.java | 267 + 7 files changed, 1271 insertions(+), 1271 deletions(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/8bf77a1d/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java -- diff --git a/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java b/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java index 8882a2f..a1b6490 100644 --- a/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java +++ b/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java @@ -261,7 +261,7 @@ public class DefaultConfiguration implements Configuration { builder.factory(TextProvider.class, "system", DefaultTextProvider.class, Scope.SINGLETON); -builder.factory(LocalizedTextProvider.class, DefaultLocalizedTextProvider.class, Scope.SINGLETON); +builder.factory(LocalizedTextProvider.class, StrutsLocalizedTextProvider.class, Scope.SINGLETON); builder.factory(TextProviderFactory.class, StrutsTextProviderFactory.class, Scope.SINGLETON); builder.factory(LocaleProviderFactory.class, DefaultLocaleProviderFactory.class, Scope.SINGLETON); http://git-wip-us.apache.org/repos/asf/struts/blob/8bf77a1d/core/src/main/java/com/opensymphony/xwork2/config/providers/XWorkConfigurationProvider.java -- diff --git a/core/src/main/java/com/opensymphony/xwork2/config/providers/XWorkConfigurationProvider.java b/core/src/main/java/com/opensymphony/xwork2/config/providers/XWorkConfigurationProvider.java index 1bc6986..e5692a1 100644 --- a/core/src/main/java/com/opensymphony/xwork2/config/providers/XWorkConfigurationProvider.java +++ b/core/src/main/java/com/opensymphony/xwork2/config/providers/XWorkConfigurationProvider.java @@ -72,7 +72,7 @@ import com.opensymphony.xwork2.ognl.accessor.XWorkMapPropertyAccessor; import com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor; import com.opensymphony.xwork2.util.CompoundRoot; import com.opensymphony.xwork2.LocalizedTextProvider; -import com.opensymphony.xwork2.util.DefaultLocalizedTextProvider; +import com.opensymphony.xwork2.util.StrutsLocalizedTextProvider; import com.opensymphony.xwork2.util.OgnlTextParser; import com.opensymphony.xwork2.util.PatternMatcher; import com.opensymphony.xwork2.util.TextParser; @@ -182,7 +182,7 @@ public class XWorkConfigurationProvider implements ConfigurationProvider { .factory(ActionValidatorManager.class, "no-annotations", DefaultActionValidatorManager.class, Scope.SINGLETON) .factory(TextProvider.class, "system", DefaultTextProvider.class, Scope.SINGLETON) -.factory(LocalizedTextProvider.class, DefaultLocalizedTextProvider.class, Scope.SINGLETON) +.factory(LocalizedTextProvider.class, StrutsLocalizedTextProvider.class, Scope.SINGLETON) .factory(TextProviderFactory.class, StrutsTextProviderFactory.class, Scope.SINGLETON) .factory(LocaleProviderFactory.class, DefaultLocaleProviderFactory.class, Scope.SINGLETON) http://git-wip-us.apache.org/repos/asf/struts/blob/8bf77a1d/core/src/main/java/com/opensymphony/xwork2/util/DefaultLocalizedTextProvider.java -- diff --git a/core/src/main/java/com/opensymphony/xwork2/util/DefaultLocalizedTextProvider.java b/core/src/main/java/com/opensymphony/xwork2/util/DefaultLocalizedTextProvider.java deleted file mode 100644 index 21f7477..000 --- a/core/src/main/java/com/opensymphony/xwork2/util/DefaultLocalizedTextProvider.java +++ /dev/null @@ -1,1000
svn commit: r1011991 - in /websites/production/struts/content/docs: freemarker-result.html interceptors.html noop-interceptor.html s2-028.html spring-plugin.html
Author: lukaszlenart Date: Wed May 10 06:35:13 2017 New Revision: 1011991 Log: Updates production Added: websites/production/struts/content/docs/noop-interceptor.html Modified: websites/production/struts/content/docs/freemarker-result.html websites/production/struts/content/docs/interceptors.html websites/production/struts/content/docs/s2-028.html websites/production/struts/content/docs/spring-plugin.html Modified: websites/production/struts/content/docs/freemarker-result.html == --- websites/production/struts/content/docs/freemarker-result.html (original) +++ websites/production/struts/content/docs/freemarker-result.html Wed May 10 06:35:13 2017 @@ -139,38 +139,9 @@ under the License. - - -Renders a view using the Freemarker template engine. - -The FreemarkarManager class configures the template loaders so that the -template location can be either - - -relative to the web root folder. eg /WEB-INF/views/home.ftl -a classpath resuorce. eg /com/company/web/views/home.ftl - - -Also see Freemarker Support. - -Parameters - - -location (default) - the location of the template to process.parse - true by default. If set to false, the location param will -not be parsed for Ognl expressions.contentType - defaults to "text/html" unless specified.writeIfCompleted - false by default, write to stream only if there isn't any error -processing the template. Setting template_exception_handler=rethrow in freemarker.properties -will have the same effect. - - -Examples - - - - +Renders a view using the Freemarker template engine. The FreemarkarManagerclass configures the template loaders so that the template location can be eitherrelative to the web root folder, e.g.:/WEB-INF/views/home.ftla classpath resource, e.g.: /com/company/web/views/home.ftlAlso see Freemarker Support.Parameterslocation (default) - the location of the template to process.parse- true by default. If set to false, the location param will not be parsed for expressions.contentType- defaults to text/htmlunless specified.writeIfCompleted- falseby default, write to stream only if there isn't any error processing the template. Setting template_exception_handler=rethrowin freemarker.propertieswill have the same effect.Examples +result name="success" type="freemarker"foo.ftl/result + Modified: websites/production/struts/content/docs/interceptors.html == --- websites/production/struts/content/docs/interceptors.html (original) +++ websites/production/struts/content/docs/interceptors.html Wed May 10 06:35:13 2017 @@ -140,11 +140,11 @@ under the License. The default Interceptor stack is designed to serve the needs of most applications. Most applications will not need to add Interceptors or change the Interceptor stack.Many Actions share common concerns. Some Actions need input validated. Other Actions may need a file upload to be pre-processed. Another Action might need protection from a double submit. Many Actions need drop-down lists and other controls pre-populated before the page displays.The framework makes it easy to share solutions to these concerns using an "Interceptor" strategy. When you request a resource that maps to an "action", the framework invokes the Action object. But, before the Action is executed, the invocatio n can be intercepted by another object. After the Action executes, the invocation could be intercepted again. Unsurprisingly, we call these objects "Interceptors."/**/ +/*]]>*/ Understanding InterceptorsConfiguring InterceptorsStacking Interceptors The Default Configuration Framework Interceptors @@ -425,6 +425,12 @@ div.rbtoc1492969959447 li {margin-left: interceptor name=roles class=org.apache.struts2.interceptor.RolesInterceptor / interceptor name=annotationWorkflow class=com.opensymphony.xwork2.interceptor.annotations.AnnotationWorkflowInterceptor / interceptor name=multiselect class=org.apache.struts2.interceptor.MultiselectInterceptor / +interceptor name=noop class=org.apache.struts2.interceptor.NoOpInterceptor / + +!-- Empty stack - performs no operations -- +interceptor-stack name=emptyStack +interceptor-ref name=noop/ +/interceptor-stack