diff --git a/pom.xml b/pom.xml index f9bff64..45739b0 100644 --- a/pom.xml +++ b/pom.xml @@ -1,5 +1,7 @@ - + 4.0.0 de.kreth.vaadin.clubhelper @@ -47,10 +49,6 @@ org.springframework.boot spring-boot-starter-jdbc - - - - org.springframework.boot spring-boot-starter-data-jpa @@ -119,10 +117,12 @@ org.slf4j slf4j-simple - - - - + + com.googlecode.libphonenumber + libphonenumber + 8.10.4 + + org.springframework.boot @@ -145,12 +145,12 @@ test - - - - - - + + + + + + org.seleniumhq.selenium selenium-java diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/AbstractDataGrid.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/AbstractDataGrid.java index f4b5aad..f945064 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/AbstractDataGrid.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/AbstractDataGrid.java @@ -6,6 +6,8 @@ import java.util.List; import java.util.function.Consumer; import com.vaadin.data.Binder; +import com.vaadin.data.ValidationResult; +import com.vaadin.data.ValueContext; import com.vaadin.data.ValueProvider; import com.vaadin.data.provider.DataProvider; import com.vaadin.data.provider.ListDataProvider; @@ -49,6 +51,7 @@ public abstract class AbstractDataGrid extends VerticalLayout { Editor editor = grid.getEditor(); editor.setEnabled(true); + editor.addOpenListener(event -> grid.getEditor().getBinder().setBean(event.getBean())); grid.addSelectionListener(ev -> editedListener.editObject = null); Binder binder = editor.getBinder(); editor.addSaveListener(ev -> { @@ -62,6 +65,8 @@ public abstract class AbstractDataGrid extends VerticalLayout { createColumnAndBinding(binder); + binder.withValidator((obj, context) -> validate(obj, context)); + deleteButtonColumn = grid.addComponentColumn(c -> { Button deleteButton = new Button(VaadinIcons.TRASH); deleteButton.addClickListener(ev -> deleteConsumer.accept(c)); @@ -84,6 +89,8 @@ public abstract class AbstractDataGrid extends VerticalLayout { addComponents(buttonLayout, grid); } + protected abstract ValidationResult validate(T obj, ValueContext context); + public void addSuccessConsumer(Consumer consumer) { this.successConsumers.add(consumer); } diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/ContactGrid.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/ContactGrid.java index 6be3252..b81a8d8 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/ContactGrid.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/ContactGrid.java @@ -3,8 +3,14 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components; import java.util.Collection; import java.util.stream.Collectors; +import com.google.i18n.phonenumbers.NumberParseException; +import com.google.i18n.phonenumbers.PhoneNumberUtil; +import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber; import com.vaadin.data.Binder; import com.vaadin.data.Binder.Binding; +import com.vaadin.data.ValidationResult; +import com.vaadin.data.ValueContext; +import com.vaadin.data.validator.EmailValidator; import com.vaadin.ui.TextField; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Contact; @@ -16,6 +22,7 @@ public class ContactGrid extends AbstractDataGrid { * */ private static final long serialVersionUID = -2573761302198992085L; + private static final PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance(); @Override public void createColumnAndBinding(Binder binder) { @@ -27,6 +34,27 @@ public class ContactGrid extends AbstractDataGrid { addColumn(Contact::getValue).setCaption("Wert").setEditorBinding(valueBinding); } + @Override + protected ValidationResult validate(Contact obj, ValueContext context) { + if (obj.getType().equalsIgnoreCase("email")) { + return new EmailValidator("Emailformat nicht gültig!").apply(obj.getValue(), context); + } else if (obj.getType().equalsIgnoreCase("Telefon") || obj.getType().equalsIgnoreCase("Mobile")) { + try { + PhoneNumber phone = phoneUtil.parse(obj.getValue(), "DE"); + if (phoneUtil.isValidNumber(phone)) { + obj.setValue(phoneUtil.format(phone, + com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL)); + return ValidationResult.ok(); + } else { + return ValidationResult.error("Fehler beim Validieren von Telefonnummer: " + obj.getValue()); + } + } catch (NumberParseException e) { + return ValidationResult.error("Fehler beim Validieren von Telefonnummer: " + obj.getValue()); + } + } + return ValidationResult.error("Keine Validation für Typ " + obj.getType()); + } + @Override protected Collection readValues(Person person) { return person.getContacts().stream().filter(e -> e.getDeleted() == null).collect(Collectors.toList()); diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/RelationComponent.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/RelationComponent.java index 23e4df5..184bc9f 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/RelationComponent.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/RelationComponent.java @@ -3,6 +3,8 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components; import java.util.Collection; import com.vaadin.data.Binder; +import com.vaadin.data.ValidationResult; +import com.vaadin.data.ValueContext; import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.PersonDao; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; @@ -35,4 +37,9 @@ public class RelationComponent extends AbstractDataGrid { return null; } + @Override + protected ValidationResult validate(Relation obj, ValueContext context) { + return ValidationResult.ok(); + } + }