This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/causeway-app-petclinic.git

commit 3e34fc096704199c35e77d7ad0698aa916afc78b
Author: Dan Haywood <[email protected]>
AuthorDate: Sun May 26 22:32:08 2024 +0100

    adds a subscriber to veto deletion if there are any visits for the owner
---
 .../subscriptions/PetOwner_delete_subscriber.java  | 39 ++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git 
a/module-visit/src/main/java/domainapp/modules/visit/subscriptions/PetOwner_delete_subscriber.java
 
b/module-visit/src/main/java/domainapp/modules/visit/subscriptions/PetOwner_delete_subscriber.java
new file mode 100644
index 0000000..650f9b2
--- /dev/null
+++ 
b/module-visit/src/main/java/domainapp/modules/visit/subscriptions/PetOwner_delete_subscriber.java
@@ -0,0 +1,39 @@
+package domainapp.modules.visit.subscriptions;
+
+import domainapp.modules.petowner.dom.petowner.PetOwner;
+import domainapp.modules.visit.dom.visit.Visit;
+import domainapp.modules.visit.dom.visit.VisitRepository;
+
+import java.util.List;
+
+import javax.inject.Inject;
+
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Component;
+
+@Component
+public class PetOwner_delete_subscriber {
+
+    @EventListener(PetOwner.DeleteActionDomainEvent.class)
+    void on(PetOwner.DeleteActionDomainEvent event) {
+        PetOwner subject = event.getSubject();
+        switch (event.getEventPhase()) {
+            case HIDE:
+                break;
+            case DISABLE:
+                List<Visit> visits = visitRepository.findByPetOwner(subject);
+                if (!visits.isEmpty()) {
+                    event.veto("This owner has %d visit%s", visits.size(), 
(visits.size() == 1 ? "" : "s"));
+                }
+                break;
+            case VALIDATE:
+                break;
+            case EXECUTING:
+                break;
+            case EXECUTED:
+                break;
+        }
+    }
+
+    @Inject VisitRepository visitRepository;
+}

Reply via email to