From 75924e5597b7c70f15cbe59e73cb250150df53cb Mon Sep 17 00:00:00 2001 From: Henri Sara Date: Sat, 12 Nov 2011 12:18:27 +0200 Subject: [PATCH] #7930 Eliminate Validator.isValid() Eliminate the redundant method Validator.isValid(). Validator.validate() does the same but throws an exception including the validation error message. Migration: - replace implementations of isValid() with internalIsValid() in custom subclasses of AbstractValidator - use Validator.validate() and catch exceptions rather than call Validator.isValid() - note that AbstractField still provides an isValid() method that is internally based on validate() --- src/com/vaadin/data/Validator.java | 19 +++----- .../validator/AbstractStringValidator.java | 3 +- .../data/validator/AbstractValidator.java | 45 ++++++++++++++++++- .../data/validator/CompositeValidator.java | 32 ------------- .../vaadin/data/validator/NullValidator.java | 11 ----- .../data/validator/StringLengthValidator.java | 3 +- src/com/vaadin/ui/AbstractField.java | 25 +++-------- src/com/vaadin/ui/DateField.java | 11 ++--- src/com/vaadin/ui/Form.java | 16 +------ .../tests/server/TestSerialization.java | 4 +- .../datefield/RequiredInvalidDateField.java | 4 +- .../tree/TreeKeyboardNavigationScrolls.java | 9 +--- .../TreeKeyboardNavigationValidators.java | 9 +--- .../com/vaadin/tests/tickets/Ticket1804.java | 8 +--- .../com/vaadin/tests/tickets/Ticket1900.java | 8 +--- .../com/vaadin/tests/tickets/Ticket20.java | 27 ++--------- .../com/vaadin/tests/tickets/Ticket2107.java | 6 +-- .../com/vaadin/tests/tickets/Ticket2179.java | 8 +--- .../com/vaadin/tests/tickets/Ticket2998.java | 13 ++---- .../com/vaadin/tests/tickets/Ticket736.java | 42 ++++------------- .../com/vaadin/tests/tickets/Ticket846.java | 20 +-------- .../tests/util/AlwaysFailValidator.java | 18 ++++++++ .../validation/EmptyFieldErrorIndicators.java | 8 +--- 23 files changed, 121 insertions(+), 228 deletions(-) create mode 100644 tests/testbench/com/vaadin/tests/util/AlwaysFailValidator.java diff --git a/src/com/vaadin/data/Validator.java b/src/com/vaadin/data/Validator.java index b1dc5ffc14..60ac058cfc 100644 --- a/src/com/vaadin/data/Validator.java +++ b/src/com/vaadin/data/Validator.java @@ -29,6 +29,13 @@ import com.vaadin.terminal.gwt.server.AbstractApplicationServlet; *

* Validators must not have any side effects. *

+ *

