Updated Branches:
  refs/heads/master 02c18c942 -> 843fcf628

WICKET-3879 Support FormValidator and package level resource bundles


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/843fcf62
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/843fcf62
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/843fcf62

Branch: refs/heads/master
Commit: 843fcf6287534f8ee481d2e4da63bfd52d76f2b0
Parents: 02c18c9
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Tue Mar 20 13:06:49 2012 +0200
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Tue Mar 20 13:06:49 2012 +0200

----------------------------------------------------------------------
 .../loader/ValidatorStringResourceLoader.java      |   65 ++++++++++++--
 ...ringResourceLoaderTest$FormValidator.properties |    1 +
 .../loader/ValidatorStringResourceLoaderTest.java  |   72 +++++++++++++++
 3 files changed, 130 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/843fcf62/wicket-core/src/main/java/org/apache/wicket/resource/loader/ValidatorStringResourceLoader.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/resource/loader/ValidatorStringResourceLoader.java
 
b/wicket-core/src/main/java/org/apache/wicket/resource/loader/ValidatorStringResourceLoader.java
index ad7a610..8dc5cbc 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/resource/loader/ValidatorStringResourceLoader.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/resource/loader/ValidatorStringResourceLoader.java
@@ -19,7 +19,10 @@ package org.apache.wicket.resource.loader;
 import java.util.Locale;
 
 import org.apache.wicket.Component;
+import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.FormComponent;
+import org.apache.wicket.markup.html.form.validation.FormValidatorAdapter;
+import org.apache.wicket.markup.html.form.validation.IFormValidator;
 import org.apache.wicket.validation.IValidator;
 import org.apache.wicket.validation.ValidatorAdapter;
 import org.slf4j.Logger;
@@ -57,8 +60,10 @@ public class ValidatorStringResourceLoader extends 
ComponentStringResourceLoader
        public String loadStringResource(Class<?> clazz, final String key, 
final Locale locale,
                final String style, final String variation)
        {
-               // only care about IValidator subclasses
-               if (clazz == null || !IValidator.class.isAssignableFrom(clazz))
+               // only care about IValidator/IFormValidator subclasses
+               if (
+                               clazz == null ||
+                               !(IValidator.class.isAssignableFrom(clazz) || 
IFormValidator.class.isAssignableFrom(clazz)))
                {
                        return null;
                }
@@ -74,24 +79,54 @@ public class ValidatorStringResourceLoader extends 
ComponentStringResourceLoader
        public String loadStringResource(final Component component, final 
String key,
                final Locale locale, final String style, final String variation)
        {
-               if (component == null || !(component instanceof FormComponent))
+
+               final String resource;
+               if (component instanceof FormComponent)
                {
-                       return null;
+                       resource = loadStringResource((FormComponent) 
component, key, locale, style, variation);
+               }
+               else if (component instanceof Form)
+               {
+                       resource = loadStringResource((Form) component, key, 
locale, style, variation);
+               }
+               else
+               {
+                       resource = null;
                }
 
-               FormComponent<?> fc = (FormComponent<?>)component;
-               for (IValidator<?> validator : fc.getValidators())
+               return resource;
+       }
+
+
+       private String loadStringResource(Form<?> form, final String key,
+               final Locale locale, final String style, final String variation)
+       {
+               for (IFormValidator validator : form.getFormValidators())
                {
                        Class<?> scope = getScope(validator);
                        String resource = loadStringResource(scope, key, 
locale, style,
-                               variation);
+                                       variation);
                        if (resource != null)
                        {
                                return resource;
                        }
                }
+               return null;
+       }
 
-               // not found
+       private String loadStringResource(FormComponent<?> fc, final String key,
+               final Locale locale, final String style, final String variation)
+       {
+               for (IValidator<?> validator : fc.getValidators())
+               {
+                       Class<?> scope = getScope(validator);
+                       String resource = loadStringResource(scope, key, 
locale, style,
+                                       variation);
+                       if (resource != null)
+                       {
+                               return resource;
+                       }
+               }
                return null;
        }
 
@@ -108,4 +143,18 @@ public class ValidatorStringResourceLoader extends 
ComponentStringResourceLoader
                }
                return scope;
        }
