database storage simplified, Person Add incl. Validation.

master
Markus Kreth 7 years ago
parent 7deff438de
commit ab1b9b8731
  1. 2
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/EventBusiness.java
  2. 2
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungDmtWettkampfGenerator.java
  3. 3
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/business/meldung/MeldungEinzelWettkampfGenerator.java
  4. 6
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/AbstractDaoImpl.java
  5. 4
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/ClubEventDaoImpl.java
  6. 3
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/IDao.java
  7. 6
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/PersonDaoImpl.java
  8. 19
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/PersonEditView.java
  9. 55
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonEditDetails.java
  10. 5
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonGrid.java
  11. 25
      src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonGroupValidator.java
  12. 2
      src/test/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/PersonDaoTest.java

@ -80,7 +80,7 @@ public class EventBusiness {
public void storeAltersgruppe(Altersgruppe edited) { public void storeAltersgruppe(Altersgruppe edited) {
altersgruppeDao.save(edited); altersgruppeDao.save(edited);
clubEventDao.update(current); clubEventDao.save(current);
} }
public EventMeldung createMeldung() { public EventMeldung createMeldung() {

@ -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(p.getBirth().getYear()).append("\t").append(p.getStartpass().getStartpassNr());
} }
} }

@ -8,7 +8,8 @@ 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(g.getPflicht().getName()); .append(p.getBirth().getYear()).append("\t").append(g.getPflicht().getName()).append("\t")
.append(p.getStartpass().getStartpassNr());
} }
} }

@ -33,12 +33,6 @@ public abstract class AbstractDaoImpl<T extends EntityAccessor> implements IDao<
} }
} }
@Override
@Transactional
public T update(T obj) {
return entityManager.merge(obj);
}
@Override @Override
public T get(Object primaryKey) { public T get(Object primaryKey) {
return entityManager.find(entityClass, primaryKey); return entityManager.find(entityClass, primaryKey);

@ -24,14 +24,14 @@ public class ClubEventDaoImpl extends AbstractDaoImpl<ClubEvent> implements Club
} }
@Override @Override
public ClubEvent update(ClubEvent obj) { public void save(ClubEvent obj) {
CompetitionType competitionType = obj.getCompetitionType(); CompetitionType competitionType = obj.getCompetitionType();
if (competitionType != null) { if (competitionType != null) {
if (obj.getCompetitionType().getId() == null) { if (obj.getCompetitionType().getId() == null) {
obj.getCompetitionType().setId(obj.getId()); obj.getCompetitionType().setId(obj.getId());
} }
} }
return super.update(obj); super.save(obj);
} }
@Override @Override

@ -5,7 +5,8 @@ import java.util.List;
public interface IDao<T> { public interface IDao<T> {
void save(T obj); void save(T obj);
T update(T obj);
List<T> listAll(); List<T> listAll();
T get(Object primaryKey); T get(Object primaryKey);
} }

