Person Changes are checked on dialog close.

master
Markus Kreth 7 years ago
parent c60b46c02a
commit af0d2e7c26
  1. 92
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/ConfirmDialog.java
  2. 61
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonEditDialog.java

@ -0,0 +1,92 @@
package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components;
import java.util.EnumSet;
import java.util.function.Consumer;
import com.vaadin.ui.Button;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
public class ConfirmDialog extends Window {
private static final long serialVersionUID = -3043842684692296495L;
private Label message;
private ConfirmDialog(Builder builder) {
super(builder.caption);
setModal(true);
setClosable(false);
this.message = new Label(builder.message);
HorizontalLayout buttonLayout = new HorizontalLayout();
for (Buttons button : builder.buttons) {
Button b = new Button(button.caption);
b.addClickListener(ev -> {
ConfirmDialog.this.close();
if (builder.resultHandler != null) {
builder.resultHandler.accept(button);
}
});
buttonLayout.addComponent(b);
}
VerticalLayout layout = new VerticalLayout();
layout.addComponents(message, buttonLayout);
setContent(layout);
}
public static Builder builder() {
return new Builder();
}
public static class Builder {
private String caption;
private String message;
private EnumSet<Buttons> buttons;
private Consumer<Buttons> resultHandler;
private Builder() {
buttons = EnumSet.noneOf(Buttons.class);
}
public Builder setCaption(String caption) {
this.caption = caption;
return this;
}
public Builder setMessage(String message) {
this.message = message;
return this;
}
public Builder setResultHandler(Consumer<Buttons> resultHandler) {
this.resultHandler = resultHandler;
return this;
}
public Builder saveDiscardCancel() {
buttons = EnumSet.of(Buttons.CANCEL, Buttons.DISCARD, Buttons.SAVE);
return this;
}
public ConfirmDialog build() {
return new ConfirmDialog(this);
}
}
public enum Buttons {
YES("JA"), NO("NEIN"), OK("OK"), SAVE("Speichern"), DISCARD("Verwerfen"), CANCEL("Abbrechen");
final String caption;
private Buttons(String caption) {
this.caption = caption;
}
}
}

@ -2,12 +2,10 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.vaadin.teemu.switchui.Switch;
import com.vaadin.data.Binder;
import com.vaadin.data.HasValue.ValueChangeEvent;
import com.vaadin.ui.Button;
import com.vaadin.ui.DateField;
import com.vaadin.ui.Panel;
@ -37,6 +35,13 @@ public class PersonEditDialog extends Window {
birthday = new DateField();
birthday.setCaption("Geburtstag");
binder = new Binder<>();
binder.forField(textPrename).bind(Person::getPrename, Person::setPrename);
binder.forField(textSureName).bind(Person::getSurname, Person::setSurname);
binder.forField(birthday).bind(Person::getBirth, Person::setBirth);
binder.readBean(person);
Panel groupPanel = new Panel("Gruppen");
VerticalLayout glay = new VerticalLayout();
groupPanel.setContent(glay);
@ -48,19 +53,20 @@ public class PersonEditDialog extends Window {
Switch sw = new Switch(g.getName());
sw.setData(g);
sw.setValue(selected.contains(g));
sw.addValueChangeListener(ev -> groupChanged(ev));
// sw.addValueChangeListener(ev -> groupChanged(ev));
glay.addComponent(sw);
}
binder = new Binder<>();
binder.forField(textPrename).bind(Person::getPrename, Person::setPrename);
binder.forField(textSureName).bind(Person::getSurname, Person::setSurname);
binder.forField(birthday).bind(Person::getBirth, Person::setBirth);
binder.readBean(person);
binder.forField(sw).bind(p -> p.getGroups().contains(g), (bean, fieldvalue) -> {
if (fieldvalue) {
bean.getGroups().add(g);
} else {
bean.getGroups().remove(g);
}
});
}
Button close = new Button("Schließen");
close.addClickListener(ev -> PersonEditDialog.this.close());
close.addClickListener(ev -> closeWithoutSave(dao));
Button ok = new Button("Speichern");
ok.addClickListener(ev -> {
binder.writeBeanIfValid(person);
@ -73,14 +79,35 @@ public class PersonEditDialog extends Window {
center();
}
private void groupChanged(ValueChangeEvent<Boolean> ev) {
GroupDef group = (GroupDef) ((Switch) ev.getComponent()).getData();
Set<GroupDef> pg = person.getPersongroups();
if (ev.getValue()) {
pg.add(group);
private void closeWithoutSave(PersonDao dao) {
if (binder.hasChanges()) {
ConfirmDialog dlg = ConfirmDialog.builder().setCaption("Ungespeicherte Änderungen")
.setMessage("Die Daten wurden geändert. Sollen die Änderungen gespeichert werden?")
.saveDiscardCancel().setResultHandler(button -> {
if (button == ConfirmDialog.Buttons.SAVE) {
binder.writeBeanIfValid(person);
dao.update(person);
PersonEditDialog.this.close();
} else if (button == ConfirmDialog.Buttons.DISCARD) {
PersonEditDialog.this.close();
}
}).build();
getUI().addWindow(dlg);
} else {
pg.remove(group);
close();
}
}
// private void groupChanged(ValueChangeEvent<Boolean> ev) {
// GroupDef group = (GroupDef) ((Switch) ev.getComponent()).getData();
// Set<GroupDef> pg = person.getPersongroups();
// if (ev.getValue()) {
// pg.add(group);
// } else {
// pg.remove(group);
// }
// }
}

Loading…
Cancel
Save