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; + } }
