You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2021/10/06 17:45:31 UTC

[isis-app-demo] 03/19: adds subscriber for Visits to veto delete of PetOwner if any of its Pets

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/isis-app-demo.git

commit e0184bc3e84a64059c1a3cf84f9325f5ad2da6af
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Oct 5 18:31:33 2021 +0100

    adds subscriber for Visits to veto delete of PetOwner if any of its Pets
    
    ... have visits
---
 .../subscribers/PetOwnerForVisitsSubscriber.java   | 46 ++++++++++++++++++++++
 1 file changed, 46 insertions(+)

diff --git a/module-visits/src/main/java/petclinic/modules/visits/subscribers/PetOwnerForVisitsSubscriber.java b/module-visits/src/main/java/petclinic/modules/visits/subscribers/PetOwnerForVisitsSubscriber.java
new file mode 100644
index 0000000..f391988
--- /dev/null
+++ b/module-visits/src/main/java/petclinic/modules/visits/subscribers/PetOwnerForVisitsSubscriber.java
@@ -0,0 +1,46 @@
+package petclinic.modules.visits.subscribers;
+
+import java.util.List;
+
+import javax.inject.Inject;
+
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Service;
+
+import org.apache.isis.applib.services.repository.RepositoryService;
+import org.apache.isis.applib.services.title.TitleService;
+
+import petclinic.modules.pets.dom.pet.Pet;
+import petclinic.modules.pets.dom.pet.PetRepository;
+import petclinic.modules.pets.dom.petowner.PetOwner;
+import petclinic.modules.pets.dom.petowner.PetOwner_delete;
+import petclinic.modules.visits.dom.visit.Visit;
+import petclinic.modules.visits.dom.visit.VisitRepository;
+
+@Service
+public class PetOwnerForVisitsSubscriber {
+
+    @EventListener(PetOwner_delete.ActionEvent.class)
+    public void on(PetOwner_delete.ActionEvent ev) {
+        switch(ev.getEventPhase()) {
+            case DISABLE:
+                PetOwner petOwner = ev.getSubject();
+                List<Pet> pets = petRepository.findByPetOwner(petOwner);
+                for (Pet pet : pets) {
+                    List<Visit> visits = visitRepository.findByPetOrderByVisitAtDesc(pet);
+                    int numVisits = visits.size();
+                    if(numVisits > 0) {
+                        ev.disable(String.format("%s has %d visit%s",
+                                titleService.titleOf(pet),
+                                numVisits,
+                                numVisits != 1 ? "s" : ""));
+                    }
+                }
+                break;
+        }
+    }
+
+    @Inject TitleService titleService;
+    @Inject VisitRepository visitRepository;
+    @Inject PetRepository petRepository;
+}