+
+       private Class<? extends IFormValidator> getScope(IFormValidator 
formValidator)
+       {
+               Class<? extends IFormValidator> scope;
+               if (formValidator instanceof FormValidatorAdapter)
+               {
+                       scope = ((FormValidatorAdapter) 
formValidator).getValidator().getClass();
+               }
+               else
+               {
+                       scope = formValidator.getClass();
+               }
+               return scope;
+       }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/843fcf62/wicket-core/src/test/java/org/apache/wicket/resource/loader/ValidatorStringResourceLoaderTest$FormValidator.properties
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/resource/loader/ValidatorStringResourceLoaderTest$FormValidator.properties
 
b/wicket-core/src/test/java/org/apache/wicket/resource/loader/ValidatorStringResourceLoaderTest$FormValidator.properties
new file mode 100644
index 0000000..114ae8d
--- /dev/null
+++ 
b/wicket-core/src/test/java/org/apache/wicket/resource/loader/ValidatorStringResourceLoaderTest$FormValidator.properties
@@ -0,0 +1 @@
+formValidatorFailed=Form Validator loaded OK
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/843fcf62/wicket-core/src/test/java/org/apache/wicket/resource/loader/ValidatorStringResourceLoaderTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/resource/loader/ValidatorStringResourceLoaderTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/resource/loader/ValidatorStringResourceLoaderTest.java
index bf6757f..f19863f 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/resource/loader/ValidatorStringResourceLoaderTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/resource/loader/ValidatorStringResourceLoaderTest.java
@@ -21,8 +21,13 @@ import org.apache.wicket.WicketTestCase;
 import org.apache.wicket.markup.IMarkupResourceStreamProvider;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.FormComponent;
 import org.apache.wicket.markup.html.form.PasswordTextField;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.html.form.validation.IFormValidator;
+import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.Model;
+import org.apache.wicket.util.lang.Objects;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.StringResourceStream;
 import org.apache.wicket.util.tester.FormTester;
@@ -73,6 +78,17 @@ public class ValidatorStringResourceLoaderTest extends 
WicketTestCase
                tester.assertErrorMessages("Class error loaded OK");
        }
        
+       @Test
+       public void formValidator()
+       {
+               tester.startPage(new FormValidatorPage());
+               FormTester formTester = tester.newFormTester("form");
+               formTester.setValue("field1", "value1");
+               formTester.setValue("field2", "value2");
+               formTester.submit();
+               tester.assertErrorMessages("Form Validator loaded OK");
+       }
+       
        private static class ValidatorLoaderPage extends WebPage implements 
IMarkupResourceStreamProvider
        {
                private ValidatorLoaderPage(IValidator<String> validator)
@@ -112,4 +128,60 @@ public class ValidatorStringResourceLoaderTest extends 
WicketTestCase
                        validatable.error(error);
                }
        }
+       
+       private static class FormValidatorPage extends WebPage implements 
IMarkupResourceStreamProvider
+       {
+               private FormValidatorPage()
+               {
+                       FormValidatorEntity entity = new FormValidatorEntity();
+                       CompoundPropertyModel<FormValidatorEntity> model = new 
CompoundPropertyModel<FormValidatorEntity>(entity);
+                       Form<FormValidatorEntity> form = new 
Form<FormValidatorEntity>("form", model);
+                       add(form);
+
+                       TextField<String> field1 = new 
TextField<String>("field1");
+                       TextField<String> field2 = new 
TextField<String>("field2");
+                       form.add(field1, field2);
+                       
+                       form.add(new FormValidator(field1, field2));
+               }
+
+               @Override
+               public IResourceStream getMarkupResourceStream(MarkupContainer 
container, Class<?> containerClass)
+               {
+                       return new StringResourceStream("<html><body><form 
wicket:id='form'><input wicket:id='field1'/><input 
wicket:id='field2'/></form></body></html>");
+               }
+       }
+       
+       private static class FormValidator implements IFormValidator
+       {
+               private final FormComponent<?> fc1;
+               private final FormComponent<?> fc2;
+
+               private FormValidator(FormComponent<?> fc1, FormComponent<?> 
fc2)
+               {
+                       this.fc1 = fc1;
+                       this.fc2 = fc2;
+               }
+               
+               @Override
+               public FormComponent<?>[] getDependentFormComponents()
+               {
+                       return new FormComponent<?>[] {fc1, fc2};
+               }
+
+               @Override
+               public void validate(Form<?> form)
+               {
+                       if (Objects.equal(fc1.getRawInput(), fc2.getRawInput()) 
== false)
+                       {
+                               
form.error(form.getString("formValidatorFailed"));
+                       }
+               }
+       }
+       
+       private static class FormValidatorEntity
+       {
+               private String field1;
+               private String field2;
+       }
 }

Reply via email to