From 6af5380363f99c8d00f5ef9a190dd77e8f006b10 Mon Sep 17 00:00:00 2001 From: Tobias Koch Date: Tue, 18 Jun 2024 13:00:56 +0200 Subject: [PATCH] Remove duplicate error message (#631) --- .../views/general/HasBinderValidation.java | 31 ++++++++++++++----- .../contact/AutocompleteContactField.java | 10 ++++++ 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/user-interface/src/main/java/life/qbic/datamanager/views/general/HasBinderValidation.java b/user-interface/src/main/java/life/qbic/datamanager/views/general/HasBinderValidation.java index d3c05155d..a83a028d0 100644 --- a/user-interface/src/main/java/life/qbic/datamanager/views/general/HasBinderValidation.java +++ b/user-interface/src/main/java/life/qbic/datamanager/views/general/HasBinderValidation.java @@ -8,8 +8,8 @@ import com.vaadin.flow.data.binder.ValidationResult; /** - * Mixin interface for components that provide a binder for validation. - * Sets properties for invalid state and error message string to show when invalid. + * Mixin interface for components that provide a binder for validation. Sets properties for invalid + * state and error message string to show when invalid. */ public interface HasBinderValidation extends HasValidationProperties { @@ -48,15 +48,30 @@ default HasBinderValidation validate() { requireNonNull(getBinder(), "getBinder() must not be null"); BinderValidationStatus validationStatus = getBinder().validate(); setInvalid(validationStatus.hasErrors()); - setErrorMessage(validationStatus - .getValidationErrors().stream() - .filter(it -> !it.getErrorMessage().isBlank()) - .findFirst() - .map(ValidationResult::getErrorMessage) - .orElse(getDefaultErrorMessage())); + if (useBinderErrorMessage()) { + setErrorMessage(validationStatus + .getValidationErrors().stream() + .filter(it -> !it.getErrorMessage().isBlank()) + .findFirst() + .map(ValidationResult::getErrorMessage) + .orElse(getDefaultErrorMessage())); + } else { + setErrorMessage(getDefaultErrorMessage()); + } return this; } + /** + * True if the binder error message should be used. If false, then the default error message is + * used always. + * + * @return true if the binder error message is used; false if the default error message is used + * only. + */ + default boolean useBinderErrorMessage() { + return true; + } + /** * Missing method from HasValidationProperties. Indiates whether this is marked as invalid. *

diff --git a/user-interface/src/main/java/life/qbic/datamanager/views/general/contact/AutocompleteContactField.java b/user-interface/src/main/java/life/qbic/datamanager/views/general/contact/AutocompleteContactField.java index c1f9e7329..0810874ae 100644 --- a/user-interface/src/main/java/life/qbic/datamanager/views/general/contact/AutocompleteContactField.java +++ b/user-interface/src/main/java/life/qbic/datamanager/views/general/contact/AutocompleteContactField.java @@ -178,6 +178,16 @@ public Contact getEmptyValue() { return new Contact(nameField.getEmptyValue(), emailField.getEmptyValue()); } + @Override + public String getDefaultErrorMessage() { + return ""; // we do not show an error message on this field as this is part of the contained fields. + } + + @Override + public boolean useBinderErrorMessage() { + return false; + } + @Override public Binder getBinder() { return binder;