diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/ContactTypeComponent.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/ContactTypeComponent.java new file mode 100644 index 0000000..1b4d839 --- /dev/null +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/ContactTypeComponent.java @@ -0,0 +1,14 @@ +package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components; + +import com.vaadin.ui.ComboBox; + +public class ContactTypeComponent extends ComboBox { + + private static final long serialVersionUID = 1507070116708489598L; + + public ContactTypeComponent() { + setItems("Telefon", "Email", "Mobile"); + setEmptySelectionCaption("Bitte wählen"); + } + +} diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonEditDetails.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonEditDetails.java index 0312657..f3a60d6 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonEditDetails.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonEditDetails.java @@ -1,5 +1,6 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components; +import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; @@ -8,10 +9,13 @@ import org.vaadin.teemu.switchui.Switch; import com.vaadin.data.Binder; import com.vaadin.data.BinderValidationStatus; import com.vaadin.data.ValidationResult; +import com.vaadin.data.provider.DataProvider; +import com.vaadin.data.provider.ListDataProvider; import com.vaadin.ui.Button; import com.vaadin.ui.ComboBox; import com.vaadin.ui.Component; import com.vaadin.ui.DateField; +import com.vaadin.ui.Grid; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Notification; import com.vaadin.ui.TabSheet; @@ -38,8 +42,10 @@ public class PersonEditDetails extends HorizontalLayout { private final Binder binder; private Consumer personChangeHandler; private Button okButton; - private VerticalLayout contactLayout; + private VerticalLayout relationshipLayout; + private List contactSource; + private ListDataProvider contactDataProvider; public PersonEditDetails(List groups, PersonDao dao) { this(groups, dao, true); @@ -126,8 +132,16 @@ public class PersonEditDetails extends HorizontalLayout { } private Component createContactLayout() { - contactLayout = new VerticalLayout(); - + Grid contactLayout = new Grid<>(); + contactSource = new ArrayList<>(); + contactLayout.addComponentColumn(contact -> { + ContactTypeComponent combo = new ContactTypeComponent(); + combo.setValue(contact.getType()); + return combo; + }).setCaption("Kontaktart"); + contactLayout.addColumn(Contact::getValue).setCaption("Wert"); + contactDataProvider = DataProvider.ofCollection(contactSource); + contactLayout.setDataProvider(contactDataProvider); return contactLayout; } @@ -164,21 +178,16 @@ public class PersonEditDetails extends HorizontalLayout { updateContactBinding(); } else { okButton.setEnabled(false); - contactLayout.removeAllComponents(); + contactSource.clear(); + contactDataProvider.refreshAll(); relationshipLayout.removeAllComponents(); } } private void updateContactBinding() { - contactLayout.removeAllComponents(); - Person current = binder.getBean(); - List contacts = current.getContacts(); - for (Contact c : contacts) { - TextField textField = new TextField(c.getType()); - textField.setValue(c.getValue()); - textField.setEnabled(false); - contactLayout.addComponent(textField); - } + contactSource.clear(); + contactSource.addAll(binder.getBean().getContacts()); + contactDataProvider.refreshAll(); } private void updateRelationshipBinding() {