aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorelmot <elmotelmot.vaadin.com>2017-07-27 12:32:15 +0300
committerelmot <elmotelmot.vaadin.com>2017-07-27 12:32:15 +0300
commit1f910006a2ccbbcc71ab46b02576a336201448c8 (patch)
tree76651b1e4613176a0f7ea2dad2f37dd27677639a
parent0517853905c10f5594adf799d9664f96bb863d78 (diff)
downloadvaadin-framework-1f910006a2ccbbcc71ab46b02576a336201448c8.tar.gz
vaadin-framework-1f910006a2ccbbcc71ab46b02576a336201448c8.zip
Proper error clean, server-side parsing, fixes after review.
-rw-r--r--server/src/main/java/com/vaadin/ui/AbstractDateField.java29
-rw-r--r--uitest/src/main/java/com/vaadin/tests/data/DateValidationUI.java14
2 files changed, 29 insertions, 14 deletions
diff --git a/server/src/main/java/com/vaadin/ui/AbstractDateField.java b/server/src/main/java/com/vaadin/ui/AbstractDateField.java
index 82c0baf139..58b748e49b 100644
--- a/server/src/main/java/com/vaadin/ui/AbstractDateField.java
+++ b/server/src/main/java/com/vaadin/ui/AbstractDateField.java
@@ -212,7 +212,7 @@ public abstract class AbstractDateField<T extends Temporal & TemporalAdjuster &
T newDate;
- if("".equals(newDateString)) {
+ if(newDateString==null || "".equals(newDateString)) {
newDate = null;
uiHasValidDateString = true;
currentParseErrorMessage = null;
@@ -225,17 +225,16 @@ public abstract class AbstractDateField<T extends Temporal & TemporalAdjuster &
if (hasChanges) {
dateString = newDateString;
-
if (newDateString != null && !newDateString.isEmpty()) {
String invalidDateString = (String) variables.get("lastInvalidDateString");
if (invalidDateString != null) {
Result<T> parsedDate = handleUnparsableDateString(dateString);
- uiHasValidDateString = false;
- currentParseErrorMessage = parsedDate.getMessage().orElse("Parsing error");
- setComponentError(new UserError(getParseErrorMessage()));
+ parsedDate.ifOk(this::setValue);
+ if(parsedDate.isError()) {
+ currentParseErrorMessage = parsedDate.getMessage().orElse("Parsing error");
+ setComponentError(new UserError(getParseErrorMessage()));
+ }
} else {
- uiHasValidDateString = true;
- currentParseErrorMessage = null;
setValue(newDate,true);
}
} else {
@@ -546,7 +545,6 @@ public abstract class AbstractDateField<T extends Temporal & TemporalAdjuster &
.info("cannot parse " + design.attr("value")
+ " as date");
}
- dateString = formatDate(value);
doSetValue(date);
} else {
throw new RuntimeException("Cannot detect resoluton type "
@@ -604,6 +602,8 @@ public abstract class AbstractDateField<T extends Temporal & TemporalAdjuster &
@Override
protected void doSetValue(T value) {
+ uiHasValidDateString = true;
+ currentParseErrorMessage = null;
// Also set the internal dateString
if (value != null) {
dateString = formatDate(value);
@@ -705,12 +705,15 @@ public abstract class AbstractDateField<T extends Temporal & TemporalAdjuster &
@Override
public Validator<T> getDefaultValidator() {
- return (Validator<T>) (value, context) -> {
- if (currentParseErrorMessage != null) {
- return ValidationResult.error(currentParseErrorMessage);
+ return new Validator<T>() {
+ @Override
+ public ValidationResult apply(T value, ValueContext context) {
+ if (currentParseErrorMessage != null) {
+ return ValidationResult.error(currentParseErrorMessage);
+ }
+ // Pass to range validator.
+ return getRangeValidator().apply(value, context);
}
- // Pass to range validator.
- return getRangeValidator().apply(value, context);
};
}
}
diff --git a/uitest/src/main/java/com/vaadin/tests/data/DateValidationUI.java b/uitest/src/main/java/com/vaadin/tests/data/DateValidationUI.java
index c41fa198c1..907047d789 100644
--- a/uitest/src/main/java/com/vaadin/tests/data/DateValidationUI.java
+++ b/uitest/src/main/java/com/vaadin/tests/data/DateValidationUI.java
@@ -2,6 +2,7 @@ package com.vaadin.tests.data;
import com.vaadin.annotations.Widgetset;
import com.vaadin.data.Binder;
+import com.vaadin.data.Result;
import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.AbstractTestUI;
import com.vaadin.ui.Button;
@@ -10,6 +11,8 @@ import com.vaadin.ui.Label;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
+import java.time.LocalDate;
+
/**
* Created by elmot on 7/11/2017.
*/
@@ -19,7 +22,16 @@ public class DateValidationUI extends AbstractTestUI {
protected void setup(VaadinRequest request) {
final VerticalLayout layout = new VerticalLayout();
- DateField dateField = new DateField("Date");
+ DateField dateField = new DateField("Date") {
+ @Override
+ protected Result<LocalDate> handleUnparsableDateString(String dateString) {
+ if (dateString.equalsIgnoreCase("Y2K")) {
+ return Result.ok(LocalDate.of(2000,1,1));
+ } else {
+ return super.handleUnparsableDateString(dateString);
+ }
+ };
+ };
dateField.setParseErrorMessage("Parse error");
dateField.setDateOutOfRangeMessage("Out of range");
layout.addComponent(dateField);