contact validation

master
Markus Kreth 7 years ago
parent 80bdb92e57
commit 5a35d12ce0
  1. 30
      pom.xml
  2. 7
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/AbstractDataGrid.java
  3. 28
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/ContactGrid.java
  4. 7
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/RelationComponent.java

@ -1,5 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>de.kreth.vaadin.clubhelper</groupId> <groupId>de.kreth.vaadin.clubhelper</groupId>
@ -47,10 +49,6 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId> <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency> </dependency>
<!-- <dependency> -->
<!-- <groupId>org.springframework.boot</groupId> -->
<!-- <artifactId>spring-boot-starter-security</artifactId> -->
<!-- </dependency> -->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId> <artifactId>spring-boot-starter-data-jpa</artifactId>
@ -119,10 +117,12 @@
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId> <artifactId>slf4j-simple</artifactId>
</dependency> </dependency>
<!-- <dependency> --> <dependency>
<!-- <groupId>ch.qos.logback</groupId> --> <groupId>com.googlecode.libphonenumber</groupId>
<!-- <artifactId>logback-classic</artifactId> --> <artifactId>libphonenumber</artifactId>
<!-- </dependency> --> <version>8.10.4</version>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
@ -145,12 +145,12 @@
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<!-- <dependency> --> <!-- <dependency> -->
<!-- <groupId>org.seleniumhq.selenium</groupId> --> <!-- <groupId>org.seleniumhq.selenium</groupId> -->
<!-- <artifactId>selenium-server</artifactId> --> <!-- <artifactId>selenium-server</artifactId> -->
<!-- <version>${selenium.version}</version> --> <!-- <version>${selenium.version}</version> -->
<!-- <scope>test</scope> --> <!-- <scope>test</scope> -->
<!-- </dependency> --> <!-- </dependency> -->
<dependency> <dependency>
<groupId>org.seleniumhq.selenium</groupId> <groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId> <artifactId>selenium-java</artifactId>

@ -6,6 +6,8 @@ import java.util.List;
import java.util.function.Consumer; import java.util.function.Consumer;
import com.vaadin.data.Binder; import com.vaadin.data.Binder;
import com.vaadin.data.ValidationResult;
import com.vaadin.data.ValueContext;
import com.vaadin.data.ValueProvider; import com.vaadin.data.ValueProvider;
import com.vaadin.data.provider.DataProvider; import com.vaadin.data.provider.DataProvider;
import com.vaadin.data.provider.ListDataProvider; import com.vaadin.data.provider.ListDataProvider;
@ -49,6 +51,7 @@ public abstract class AbstractDataGrid<T> extends VerticalLayout {
Editor<T> editor = grid.getEditor(); Editor<T> editor = grid.getEditor();
editor.setEnabled(true); editor.setEnabled(true);
editor.addOpenListener(event -> grid.getEditor().getBinder().setBean(event.getBean()));
grid.addSelectionListener(ev -> editedListener.editObject = null); grid.addSelectionListener(ev -> editedListener.editObject = null);
Binder<T> binder = editor.getBinder(); Binder<T> binder = editor.getBinder();
editor.addSaveListener(ev -> { editor.addSaveListener(ev -> {
@ -62,6 +65,8 @@ public abstract class AbstractDataGrid<T> extends VerticalLayout {
createColumnAndBinding(binder); createColumnAndBinding(binder);
binder.withValidator((obj, context) -> validate(obj, context));
deleteButtonColumn = grid.addComponentColumn(c -> { deleteButtonColumn = grid.addComponentColumn(c -> {
Button deleteButton = new Button(VaadinIcons.TRASH); Button deleteButton = new Button(VaadinIcons.TRASH);
deleteButton.addClickListener(ev -> deleteConsumer.accept(c)); deleteButton.addClickListener(ev -> deleteConsumer.accept(c));
@ -84,6 +89,8 @@ public abstract class AbstractDataGrid<T> extends VerticalLayout {
addComponents(buttonLayout, grid); addComponents(buttonLayout, grid);
} }
protected abstract ValidationResult validate(T obj, ValueContext context);
public void addSuccessConsumer(Consumer<T> consumer) { public void addSuccessConsumer(Consumer<T> consumer) {
this.successConsumers.add(consumer); this.successConsumers.add(consumer);
} }

@ -3,8 +3,14 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components;
import java.util.Collection; import java.util.Collection;
import java.util.stream.Collectors; 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;
import com.vaadin.data.Binder.Binding; 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 com.vaadin.ui.TextField;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Contact; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Contact;
@ -16,6 +22,7 @@ public class ContactGrid extends AbstractDataGrid<Contact> {
* *
*/ */
private static final long serialVersionUID = -2573761302198992085L; private static final long serialVersionUID = -2573761302198992085L;
private static final PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
@Override @Override
public void createColumnAndBinding(Binder<Contact> binder) { public void createColumnAndBinding(Binder<Contact> binder) {
@ -27,6 +34,27 @@ public class ContactGrid extends AbstractDataGrid<Contact> {
addColumn(Contact::getValue).setCaption("Wert").setEditorBinding(valueBinding); 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 @Override
protected Collection<? extends Contact> readValues(Person person) { protected Collection<? extends Contact> readValues(Person person) {
return person.getContacts().stream().filter(e -> e.getDeleted() == null).collect(Collectors.toList()); return person.getContacts().stream().filter(e -> e.getDeleted() == null).collect(Collectors.toList());

@ -3,6 +3,8 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components;
import java.util.Collection; import java.util.Collection;
import com.vaadin.data.Binder; 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.dao.PersonDao;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person;
@ -35,4 +37,9 @@ public class RelationComponent extends AbstractDataGrid<Relation> {
return null; return null;
} }
@Override
protected ValidationResult validate(Relation obj, ValueContext context) {
return ValidationResult.ok();
}
} }

Loading…
Cancel
Save