Person Edit view started.

master
Markus Kreth 7 years ago
parent ee74411009
commit 0cfea53023
  1. 2
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungDmtWettkampfGenerator.java
  2. 2
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungEinzelWettkampfGenerator.java
  3. 3
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/data/Person.java
  4. 8
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/HeadView.java
  5. 4
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/MainView.java
  6. 30
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/PersonEditView.java
  7. 58
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonEditDetails.java
  8. 40
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonGrid.java

@ -8,7 +8,7 @@ class MeldungDmtWettkampfGenerator extends AbstractMeldungGenerator {
@Override @Override
public void personRepresentation(StringBuilder txt, Altersgruppe g, Person p) { public void personRepresentation(StringBuilder txt, Altersgruppe g, Person p) {
txt.append("\n").append(p.getPrename()).append(" ").append(p.getSurname()).append("\t") txt.append("\n").append(p.getPrename()).append(" ").append(p.getSurname()).append("\t")
.append(p.getBirth().getYear()).append("\t").append(g.getPflicht().getName()); .append(p.getBirth().getYear());
} }
} }

@ -8,7 +8,7 @@ class MeldungEinzelWettkampfGenerator extends AbstractMeldungGenerator {
@Override @Override
public void personRepresentation(StringBuilder txt, Altersgruppe g, Person p) { public void personRepresentation(StringBuilder txt, Altersgruppe g, Person p) {
txt.append("\n").append(p.getPrename()).append(" ").append(p.getSurname()).append("\t") txt.append("\n").append(p.getPrename()).append(" ").append(p.getSurname()).append("\t")
.append(p.getBirth().getYear()).append("\t"); .append(p.getBirth().getYear()).append("\t").append(g.getPflicht().getName());
} }
} }

@ -120,6 +120,9 @@ public class Person extends BaseEntity implements Serializable {
} }
public Gender getGender() { public Gender getGender() {
if (gender == null) {
return null;
}
return Gender.valueOf(gender); return Gender.valueOf(gender);
} }

