Adjust usage of the factory

Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/728055dc
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/728055dc
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/728055dc

Branch: refs/heads/master
Commit: 728055dc46b2517791d5860d60a77e6196ddcbaf
Parents: db8ebe7
Author: Lukasz Lenart <lukaszlen...@apache.org>
Authored: Fri Mar 10 08:40:24 2017 +0100
Committer: Lukasz Lenart <lukaszlen...@apache.org>
Committed: Fri Mar 10 08:40:24 2017 +0100

----------------------------------------------------------------------
 .../com/opensymphony/xwork2/ActionSupport.java  |  7 ++----
 .../AnnotationActionValidatorManager.java       |  8 ++++++-
 .../DefaultActionValidatorManager.java          | 12 ++++++++--
 .../validator/validators/ValidatorSupport.java  | 10 +++++++-
 .../validators/VisitorFieldValidator.java       | 24 ++++++++++++++++----
 .../org/apache/struts2/components/I18n.java     |  5 ++--
 .../interceptor/FileUploadInterceptor.java      |  8 ++-----
 .../struts2/tiles/I18NAttributeEvaluator.java   |  7 ++----
 8 files changed, 54 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/struts/blob/728055dc/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java 
b/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java
index d2b551a..bb7048f 100644
--- a/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java
+++ b/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java
@@ -274,11 +274,8 @@ public class ActionSupport implements Action, 
Validateable, ValidationAware, Tex
      */
     private TextProvider getTextProvider() {
         if (textProvider == null) {
-            TextProviderFactory tpf = new TextProviderFactory();
-            if (container != null) {
-                container.inject(tpf);
-            }
-            textProvider = tpf.createInstance(getClass(), this);
+            TextProviderFactory tpf = 
container.inject(TextProviderFactory.class);
+            textProvider = tpf.createInstance(getClass());
         }
         return textProvider;
     }

http://git-wip-us.apache.org/repos/asf/struts/blob/728055dc/core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java
 
b/core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java
index 641bc43..cd6fa4e 100644
--- 
a/core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java
+++ 
b/core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java
@@ -52,6 +52,7 @@ public class AnnotationActionValidatorManager implements 
ActionValidatorManager
     private ValidatorFileParser validatorFileParser;
     private FileManager fileManager;
     private boolean reloadingConfigs;
+    private TextProviderFactory textProviderFactory;
 
     @Inject
     public void setValidatorFactory(ValidatorFactory fac) {
@@ -73,6 +74,11 @@ public class AnnotationActionValidatorManager implements 
ActionValidatorManager
         this.reloadingConfigs = Boolean.parseBoolean(reloadingConfigs);
     }
 
+    @Inject
+    public void setTextProviderFactory(TextProviderFactory 
textProviderFactory) {
+        this.textProviderFactory = textProviderFactory;
+    }
+
     public List<Validator> getValidators(Class clazz, String context) {
         return getValidators(clazz, context, null);
     }
@@ -116,7 +122,7 @@ public class AnnotationActionValidatorManager implements 
ActionValidatorManager
     }
 
     public void validate(Object object, String context, String method) throws 
ValidationException {
-        ValidatorContext validatorContext = new 
DelegatingValidatorContext(object);
+        ValidatorContext validatorContext = new 
DelegatingValidatorContext(object, textProviderFactory);
         validate(object, context, validatorContext, method);
     }
 

http://git-wip-us.apache.org/repos/asf/struts/blob/728055dc/core/src/main/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManager.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManager.java
 
b/core/src/main/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManager.java
index d16afcd..7ad0ac9 100644
--- 
a/core/src/main/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManager.java
+++ 
b/core/src/main/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManager.java
@@ -18,6 +18,7 @@ package com.opensymphony.xwork2.validator;
 import com.opensymphony.xwork2.ActionContext;
 import com.opensymphony.xwork2.FileManager;
 import com.opensymphony.xwork2.FileManagerFactory;
+import com.opensymphony.xwork2.TextProviderFactory;
 import com.opensymphony.xwork2.XWorkConstants;
 import com.opensymphony.xwork2.inject.Inject;
 import com.opensymphony.xwork2.util.ClassLoaderUtil;
