diff --git a/core/src/main/java/org/apache/struts2/ActionSupport.java b/core/src/main/java/org/apache/struts2/ActionSupport.java index f5d58b091..6da71ae39 100644 --- a/core/src/main/java/org/apache/struts2/ActionSupport.java +++ b/core/src/main/java/org/apache/struts2/ActionSupport.java @@ -25,6 +25,8 @@ import org.apache.struts2.conversion.impl.ConversionData; import org.apache.struts2.inject.Container; import org.apache.struts2.inject.Inject; import org.apache.struts2.interceptor.ValidationAware; +import org.apache.struts2.text.TextProvider; +import org.apache.struts2.text.TextProviderFactory; import org.apache.struts2.util.ValueStack; import java.io.Serializable; diff --git a/core/src/main/java/org/apache/struts2/DefaultActionProxy.java b/core/src/main/java/org/apache/struts2/DefaultActionProxy.java index 82a5da14b..43fb695ec 100644 --- a/core/src/main/java/org/apache/struts2/DefaultActionProxy.java +++ b/core/src/main/java/org/apache/struts2/DefaultActionProxy.java @@ -26,6 +26,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.text.StringEscapeUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.apache.struts2.text.LocalizedTextProvider; import java.io.Serial; import java.io.Serializable; diff --git a/core/src/main/java/org/apache/struts2/LocaleProvider.java b/core/src/main/java/org/apache/struts2/LocaleProvider.java index 0b502aa74..6536b62a3 100644 --- a/core/src/main/java/org/apache/struts2/LocaleProvider.java +++ b/core/src/main/java/org/apache/struts2/LocaleProvider.java @@ -23,15 +23,14 @@ import org.apache.commons.lang3.StringUtils; import java.util.Locale; - /** * Indicates that the implementing class can provide its own {@link Locale}. * *
* This is useful for when an action may wish override the default locale. All that is * needed is to implement this interface and return your own custom locale. - * The {@link TextProvider} interface uses this interface heavily for retrieving - * internationalized messages from resource bundles. + * The {@link org.apache.struts2.text.TextProvider} interface uses this interface + * heavily for retrieving internationalized messages from resource bundles. *
* * @author Jason Carreira diff --git a/core/src/main/java/org/apache/struts2/components/Date.java b/core/src/main/java/org/apache/struts2/components/Date.java index 08d84ab77..d00917858 100644 --- a/core/src/main/java/org/apache/struts2/components/Date.java +++ b/core/src/main/java/org/apache/struts2/components/Date.java @@ -18,7 +18,7 @@ */ package org.apache.struts2.components; -import org.apache.struts2.TextProvider; +import org.apache.struts2.text.TextProvider; import org.apache.struts2.inject.Inject; import org.apache.struts2.util.ValueStack; import org.apache.logging.log4j.LogManager; diff --git a/core/src/main/java/org/apache/struts2/components/I18n.java b/core/src/main/java/org/apache/struts2/components/I18n.java index 44ff427df..d8ef748da 100644 --- a/core/src/main/java/org/apache/struts2/components/I18n.java +++ b/core/src/main/java/org/apache/struts2/components/I18n.java @@ -22,14 +22,14 @@ import java.io.Writer; import java.util.ResourceBundle; import org.apache.struts2.LocaleProviderFactory; -import org.apache.struts2.LocalizedTextProvider; -import org.apache.struts2.TextProviderFactory; +import org.apache.struts2.text.LocalizedTextProvider; +import org.apache.struts2.text.TextProviderFactory; import org.apache.struts2.views.annotations.StrutsTag; import org.apache.struts2.views.annotations.StrutsTagAttribute; import org.apache.struts2.StrutsException; import org.apache.struts2.LocaleProvider; -import org.apache.struts2.TextProvider; +import org.apache.struts2.text.TextProvider; import org.apache.struts2.inject.Inject; import org.apache.struts2.util.ValueStack; import org.apache.logging.log4j.LogManager; diff --git a/core/src/main/java/org/apache/struts2/config/StrutsBeanSelectionProvider.java b/core/src/main/java/org/apache/struts2/config/StrutsBeanSelectionProvider.java index 16e1c7ca3..a31b35896 100644 --- a/core/src/main/java/org/apache/struts2/config/StrutsBeanSelectionProvider.java +++ b/core/src/main/java/org/apache/struts2/config/StrutsBeanSelectionProvider.java @@ -23,11 +23,11 @@ import org.apache.struts2.ActionProxyFactory; import org.apache.struts2.FileManager; import org.apache.struts2.FileManagerFactory; import org.apache.struts2.LocaleProviderFactory; -import org.apache.struts2.LocalizedTextProvider; +import org.apache.struts2.text.LocalizedTextProvider; import org.apache.struts2.ObjectFactory; import org.apache.struts2.StrutsConstants; -import org.apache.struts2.TextProvider; -import org.apache.struts2.TextProviderFactory; +import org.apache.struts2.text.TextProvider; +import org.apache.struts2.text.TextProviderFactory; import org.apache.struts2.UnknownHandlerManager; import org.apache.struts2.components.UrlRenderer; import org.apache.struts2.components.date.DateFormatter; diff --git a/core/src/main/java/org/apache/struts2/config/impl/DefaultConfiguration.java b/core/src/main/java/org/apache/struts2/config/impl/DefaultConfiguration.java index 3ea854b21..0d77695ba 100644 --- a/core/src/main/java/org/apache/struts2/config/impl/DefaultConfiguration.java +++ b/core/src/main/java/org/apache/struts2/config/impl/DefaultConfiguration.java @@ -20,15 +20,15 @@ package org.apache.struts2.config.impl; import org.apache.struts2.ActionContext; import org.apache.struts2.DefaultLocaleProviderFactory; -import org.apache.struts2.DefaultTextProvider; +import org.apache.struts2.text.DefaultTextProvider; import org.apache.struts2.FileManager; import org.apache.struts2.FileManagerFactory; import org.apache.struts2.LocaleProviderFactory; -import org.apache.struts2.LocalizedTextProvider; +import org.apache.struts2.text.LocalizedTextProvider; import org.apache.struts2.ObjectFactory; -import org.apache.struts2.StrutsTextProviderFactory; -import org.apache.struts2.TextProvider; -import org.apache.struts2.TextProviderFactory; +import org.apache.struts2.text.StrutsTextProviderFactory; +import org.apache.struts2.text.TextProvider; +import org.apache.struts2.text.TextProviderFactory; import org.apache.struts2.config.Configuration; import org.apache.struts2.config.ConfigurationException; import org.apache.struts2.config.ContainerProvider; @@ -92,7 +92,7 @@ import org.apache.struts2.ognl.accessor.RootAccessor; import org.apache.struts2.ognl.accessor.XWorkMethodAccessor; import org.apache.struts2.util.OgnlTextParser; import org.apache.struts2.util.PatternMatcher; -import org.apache.struts2.util.StrutsLocalizedTextProvider; +import org.apache.struts2.text.StrutsLocalizedTextProvider; import org.apache.struts2.util.TextParser; import org.apache.struts2.util.ValueStack; import org.apache.struts2.util.ValueStackFactory; diff --git a/core/src/main/java/org/apache/struts2/conversion/impl/DateConverter.java b/core/src/main/java/org/apache/struts2/conversion/impl/DateConverter.java index 6d89be284..753e72766 100644 --- a/core/src/main/java/org/apache/struts2/conversion/impl/DateConverter.java +++ b/core/src/main/java/org/apache/struts2/conversion/impl/DateConverter.java @@ -19,7 +19,7 @@ package org.apache.struts2.conversion.impl; import org.apache.struts2.ActionContext; -import org.apache.struts2.TextProvider; +import org.apache.struts2.text.TextProvider; import org.apache.struts2.util.ValueStack; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/core/src/main/java/org/apache/struts2/conversion/impl/XWorkConverter.java b/core/src/main/java/org/apache/struts2/conversion/impl/XWorkConverter.java index 507f765d0..89d3ecceb 100644 --- a/core/src/main/java/org/apache/struts2/conversion/impl/XWorkConverter.java +++ b/core/src/main/java/org/apache/struts2/conversion/impl/XWorkConverter.java @@ -21,7 +21,7 @@ package org.apache.struts2.conversion.impl; import org.apache.struts2.ActionContext; import org.apache.struts2.FileManager; import org.apache.struts2.FileManagerFactory; -import org.apache.struts2.LocalizedTextProvider; +import org.apache.struts2.text.LocalizedTextProvider; import org.apache.struts2.conversion.ConversionAnnotationProcessor; import org.apache.struts2.conversion.ConversionFileProcessor; import org.apache.struts2.conversion.TypeConverter; diff --git a/core/src/main/java/org/apache/struts2/interceptor/AbstractFileUploadInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/AbstractFileUploadInterceptor.java index 87c1d32f3..9bad6896c 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/AbstractFileUploadInterceptor.java +++ b/core/src/main/java/org/apache/struts2/interceptor/AbstractFileUploadInterceptor.java @@ -20,12 +20,10 @@ package org.apache.struts2.interceptor; import org.apache.struts2.LocaleProvider; import org.apache.struts2.LocaleProviderFactory; -import org.apache.struts2.TextProvider; -import org.apache.struts2.TextProviderFactory; +import org.apache.struts2.text.TextProvider; +import org.apache.struts2.text.TextProviderFactory; import org.apache.struts2.inject.Container; import org.apache.struts2.inject.Inject; -import org.apache.struts2.interceptor.AbstractInterceptor; -import org.apache.struts2.interceptor.ValidationAware; import org.apache.struts2.util.TextParseUtil; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/core/src/main/java/org/apache/struts2/interceptor/AliasInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/AliasInterceptor.java index 5a02dad96..37b5c383c 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/AliasInterceptor.java +++ b/core/src/main/java/org/apache/struts2/interceptor/AliasInterceptor.java @@ -22,7 +22,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.struts2.ActionContext; import org.apache.struts2.ActionInvocation; -import org.apache.struts2.LocalizedTextProvider; +import org.apache.struts2.text.LocalizedTextProvider; import org.apache.struts2.StrutsConstants; import org.apache.struts2.config.entities.ActionConfig; import org.apache.struts2.dispatcher.HttpParameters; diff --git a/core/src/main/java/org/apache/struts2/interceptor/StaticParametersInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/StaticParametersInterceptor.java index 65c6d57fa..e4b1e73ae 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/StaticParametersInterceptor.java +++ b/core/src/main/java/org/apache/struts2/interceptor/StaticParametersInterceptor.java @@ -23,7 +23,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.struts2.ActionContext; import org.apache.struts2.ActionInvocation; -import org.apache.struts2.LocalizedTextProvider; +import org.apache.struts2.text.LocalizedTextProvider; import org.apache.struts2.StrutsConstants; import org.apache.struts2.config.entities.ActionConfig; import org.apache.struts2.config.entities.Parameterizable; diff --git a/core/src/main/java/org/apache/struts2/interceptor/TokenInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/TokenInterceptor.java index 83d344474..7f12ea7f1 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/TokenInterceptor.java +++ b/core/src/main/java/org/apache/struts2/interceptor/TokenInterceptor.java @@ -19,11 +19,9 @@ package org.apache.struts2.interceptor; import org.apache.struts2.ActionInvocation; -import org.apache.struts2.TextProvider; -import org.apache.struts2.TextProviderFactory; -import org.apache.struts2.interceptor.ValidationAware; +import org.apache.struts2.text.TextProvider; +import org.apache.struts2.text.TextProviderFactory; import org.apache.struts2.inject.Inject; -import org.apache.struts2.interceptor.MethodFilterInterceptor; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.struts2.ServletActionContext; diff --git a/core/src/main/java/org/apache/struts2/ognl/OgnlValueStack.java b/core/src/main/java/org/apache/struts2/ognl/OgnlValueStack.java index a155c1cbc..26a76f7f5 100644 --- a/core/src/main/java/org/apache/struts2/ognl/OgnlValueStack.java +++ b/core/src/main/java/org/apache/struts2/ognl/OgnlValueStack.java @@ -19,7 +19,7 @@ package org.apache.struts2.ognl; import org.apache.struts2.ActionContext; -import org.apache.struts2.TextProvider; +import org.apache.struts2.text.TextProvider; import org.apache.struts2.conversion.impl.XWorkConverter; import org.apache.struts2.inject.Container; import org.apache.struts2.inject.Inject; diff --git a/core/src/main/java/org/apache/struts2/ognl/OgnlValueStackFactory.java b/core/src/main/java/org/apache/struts2/ognl/OgnlValueStackFactory.java index ec32f8986..ac60de0dc 100644 --- a/core/src/main/java/org/apache/struts2/ognl/OgnlValueStackFactory.java +++ b/core/src/main/java/org/apache/struts2/ognl/OgnlValueStackFactory.java @@ -18,7 +18,7 @@ */ package org.apache.struts2.ognl; -import org.apache.struts2.TextProvider; +import org.apache.struts2.text.TextProvider; import org.apache.struts2.conversion.NullHandler; import org.apache.struts2.conversion.impl.XWorkConverter; import org.apache.struts2.inject.Container; diff --git a/core/src/main/java/org/apache/struts2/util/AbstractLocalizedTextProvider.java b/core/src/main/java/org/apache/struts2/text/AbstractLocalizedTextProvider.java similarity index 90% rename from core/src/main/java/org/apache/struts2/util/AbstractLocalizedTextProvider.java rename to core/src/main/java/org/apache/struts2/text/AbstractLocalizedTextProvider.java index 316cbb99e..e7683cd6c 100644 --- a/core/src/main/java/org/apache/struts2/util/AbstractLocalizedTextProvider.java +++ b/core/src/main/java/org/apache/struts2/text/AbstractLocalizedTextProvider.java @@ -16,15 +16,16 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.struts2.util; +package org.apache.struts2.text; -import org.apache.struts2.ActionContext; -import org.apache.struts2.LocalizedTextProvider; -import org.apache.struts2.inject.Inject; import org.apache.commons.lang3.ObjectUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.apache.struts2.ActionContext; import org.apache.struts2.StrutsConstants; +import org.apache.struts2.inject.Inject; +import org.apache.struts2.util.TextParseUtil; +import org.apache.struts2.util.ValueStack; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; @@ -224,11 +225,10 @@ abstract class AbstractLocalizedTextProvider implements LocalizedTextProvider { /** * Clear a specific bundle + locale combination from thebundlesMap.
- * Intended for descendants to use clear a bundle + locale combination.
+ * Intended for descendants to use clear a bundle + locale combination.
*
* @param bundleName The bundle (combined with locale) to remove from the bundle map
* @param locale Provides the locale to combine with the bundle to get the key
- *
* @since 6.0.0
*/
protected void clearBundle(final String bundleName, Locale locale) {
@@ -239,13 +239,13 @@ abstract class AbstractLocalizedTextProvider implements LocalizedTextProvider {
/**
* Clears the missingBundles contents. This allows descendants to
- * clear the "missing bundles cache" when desired (or needed).
- *
+ * clear the "missing bundles cache" when desired (or needed).
+ *
* Note: This method may be used when the bundlesMap state has changed
- * in such a way that bundles that were previously "missing" may now be available
- * (e.g. after calling {@link #addDefaultResourceBundle(java.lang.String)} when the
- * {@link AbstractLocalizedTextProvider} has already been used for failed bundle
- * lookups of a given key, or some transitory state made a bundle lookup fail.
+ * in such a way that bundles that were previously "missing" may now be available
+ * (e.g. after calling {@link #addDefaultResourceBundle(java.lang.String)} when the
+ * {@link AbstractLocalizedTextProvider} has already been used for failed bundle
+ * lookups of a given key, or some transitory state made a bundle lookup fail.
*
* @since 6.0.0
*/
@@ -287,10 +287,10 @@ abstract class AbstractLocalizedTextProvider implements LocalizedTextProvider {
/**
* A helper method for {@link ResourceBundle} bundle reload logic.
- *
+ *
* Uses standard {@link ResourceBundle} methods to clear the bundle caches for the * {@link ClassLoader} instances that this class is aware of at the time of the call. - * + *
* The clearCache() methods have been available since Java 1.6, so
* it is anticipated the logic will work on any subsequent JVM versions.
*
@@ -301,27 +301,29 @@ abstract class AbstractLocalizedTextProvider implements LocalizedTextProvider {
ResourceBundle.clearCache(); // Bundles loaded by the caller's classloader.
ResourceBundle.clearCache(ccl); // Bundles loaded by the context classloader (may be the same).
// Clear the bundle cache for any non-null delegated classloaders.
- delegatedClassLoaderMap.forEach( (key, value) -> { if (value != null) ResourceBundle.clearCache(value) ;} );
+ delegatedClassLoaderMap.forEach((key, value) -> {
+ if (value != null) ResourceBundle.clearCache(value);
+ });
}
/**
* "Hacky" helper method that attempts to clear the Tomcat ResourceEntry
* {@link Map} using knowledge of the Tomcat source code.
- *
+ *
* It relies on the {@link #TOMCAT_RESOURCE_ENTRIES_FIELD} field name, base class name * {@link #TOMCAT_WEBAPP_CLASSLOADER_BASE}. and descendant class names {@link #TOMCAT_WEBAPP_CLASSLOADER}, * {@link #TOMCAT_PARALLEL_WEBAPP_CLASSLOADER}, to keep the values identified in the constants. * It appears to be valid for Tomcat versions 7-10 so far, but could become invalid at any time in the future * when the resource handling logic in Tomcat changes. - * + *
* Note: With Java 9+, calling this method may result in "Illegal reflective access" warnings. Be aware - * its logic may fail in a future version of Java that blocks the reflection calls needed for this method. + * its logic may fail in a future version of Java that blocks the reflection calls needed for this method. */ private void clearTomcatCache() { ClassLoader loader = getCurrentThreadContextClassLoader(); // no need for compilation here. - Class cl = loader.getClass(); - Class superCl = cl.getSuperclass(); + Class> cl = loader.getClass(); + Class> superCl = cl.getSuperclass(); try { if ((TOMCAT_WEBAPP_CLASSLOADER.equals(cl.getName()) || TOMCAT_PARALLEL_WEBAPP_CLASSLOADER.equals(cl.getName())) && @@ -348,19 +350,19 @@ abstract class AbstractLocalizedTextProvider implements LocalizedTextProvider { /** * Helper method that is intended to clear a {@link Map} instance by name. - * + *
* This method relies on reflection to perform its operations, and may be blocked in Java 9 and later,
* depending on the accessibility of the field.
*
- * @param cl The {@link Class} of the obj parameter.
- * @param obj The {@link Object} from which the named field is to be extracted (may be null for a static field).
+ * @param cl The {@link Class} of the obj parameter.
+ * @param obj The {@link Object} from which the named field is to be extracted (may be null for a static field).
* @param name The name of the field containing a {@link Map} reference.
- * @throws NoSuchFieldException if a field accessed by this call does not exist.
- * @throws IllegalAccessException if a field, method or or class accessed by this call cannot be accessed.
- * @throws NoSuchMethodException if a method accessed by this call does not exist.
+ * @throws NoSuchFieldException if a field accessed by this call does not exist.
+ * @throws IllegalAccessException if a field, method or or class accessed by this call cannot be accessed.
+ * @throws NoSuchMethodException if a method accessed by this call does not exist.
* @throws InvocationTargetException if a method accessed by this call fails invocation.
*/
- private void clearMap(Class cl, Object obj, String name)
+ private void clearMap(Class> cl, Object obj, String name)
throws NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
Field field = cl.getDeclaredField(name);
@@ -372,7 +374,7 @@ abstract class AbstractLocalizedTextProvider implements LocalizedTextProvider {
Object cache = field.get(obj);
synchronized (cache) {
- Class ccl = cache.getClass();
+ Class> ccl = cache.getClass();
Method clearMethod = ccl.getMethod("clear");
clearMethod.invoke(cache);
}
@@ -416,7 +418,6 @@ abstract class AbstractLocalizedTextProvider implements LocalizedTextProvider {
* flow of the {@link LocalizedTextProvider} implementation the descendant provides).
*
* @param searchDefaultBundlesFirst provide {@link String} "true" or "false" to set the flag state accordingly.
- *
* @since 6.0.0
*/
@Inject(value = StrutsConstants.STRUTS_I18N_SEARCH_DEFAULTBUNDLES_FIRST, required = false)
@@ -503,7 +504,7 @@ abstract class AbstractLocalizedTextProvider implements LocalizedTextProvider {
* @return the default message.
*/
protected GetDefaultMessageReturnArg getDefaultMessage(String key, Locale locale, ValueStack valueStack, Object[] args,
- String defaultMessage) {
+ String defaultMessage) {
GetDefaultMessageReturnArg result = null;
boolean found = true;
@@ -539,18 +540,18 @@ abstract class AbstractLocalizedTextProvider implements LocalizedTextProvider {
* general key would be passed in the alternateKey parameter.
*
null).
- * @param defaultMessage the default message {@link String} to use if both key lookup operations fail.
+ * @param key the initial key to search for a value within the default resource bundles.
+ * @param alternateKey the alternate (fall-back) key to search for a value within the default resource bundles, if the initial key lookup fails.
+ * @param locale the {@link Locale} to be used for the default resource bundle lookup.
+ * @param valueStack the {@link ValueStack} associated with the operation.
+ * @param args the argument array for parameterized messages (may be null).
+ * @param defaultMessage the default message {@link String} to use if both key lookup operations fail.
* @return the {@link GetDefaultMessageReturnArg} result containing the processed message lookup (by key first, then alternateKey if key's lookup fails).
- * If both key lookup operations fail, defaultMessage is used for processing.
- * If defaultMessage is null then the return result may be null.
+ * If both key lookup operations fail, defaultMessage is used for processing.
+ * If defaultMessage is null then the return result may be null.
*/
protected GetDefaultMessageReturnArg getDefaultMessageWithAlternateKey(String key, String alternateKey, Locale locale, ValueStack valueStack,
- Object[] args, String defaultMessage) {
+ Object[] args, String defaultMessage) {
GetDefaultMessageReturnArg result;
if (alternateKey == null || alternateKey.isEmpty()) {
result = getDefaultMessage(key, locale, valueStack, args, defaultMessage);
@@ -593,8 +594,8 @@ abstract class AbstractLocalizedTextProvider implements LocalizedTextProvider {
*
* @return the message
*/
- protected String findMessage(Class clazz, String key, String indexedKey, Locale locale, Object[] args, Set* Note that unlike {@link StrutsLocalizedTextProvider}, this class {@link GlobalLocalizedTextProvider} will * only search the default bundles for localized text. */ @@ -51,7 +52,7 @@ public class GlobalLocalizedTextProvider extends AbstractLocalizedTextProvider { * @see #findText(Class aClass, String aTextName, Locale locale, String defaultMessage, Object[] args) */ @Override - public String findText(Class aClass, String aTextName, Locale locale) { + public String findText(Class> aClass, String aTextName, Locale locale) { return findText(aClass, aTextName, locale, aTextName, new Object[0]); } @@ -88,7 +89,7 @@ public class GlobalLocalizedTextProvider extends AbstractLocalizedTextProvider { * @return the localized text, or null if none can be found and no defaultMessage is provided */ @Override - public String findText(Class aClass, String aTextName, Locale locale, String defaultMessage, Object[] args) { + public String findText(Class> aClass, String aTextName, Locale locale, String defaultMessage, Object[] args) { ValueStack valueStack = ActionContext.getContext().getValueStack(); return findText(aClass, aTextName, locale, defaultMessage, args, valueStack); @@ -132,7 +133,7 @@ public class GlobalLocalizedTextProvider extends AbstractLocalizedTextProvider { * @return the localized text, or null if none can be found and no defaultMessage is provided */ @Override - public String findText(Class aClass, String aTextName, Locale locale, String defaultMessage, Object[] args, ValueStack valueStack) { + public String findText(Class> aClass, String aTextName, Locale locale, String defaultMessage, Object[] args, ValueStack valueStack) { String indexedTextName = null; if (aTextName == null) { LOG.warn("Trying to find text with null key!"); diff --git a/core/src/main/java/org/apache/struts2/LocalizedTextProvider.java b/core/src/main/java/org/apache/struts2/text/LocalizedTextProvider.java similarity index 82% rename from core/src/main/java/org/apache/struts2/LocalizedTextProvider.java rename to core/src/main/java/org/apache/struts2/text/LocalizedTextProvider.java index 967a6d478..fcaf39975 100644 --- a/core/src/main/java/org/apache/struts2/LocalizedTextProvider.java +++ b/core/src/main/java/org/apache/struts2/text/LocalizedTextProvider.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.struts2; +package org.apache.struts2.text; import org.apache.struts2.util.ValueStack; @@ -32,11 +32,11 @@ public interface LocalizedTextProvider extends Serializable { ResourceBundle findResourceBundle(String aBundleName, Locale locale); - String findText(Class aClass, String aTextName, Locale locale); + String findText(Class> aClass, String aTextName, Locale locale); - String findText(Class aClass, String aTextName, Locale locale, String defaultMessage, Object[] args); + String findText(Class> aClass, String aTextName, Locale locale, String defaultMessage, Object[] args); - String findText(Class aClass, String aTextName, Locale locale, String defaultMessage, Object[] args, ValueStack valueStack); + String findText(Class> aClass, String aTextName, Locale locale, String defaultMessage, Object[] args, ValueStack valueStack); String findText(ResourceBundle bundle, String aTextName, Locale locale); diff --git a/core/src/main/java/org/apache/struts2/ResourceBundleTextProvider.java b/core/src/main/java/org/apache/struts2/text/ResourceBundleTextProvider.java similarity index 93% rename from core/src/main/java/org/apache/struts2/ResourceBundleTextProvider.java rename to core/src/main/java/org/apache/struts2/text/ResourceBundleTextProvider.java index b2ee3cad7..a0385fd6e 100644 --- a/core/src/main/java/org/apache/struts2/ResourceBundleTextProvider.java +++ b/core/src/main/java/org/apache/struts2/text/ResourceBundleTextProvider.java @@ -16,7 +16,9 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.struts2; +package org.apache.struts2.text; + +import org.apache.struts2.LocaleProvider; import java.util.ResourceBundle; @@ -39,7 +41,7 @@ public interface ResourceBundleTextProvider extends TextProvider { * * @param clazz the class to use for loading. */ - void setClazz(Class clazz); + void setClazz(Class> clazz); /** * Set the LocaleProvider to use. diff --git a/core/src/main/java/org/apache/struts2/util/StrutsLocalizedTextProvider.java b/core/src/main/java/org/apache/struts2/text/StrutsLocalizedTextProvider.java similarity index 96% rename from core/src/main/java/org/apache/struts2/util/StrutsLocalizedTextProvider.java rename to core/src/main/java/org/apache/struts2/text/StrutsLocalizedTextProvider.java index ea37726b9..3199d8a0f 100644 --- a/core/src/main/java/org/apache/struts2/util/StrutsLocalizedTextProvider.java +++ b/core/src/main/java/org/apache/struts2/text/StrutsLocalizedTextProvider.java @@ -16,13 +16,14 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.struts2.util; +package org.apache.struts2.text; import org.apache.struts2.ActionContext; import org.apache.struts2.ActionInvocation; import org.apache.struts2.ModelDriven; import org.apache.struts2.conversion.impl.XWorkConverter; import org.apache.struts2.inject.Inject; +import org.apache.struts2.util.ValueStack; import org.apache.struts2.util.reflection.ReflectionProvider; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -56,7 +57,7 @@ public class StrutsLocalizedTextProvider extends AbstractLocalizedTextProvider { * @see #findText(Class aClass, String aTextName, Locale locale, String defaultMessage, Object[] args) */ @Override - public String findText(Class aClass, String aTextName, Locale locale) { + public String findText(Class> aClass, String aTextName, Locale locale) { return findText(aClass, aTextName, locale, aTextName, new Object[0]); } @@ -109,7 +110,7 @@ public class StrutsLocalizedTextProvider extends AbstractLocalizedTextProvider { * @return the localized text, or null if none can be found and no defaultMessage is provided */ @Override - public String findText(Class aClass, String aTextName, Locale locale, String defaultMessage, Object[] args) { + public String findText(Class> aClass, String aTextName, Locale locale, String defaultMessage, Object[] args) { ValueStack valueStack = ActionContext.getContext().getValueStack(); return findText(aClass, aTextName, locale, defaultMessage, args, valueStack); @@ -169,7 +170,7 @@ public class StrutsLocalizedTextProvider extends AbstractLocalizedTextProvider { * @return the localized text, or null if none can be found and no defaultMessage is provided */ @Override - public String findText(Class aClass, String aTextName, Locale locale, String defaultMessage, Object[] args, + public String findText(Class> aClass, String aTextName, Locale locale, String defaultMessage, Object[] args, ValueStack valueStack) { String indexedTextName = null; if (aTextName == null) { @@ -220,7 +221,7 @@ public class StrutsLocalizedTextProvider extends AbstractLocalizedTextProvider { if (actionInvocation != null) { Object action = actionInvocation.getAction(); if (action instanceof ModelDriven) { - Object model = ((ModelDriven) action).getModel(); + Object model = ((ModelDriven>) action).getModel(); if (model != null) { msg = findMessage(model.getClass(), aTextName, indexedTextName, locale, args, null, valueStack); if (msg != null) { @@ -232,7 +233,7 @@ public class StrutsLocalizedTextProvider extends AbstractLocalizedTextProvider { } // nothing still? alright, search the package hierarchy now - for (Class clazz = aClass; + for (Class> clazz = aClass; (clazz != null) && !clazz.equals(Object.class); clazz = clazz.getSuperclass()) { @@ -283,7 +284,7 @@ public class StrutsLocalizedTextProvider extends AbstractLocalizedTextProvider { PropertyDescriptor propertyDescriptor = reflectionProvider.getPropertyDescriptor(actionObj.getClass(), prop); if (propertyDescriptor != null) { - Class clazz = propertyDescriptor.getPropertyType(); + Class> clazz = propertyDescriptor.getPropertyType(); if (clazz != null) { if (obj != null) { diff --git a/core/src/main/java/org/apache/struts2/StrutsTextProviderFactory.java b/core/src/main/java/org/apache/struts2/text/StrutsTextProviderFactory.java similarity index 95% rename from core/src/main/java/org/apache/struts2/StrutsTextProviderFactory.java rename to core/src/main/java/org/apache/struts2/text/StrutsTextProviderFactory.java index 06a4617a0..4f7331263 100644 --- a/core/src/main/java/org/apache/struts2/StrutsTextProviderFactory.java +++ b/core/src/main/java/org/apache/struts2/text/StrutsTextProviderFactory.java @@ -16,8 +16,9 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.struts2; +package org.apache.struts2.text; +import org.apache.struts2.LocaleProviderFactory; import org.apache.struts2.inject.Inject; import java.util.ResourceBundle; @@ -49,7 +50,7 @@ public class StrutsTextProviderFactory implements TextProviderFactory { } @Override - public TextProvider createInstance(Class clazz) { + public TextProvider createInstance(Class> clazz) { TextProvider instance = getTextProvider(clazz); if (instance instanceof ResourceBundleTextProvider) { ((ResourceBundleTextProvider) instance).setClazz(clazz); diff --git a/core/src/main/java/org/apache/struts2/TextProvider.java b/core/src/main/java/org/apache/struts2/text/TextProvider.java similarity index 96% rename from core/src/main/java/org/apache/struts2/TextProvider.java rename to core/src/main/java/org/apache/struts2/text/TextProvider.java index 16924a757..bdd2f026c 100644 --- a/core/src/main/java/org/apache/struts2/TextProvider.java +++ b/core/src/main/java/org/apache/struts2/text/TextProvider.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.struts2; +package org.apache.struts2.text; import org.apache.struts2.util.ValueStack; @@ -33,9 +33,9 @@ import java.util.ResourceBundle; * global texts to be defined for an application base class. * *
- * You can override {@link LocaleProvider#getLocale()} to change the behaviour of how + * You can override {@link org.apache.struts2.LocaleProvider#getLocale()} to change the behaviour of how * to choose locale for the bundles that are returned. Typically you would - * use the {@link LocaleProvider} interface to get the users configured locale. + * use the {@link org.apache.struts2.LocaleProvider} interface to get the users configured locale. *
* *@@ -56,7 +56,7 @@ import java.util.ResourceBundle; *
* @author Jason Carreira * @author Rainer Hermanns - * @see LocaleProvider + * @see org.apache.struts2.LocaleProvider * @see TextProviderSupport */ public interface TextProvider { diff --git a/core/src/main/java/org/apache/struts2/TextProviderFactory.java b/core/src/main/java/org/apache/struts2/text/TextProviderFactory.java similarity index 91% rename from core/src/main/java/org/apache/struts2/TextProviderFactory.java rename to core/src/main/java/org/apache/struts2/text/TextProviderFactory.java index b7c5a1f5d..5ef4070cd 100644 --- a/core/src/main/java/org/apache/struts2/TextProviderFactory.java +++ b/core/src/main/java/org/apache/struts2/text/TextProviderFactory.java @@ -16,13 +16,13 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.struts2; +package org.apache.struts2.text; import java.util.ResourceBundle; public interface TextProviderFactory { - TextProvider createInstance(Class clazz); + TextProvider createInstance(Class> clazz); TextProvider createInstance(ResourceBundle bundle); diff --git a/core/src/main/java/org/apache/struts2/TextProviderSupport.java b/core/src/main/java/org/apache/struts2/text/TextProviderSupport.java similarity index 90% rename from core/src/main/java/org/apache/struts2/TextProviderSupport.java rename to core/src/main/java/org/apache/struts2/text/TextProviderSupport.java index cee8b8601..bf2fa685a 100644 --- a/core/src/main/java/org/apache/struts2/TextProviderSupport.java +++ b/core/src/main/java/org/apache/struts2/text/TextProviderSupport.java @@ -16,12 +16,19 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.struts2; +package org.apache.struts2.text; +import org.apache.struts2.LocaleProvider; +import org.apache.struts2.LocaleProviderFactory; import org.apache.struts2.inject.Inject; import org.apache.struts2.util.ValueStack; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Locale; +import java.util.ResourceBundle; /** * Default TextProvider implementation. @@ -31,7 +38,7 @@ import java.util.*; */ public class TextProviderSupport implements ResourceBundleTextProvider { - protected Class clazz; + protected Class> clazz; protected LocaleProvider localeProvider; protected ResourceBundle bundle; protected LocalizedTextProvider localizedTextProvider; @@ -42,7 +49,7 @@ public class TextProviderSupport implements ResourceBundleTextProvider { * @param clazz a clazz to use for reading the resource bundle. * @param provider a locale provider. */ - public TextProviderSupport(Class clazz, LocaleProvider provider, LocalizedTextProvider localizedTextProvider) { + public TextProviderSupport(Class> clazz, LocaleProvider provider, LocalizedTextProvider localizedTextProvider) { this.clazz = clazz; this.localeProvider = provider; this.localizedTextProvider = localizedTextProvider; @@ -72,7 +79,7 @@ public class TextProviderSupport implements ResourceBundleTextProvider { * @param clazz a clazz to use for reading the resource bundle. */ @Override - public void setClazz(Class clazz) { + public void setClazz(Class> clazz) { this.clazz = clazz; } @@ -103,13 +110,13 @@ public class TextProviderSupport implements ResourceBundleTextProvider { * class. */ public boolean hasKey(String key) { - String message; - if (clazz != null) { - message = localizedTextProvider.findText(clazz, key, getLocale(), null, new Object[0] ); + String message; + if (clazz != null) { + message = localizedTextProvider.findText(clazz, key, getLocale(), null, new Object[0]); } else { message = localizedTextProvider.findText(bundle, key, getLocale(), null, new Object[0]); } - return message != null; + return message != null; } /** @@ -135,7 +142,7 @@ public class TextProviderSupport implements ResourceBundleTextProvider { * a cascading style that allow global texts to be defined for an application base * class. If no text is found for this text name, the default value is returned. * - * @param key name of text to be found + * @param key name of text to be found * @param defaultValue the default value which will be returned if no text is found * @return value of named text or the provided defaultValue if no value is found */ @@ -151,7 +158,7 @@ public class TextProviderSupport implements ResourceBundleTextProvider { * a cascading style that allow global texts to be defined for an application base * class. If no text is found for this text name, the default value is returned. * - * @param key name of text to be found + * @param key name of text to be found * @param defaultValue the default value which will be returned if no text is found * @return value of named text or the provided defaultValue if no value is found */ @@ -169,8 +176,8 @@ public class TextProviderSupport implements ResourceBundleTextProvider { * a cascading style that allow global texts to be defined for an application base * class. If no text is found for this text name, the default value is returned. * - * @param key name of text to be found - * @param args a List of args to be used in a MessageFormat message + * @param key name of text to be found + * @param args a List of args to be used in a MessageFormat message * @return value of named text or the provided key if no value is found */ public String getText(String key, List> args) { @@ -185,8 +192,8 @@ public class TextProviderSupport implements ResourceBundleTextProvider { * a cascading style that allow global texts to be defined for an application base * class. If no text is found for this text name, the default value is returned. * - * @param key name of text to be found - * @param args an array of args to be used in a MessageFormat message + * @param key name of text to be found + * @param args an array of args to be used in a MessageFormat message * @return value of named text or the provided key if no value is found */ public String getText(String key, String[] args) { @@ -201,7 +208,7 @@ public class TextProviderSupport implements ResourceBundleTextProvider { * a cascading style that allow global texts to be defined for an application base * class. If no text is found for this text name, the default value is returned. * - * @param key name of text to be found + * @param key name of text to be found * @param defaultValue the default value which will be returned if no text is found * @param args a List of args to be used in a MessageFormat message * @return value of named text or the provided defaultValue if no value is found @@ -242,7 +249,7 @@ public class TextProviderSupport implements ResourceBundleTextProvider { * default value is returned. Instead of using the value stack in the ActionContext * this version of the getText() method uses the provided value stack. * - * @param key the resource bundle key that is to be searched for + * @param key the resource bundle key that is to be searched for * @param defaultValue the default value which will be returned if no message is found * @param args a list args to be used in a {@link java.text.MessageFormat} message * @param stack the value stack to use for finding the text @@ -251,10 +258,10 @@ public class TextProviderSupport implements ResourceBundleTextProvider { public String getText(String key, String defaultValue, List> args, ValueStack stack) { Object[] argsArray = ((args != null) ? args.toArray() : null); Locale locale; - if (stack == null){ - locale = getLocale(); - }else{ - locale = stack.getActionContext().getLocale(); + if (stack == null) { + locale = getLocale(); + } else { + locale = stack.getActionContext().getLocale(); } if (locale == null) { locale = getLocale(); @@ -266,7 +273,6 @@ public class TextProviderSupport implements ResourceBundleTextProvider { } } - /** * Gets a message based on a key using the supplied args, as defined in * {@link java.text.MessageFormat}, or, if the message is not found, a supplied @@ -280,21 +286,7 @@ public class TextProviderSupport implements ResourceBundleTextProvider { * @return the message as found in the resource bundle, or defaultValue if none is found */ public String getText(String key, String defaultValue, String[] args, ValueStack stack) { - Locale locale; - if (stack == null){ - locale = getLocale(); - }else{ - locale = stack.getActionContext().getLocale(); - } - if (locale == null) { - locale = getLocale(); - } - if (clazz != null) { - return localizedTextProvider.findText(clazz, key, locale, defaultValue, args, stack); - } else { - return localizedTextProvider.findText(bundle, key, locale, defaultValue, args, stack); - } - + return getText(key, defaultValue, args != null ? Arrays.stream(args).toList() : List.of(), stack); } /** diff --git a/core/src/main/java/org/apache/struts2/util/DebugUtils.java b/core/src/main/java/org/apache/struts2/util/DebugUtils.java index 099f70171..a7cb8dcce 100644 --- a/core/src/main/java/org/apache/struts2/util/DebugUtils.java +++ b/core/src/main/java/org/apache/struts2/util/DebugUtils.java @@ -18,7 +18,7 @@ */ package org.apache.struts2.util; -import org.apache.struts2.TextProvider; +import org.apache.struts2.text.TextProvider; import org.apache.struts2.interceptor.ValidationAware; import org.apache.logging.log4j.Logger; diff --git a/core/src/main/java/org/apache/struts2/util/TextProviderHelper.java b/core/src/main/java/org/apache/struts2/util/TextProviderHelper.java index 7cda5d490..dc5120ef0 100644 --- a/core/src/main/java/org/apache/struts2/util/TextProviderHelper.java +++ b/core/src/main/java/org/apache/struts2/util/TextProviderHelper.java @@ -18,8 +18,7 @@ */ package org.apache.struts2.util; -import org.apache.struts2.TextProvider; -import org.apache.struts2.util.ValueStack; +import org.apache.struts2.text.TextProvider; import org.apache.commons.text.StringEscapeUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/core/src/main/java/org/apache/struts2/util/TokenHelper.java b/core/src/main/java/org/apache/struts2/util/TokenHelper.java index 985ad6580..4b4b939fa 100644 --- a/core/src/main/java/org/apache/struts2/util/TokenHelper.java +++ b/core/src/main/java/org/apache/struts2/util/TokenHelper.java @@ -19,7 +19,7 @@ package org.apache.struts2.util; import org.apache.struts2.ActionContext; -import org.apache.struts2.LocalizedTextProvider; +import org.apache.struts2.text.LocalizedTextProvider; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.struts2.dispatcher.Parameter; diff --git a/core/src/main/java/org/apache/struts2/validator/DefaultActionValidatorManager.java b/core/src/main/java/org/apache/struts2/validator/DefaultActionValidatorManager.java index 275aaf169..2f2b758b7 100644 --- a/core/src/main/java/org/apache/struts2/validator/DefaultActionValidatorManager.java +++ b/core/src/main/java/org/apache/struts2/validator/DefaultActionValidatorManager.java @@ -21,7 +21,7 @@ package org.apache.struts2.validator; import org.apache.struts2.ActionContext; import org.apache.struts2.FileManager; import org.apache.struts2.FileManagerFactory; -import org.apache.struts2.TextProviderFactory; +import org.apache.struts2.text.TextProviderFactory; import org.apache.struts2.inject.Inject; import org.apache.struts2.util.ClassLoaderUtil; import org.apache.struts2.util.ValueStack; diff --git a/core/src/main/java/org/apache/struts2/validator/DelegatingValidatorContext.java b/core/src/main/java/org/apache/struts2/validator/DelegatingValidatorContext.java index 56500f71f..255369745 100644 --- a/core/src/main/java/org/apache/struts2/validator/DelegatingValidatorContext.java +++ b/core/src/main/java/org/apache/struts2/validator/DelegatingValidatorContext.java @@ -21,11 +21,11 @@ package org.apache.struts2.validator; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.struts2.ActionContext; -import org.apache.struts2.CompositeTextProvider; +import org.apache.struts2.text.CompositeTextProvider; import org.apache.struts2.LocaleProvider; import org.apache.struts2.LocaleProviderFactory; -import org.apache.struts2.TextProvider; -import org.apache.struts2.TextProviderFactory; +import org.apache.struts2.text.TextProvider; +import org.apache.struts2.text.TextProviderFactory; import org.apache.struts2.interceptor.ValidationAware; import org.apache.struts2.util.ValueStack; diff --git a/core/src/main/java/org/apache/struts2/validator/ValidatorContext.java b/core/src/main/java/org/apache/struts2/validator/ValidatorContext.java index f5401b7ce..8460ae031 100644 --- a/core/src/main/java/org/apache/struts2/validator/ValidatorContext.java +++ b/core/src/main/java/org/apache/struts2/validator/ValidatorContext.java @@ -19,7 +19,7 @@ package org.apache.struts2.validator; import org.apache.struts2.LocaleProvider; -import org.apache.struts2.TextProvider; +import org.apache.struts2.text.TextProvider; import org.apache.struts2.interceptor.ValidationAware; /** diff --git a/core/src/main/java/org/apache/struts2/validator/validators/ValidatorSupport.java b/core/src/main/java/org/apache/struts2/validator/validators/ValidatorSupport.java index 4362884e3..3b896d4dc 100644 --- a/core/src/main/java/org/apache/struts2/validator/validators/ValidatorSupport.java +++ b/core/src/main/java/org/apache/struts2/validator/validators/ValidatorSupport.java @@ -18,7 +18,7 @@ */ package org.apache.struts2.validator.validators; -import org.apache.struts2.TextProviderFactory; +import org.apache.struts2.text.TextProviderFactory; import org.apache.struts2.inject.Inject; import org.apache.struts2.util.TextParseUtil; import org.apache.struts2.util.ValueStack; diff --git a/core/src/main/java/org/apache/struts2/validator/validators/VisitorFieldValidator.java b/core/src/main/java/org/apache/struts2/validator/validators/VisitorFieldValidator.java index 3b4d87805..70a8e4c03 100644 --- a/core/src/main/java/org/apache/struts2/validator/validators/VisitorFieldValidator.java +++ b/core/src/main/java/org/apache/struts2/validator/validators/VisitorFieldValidator.java @@ -19,8 +19,8 @@ package org.apache.struts2.validator.validators; import org.apache.struts2.ActionContext; -import org.apache.struts2.CompositeTextProvider; -import org.apache.struts2.TextProvider; +import org.apache.struts2.text.CompositeTextProvider; +import org.apache.struts2.text.TextProvider; import org.apache.struts2.inject.Inject; import org.apache.struts2.util.ValueStack; import org.apache.struts2.validator.ActionValidatorManager; diff --git a/core/src/main/resources/struts-beans.xml b/core/src/main/resources/struts-beans.xml index d3f8c879a..6b266f0f8 100644 --- a/core/src/main/resources/struts-beans.xml +++ b/core/src/main/resources/struts-beans.xml @@ -128,15 +128,15 @@CompositeTextProviderTest
- *
- * @author Rainer Hermanns
- * @version $Id$
- */
public class CompositeTextProviderTest extends XWorkTestCase {
-
private CompositeTextProvider textProvider = null;
-
- public void testGetText() throws Exception {
+ public void testGetText() {
// we should get the text from the 1st text provider
assertEquals(textProvider.getText("name"), "1 name");
assertEquals(textProvider.getText("age"), "1 age");
@@ -45,8 +40,7 @@ public class CompositeTextProviderTest extends XWorkTestCase {
assertEquals(textProvider.getText("someNonExistingKey"), "someNonExistingKey");
}
-
- public void testGetTextWithDefaultValues() throws Exception {
+ public void testGetTextWithDefaultValues() {
assertEquals(textProvider.getText("name", "some default name"), "1 name");
assertEquals(textProvider.getText("age", "some default age"), "1 age");
assertEquals(textProvider.getText("no_such_key", "default value"), "default value");
@@ -56,16 +50,24 @@ public class CompositeTextProviderTest extends XWorkTestCase {
assertEquals(textProvider.getText("bike", "some default bike"), "This is a bike");
}
-
- public void testGetTextWithDefaultValuesAndArgs() throws Exception {
+ public void testGetTextWithDefaultValuesAndArgs() {
assertEquals(textProvider.getText("goodnight", "say good night", "Adam"), "1 good night Adam");
- assertEquals(textProvider.getText("goodnight", "say good night", new String[] { "Adam" }), "1 good night Adam");
- assertEquals(textProvider.getText("goodnight", "say good night", new ArrayList