diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungDmtWettkampfGenerator.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungDmtWettkampfGenerator.java index e4fe5cb..848cd0c 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungDmtWettkampfGenerator.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungDmtWettkampfGenerator.java @@ -8,7 +8,7 @@ class MeldungDmtWettkampfGenerator extends AbstractMeldungGenerator { @Override public void personRepresentation(StringBuilder txt, Altersgruppe g, Person p) { 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()); } } diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungEinzelWettkampfGenerator.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungEinzelWettkampfGenerator.java index b12d84d..ad63ea9 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungEinzelWettkampfGenerator.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungEinzelWettkampfGenerator.java @@ -8,7 +8,7 @@ class MeldungEinzelWettkampfGenerator extends AbstractMeldungGenerator { @Override public void personRepresentation(StringBuilder txt, Altersgruppe g, Person p) { 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()); } } diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/data/Person.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/data/Person.java index de40eb4..6ba3811 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/data/Person.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/data/Person.java @@ -120,6 +120,9 @@ public class Person extends BaseEntity implements Serializable { } public Gender getGender() { + if (gender == null) { + return null; + } return Gender.valueOf(gender); } diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/HeadView.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/HeadView.java index d3ce39e..6c3e869 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/HeadView.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/HeadView.java @@ -20,6 +20,7 @@ import org.slf4j.LoggerFactory; import com.vaadin.contextmenu.ContextMenu; import com.vaadin.icons.VaadinIcons; +import com.vaadin.navigator.Navigator; import com.vaadin.server.StreamResource; import com.vaadin.server.VaadinSession; import com.vaadin.ui.AbstractComponent; @@ -62,9 +63,12 @@ public class HeadView extends HorizontalLayout { private Person loggedinPerson; - public HeadView(Supplier startTime, Supplier endTime, + private final Navigator navigator; + + public HeadView(Navigator navigator, Supplier startTime, Supplier endTime, ClubEventProvider dataProvider) { + this.navigator = navigator; monthName = new Label(); monthName.setId("calendar.month"); monthName.setStyleName("title_caption"); @@ -138,7 +142,7 @@ public class HeadView extends HorizontalLayout { } private void switchToPersonEditUi() { - + navigator.navigateTo(PersonEditView.VIEW_NAME); } private void calendarExport(MenuItem ev1) { diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/MainView.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/MainView.java index bd3196c..4e0651e 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/MainView.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/MainView.java @@ -14,6 +14,7 @@ import com.vaadin.event.selection.SelectionEvent; import com.vaadin.navigator.Navigator; import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent; import com.vaadin.ui.Button; +import com.vaadin.ui.Grid.SelectionMode; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.UI; import com.vaadin.ui.VerticalLayout; @@ -86,6 +87,7 @@ public class MainView extends BorderLayout implements NamedView { personGrid = new PersonGrid(groupDao, personDao); personGrid.setCaption("Personen"); + personGrid.setSelectionMode(SelectionMode.MULTI); personGrid.onPersonSelect(ev -> personSelectionChange(ev)); personGrid.setVisible(false); @@ -113,7 +115,7 @@ public class MainView extends BorderLayout implements NamedView { calendar.setId("main.calendar"); 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()); calendar.add(dateTime -> head.updateMonthText(dateTime)); diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/PersonEditView.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/PersonEditView.java index ba8f38a..c059aeb 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/PersonEditView.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/PersonEditView.java @@ -1,11 +1,14 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui; +import java.util.Optional; + +import com.vaadin.event.selection.SelectionEvent; import com.vaadin.ui.HorizontalLayout; import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.GroupDao; import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.PersonDao; 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; 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 PersonGrid personGrid; - private PersonDao personDao; - private GroupDao groupDao; + private PersonEditDetails personDetails; public PersonEditView(GroupDao groupDao, PersonDao personDao) { - this.groupDao = groupDao; - this.personDao = personDao; personGrid = new PersonGrid(groupDao, personDao); - personGrid.onPersonEdit(p -> onPersonEdit(p)); - addComponent(personGrid); + personGrid.setSizeFull(); + 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) { - PersonEditDialog dlg = new PersonEditDialog(groupDao.listAll(), p, personDao); - getUI().addWindow(dlg); + void selectedPerson(SelectionEvent p) { + Optional firstSelectedItem = p.getFirstSelectedItem(); + personDetails.setBean(firstSelectedItem.orElse(null)); } @Override diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonEditDialog.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonEditDetails.java similarity index 69% rename from src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonEditDialog.java rename to src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonEditDetails.java index 4be7e35..fff31af 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonEditDialog.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonEditDetails.java @@ -1,6 +1,5 @@ package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components; -import java.util.ArrayList; import java.util.List; import org.vaadin.teemu.switchui.Switch; @@ -11,27 +10,31 @@ import com.vaadin.ui.DateField; import com.vaadin.ui.Panel; import com.vaadin.ui.TextField; import com.vaadin.ui.VerticalLayout; -import com.vaadin.ui.Window; import de.kreth.vaadin.clubhelper.vaadinclubhelper.dao.PersonDao; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.GroupDef; 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 final TextField textPrename; private final TextField textSureName; - private final Person person; private final Binder binder; private DateField birthday; + private Person current; - public PersonEditDialog(List groups, Person person, PersonDao dao) { - this.person = person; + public PersonEditDetails(List groups, PersonDao dao) { + this(groups, dao, true); + } + + public PersonEditDetails(List groups, PersonDao dao, boolean showCloseButton) { textPrename = new TextField(); + textPrename.setCaption("Vorname"); textSureName = new TextField(); + textSureName.setCaption("Nachname"); birthday = new DateField(); birthday.setCaption("Geburtstag"); @@ -40,19 +43,13 @@ public class PersonEditDialog extends Window { 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); - List selected = new ArrayList<>(); - for (GroupDef tmp : person.getPersongroups()) { - selected.add(tmp); - } + for (GroupDef g : groups) { Switch sw = new Switch(g.getName()); sw.setData(g); - sw.setValue(selected.contains(g)); glay.addComponent(sw); 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"); - close.addClickListener(ev -> closeWithoutSave(dao)); + if (showCloseButton) { + close.addClickListener(ev -> closeWithoutSave(dao)); + } else { + close.setVisible(false); + } Button ok = new Button("Speichern"); ok.addClickListener(ev -> { - binder.writeBeanIfValid(person); - dao.update(person); - PersonEditDialog.this.close(); + if (binder.validate().isOk()) { + binder.writeBeanIfValid(current); + dao.update(current); + } }); - VerticalLayout layout = new VerticalLayout(); - layout.addComponents(textPrename, textSureName, birthday, groupPanel, close, ok); - setContent(layout); - center(); + + addComponents(textPrename, textSureName, birthday, groupPanel, close, ok); + + } + + public void setBean(Person person) { + this.current = person; + binder.readBean(person); } 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?") .saveDiscardCancel().setResultHandler(button -> { if (button == ConfirmDialog.Buttons.SAVE) { - binder.writeBeanIfValid(person); - dao.update(person); - PersonEditDialog.this.close(); + if (binder.validate().isOk()) { + binder.writeBeanIfValid(current); + dao.update(current); + } } else if (button == ConfirmDialog.Buttons.DISCARD) { - PersonEditDialog.this.close(); + binder.readBean(current); } }).build(); getUI().addWindow(dlg); } else { - close(); } } diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonGrid.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonGrid.java index 7cec033..4a5e474 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonGrid.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonGrid.java @@ -6,7 +6,6 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Set; -import java.util.function.Consumer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -16,8 +15,6 @@ import com.vaadin.data.provider.DataProvider; import com.vaadin.data.provider.ListDataProvider; import com.vaadin.event.selection.SelectionListener; 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.ComboBox; import com.vaadin.ui.Grid; @@ -27,11 +24,11 @@ import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Layout; import com.vaadin.ui.VerticalLayout; 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.PersonDao; 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.Person; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Startpass; @@ -48,7 +45,6 @@ public class PersonGrid extends VerticalLayout { private final CheckBox checkIncluded; private final ComboBox comboGroups; - private transient Consumer onPersonEdit; private Boolean selectedOnlyFilter; private Set groupMemberFilter; @@ -56,9 +52,9 @@ public class PersonGrid extends VerticalLayout { private PersonFilter filter; private ClubEvent currentEvent; private Column startpassColumn; - private Column editButtonColumn; private Layout filters; private SelectionMode currentSelectionMode; + private Column genderColumn; public PersonGrid(GroupDao groupDao, PersonDao personDao) { @@ -92,7 +88,6 @@ public class PersonGrid extends VerticalLayout { grid.setDataProvider(dataProvider); grid.setId("person.grid"); - setSelectionMode(SelectionMode.MULTI); grid.setSizeFull(); 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"); 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); - editButtonColumn.setHidden(true); + genderColumn.setHidden(true); } public void setSelectionMode(SelectionMode selectionMode) { @@ -125,23 +129,10 @@ public class PersonGrid extends VerticalLayout { 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() { filters.setVisible(false); } - private void showPersonDetails(Person p) { - if (onPersonEdit != null) { - onPersonEdit.accept(p); - } - } - private void onSelectedOnly(ValueChangeEvent ev) { this.selectedOnlyFilter = ev.getValue(); updateFilter(); @@ -205,10 +196,9 @@ public class PersonGrid extends VerticalLayout { updateFilter(); } - public void onPersonEdit(Consumer function) { - this.onPersonEdit = function; + public void onPersonEdit() { startpassColumn.setHidden(true); - editButtonColumn.setHidden(false); + genderColumn.setHidden(false); } public void setEvent(ClubEvent ev) {