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
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());
}
}

@ -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());
}
}

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

@ -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<ZonedDateTime> startTime, Supplier<ZonedDateTime> endTime,
private final Navigator navigator;
public HeadView(Navigator navigator, Supplier<ZonedDateTime> startTime, Supplier<ZonedDateTime> 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) {

@ -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));

@ -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<Person> p) {
Optional<Person> firstSelectedItem = p.getFirstSelectedItem();
personDetails.setBean(firstSelectedItem.orElse(null));
}
@Override

@ -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<Person> binder;
private DateField birthday;
private Person current;
public PersonEditDialog(List<GroupDef> groups, Person person, PersonDao dao) {
this.person = person;
public PersonEditDetails(List<GroupDef> groups, PersonDao dao) {
this(groups, dao, true);
}
public PersonEditDetails(List<GroupDef> 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<GroupDef> 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();
}
}

@ -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<GroupDef> comboGroups;
private transient Consumer<Person> onPersonEdit;
private Boolean selectedOnlyFilter;
private Set<GroupDef> groupMemberFilter;
@ -56,9 +52,9 @@ public class PersonGrid extends VerticalLayout {
private PersonFilter filter;
private ClubEvent currentEvent;
private Column<Person, Startpass> startpassColumn;
private Column<Person, Button> editButtonColumn;
private Layout filters;
private SelectionMode currentSelectionMode;
private Column<Person, String> 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<Boolean> ev) {
this.selectedOnlyFilter = ev.getValue();
updateFilter();
@ -205,10 +196,9 @@ public class PersonGrid extends VerticalLayout {
updateFilter();
}
public void onPersonEdit(Consumer<Person> function) {
this.onPersonEdit = function;
public void onPersonEdit() {
startpassColumn.setHidden(true);
editButtonColumn.setHidden(false);
genderColumn.setHidden(false);
}
public void setEvent(ClubEvent ev) {

Loading…
Cancel
Save