diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/PersonDao.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/PersonDao.java index c8d9d40..7a0929a 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/PersonDao.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/PersonDao.java @@ -4,6 +4,7 @@ import java.util.List; import javax.persistence.NoResultException; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Adress; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Contact; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Relation; @@ -25,4 +26,6 @@ public interface PersonDao extends IDao { void delete(Contact c); void delete(Person p); + + void delete(Adress a); } diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/PersonDaoImpl.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/PersonDaoImpl.java index f85fc3d..c3585eb 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/PersonDaoImpl.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/dao/PersonDaoImpl.java @@ -10,6 +10,7 @@ import javax.persistence.TypedQuery; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Adress; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Contact; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.EntityAccessor; import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; @@ -42,6 +43,12 @@ public class PersonDaoImpl extends AbstractDaoImpl implements PersonDao persistOrUpdate(c); } } + List adresses = obj.getAdresses(); + if (adresses != null) { + for (Adress a : adresses) { + persistOrUpdate(a); + } + } } @Transactional @@ -112,4 +119,13 @@ public class PersonDaoImpl extends AbstractDaoImpl implements PersonDao p.setDeleted(new Date()); entityManager.merge(p); } + + @Override + public void delete(Adress a) { + + a.setDeleted(new Date()); + entityManager.merge(a); + Person person = a.getPerson(); + person.getAdresses().remove(a); + } } diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/data/Adress.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/data/Adress.java index 6fbc9e0..1affb3a 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/data/Adress.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/data/Adress.java @@ -73,4 +73,71 @@ public class Adress extends BaseEntity implements Serializable { this.person = person; } -} \ No newline at end of file + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((adress1 == null) ? 0 : adress1.hashCode()); + result = prime * result + ((adress2 == null) ? 0 : adress2.hashCode()); + result = prime * result + ((city == null) ? 0 : city.hashCode()); + result = prime * result + ((person == null) ? 0 : person.hashCode()); + result = prime * result + ((plz == null) ? 0 : plz.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + Adress other = (Adress) obj; + if (adress1 == null) { + if (other.adress1 != null) { + return false; + } + } else if (!adress1.equals(other.adress1)) { + return false; + } + if (adress2 == null) { + if (other.adress2 != null) { + return false; + } + } else if (!adress2.equals(other.adress2)) { + return false; + } + if (city == null) { + if (other.city != null) { + return false; + } + } else if (!city.equals(other.city)) { + return false; + } + if (person == null) { + if (other.person != null) { + return false; + } + } else if (!person.equals(other.person)) { + return false; + } + if (plz == null) { + if (other.plz != null) { + return false; + } + } else if (!plz.equals(other.plz)) { + return false; + } + return true; + } + + @Override + public String toString() { + return "Adress [adress1=" + adress1 + ", adress2=" + adress2 + ", plz=" + plz + ", city=" + city + "]"; + } + +} diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/AdressComponent.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/AdressComponent.java new file mode 100644 index 0000000..9cbe18a --- /dev/null +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/AdressComponent.java @@ -0,0 +1,46 @@ +package de.kreth.vaadin.clubhelper.vaadinclubhelper.ui.components; + +import java.util.Collection; +import java.util.stream.Collectors; + +import com.vaadin.data.Binder; +import com.vaadin.data.ValidationResult; +import com.vaadin.data.ValueContext; +import com.vaadin.ui.TextField; + +import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Adress; +import de.kreth.vaadin.clubhelper.vaadinclubhelper.data.Person; + +public class AdressComponent extends AbstractDataGrid { + + private static final long serialVersionUID = 1608846765622407233L; + + @Override + protected ValidationResult validate(Adress obj, ValueContext context) { + return ValidationResult.ok(); + } + + @Override + protected Adress createNewItem() { + return new Adress(); + } + + @Override + protected void createColumnAndBinding(Binder binder) { + + addColumn(Adress::getAdress1).setCaption("Adresse 1") + .setEditorBinding(binder.bind(new TextField(), Adress::getAdress1, Adress::setAdress1)); + addColumn(Adress::getAdress2).setCaption("Adresse 2") + .setEditorBinding(binder.bind(new TextField(), Adress::getAdress2, Adress::setAdress2)); + addColumn(Adress::getPlz).setCaption("PLZ") + .setEditorBinding(binder.bind(new TextField(), Adress::getPlz, Adress::setPlz)); + addColumn(Adress::getCity).setCaption("Ort") + .setEditorBinding(binder.bind(new TextField(), Adress::getCity, Adress::setCity)); + } + + @Override + protected Collection readValues(Person person) { + return person.getAdresses().stream().filter(e -> e.getDeleted() == null).collect(Collectors.toList()); + } + +} diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/ContactGrid.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/ContactGrid.java index b81a8d8..f257d5e 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/ContactGrid.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/ContactGrid.java @@ -25,7 +25,7 @@ public class ContactGrid extends AbstractDataGrid { private static final PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance(); @Override - public void createColumnAndBinding(Binder binder) { + protected void createColumnAndBinding(Binder binder) { Binding typeBinding = binder.bind(new ContactTypeComponent(), Contact::getType, Contact::setType); Binding valueBinding = binder.bind(new TextField(), Contact::getValue, Contact::setValue); diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonEditDetails.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonEditDetails.java index b31bc8d..17926e6 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonEditDetails.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/PersonEditDetails.java @@ -39,6 +39,7 @@ public class PersonEditDetails extends HorizontalLayout { private ContactGrid contactLayout; private RelationComponent relationshipLayout; + private AdressComponent adressLayout; public PersonEditDetails(List groups, PersonDao dao) { this(groups, dao, true); @@ -93,6 +94,7 @@ public class PersonEditDetails extends HorizontalLayout { } contactLayout.setPerson(edited); relationshipLayout.setPerson(edited); + adressLayout.setPerson(edited); } else { List errors = validate.getBeanValidationErrors(); StringBuilder msg = new StringBuilder(); @@ -120,20 +122,37 @@ public class PersonEditDetails extends HorizontalLayout { + c.getPerson().getSurname() + " \"" + c + "\" wirklich löschen?") .yesCancel().setResultHandler(button -> { if (button == ConfirmDialog.Buttons.YES) { - if (binder.validate().isOk()) { - dao.delete(c); - } + dao.delete(c); } }).build(); getUI().addWindow(dlg); }); contactLayout.addSuccessConsumer(newContact -> binder.getBean().add(newContact)); + relationshipLayout = new RelationComponent(dao); + + adressLayout = new AdressComponent(); + adressLayout.setDeleteConsumer(a -> { + + ConfirmDialog dlg = ConfirmDialog + .builder().setCaption("Adresse löschen").setMessage(a.getPerson().getPrename() + " " + + a.getPerson().getSurname() + " \"" + a + "\" wirklich löschen?") + .yesCancel().setResultHandler(button -> { + if (button == ConfirmDialog.Buttons.YES) { + dao.delete(a); + } + }).build(); + + getUI().addWindow(dlg); + }); + adressLayout.addSuccessConsumer(newAdress -> binder.getBean().addAdress(newAdress)); + TabSheet sheet = new TabSheet(); sheet.addTab(groupLayout, "Gruppen"); sheet.addTab(contactLayout, "Kontakte"); sheet.addTab(relationshipLayout, "Angehörige"); + sheet.addTab(adressLayout, "Adresse"); addComponents(layout, sheet); setExpandRatio(layout, 1f); setExpandRatio(sheet, 2f); @@ -169,6 +188,7 @@ public class PersonEditDetails extends HorizontalLayout { binder.setBean(person); contactLayout.setPerson(person); relationshipLayout.setPerson(person); + adressLayout.setPerson(person); if (person != null) { okButton.setEnabled(true); @@ -197,7 +217,8 @@ public class PersonEditDetails extends HorizontalLayout { } public boolean hasChanges() { - return binder.hasChanges() || contactLayout.hasChanges() || relationshipLayout.hasChanges(); + return binder.hasChanges() || contactLayout.hasChanges() || relationshipLayout.hasChanges() + || adressLayout.hasChanges(); } } diff --git a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/RelationComponent.java b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/RelationComponent.java index 184bc9f..b2b4137 100644 --- a/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/RelationComponent.java +++ b/src/main/java/de/kreth/vaadin/clubhelper/vaadinclubhelper/ui/components/RelationComponent.java @@ -24,7 +24,6 @@ public class RelationComponent extends AbstractDataGrid { protected void createColumnAndBinding(Binder binder) { addColumn(r -> r.getRelation().getLocalized()).setCaption("Beiehung"); addColumn(r -> r.getPerson().getPrename() + " " + r.getPerson().getSurname()); - } @Override