+ * Since Vaadin 7, the method isValid(Object) does not exist in the interface - + * {@link #validate(Object)} should be used instead, and the exception caught + * where applicable. Concrete classes implementing {@link Validator} can still + * internally implement and use isValid(Object) for convenience or to ease + * migration from earlier Vaadin versions. + *

* * @author IT Mill Ltd. * @version @@ -49,18 +56,6 @@ public interface Validator extends Serializable { */ public void validate(Object value) throws Validator.InvalidValueException; - /** - * Tests if the given value is valid. This method must be symmetric with - * {@link #validate(Object)} so that {@link #validate(Object)} throws an - * error iff this method returns false. - * - * @param value - * the value to check - * @return true if the value is valid, false - * otherwise. - */ - public boolean isValid(Object value); - /** * Exception that is thrown by a {@link Validator} when a value is invalid. * diff --git a/src/com/vaadin/data/validator/AbstractStringValidator.java b/src/com/vaadin/data/validator/AbstractStringValidator.java index 90778e16b1..3b7ef75419 100644 --- a/src/com/vaadin/data/validator/AbstractStringValidator.java +++ b/src/com/vaadin/data/validator/AbstractStringValidator.java @@ -51,7 +51,8 @@ public abstract class AbstractStringValidator extends AbstractValidator { * @return true if the value (or its toString()) is a valid string, false * otherwise */ - public boolean isValid(Object value) { + @Override + protected boolean internalIsValid(Object value) { if (value == null) { return true; } diff --git a/src/com/vaadin/data/validator/AbstractValidator.java b/src/com/vaadin/data/validator/AbstractValidator.java index ee2fee893c..a43e8f7f7a 100644 --- a/src/com/vaadin/data/validator/AbstractValidator.java +++ b/src/com/vaadin/data/validator/AbstractValidator.java @@ -21,6 +21,11 @@ import com.vaadin.data.Validator; * {@link InvalidValueException#getHtmlMessage()} and throw such exceptions from * {@link #validate(Object)}. *

+ *

+ * Since Vaadin 7, subclasses can either implement {@link #validate(Object)} + * directly or implement {@link #internalIsValid(Object)} when migrating legacy + * applications. To check validity, {@link #validate(Object)} should be used. + *

* * @author IT Mill Ltd. * @version @@ -47,8 +52,46 @@ public abstract class AbstractValidator implements Validator { this.errorMessage = errorMessage; } + /** + * Since Vaadin 7, subclasses of AbstractValidator should override + * {@link #internalIsValid(Object)} or {@link #validate(Object)} instead of + * {@link #isValid(Object)}. {@link #validate(Object)} should be used to + * check values. + * + * This method may disappear in future Vaadin versions. + * + * @param value + * @return true if the value is valid + * @deprecated override {@link #internalIsValid(Object)} or + * {@link #validate(Object)} instead of {@link #isValid(Object)} + * and use {@link #validate(Object)} to check value validity + */ + @Deprecated + protected final boolean isValid(Object value) { + try { + validate(value); + return true; + } catch (InvalidValueException e) { + return false; + } + } + + /** + * Internally check the validity of a value. This method can be overridden + * in subclasses if customization of the error message is not needed - + * otherwise, subclasses should override {@link #validate(Object)} instead. + * + * This method should not be called from outside the validator class itself. + * + * @param value + * @return + */ + protected boolean internalIsValid(Object value) { + return false; + } + public void validate(Object value) throws InvalidValueException { - if (!isValid(value)) { + if (!internalIsValid(value)) { String message = errorMessage.replace("{0}", String.valueOf(value)); throw new InvalidValueException(message); } diff --git a/src/com/vaadin/data/validator/CompositeValidator.java b/src/com/vaadin/data/validator/CompositeValidator.java index 8fa01affba..aa6c533cf1 100644 --- a/src/com/vaadin/data/validator/CompositeValidator.java +++ b/src/com/vaadin/data/validator/CompositeValidator.java @@ -126,38 +126,6 @@ public class CompositeValidator extends AbstractValidator { "The validator is in unsupported operation mode"); } - /** - * Checks the validity of the the given value. The value is valid, if: - * - * - * @param value - * the value to check. - */ - public boolean isValid(Object value) { - switch (mode) { - case MODE_AND: - for (Validator v : validators) { - if (!v.isValid(value)) { - return false; - } - } - return true; - - case MODE_OR: - for (Validator v : validators) { - if (v.isValid(value)) { - return true; - } - } - return false; - } - throw new IllegalStateException( - "The valitor is in unsupported operation mode"); - } - /** * Gets the mode of the validator. * diff --git a/src/com/vaadin/data/validator/NullValidator.java b/src/com/vaadin/data/validator/NullValidator.java index b1af263ef7..06869066a2 100644 --- a/src/com/vaadin/data/validator/NullValidator.java +++ b/src/com/vaadin/data/validator/NullValidator.java @@ -50,17 +50,6 @@ public class NullValidator implements Validator { } } - /** - * Tests if the given value is valid. - * - * @param value - * the value to validate. - * @returns true for valid value, otherwise false. - */ - public boolean isValid(Object value) { - return onlyNullAllowed ? value == null : value != null; - } - /** * Returns true if nulls are allowed otherwise * false. diff --git a/src/com/vaadin/data/validator/StringLengthValidator.java b/src/com/vaadin/data/validator/StringLengthValidator.java index ff9a50e2cb..e73a1f618c 100644 --- a/src/com/vaadin/data/validator/StringLengthValidator.java +++ b/src/com/vaadin/data/validator/StringLengthValidator.java @@ -61,7 +61,8 @@ public class StringLengthValidator extends AbstractValidator { * the value to validate. * @return true for valid value, otherwise false. */ - public boolean isValid(Object value) { + @Override + protected boolean internalIsValid(Object value) { if (value == null) { return allowNull; } diff --git a/src/com/vaadin/ui/AbstractField.java b/src/com/vaadin/ui/AbstractField.java index bde34c979c..0d819d01c4 100644 --- a/src/com/vaadin/ui/AbstractField.java +++ b/src/com/vaadin/ui/AbstractField.java @@ -730,32 +730,21 @@ public abstract class AbstractField extends AbstractComponent implements * empty. If the field is empty it is considered valid if it is not required * and invalid otherwise. Validators are never checked for empty fields. * + * In most cases, {@link #validate()} should be used instead of + * {@link #isValid()} to also get the error message. + * * @return true if all registered validators claim that the * current value is valid or if the field is empty and not required, * false otherwise. */ public boolean isValid() { - if (isEmpty()) { - if (isRequired()) { - return false; - } else { - return true; - } - } - - if (validators == null) { + try { + validate(); return true; + } catch (InvalidValueException e) { + return false; } - - final Object value = getValue(); - for (final Iterator i = validators.iterator(); i.hasNext();) { - if (!(i.next()).isValid(value)) { - return false; - } - } - - return true; } /** diff --git a/src/com/vaadin/ui/DateField.java b/src/com/vaadin/ui/DateField.java index 17ef83d839..4d83502f65 100644 --- a/src/com/vaadin/ui/DateField.java +++ b/src/com/vaadin/ui/DateField.java @@ -752,18 +752,13 @@ public class DateField extends AbstractField implements } /** - * Tests the current value against registered validators if the field is not - * empty. Note that DateField is considered empty (value == null) and + * Validates the current value against registered validators if the field is + * not empty. Note that DateField is considered empty (value == null) and * invalid if it contains text typed in by the user that couldn't be parsed * into a Date value. * - * @see com.vaadin.ui.AbstractField#isValid() + * @see com.vaadin.ui.AbstractField#validate() */ - @Override - public boolean isValid() { - return uiHasValidDateString && super.isValid(); - } - @Override public void validate() throws InvalidValueException { /* diff --git a/src/com/vaadin/ui/Form.java b/src/com/vaadin/ui/Form.java index b7ba23aee3..d7d762fcb9 100644 --- a/src/com/vaadin/ui/Form.java +++ b/src/com/vaadin/ui/Form.java @@ -968,21 +968,7 @@ public class Form extends AbstractField implements Item.Editor, } /** - * Tests the current value of the object against all registered validators - * - * @see com.vaadin.data.Validatable#isValid() - */ - @Override - public boolean isValid() { - boolean valid = true; - for (final Iterator i = propertyIds.iterator(); i.hasNext();) { - valid &= (fields.get(i.next())).isValid(); - } - return valid && super.isValid(); - } - - /** - * Checks the validity of the validatable. + * Checks the validity of the Form and all of its fields. * * @see com.vaadin.data.Validatable#validate() */ diff --git a/tests/server-side/com/vaadin/tests/server/TestSerialization.java b/tests/server-side/com/vaadin/tests/server/TestSerialization.java index bed109d99a..84ff5ad6fa 100644 --- a/tests/server-side/com/vaadin/tests/server/TestSerialization.java +++ b/tests/server-side/com/vaadin/tests/server/TestSerialization.java @@ -20,9 +20,9 @@ public class TestSerialization extends TestCase { public void testValidators() throws Exception { RegexpValidator validator = new RegexpValidator(".*", "Error"); - validator.isValid("aaa"); + validator.validate("aaa"); RegexpValidator validator2 = (RegexpValidator) serializeAndDeserialize(validator); - validator2.isValid("aaa"); + validator2.validate("aaa"); } public void testForm() throws Exception { diff --git a/tests/testbench/com/vaadin/tests/components/datefield/RequiredInvalidDateField.java b/tests/testbench/com/vaadin/tests/components/datefield/RequiredInvalidDateField.java index c997895628..20b8540023 100644 --- a/tests/testbench/com/vaadin/tests/components/datefield/RequiredInvalidDateField.java +++ b/tests/testbench/com/vaadin/tests/components/datefield/RequiredInvalidDateField.java @@ -12,6 +12,7 @@ import com.vaadin.ui.DateField; public class RequiredInvalidDateField extends TestBase { + @SuppressWarnings("deprecation") @Override protected void setup() { // StringLengthValidator textValidator = new StringLengthValidator( @@ -37,7 +38,8 @@ public class RequiredInvalidDateField extends TestBase { Validator dateValidator = new AbstractValidator( "Day of month must be an even number") { - public boolean isValid(Object value) { + @Override + protected boolean internalIsValid(Object value) { if (!(value instanceof Date)) { return false; } diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeKeyboardNavigationScrolls.java b/tests/testbench/com/vaadin/tests/components/tree/TreeKeyboardNavigationScrolls.java index a3ac2ee277..a27b6b0404 100644 --- a/tests/testbench/com/vaadin/tests/components/tree/TreeKeyboardNavigationScrolls.java +++ b/tests/testbench/com/vaadin/tests/components/tree/TreeKeyboardNavigationScrolls.java @@ -5,8 +5,8 @@ package com.vaadin.tests.components.tree; import com.vaadin.data.Container; import com.vaadin.data.util.HierarchicalContainer; -import com.vaadin.data.validator.AbstractValidator; import com.vaadin.tests.components.TestBase; +import com.vaadin.tests.util.AlwaysFailValidator; import com.vaadin.ui.Tree; public class TreeKeyboardNavigationScrolls extends TestBase { @@ -16,12 +16,7 @@ public class TreeKeyboardNavigationScrolls extends TestBase { Tree tree = new Tree(); tree.setContainerDataSource(generateHierarchicalContainer()); tree.setImmediate(true); - tree.addValidator(new AbstractValidator("failed") { - public boolean isValid(Object value) { - return false; - } - - }); + tree.addValidator(new AlwaysFailValidator("failed")); addComponent(tree); } diff --git a/tests/testbench/com/vaadin/tests/components/tree/TreeKeyboardNavigationValidators.java b/tests/testbench/com/vaadin/tests/components/tree/TreeKeyboardNavigationValidators.java index 2a545065c4..9204f0495b 100644 --- a/tests/testbench/com/vaadin/tests/components/tree/TreeKeyboardNavigationValidators.java +++ b/tests/testbench/com/vaadin/tests/components/tree/TreeKeyboardNavigationValidators.java @@ -2,8 +2,8 @@ package com.vaadin.tests.components.tree; import com.vaadin.data.Container; import com.vaadin.data.util.HierarchicalContainer; -import com.vaadin.data.validator.AbstractValidator; import com.vaadin.tests.components.TestBase; +import com.vaadin.tests.util.AlwaysFailValidator; import com.vaadin.ui.Tree; public class TreeKeyboardNavigationValidators extends TestBase { @@ -18,12 +18,7 @@ public class TreeKeyboardNavigationValidators extends TestBase { tree.setSizeFull(); tree.setContainerDataSource(generateHierarchicalContainer()); tree.setImmediate(true); - tree.addValidator(new AbstractValidator("failed") { - public boolean isValid(Object value) { - return false; - } - - }); + tree.addValidator(new AlwaysFailValidator("failed")); return tree; } diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1804.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1804.java index b5cb3b55c2..28f76fa89f 100644 --- a/tests/testbench/com/vaadin/tests/tickets/Ticket1804.java +++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1804.java @@ -127,7 +127,7 @@ public class Ticket1804 extends com.vaadin.Application { } /** Throws an exception when the string is empty or null. */ - class EmptyStringValidator implements Validator { + static class EmptyStringValidator implements Validator { String msg; @@ -135,12 +135,8 @@ public class Ticket1804 extends com.vaadin.Application { this.msg = msg; } - public boolean isValid(Object value) { - return !(value == null || value.toString().length() == 0); - } - public void validate(Object value) throws InvalidValueException { - if (!isValid(value)) { + if (value == null || value.toString().length() == 0) { throw new InvalidValueException(msg); } } diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1900.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1900.java index 2047b4698c..90d35c4da1 100644 --- a/tests/testbench/com/vaadin/tests/tickets/Ticket1900.java +++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1900.java @@ -53,19 +53,15 @@ public class Ticket1900 extends Application { } - class ContainsValidator implements Validator { + static class ContainsValidator implements Validator { private final String c; public ContainsValidator(String c) { this.c = c; } - public boolean isValid(Object value) { - return value != null && value.toString().contains(c); - } - public void validate(Object value) throws InvalidValueException { - if (!isValid(value)) { + if (value == null || !value.toString().contains(c)) { throw new InvalidValueException("Value does not contain " + c); } diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket20.java b/tests/testbench/com/vaadin/tests/tickets/Ticket20.java index 55fee95de3..0fb039736a 100644 --- a/tests/testbench/com/vaadin/tests/tickets/Ticket20.java +++ b/tests/testbench/com/vaadin/tests/tickets/Ticket20.java @@ -4,6 +4,7 @@ import com.vaadin.Application; import com.vaadin.data.Validator; import com.vaadin.data.util.MethodProperty; import com.vaadin.data.validator.CompositeValidator; +import com.vaadin.data.validator.IntegerValidator; import com.vaadin.ui.Button; import com.vaadin.ui.CheckBox; import com.vaadin.ui.TextField; @@ -21,26 +22,10 @@ public class Ticket20 extends Application { mainWin.addComponent(tx); tx.setImmediate(true); CompositeValidator v = new CompositeValidator(); + v.addValidator(new IntegerValidator("{0} is not a number")); v.addValidator(new Validator() { - public boolean isValid(Object value) { - try { - Integer.parseInt("" + value); - return true; - } catch (NumberFormatException e) { - return false; - } - } - - public void validate(Object value) throws InvalidValueException { - if (!isValid(value)) { - throw new InvalidValueException(value + " is not a number"); - } - } - }); - v.addValidator(new Validator() { - - public boolean isValid(Object value) { + private boolean isValid(Object value) { try { int i = Integer.parseInt("" + value); if (i < 0) { @@ -64,12 +49,8 @@ public class Ticket20 extends Application { v2.addValidator(v); v2.addValidator(new Validator() { - public boolean isValid(Object value) { - return "".equals("" + value); - } - public void validate(Object value) throws InvalidValueException { - if (!isValid(value)) { + if (!"".equals("" + value)) { throw new InvalidValueException("Value is not empty string"); } } diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2107.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2107.java index 199b278343..dc74f3e5eb 100644 --- a/tests/testbench/com/vaadin/tests/tickets/Ticket2107.java +++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2107.java @@ -31,12 +31,8 @@ public class Ticket2107 extends Application { }); tf.addValidator(new Validator() { - public boolean isValid(Object value) { - return value != null && value.toString().length() > 3; - } - public void validate(Object value) throws InvalidValueException { - if (!isValid(value)) { + if (value == null || value.toString().length() <= 3) { throw new InvalidValueException( "Text length must exceed 3 characters"); } diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2179.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2179.java index 165e770307..e23dcddd87 100644 --- a/tests/testbench/com/vaadin/tests/tickets/Ticket2179.java +++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2179.java @@ -33,19 +33,15 @@ public class Ticket2179 extends Application { } - class ContainsValidator implements Validator { + static class ContainsValidator implements Validator { private final String c; public ContainsValidator(String c) { this.c = c; } - public boolean isValid(Object value) { - return value != null && value.toString().contains(c); - } - public void validate(Object value) throws InvalidValueException { - if (!isValid(value)) { + if (value == null || !value.toString().contains(c)) { throw new InvalidValueException("Value does not contain " + c); } diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2998.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2998.java index 54ef8e6faf..06912d61d0 100644 --- a/tests/testbench/com/vaadin/tests/tickets/Ticket2998.java +++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2998.java @@ -172,24 +172,19 @@ public class Ticket2998 extends Application { if (propertyId.equals("kilometers")) { f.setWidth("4em"); f.addValidator(new Validator() { - public boolean isValid(Object value) { + public void validate(Object value) + throws InvalidValueException { + // FIXME this does not follow the standard pattern + // for validators and has side effects! try { @SuppressWarnings("unused") float f = Float.parseFloat((String) value); - return true; } catch (Exception e) { f.getWindow().showNotification( "Bad number value"); f.setValue(0); - return false; } } - - public void validate(Object value) - throws InvalidValueException { - // TODO Auto-generated method stub - - } }); } if (propertyId.equals("date")) { diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket736.java b/tests/testbench/com/vaadin/tests/tickets/Ticket736.java index 407242e06c..b8c6d74fab 100644 --- a/tests/testbench/com/vaadin/tests/tickets/Ticket736.java +++ b/tests/testbench/com/vaadin/tests/tickets/Ticket736.java @@ -4,6 +4,7 @@ import com.vaadin.Application; import com.vaadin.data.Validator; import com.vaadin.data.util.BeanItem; import com.vaadin.data.util.MethodProperty; +import com.vaadin.data.validator.IntegerValidator; import com.vaadin.terminal.ThemeResource; import com.vaadin.ui.AbstractComponent; import com.vaadin.ui.Alignment; @@ -49,7 +50,8 @@ public class Ticket736 extends Application { f.setFooter(ol); // Add some validators for the form - f.getField("zip").addValidator(new IsInteger()); + f.getField("zip").addValidator( + new IntegerValidator("'{0}' is not a number")); ((AbstractComponent) f.getField("zip")).setDescription("Jepjep"); ((AbstractComponent) f.getField("zip")).setIcon(new ThemeResource( "../runo/icons/16/folder.png")); @@ -84,7 +86,7 @@ public class Ticket736 extends Application { } /** Address pojo. */ - public class Address { + public static class Address { String name = ""; String street = ""; String zip = ""; @@ -148,44 +150,18 @@ public class Ticket736 extends Application { } - /** Simple validator for checking if the validated value is an integer */ - class IsInteger implements Validator { - - public boolean isValid(Object value) { - try { - Integer.parseInt("" + value); - return true; - } catch (NumberFormatException e) { - return false; - } - } - - public void validate(Object value) throws InvalidValueException { - if (!isValid(value)) { - throw new InvalidValueException("'" + value - + "' is not a number"); - } - } - } - /** Simple state validator */ - class IsValidState implements Validator { + static class IsValidState implements Validator { - public boolean isValid(Object value) { + public void validate(Object value) throws InvalidValueException { // Empty and null are accepted values if (value == null || "".equals("" + value)) { - return true; + return; } // Otherwise state must be two capital letter combo - if (value.toString().length() != 2) { - return false; - } - return value.toString().equals(("" + value).toUpperCase()); - } - - public void validate(Object value) throws InvalidValueException { - if (!isValid(value)) { + if (value.toString().length() != 2 + || !value.toString().equals(("" + value).toUpperCase())) { throw new InvalidValueException( "State must be either two capital letter abreviation or left empty"); } diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket846.java b/tests/testbench/com/vaadin/tests/tickets/Ticket846.java index 23f3134308..9f8184cac9 100644 --- a/tests/testbench/com/vaadin/tests/tickets/Ticket846.java +++ b/tests/testbench/com/vaadin/tests/tickets/Ticket846.java @@ -1,8 +1,8 @@ package com.vaadin.tests.tickets; import com.vaadin.Application; -import com.vaadin.data.Validator; import com.vaadin.data.util.MethodProperty; +import com.vaadin.data.validator.IntegerValidator; import com.vaadin.ui.Button; import com.vaadin.ui.CheckBox; import com.vaadin.ui.TextField; @@ -19,23 +19,7 @@ public class Ticket846 extends Application { final TextField tx = new TextField("Integer"); mainWin.addComponent(tx); tx.setImmediate(true); - tx.addValidator(new Validator() { - - public boolean isValid(Object value) { - try { - Integer.parseInt("" + value); - return true; - } catch (NumberFormatException e) { - return false; - } - } - - public void validate(Object value) throws InvalidValueException { - if (!isValid(value)) { - throw new InvalidValueException(value + " is not a number"); - } - } - }); + tx.addValidator(new IntegerValidator("{0} is not a number")); final String[] visibleProps = { "required", "invalidAllowed", "readOnly", "readThrough", "invalidCommitted", diff --git a/tests/testbench/com/vaadin/tests/util/AlwaysFailValidator.java b/tests/testbench/com/vaadin/tests/util/AlwaysFailValidator.java new file mode 100644 index 0000000000..2a029a42a5 --- /dev/null +++ b/tests/testbench/com/vaadin/tests/util/AlwaysFailValidator.java @@ -0,0 +1,18 @@ +package com.vaadin.tests.util; + +import com.vaadin.data.validator.AbstractValidator; + +public class AlwaysFailValidator extends AbstractValidator { + public AlwaysFailValidator() { + super("Validation error"); + } + + public AlwaysFailValidator(String message) { + super(message); + } + + @Override + protected boolean internalIsValid(Object value) { + return false; + } +} diff --git a/tests/testbench/com/vaadin/tests/validation/EmptyFieldErrorIndicators.java b/tests/testbench/com/vaadin/tests/validation/EmptyFieldErrorIndicators.java index 67fc2afb7d..af8798a6a1 100644 --- a/tests/testbench/com/vaadin/tests/validation/EmptyFieldErrorIndicators.java +++ b/tests/testbench/com/vaadin/tests/validation/EmptyFieldErrorIndicators.java @@ -3,8 +3,8 @@ package com.vaadin.tests.validation; import java.util.Date; import com.vaadin.data.Validator.InvalidValueException; -import com.vaadin.data.validator.AbstractValidator; import com.vaadin.tests.components.TestBase; +import com.vaadin.tests.util.AlwaysFailValidator; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; @@ -82,11 +82,7 @@ public class EmptyFieldErrorIndicators extends TestBase { field.setRequired(required); field.setRequiredError("Missing required value!"); if (failValidator && !(field instanceof Button)) { - field.addValidator(new AbstractValidator("Validation error") { - public boolean isValid(Object value) { - return false; - } - }); + field.addValidator(new AlwaysFailValidator()); } } }; -- 2.39.5