@ -20,6 +20,7 @@ import org.slf4j.LoggerFactory;
import com.vaadin.contextmenu.ContextMenu; import com.vaadin.contextmenu.ContextMenu;
import com.vaadin.icons.VaadinIcons; import com.vaadin.icons.VaadinIcons;
import com.vaadin.navigator.Navigator;
import com.vaadin.server.StreamResource; import com.vaadin.server.StreamResource;
import com.vaadin.server.VaadinSession; import com.vaadin.server.VaadinSession;
import com.vaadin.ui.AbstractComponent; import com.vaadin.ui.AbstractComponent;
@ -62,9 +63,12 @@ public class HeadView extends HorizontalLayout {
private Person loggedinPerson; private Person loggedinPerson;
public HeadView(Supplier<ZonedDateTime> startTime, Supplier<ZonedDateTime> endTime, private final Navigator navigator;
public HeadView(Navigator navigator, Supplier<ZonedDateTime> startTime, Supplier<ZonedDateTime> endTime,
ClubEventProvider dataProvider) { ClubEventProvider dataProvider) {
this.navigator = navigator;
monthName = new Label(); monthName = new Label();
monthName.setId("calendar.month"); monthName.setId("calendar.month");
monthName.setStyleName("title_caption"); monthName.setStyleName("title_caption");
@ -138,7 +142,7 @@ public class HeadView extends HorizontalLayout {
} }
private void switchToPersonEditUi() { private void switchToPersonEditUi() {
navigator.navigateTo(PersonEditView.VIEW_NAME);
} }
private void calendarExport(MenuItem ev1) { private void calendarExport(MenuItem ev1) {

@ -14,6 +14,7 @@ import com.vaadin.event.selection.SelectionEvent;
import com.vaadin.navigator.Navigator; import com.vaadin.navigator.Navigator;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent; import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
import com.vaadin.ui.Button; import com.vaadin.ui.Button;
import com.vaadin.ui.Grid.SelectionMode;
import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.UI; import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.VerticalLayout;
@ -86,6 +87,7 @@ public class MainView extends BorderLayout implements NamedView {
personGrid = new PersonGrid(groupDao, personDao); personGrid = new PersonGrid(groupDao, personDao);
personGrid.setCaption("Personen"); personGrid.setCaption("Personen");
personGrid.setSelectionMode(SelectionMode.MULTI);
personGrid.onPersonSelect(ev -> personSelectionChange(ev)); personGrid.onPersonSelect(ev -> personSelectionChange(ev));
personGrid.setVisible(false); personGrid.setVisible(false);
@ -113,7 +115,7 @@ public class MainView extends BorderLayout implements NamedView {
calendar.setId("main.calendar"); calendar.setId("main.calendar");
calendar.setHandler(this::onItemClick); calendar.setHandler(this::onItemClick);
head = new HeadView(() -> calendar.getStartDate(), () -> calendar.getEndDate(), dataProvider); head = new HeadView(navigator, () -> calendar.getStartDate(), () -> calendar.getEndDate(), dataProvider);
head.updateMonthText(calendar.getStartDate()); head.updateMonthText(calendar.getStartDate());
calendar.add(dateTime -> head.updateMonthText(dateTime)); calendar.add(dateTime -> head.updateMonthText(dateTime));

@ -1,11 +1,14 @@
package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui; package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui;
import java.util.Optional;
import com.vaadin.event.selection.SelectionEvent;
import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.HorizontalLayout;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.GroupDao; import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.GroupDao;
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;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components.PersonEditDialog; import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components.PersonEditDetails;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components.PersonGrid; import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components.PersonGrid;
public class PersonEditView extends HorizontalLayout implements NamedView { public class PersonEditView extends HorizontalLayout implements NamedView {
@ -14,20 +17,27 @@ public class PersonEditView extends HorizontalLayout implements NamedView {
private static final long serialVersionUID = 1770993670570422036L; private static final long serialVersionUID = 1770993670570422036L;
private PersonGrid personGrid; private PersonGrid personGrid;
private PersonDao personDao; private PersonEditDetails personDetails;
private GroupDao groupDao;
public PersonEditView(GroupDao groupDao, PersonDao personDao) { public PersonEditView(GroupDao groupDao, PersonDao personDao) {
this.groupDao = groupDao;
this.personDao = personDao;
personGrid = new PersonGrid(groupDao, personDao); personGrid = new PersonGrid(groupDao, personDao);
personGrid.onPersonEdit(p -> onPersonEdit(p)); personGrid.setSizeFull();
addComponent(personGrid); personGrid.onPersonEdit();
personGrid.onPersonSelect(ev -> selectedPerson(ev));
// personGrid.setSelectionMode(SelectionMode.SINGLE);
personDetails = new PersonEditDetails(groupDao.listAll(), personDao, false);
personDetails.setSizeFull();
HorizontalLayout layout = new HorizontalLayout();
layout.addComponents(personGrid, personDetails);
layout.setSizeFull();
addComponent(layout);
} }
private void onPersonEdit(Person p) { void selectedPerson(SelectionEvent<Person> p) {
PersonEditDialog dlg = new PersonEditDialog(groupDao.listAll(), p, personDao); Optional<Person> firstSelectedItem = p.getFirstSelectedItem();
getUI().addWindow(dlg); personDetails.setBean(firstSelectedItem.orElse(null));
} }
@Override @Override

@ -1,6 +1,5 @@
package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components; package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.vaadin.teemu.switchui.Switch; import org.vaadin.teemu.switchui.Switch;
@ -11,27 +10,31 @@ import com.vaadin.ui.DateField;
import com.vaadin.ui.Panel; import com.vaadin.ui.Panel;
import com.vaadin.ui.TextField; import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.PersonDao; import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.PersonDao;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.GroupDef; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.GroupDef;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person;
public class PersonEditDialog extends Window { public class PersonEditDetails extends VerticalLayout {
private static final long serialVersionUID = 4692332924201974714L; private static final long serialVersionUID = 4692332924201974714L;
private final TextField textPrename; private final TextField textPrename;
private final TextField textSureName; private final TextField textSureName;
private final Person person;
private final Binder<Person> binder; private final Binder<Person> binder;
private DateField birthday; private DateField birthday;
private Person current;
public PersonEditDialog(List<GroupDef> groups, Person person, PersonDao dao) { public PersonEditDetails(List<GroupDef> groups, PersonDao dao) {
this.person = person; this(groups, dao, true);
}
public PersonEditDetails(List<GroupDef> groups, PersonDao dao, boolean showCloseButton) {
textPrename = new TextField(); textPrename = new TextField();
textPrename.setCaption("Vorname");
textSureName = new TextField(); textSureName = new TextField();
textSureName.setCaption("Nachname");
birthday = new DateField(); birthday = new DateField();
birthday.setCaption("Geburtstag"); birthday.setCaption("Geburtstag");
@ -40,19 +43,13 @@ public class PersonEditDialog extends Window {
binder.forField(textSureName).bind(Person::getSurname, Person::setSurname); binder.forField(textSureName).bind(Person::getSurname, Person::setSurname);
binder.forField(birthday).bind(Person::getBirth, Person::setBirth); binder.forField(birthday).bind(Person::getBirth, Person::setBirth);
binder.readBean(person);
Panel groupPanel = new Panel("Gruppen"); Panel groupPanel = new Panel("Gruppen");
VerticalLayout glay = new VerticalLayout(); VerticalLayout glay = new VerticalLayout();
groupPanel.setContent(glay); groupPanel.setContent(glay);
List<GroupDef> selected = new ArrayList<>();
for (GroupDef tmp : person.getPersongroups()) {
selected.add(tmp);
}
for (GroupDef g : groups) { for (GroupDef g : groups) {
Switch sw = new Switch(g.getName()); Switch sw = new Switch(g.getName());
sw.setData(g); sw.setData(g);
sw.setValue(selected.contains(g));
glay.addComponent(sw); glay.addComponent(sw);
binder.forField(sw).bind(p -> p.getGroups().contains(g), (bean, fieldvalue) -> { binder.forField(sw).bind(p -> p.getGroups().contains(g), (bean, fieldvalue) -> {
@ -65,17 +62,26 @@ public class PersonEditDialog extends Window {
} }
Button close = new Button("Schließen"); Button close = new Button("Schließen");
close.addClickListener(ev -> closeWithoutSave(dao)); if (showCloseButton) {
close.addClickListener(ev -> closeWithoutSave(dao));
} else {
close.setVisible(false);
}
Button ok = new Button("Speichern"); Button ok = new Button("Speichern");
ok.addClickListener(ev -> { ok.addClickListener(ev -> {
binder.writeBeanIfValid(person); if (binder.validate().isOk()) {
dao.update(person); binder.writeBeanIfValid(current);
PersonEditDialog.this.close(); dao.update(current);
}
}); });
VerticalLayout layout = new VerticalLayout();
layout.addComponents(textPrename, textSureName, birthday, groupPanel, close, ok); addComponents(textPrename, textSureName, birthday, groupPanel, close, ok);
setContent(layout);
center(); }
public void setBean(Person person) {
this.current = person;
binder.readBean(person);
} }
private void closeWithoutSave(PersonDao dao) { private void closeWithoutSave(PersonDao dao) {
@ -85,17 +91,17 @@ public class PersonEditDialog extends Window {
.setMessage("Die Daten wurden geändert. Sollen die Änderungen gespeichert werden?") .setMessage("Die Daten wurden geändert. Sollen die Änderungen gespeichert werden?")
.saveDiscardCancel().setResultHandler(button -> { .saveDiscardCancel().setResultHandler(button -> {
if (button == ConfirmDialog.Buttons.SAVE) { if (button == ConfirmDialog.Buttons.SAVE) {
binder.writeBeanIfValid(person); if (binder.validate().isOk()) {
dao.update(person); binder.writeBeanIfValid(current);
PersonEditDialog.this.close(); dao.update(current);
}
} else if (button == ConfirmDialog.Buttons.DISCARD) { } else if (button == ConfirmDialog.Buttons.DISCARD) {
PersonEditDialog.this.close(); binder.readBean(current);
} }
}).build(); }).build();
getUI().addWindow(dlg); getUI().addWindow(dlg);
} else { } else {
close();
} }
} }

@ -6,7 +6,6 @@ import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.function.Consumer;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -16,8 +15,6 @@ import com.vaadin.data.provider.DataProvider;
import com.vaadin.data.provider.ListDataProvider; import com.vaadin.data.provider.ListDataProvider;
import com.vaadin.event.selection.SelectionListener; import com.vaadin.event.selection.SelectionListener;
import com.vaadin.event.selection.SingleSelectionEvent; import com.vaadin.event.selection.SingleSelectionEvent;
import com.vaadin.icons.VaadinIcons;
import com.vaadin.ui.Button;
import com.vaadin.ui.CheckBox; import com.vaadin.ui.CheckBox;
import com.vaadin.ui.ComboBox; import com.vaadin.ui.ComboBox;
import com.vaadin.ui.Grid; import com.vaadin.ui.Grid;
@ -27,11 +24,11 @@ import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Layout; import com.vaadin.ui.Layout;
import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.components.grid.GridMultiSelect; import com.vaadin.ui.components.grid.GridMultiSelect;
import com.vaadin.ui.themes.ValoTheme;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.GroupDao; import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.GroupDao;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.PersonDao; import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.PersonDao;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.ClubEvent;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Gender;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.GroupDef; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.GroupDef;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Startpass; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Startpass;
@ -48,7 +45,6 @@ public class PersonGrid extends VerticalLayout {
private final CheckBox checkIncluded; private final CheckBox checkIncluded;
private final ComboBox<GroupDef> comboGroups; private final ComboBox<GroupDef> comboGroups;
private transient Consumer<Person> onPersonEdit;
private Boolean selectedOnlyFilter; private Boolean selectedOnlyFilter;
private Set<GroupDef> groupMemberFilter; private Set<GroupDef> groupMemberFilter;
@ -56,9 +52,9 @@ public class PersonGrid extends VerticalLayout {
private PersonFilter filter; private PersonFilter filter;
private ClubEvent currentEvent; private ClubEvent currentEvent;
private Column<Person, Startpass> startpassColumn; private Column<Person, Startpass> startpassColumn;
private Column<Person, Button> editButtonColumn;
private Layout filters; private Layout filters;
private SelectionMode currentSelectionMode; private SelectionMode currentSelectionMode;
private Column<Person, String> genderColumn;
public PersonGrid(GroupDao groupDao, PersonDao personDao) { public PersonGrid(GroupDao groupDao, PersonDao personDao) {
@ -92,7 +88,6 @@ public class PersonGrid extends VerticalLayout {
grid.setDataProvider(dataProvider); grid.setDataProvider(dataProvider);
grid.setId("person.grid"); grid.setId("person.grid");
setSelectionMode(SelectionMode.MULTI);
grid.setSizeFull(); grid.setSizeFull();
grid.addColumn(Person::getPrename).setCaption("Vorname"); grid.addColumn(Person::getPrename).setCaption("Vorname");
@ -100,9 +95,18 @@ public class PersonGrid extends VerticalLayout {
grid.addColumn(Person::getBirth, b -> b != null ? birthFormat.format(b) : "").setCaption("Geburtstag"); grid.addColumn(Person::getBirth, b -> b != null ? birthFormat.format(b) : "").setCaption("Geburtstag");
startpassColumn = grid.addColumn(Person::getStartpass).setCaption("Startpass Nr."); startpassColumn = grid.addColumn(Person::getStartpass).setCaption("Startpass Nr.");
editButtonColumn = grid.addComponentColumn(this::buildPersonEditButton);
genderColumn = grid.addColumn(p -> {
Gender gender = p.getGender();
if (gender == null) {
return "";
}
return gender.localized();
}).setCaption("Geschlecht");
startpassColumn.setHidden(false); startpassColumn.setHidden(false);
editButtonColumn.setHidden(true); genderColumn.setHidden(true);
} }
public void setSelectionMode(SelectionMode selectionMode) { public void setSelectionMode(SelectionMode selectionMode) {
@ -125,23 +129,10 @@ public class PersonGrid extends VerticalLayout {
return filters; return filters;
} }
private Button buildPersonEditButton(Person p) {
Button button = new Button(VaadinIcons.EDIT);
button.addStyleName(ValoTheme.BUTTON_SMALL);
button.addClickListener(e -> showPersonDetails(p));
return button;
}
public void hideFilter() { public void hideFilter() {
filters.setVisible(false); filters.setVisible(false);
} }
private void showPersonDetails(Person p) {
if (onPersonEdit != null) {
onPersonEdit.accept(p);
}
}
private void onSelectedOnly(ValueChangeEvent<Boolean> ev) { private void onSelectedOnly(ValueChangeEvent<Boolean> ev) {
this.selectedOnlyFilter = ev.getValue(); this.selectedOnlyFilter = ev.getValue();
updateFilter(); updateFilter();
@ -205,10 +196,9 @@ public class PersonGrid extends VerticalLayout {
updateFilter(); updateFilter();
} }
public void onPersonEdit(Consumer<Person> function) { public void onPersonEdit() {
this.onPersonEdit = function;
startpassColumn.setHidden(true); startpassColumn.setHidden(true);
editButtonColumn.setHidden(false); genderColumn.setHidden(false);
} }
public void setEvent(ClubEvent ev) { public void setEvent(ClubEvent ev) {

Loading…
Cancel
Save