@@ -50,16 +51,19 @@ import java.util.*;
  */
 public class DefaultActionValidatorManager implements ActionValidatorManager {
 
+    private final static Logger LOG = 
LogManager.getLogger(DefaultActionValidatorManager.class);
+
     /** The file suffix for any validation file. */
     protected static final String VALIDATION_CONFIG_SUFFIX = "-validation.xml";
 
     private final Map<String, List<ValidatorConfig>> validatorCache = 
Collections.synchronizedMap(new HashMap<String, List<ValidatorConfig>>());
     private final Map<String, List<ValidatorConfig>> validatorFileCache = 
Collections.synchronizedMap(new HashMap<String, List<ValidatorConfig>>());
-    private final Logger LOG = 
LogManager.getLogger(DefaultActionValidatorManager.class);
+
     private ValidatorFactory validatorFactory;
     private ValidatorFileParser validatorFileParser;
     private FileManager fileManager;
     private boolean reloadingConfigs;
+    private TextProviderFactory textProviderFactory;
 
     @Inject
     public void setValidatorFileParser(ValidatorFileParser parser) {
@@ -81,6 +85,10 @@ public class DefaultActionValidatorManager implements 
ActionValidatorManager {
         this.reloadingConfigs = Boolean.parseBoolean(reloadingConfigs);
     }
 
+    public void setTextProviderFactory(TextProviderFactory 
textProviderFactory) {
+        this.textProviderFactory = textProviderFactory;
+    }
+
     public synchronized List<Validator> getValidators(Class clazz, String 
context) {
         return getValidators(clazz, context, null);
     }
@@ -118,7 +126,7 @@ public class DefaultActionValidatorManager implements 
ActionValidatorManager {
     }
 
     public void validate(Object object, String context, String method) throws 
ValidationException {
-        ValidatorContext validatorContext = new 
DelegatingValidatorContext(object);
+        ValidatorContext validatorContext = new 
DelegatingValidatorContext(object, textProviderFactory);
         validate(object, context, validatorContext, method);
     }
 

http://git-wip-us.apache.org/repos/asf/struts/blob/728055dc/core/src/main/java/com/opensymphony/xwork2/validator/validators/ValidatorSupport.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/com/opensymphony/xwork2/validator/validators/ValidatorSupport.java
 
b/core/src/main/java/com/opensymphony/xwork2/validator/validators/ValidatorSupport.java
index 1df9450..3cfdb4b 100644
--- 
a/core/src/main/java/com/opensymphony/xwork2/validator/validators/ValidatorSupport.java
+++ 
b/core/src/main/java/com/opensymphony/xwork2/validator/validators/ValidatorSupport.java
@@ -15,6 +15,8 @@
  */
 package com.opensymphony.xwork2.validator.validators;
 
+import com.opensymphony.xwork2.TextProviderFactory;
+import com.opensymphony.xwork2.inject.Inject;
 import com.opensymphony.xwork2.util.TextParseUtil;
 import com.opensymphony.xwork2.util.ValueStack;
 import com.opensymphony.xwork2.validator.*;
@@ -45,6 +47,12 @@ public abstract class ValidatorSupport implements Validator, 
ShortCircuitableVal
     private String[] messageParameters;
     protected ValueStack stack;
 
+    protected TextProviderFactory textProviderFactory;
+
+    @Inject
+    public void setTextProviderFactory(TextProviderFactory 
textProviderFactory) {
+        this.textProviderFactory = textProviderFactory;
+    }
 
     public void setValueStack(ValueStack stack) {
         this.stack = stack;
@@ -76,7 +84,7 @@ public abstract class ValidatorSupport implements Validator, 
ShortCircuitableVal
                 defaultMessage = messageKey;
             }
             if (validatorContext == null) {
-                validatorContext = new DelegatingValidatorContext(object);
+                validatorContext = new DelegatingValidatorContext(object, 
textProviderFactory);
             }
             List<Object> parsedMessageParameters = null;
             if (messageParameters != null) {

http://git-wip-us.apache.org/repos/asf/struts/blob/728055dc/core/src/main/java/com/opensymphony/xwork2/validator/validators/VisitorFieldValidator.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/com/opensymphony/xwork2/validator/validators/VisitorFieldValidator.java
 
b/core/src/main/java/com/opensymphony/xwork2/validator/validators/VisitorFieldValidator.java
index 9f8e67d..37d9f66 100644
--- 
a/core/src/main/java/com/opensymphony/xwork2/validator/validators/VisitorFieldValidator.java
+++ 
b/core/src/main/java/com/opensymphony/xwork2/validator/validators/VisitorFieldValidator.java
@@ -16,6 +16,8 @@
 package com.opensymphony.xwork2.validator.validators;
 
 import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.CompositeTextProvider;
+import com.opensymphony.xwork2.TextProvider;
 import com.opensymphony.xwork2.inject.Inject;
 import com.opensymphony.xwork2.util.ValueStack;
 import com.opensymphony.xwork2.validator.ActionValidatorManager;
@@ -24,6 +26,8 @@ import com.opensymphony.xwork2.validator.ValidationException;
 import com.opensymphony.xwork2.validator.ValidatorContext;
 
 import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
 
 
 /**
@@ -166,24 +170,36 @@ public class VisitorFieldValidator extends 
FieldValidatorSupport {
         ValidatorContext validatorContext;
 
         if (appendPrefix) {
-            validatorContext = new 
AppendingValidatorContext(getValidatorContext(), o, fieldName, getMessage(o));
+            ValidatorContext parent = getValidatorContext();
+            validatorContext = new AppendingValidatorContext(parent, 
createTextProvider(o, parent), fieldName, getMessage(o));
         } else {
             ValidatorContext parent = getValidatorContext();
-            validatorContext = new DelegatingValidatorContext(parent, 
DelegatingValidatorContext.makeTextProvider(o, parent), parent);
+            CompositeTextProvider textProvider = createTextProvider(o, parent);
+            validatorContext = new DelegatingValidatorContext(parent, 
textProvider, parent);
         }
 
         actionValidatorManager.validate(o, visitorContext, validatorContext);
         stack.pop();
     }
 
+    private CompositeTextProvider createTextProvider(Object o, 
ValidatorContext parent) {
+        List<TextProvider> textProviders = new LinkedList<>();
+        if (o instanceof TextProvider) {
+            textProviders.add((TextProvider) o);
+        }
+        textProviders.add(parent);
+
+        return new CompositeTextProvider(textProviders);
+    }
+
 
     public static class AppendingValidatorContext extends 
DelegatingValidatorContext {
         private String field;
         private String message;
         private ValidatorContext parent;
 
-        public AppendingValidatorContext(ValidatorContext parent, Object 
object, String field, String message) {
-            super(parent, makeTextProvider(object, parent), parent);
+        public AppendingValidatorContext(ValidatorContext parent, TextProvider 
textProvider, String field, String message) {
+            super(parent, textProvider, parent);
 
             this.field = field;
             this.message = message;

http://git-wip-us.apache.org/repos/asf/struts/blob/728055dc/core/src/main/java/org/apache/struts2/components/I18n.java
----------------------------------------------------------------------
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 a04840f..c35f4a0 100644
--- a/core/src/main/java/org/apache/struts2/components/I18n.java
+++ b/core/src/main/java/org/apache/struts2/components/I18n.java
@@ -125,9 +125,8 @@ public class I18n extends Component {
             }
 
             if (bundle != null) {
-                TextProviderFactory tpf = new TextProviderFactory();
-                container.inject(tpf);
-                textProvider = tpf.createInstance(bundle, localeProvider);
+                TextProviderFactory tpf = 
container.inject(TextProviderFactory.class);
+                textProvider = tpf.createInstance(bundle);
                 getStack().push(textProvider);
                 pushed = true;
             }

http://git-wip-us.apache.org/repos/asf/struts/blob/728055dc/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java 
b/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java
index aa7fe01..a428b53 100644
--- 
a/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java
+++ 
b/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java
@@ -446,12 +446,8 @@ public class FileUploadInterceptor extends 
AbstractInterceptor {
     }
 
     private TextProvider getTextProvider(Object action) {
-        TextProviderFactory tpf = new TextProviderFactory();
-        if (container != null) {
-            container.inject(tpf);
-        }
-        LocaleProvider localeProvider = getLocaleProvider(action);
-        return tpf.createInstance(action.getClass(), localeProvider);
+        TextProviderFactory tpf = container.inject(TextProviderFactory.class);
+        return tpf.createInstance(action.getClass());
     }
 
     private LocaleProvider getLocaleProvider(Object action) {

http://git-wip-us.apache.org/repos/asf/struts/blob/728055dc/plugins/tiles/src/main/java/org/apache/struts2/tiles/I18NAttributeEvaluator.java
----------------------------------------------------------------------
diff --git 
a/plugins/tiles/src/main/java/org/apache/struts2/tiles/I18NAttributeEvaluator.java
 
b/plugins/tiles/src/main/java/org/apache/struts2/tiles/I18NAttributeEvaluator.java
index 37150ae..647a289 100644
--- 
a/plugins/tiles/src/main/java/org/apache/struts2/tiles/I18NAttributeEvaluator.java
+++ 
b/plugins/tiles/src/main/java/org/apache/struts2/tiles/I18NAttributeEvaluator.java
@@ -52,11 +52,8 @@ public class I18NAttributeEvaluator extends 
AbstractAttributeEvaluator {
             throw new ConfigurationException("There is no ActionContext for 
current request!");
         }
 
-        TextProviderFactory tpf = new TextProviderFactory();
-        ctx.getContainer().inject(tpf);
-        LocaleProvider localeProvider = 
ctx.getContainer().getInstance(LocaleProvider.class);
-
-        TextProvider textProvider = 
tpf.createInstance(ctx.getActionInvocation().getAction().getClass(), 
localeProvider);
+        TextProviderFactory tpf = 
ctx.getContainer().inject(TextProviderFactory.class);
+        TextProvider textProvider = 
tpf.createInstance(ctx.getActionInvocation().getAction().getClass());
 
         if (textProvider != null) {
             LOG.debug("Trying find text [{}] using TextProvider {}", 
expression, textProvider);

Reply via email to