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) {
altersgruppeDao.save(edited);
clubEventDao.update(current);
clubEventDao.save(current);
}
public EventMeldung createMeldung() {

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

@ -8,7 +8,8 @@ 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(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
public T get(Object primaryKey) {
return entityManager.find(entityClass, primaryKey);

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

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

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

@ -1,9 +1,13 @@
package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Optional;
import com.vaadin.event.selection.SelectionEvent;
import com.vaadin.ui.Button;
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.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.PersonGrid;
public class PersonEditView extends HorizontalLayout implements NamedView {
public class PersonEditView extends VerticalLayout implements NamedView {
public static final String VIEW_NAME = "PersonEditView";
private static final long serialVersionUID = 1770993670570422036L;
@ -33,6 +37,19 @@ public class PersonEditView extends HorizontalLayout implements NamedView {
layout.addComponents(personGrid, personDetails);
layout.setSizeFull();
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) {

@ -6,10 +6,13 @@ import java.util.function.Consumer;
import org.vaadin.teemu.switchui.Switch;
import com.vaadin.data.Binder;
import com.vaadin.data.BinderValidationStatus;
import com.vaadin.data.ValidationResult;
import com.vaadin.ui.Button;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.DateField;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Notification;
import com.vaadin.ui.Panel;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
@ -29,7 +32,7 @@ public class PersonEditDetails extends HorizontalLayout {
private final Binder<Person> binder;
private Consumer<Person> personChangeHandler;
private Person current;
private Button okButton;
public PersonEditDetails(List<GroupDef> groups, PersonDao dao) {
this(groups, dao, true);
@ -47,8 +50,8 @@ public class PersonEditDetails extends HorizontalLayout {
TextField textStartPass = new TextField("Startpass");
binder = new Binder<>();
binder.forField(textPrename).bind(Person::getPrename, Person::setPrename);
binder.forField(textSureName).bind(Person::getSurname, Person::setSurname);
binder.forField(textPrename).asRequired().bind(Person::getPrename, Person::setPrename);
binder.forField(textSureName).asRequired().bind(Person::getSurname, Person::setSurname);
binder.forField(birthday).bind(Person::getBirth, Person::setBirth);
binder.forField(genderBox).bind(Person::getGender, Person::setGender);
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");
if (showCloseButton) {
close.addClickListener(ev -> closeWithoutSave(dao));
} else {
close.setVisible(false);
}
Button ok = new Button("Speichern");
ok.addClickListener(ev -> {
if (binder.validate().isOk()) {
binder.writeBeanIfValid(current);
dao.update(current);
okButton = new Button("Speichern");
okButton.addClickListener(ev -> {
BinderValidationStatus<Person> validate = binder.validate();
if (validate.isOk()) {
dao.save(binder.getBean());
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,
ok);
okButton);
addComponents(layout, groupPanel);
}
@ -105,8 +124,13 @@ public class PersonEditDetails extends HorizontalLayout {
}
public void setBean(Person person) {
this.current = person;
binder.readBean(person);
binder.setBean(person);
if (person != null) {
okButton.setEnabled(true);
} else {
okButton.setEnabled(false);
}
}
private void closeWithoutSave(PersonDao dao) {
@ -117,11 +141,10 @@ public class PersonEditDetails extends HorizontalLayout {
.saveDiscardCancel().setResultHandler(button -> {
if (button == ConfirmDialog.Buttons.SAVE) {
if (binder.validate().isOk()) {
binder.writeBeanIfValid(current);
dao.update(current);
dao.save(binder.getBean());
}
} else if (button == ConfirmDialog.Buttons.DISCARD) {
binder.readBean(current);
binder.removeBean();
}
}).build();

@ -112,6 +112,11 @@ public class PersonGrid extends VerticalLayout {
public void setSelectionMode(SelectionMode selectionMode) {
grid.setSelectionMode(selectionMode);
currentSelectionMode = selectionMode;
if (selectionMode != SelectionMode.MULTI) {
checkIncluded.setVisible(false);
} else {
checkIncluded.setVisible(true);
}
}
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.setPrename("prename2");
testDatabaseHelper.transactional(() -> personDao.update(person));
testDatabaseHelper.transactional(() -> personDao.save(person));
List<Person> stored = entityManager.createNamedQuery(Person.QUERY_FINDALL, Person.class).getResultList();
assertEquals(1, stored.size());

Loading…
Cancel
Save