From a70bf8ae96e45bd0a221a6d9bea501c66d3f3a8e Mon Sep 17 00:00:00 2001 From: Thomas Peetz Date: Tue, 3 Jun 2025 10:18:36 +0200 Subject: [PATCH] fix selecting Volume for Issue --- .../de/thpeetz/kontor/comics/data/Issue.java | 25 ++++++++++++++++- .../de/thpeetz/kontor/comics/data/Volume.java | 12 ++++++++- .../kontor/comics/views/IssueForm.java | 27 ++++++++++++++++--- .../kontor/comics/views/IssueView.java | 2 +- 4 files changed, 59 insertions(+), 7 deletions(-) diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Issue.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Issue.java index cea9663..cf264a1 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Issue.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Issue.java @@ -21,7 +21,6 @@ import java.time.YearMonth; @Getter @Setter -@ToString @EqualsAndHashCode(callSuper = false) @Entity public class Issue extends AbstractEntity { @@ -69,4 +68,28 @@ public class Issue extends AbstractEntity { } return null; } + + @Override + public String toString() { + StringBuilder result = new StringBuilder(); + result.append("Issue{"); + result.append("comic="); + result.append(comic); + result.append(", volume="); + result.append(volume); + result.append(", storyArc="); + result.append(storyArc); + result.append(", issueNumber='"); + result.append(issueNumber); + result.append(", title='"); + result.append(title); + result.append(", publishedOn="); + result.append(publishedOn); + result.append(", isRead="); + result.append(isRead); + result.append(", inStock="); + result.append(inStock); + result.append("}"); + return result.toString(); + } } diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Volume.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Volume.java index 67a6d8a..27116e4 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Volume.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/data/Volume.java @@ -22,7 +22,6 @@ import lombok.ToString; @Getter @Setter -@ToString @EqualsAndHashCode(callSuper = false) @Entity public class Volume extends AbstractEntity { @@ -43,4 +42,15 @@ public class Volume extends AbstractEntity { @OneToMany(fetch = FetchType.EAGER, mappedBy = "volume", cascade = CascadeType.REMOVE, orphanRemoval = true) @Nullable private List issues = new LinkedList<>(); + + @Override + public String toString() { + StringBuilder result = new StringBuilder("Volume{"); + result.append("name="); + result.append(name); + result.append("comic=Comic{title="); + result.append(comic.getTitle()); + result.append("}}"); + return result.toString(); + } } diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueForm.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueForm.java index d580e2b..583de18 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueForm.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueForm.java @@ -18,7 +18,7 @@ import com.vaadin.flow.data.binder.Binder; import de.thpeetz.kontor.comics.data.Comic; import de.thpeetz.kontor.comics.data.Issue; import de.thpeetz.kontor.comics.data.Volume; -import de.thpeetz.kontor.common.views.*; +import de.thpeetz.kontor.common.views.YearMonthField; import lombok.extern.slf4j.Slf4j; @Slf4j @@ -38,12 +38,21 @@ public class IssueForm extends FormLayout { Binder binder = new BeanValidationBinder<>(Issue.class); - public IssueForm(List comics) { + public IssueForm(List comics, List volumes) { addClassName("issue-form"); binder.bindInstanceFields(this); comic.setItems(comics); + comic.addValueChangeListener(event -> { + if (event.getValue() != null) { + volume.setItems(event.getValue().getVolumes()); + } else { + volume.clear(); + } + }); comic.setItemLabelGenerator(Comic::getTitle); + volume.setItems(volumes); + volume.setItemLabelGenerator(Volume::getName); add(comic, volume, issueNumber, title, publishedOn, isRead, inStock, createButtonsLayout()); } @@ -70,10 +79,20 @@ public class IssueForm extends FormLayout { } public void setIssue(Issue issue) { - binder.setBean(issue); + log.debug("IssueForm.setIssue: {}", issue); + Volume issueVolume = null; if (issue != null) { + issueVolume = issue.getVolume(); + } + binder.setBean(issue); + if (issue != null && issue.getComic() != null) { + log.debug("populate list of volumes"); volume.setItems(issue.getComic().getVolumes()); - volume.setItemLabelGenerator(Volume::getName); + log.info("Issue.Volume= {}", issue.getVolume()); + if (issueVolume != null) { + log.debug("Set volume {} for issue: {}", issueVolume, issue); + volume.setValue(issueVolume); + } } } diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueView.java b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueView.java index 1978c9d..ea90bf3 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueView.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/comics/views/IssueView.java @@ -94,7 +94,7 @@ public class IssueView extends VerticalLayout { } private void configureForm() { - form = new IssueForm(service.findAllComics(null)); + form = new IssueForm(service.findAllComics(null), service.findAllVolumes()); form.setWidth("25em"); form.setVisible(false); form.addSaveListener(this::saveIssue);