@ -13,12 +13,6 @@ public class PersonDaoImpl extends AbstractDaoImpl<Person> implements PersonDao
super(Person.class); super(Person.class);
} }
@Override
public Person update(Person obj) {
return super.update(obj);
}
@Override @Override
public Person findLoginUser(String username, String password) { public Person findLoginUser(String username, String password) {
TypedQuery<Person> query = entityManager.createNamedQuery(Person.QUERY_FINDLOGIN, Person.class); TypedQuery<Person> query = entityManager.createNamedQuery(Person.QUERY_FINDLOGIN, Person.class);

@ -1,9 +1,13 @@
package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui; package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Optional; import java.util.Optional;
import com.vaadin.event.selection.SelectionEvent; import com.vaadin.event.selection.SelectionEvent;
import com.vaadin.ui.Button;
import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.VerticalLayout;
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;
@ -11,7 +15,7 @@ import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components.PersonEditDetails; 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 VerticalLayout implements NamedView {
public static final String VIEW_NAME = "PersonEditView"; public static final String VIEW_NAME = "PersonEditView";
private static final long serialVersionUID = 1770993670570422036L; private static final long serialVersionUID = 1770993670570422036L;
@ -33,6 +37,19 @@ public class PersonEditView extends HorizontalLayout implements NamedView {
layout.addComponents(personGrid, personDetails); layout.addComponents(personGrid, personDetails);
layout.setSizeFull(); layout.setSizeFull();
addComponent(layout); addComponent(layout);
Button addPerson = new Button("Hinzufügen");
addPerson.addClickListener(ev -> addPerson());
addComponent(addPerson);
}
private void addPerson() {
Person person = new Person();
person.setGroups(new HashSet<>());
person.setAdresses(new ArrayList<>());
person.setEvents(new HashSet<>());
person.setRelatives1(new ArrayList<>());
personDetails.setBean(person);
personGrid.deselectAll();
} }
void selectedPerson(SelectionEvent<Person> p) { void selectedPerson(SelectionEvent<Person> p) {

@ -6,10 +6,13 @@ import java.util.function.Consumer;
import org.vaadin.teemu.switchui.Switch; import org.vaadin.teemu.switchui.Switch;
import com.vaadin.data.Binder; import com.vaadin.data.Binder;
import com.vaadin.data.BinderValidationStatus;
import com.vaadin.data.ValidationResult;
import com.vaadin.ui.Button; import com.vaadin.ui.Button;
import com.vaadin.ui.ComboBox; import com.vaadin.ui.ComboBox;
import com.vaadin.ui.DateField; import com.vaadin.ui.DateField;
import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Notification;
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;
@ -29,7 +32,7 @@ public class PersonEditDetails extends HorizontalLayout {
private final Binder<Person> binder; private final Binder<Person> binder;
private Consumer<Person> personChangeHandler; private Consumer<Person> personChangeHandler;
private Person current; private Button okButton;
public PersonEditDetails(List<GroupDef> groups, PersonDao dao) { public PersonEditDetails(List<GroupDef> groups, PersonDao dao) {
this(groups, dao, true); this(groups, dao, true);
@ -47,8 +50,8 @@ public class PersonEditDetails extends HorizontalLayout {
TextField textStartPass = new TextField("Startpass"); TextField textStartPass = new TextField("Startpass");
binder = new Binder<>(); binder = new Binder<>();
binder.forField(textPrename).bind(Person::getPrename, Person::setPrename); binder.forField(textPrename).asRequired().bind(Person::getPrename, Person::setPrename);
binder.forField(textSureName).bind(Person::getSurname, Person::setSurname); binder.forField(textSureName).asRequired().bind(Person::getSurname, Person::setSurname);
binder.forField(birthday).bind(Person::getBirth, Person::setBirth); binder.forField(birthday).bind(Person::getBirth, Person::setBirth);
binder.forField(genderBox).bind(Person::getGender, Person::setGender); binder.forField(genderBox).bind(Person::getGender, Person::setGender);
binder.forField(textStartPass).bind(p -> { binder.forField(textStartPass).bind(p -> {
@ -77,25 +80,41 @@ public class PersonEditDetails extends HorizontalLayout {
}); });
} }
binder.withValidator(p -> (p.getGroups() != null && p.getGroups().isEmpty() == false),
"Mind. eine Gruppe muss gewählt sein!");
Button close = new Button("Schließen"); Button close = new Button("Schließen");
if (showCloseButton) { if (showCloseButton) {
close.addClickListener(ev -> closeWithoutSave(dao)); close.addClickListener(ev -> closeWithoutSave(dao));
} else { } else {
close.setVisible(false); close.setVisible(false);
} }
Button ok = new Button("Speichern");
ok.addClickListener(ev -> { okButton = new Button("Speichern");
if (binder.validate().isOk()) { okButton.addClickListener(ev -> {
binder.writeBeanIfValid(current); BinderValidationStatus<Person> validate = binder.validate();
dao.update(current); if (validate.isOk()) {
dao.save(binder.getBean());
if (personChangeHandler != null) { if (personChangeHandler != null) {
personChangeHandler.accept(current); personChangeHandler.accept(binder.getBean());
}
} else {
List<ValidationResult> errors = validate.getBeanValidationErrors();
StringBuilder msg = new StringBuilder();
for (ValidationResult res : errors) {
if (res.isError()) {
if (msg.length() > 0) {
msg.append("\n");
}
msg.append(res.getErrorMessage());
}
} }
Notification.show("Fehler korrigieren", msg.toString(), Notification.Type.ERROR_MESSAGE);
} }
}); });
okButton.setEnabled(false);
VerticalLayout layout = new VerticalLayout(textPrename, textSureName, birthday, genderBox, textStartPass, close, VerticalLayout layout = new VerticalLayout(textPrename, textSureName, birthday, genderBox, textStartPass, close,
ok); okButton);
addComponents(layout, groupPanel); addComponents(layout, groupPanel);
} }
@ -105,8 +124,13 @@ public class PersonEditDetails extends HorizontalLayout {
} }
public void setBean(Person person) { public void setBean(Person person) {
this.current = person; binder.setBean(person);
binder.readBean(person);
if (person != null) {
okButton.setEnabled(true);
} else {
okButton.setEnabled(false);
}
} }
private void closeWithoutSave(PersonDao dao) { private void closeWithoutSave(PersonDao dao) {
@ -117,11 +141,10 @@ public class PersonEditDetails extends HorizontalLayout {
.saveDiscardCancel().setResultHandler(button -> { .saveDiscardCancel().setResultHandler(button -> {
if (button == ConfirmDialog.Buttons.SAVE) { if (button == ConfirmDialog.Buttons.SAVE) {
if (binder.validate().isOk()) { if (binder.validate().isOk()) {
binder.writeBeanIfValid(current); dao.save(binder.getBean());
dao.update(current);
} }
} else if (button == ConfirmDialog.Buttons.DISCARD) { } else if (button == ConfirmDialog.Buttons.DISCARD) {
binder.readBean(current); binder.removeBean();
} }
}).build(); }).build();

@ -112,6 +112,11 @@ public class PersonGrid extends VerticalLayout {
public void setSelectionMode(SelectionMode selectionMode) { public void setSelectionMode(SelectionMode selectionMode) {
grid.setSelectionMode(selectionMode); grid.setSelectionMode(selectionMode);
currentSelectionMode = selectionMode; currentSelectionMode = selectionMode;
if (selectionMode != SelectionMode.MULTI) {
checkIncluded.setVisible(false);
} else {
checkIncluded.setVisible(true);
}
} }
private Layout setupFilterComponents() { private Layout setupFilterComponents() {

@ -0,0 +1,25 @@
package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components;
import java.util.Set;
import com.vaadin.data.ValidationResult;
import com.vaadin.data.Validator;
import com.vaadin.data.ValueContext;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.GroupDef;
import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person;
public class PersonGroupValidator implements Validator<Person> {
private static final long serialVersionUID = -941938281840937295L;
@Override
public ValidationResult apply(Person value, ValueContext context) {
Set<GroupDef> gr = value.getGroups();
if (gr != null && gr.isEmpty() == false) {
return ValidationResult.ok();
}
return ValidationResult.error("Es müssen Gruppen gesetzt sein!");
}
}

@ -71,7 +71,7 @@ public class PersonDaoTest {
person.setSurname("surname2"); person.setSurname("surname2");
person.setPrename("prename2"); person.setPrename("prename2");
testDatabaseHelper.transactional(() -> personDao.update(person)); testDatabaseHelper.transactional(() -> personDao.save(person));
List<Person> stored = entityManager.createNamedQuery(Person.QUERY_FINDALL, Person.class).getResultList(); List<Person> stored = entityManager.createNamedQuery(Person.QUERY_FINDALL, Person.class).getResultList();
assertEquals(1, stored.size()); assertEquals(1, stored.size());

Loading…
Cancel
Save