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:28 UTC

[isis-app-demo] branch main updated (9f15d3f -> cb22e04)

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

danhaywood pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/isis-app-demo.git.


    from 9f15d3f  adds unit test for Pets_bookVisit
     new 8092855  reworks PetOwner_delete to emit domain events.
     new 47726c7  adds subscriber for Pets to cascade delete if PetOwner is deleted
     new e0184bc  adds subscriber for Visits to veto delete of PetOwner if any of its Pets
     new 0c90488  updates PetRepository to inherit from JpaRepository rather than
     new 05e8437  updates VisitRepository to inherit from JpaRepository rather than
     new addc7f7  extends HomePageViewModel to show 3 collections of all ...
     new 1cf7e40  updates layout file for HomePageViewModel with new collections
     new 6bfedbc  renames columnOrder for HomePageViewModel objects to petOwners
     new c468f23  adds columnOrders for 2 new collections of HomePageViewModel
     new c387532  Adds bookVisit mixin for HomePageViewModel
     new 2bea562  adds VisitPlusPetOwner view model
     new 5fe75c9  updates HomePageViewModel to use VisitPlusPetOwner view model
     new 015ede4  adds integtest dependency for visits module
     new b2b9558  adds VisitsModuleIntegTestAbstract, to bootstrap tests
     new ec0f2df  adds application-test.yml for visits module
     new 466f334  adds Bootstrap_IntegTest to check the visits module bootstrapping
     new 7f32eac  adds happy case for Pet#bookVisit integ test
     new f1a4dc2  adds error scenario for bookVisit that a reason is required
     new cb22e04  adds error scenario that visitAt when bookVisit must be in future

The 19 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../pets/dom/pet/PetOwnerForPetsSubscriber.java    |  31 +++++++
 .../modules/pets/dom/pet/PetRepository.java        |   4 +-
 .../modules/pets/dom/petowner/PetOwner_delete.java |  14 +--
 module-visits/pom.xml                              |   8 ++
 .../modules/visits/dom/visit/VisitRepository.java  |   6 +-
 .../subscribers/PetOwnerForVisitsSubscriber.java   |  46 ++++++++++
 .../integtest/VisitsModuleIntegTestAbstract.java   |  18 ++--
 .../integtest/tests/Bootstrap_IntegTest.java       |  12 +++
 .../integtest/tests/Pet_bookVisit_IntegTest.java   | 101 +++++++++++++++++++++
 .../src/test/resources/application-test.yml        |   4 +
 ...=> HomePageViewModel#petOwners.columnOrder.txt} |   2 +-
 ....txt => HomePageViewModel#pets.columnOrder.txt} |   3 +-
 .../HomePageViewModel#visits.columnOrder.txt       |   4 +
 .../services/homepage/HomePageViewModel.java       |  27 ++++--
 .../services/homepage/HomePageViewModel.layout.xml |  22 +++--
 .../homepage/HomePageViewModel_bookVisit.java      |  51 +++++++++++
 .../services/homepage/VisitPlusPetOwner.java       |  48 ++++++++++
 17 files changed, 359 insertions(+), 42 deletions(-)
 create mode 100644 module-pets/src/main/java/petclinic/modules/pets/dom/pet/PetOwnerForPetsSubscriber.java
 create mode 100644 module-visits/src/main/java/petclinic/modules/visits/subscribers/PetOwnerForVisitsSubscriber.java
 copy module-pets-tests/src/test/java/petclinic/modules/pets/integtests/PetsModuleIntegTestAbstract.java => module-visits/src/test/java/petclinic/modules/visits/integtest/VisitsModuleIntegTestAbstract.java (77%)
 create mode 100644 module-visits/src/test/java/petclinic/modules/visits/integtest/tests/Bootstrap_IntegTest.java
 create mode 100644 module-visits/src/test/java/petclinic/modules/visits/integtest/tests/Pet_bookVisit_IntegTest.java
 create mode 100644 module-visits/src/test/resources/application-test.yml
 copy webapp/src/main/java/petclinic/webapp/application/services/homepage/{HomePageViewModel#objects.columnOrder.txt => HomePageViewModel#petOwners.columnOrder.txt} (78%)
 rename webapp/src/main/java/petclinic/webapp/application/services/homepage/{HomePageViewModel#objects.columnOrder.txt => HomePageViewModel#pets.columnOrder.txt} (53%)
 create mode 100644 webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel#visits.columnOrder.txt
 create mode 100644 webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel_bookVisit.java
 create mode 100644 webapp/src/main/java/petclinic/webapp/application/services/homepage/VisitPlusPetOwner.java

[isis-app-demo] 19/19: adds error scenario that visitAt when bookVisit must be in future

Posted by da...@apache.org.
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 cb22e049566814173ec46862037014b3c260f041
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Oct 6 18:39:06 2021 +0100

    adds error scenario that visitAt when bookVisit must be in future
---
 .../integtest/tests/Pet_bookVisit_IntegTest.java      | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/module-visits/src/test/java/petclinic/modules/visits/integtest/tests/Pet_bookVisit_IntegTest.java b/module-visits/src/test/java/petclinic/modules/visits/integtest/tests/Pet_bookVisit_IntegTest.java
index 2127efa..de3508c 100644
--- a/module-visits/src/test/java/petclinic/modules/visits/integtest/tests/Pet_bookVisit_IntegTest.java
+++ b/module-visits/src/test/java/petclinic/modules/visits/integtest/tests/Pet_bookVisit_IntegTest.java
@@ -75,6 +75,25 @@ public class Pet_bookVisit_IntegTest extends VisitsModuleIntegTestAbstract {
         .hasMessage("'Reason' is mandatory");
     }
 
+    @Test
+    public void cannot_book_in_the_past() {
+
+        // given
+        Pet somePet = fakeDataService.enums().anyOf(Pet_persona.class)
+                .findUsing(serviceRegistry);
+        List<Visit> before = visitRepository.findByPetOrderByVisitAtDesc(somePet);
+
+        // when, then
+        LocalDateTime visitAt = clockService.getClock().nowAsLocalDateTime();
+        String reason = fakeDataService.strings().upper(40);
+
+        assertThatThrownBy(() ->
+                wrapMixin(Pet_bookVisit.class, somePet).act(visitAt, reason)
+        )
+                .isInstanceOf(InvalidException.class)
+                .hasMessage("Must be in the future");
+    }
+
     @Inject FakeDataService fakeDataService;
     @Inject VisitRepository visitRepository;
     @Inject ClockService clockService;

[isis-app-demo] 02/19: adds subscriber for Pets to cascade delete if PetOwner is deleted

Posted by da...@apache.org.
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 47726c7e93ad07e7f2984d929d4068a00d8a6078
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Oct 5 18:31:06 2021 +0100

    adds subscriber for Pets to cascade delete if PetOwner is deleted
---
 .../pets/dom/pet/PetOwnerForPetsSubscriber.java    | 31 ++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/module-pets/src/main/java/petclinic/modules/pets/dom/pet/PetOwnerForPetsSubscriber.java b/module-pets/src/main/java/petclinic/modules/pets/dom/pet/PetOwnerForPetsSubscriber.java
new file mode 100644
index 0000000..1c94b98
--- /dev/null
+++ b/module-pets/src/main/java/petclinic/modules/pets/dom/pet/PetOwnerForPetsSubscriber.java
@@ -0,0 +1,31 @@
+package petclinic.modules.pets.dom.pet;
+
+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 petclinic.modules.pets.dom.petowner.PetOwner;
+import petclinic.modules.pets.dom.petowner.PetOwner_delete;
+
+@Service
+public class PetOwnerForPetsSubscriber {
+
+    @EventListener(PetOwner_delete.ActionEvent.class)
+    public void on(PetOwner_delete.ActionEvent ev) {
+        switch(ev.getEventPhase()) {
+            case EXECUTING:
+                PetOwner petOwner = ev.getSubject();
+                List<Pet> pets = petRepository.findByPetOwner(petOwner);
+                pets.forEach(repositoryService::remove);
+                break;
+        }
+    }
+
+    @Inject PetRepository petRepository;
+    @Inject RepositoryService repositoryService;
+}

[isis-app-demo] 16/19: adds Bootstrap_IntegTest to check the visits module bootstrapping

Posted by da...@apache.org.
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 466f334cd02ce7b327b6499cda5ee67986c1b8c0
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Oct 6 18:22:25 2021 +0100

    adds Bootstrap_IntegTest to check the visits module bootstrapping
---
 .../modules/visits/integtest/tests/Bootstrap_IntegTest.java  | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/module-visits/src/test/java/petclinic/modules/visits/integtest/tests/Bootstrap_IntegTest.java b/module-visits/src/test/java/petclinic/modules/visits/integtest/tests/Bootstrap_IntegTest.java
new file mode 100644
index 0000000..beb1a49
--- /dev/null
+++ b/module-visits/src/test/java/petclinic/modules/visits/integtest/tests/Bootstrap_IntegTest.java
@@ -0,0 +1,12 @@
+package petclinic.modules.visits.integtest.tests;
+
+import org.junit.jupiter.api.Test;
+
+import petclinic.modules.visits.integtest.VisitsModuleIntegTestAbstract;
+
+public class Bootstrap_IntegTest extends VisitsModuleIntegTestAbstract {
+
+    @Test
+    public void checks_can_bootstrap() {}
+
+}

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

Posted by da...@apache.org.
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;
+}

[isis-app-demo] 15/19: adds application-test.yml for visits module

Posted by da...@apache.org.
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 ec0f2df4cdd899f44d06d6fe48d3223b5715dbf8
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Oct 6 18:21:53 2021 +0100

    adds application-test.yml for visits module
---
 module-visits/src/test/resources/application-test.yml | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/module-visits/src/test/resources/application-test.yml b/module-visits/src/test/resources/application-test.yml
new file mode 100644
index 0000000..038efed
--- /dev/null
+++ b/module-visits/src/test/resources/application-test.yml
@@ -0,0 +1,4 @@
+isis:
+  persistence:
+    schema:
+      auto-create-schemas: pets,visits

[isis-app-demo] 06/19: extends HomePageViewModel to show 3 collections of all ...

Posted by da...@apache.org.
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 addc7f78e3027b06377415be9f2de6fbfce778a8
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Oct 5 19:08:06 2021 +0100

    extends HomePageViewModel to show 3 collections of all ...
    
    ... owners, pets and visits
---
 .../services/homepage/HomePageViewModel.java       | 24 ++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel.java b/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel.java
index f863002..854785d 100644
--- a/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel.java
+++ b/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel.java
@@ -9,24 +9,36 @@ import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.annotation.HomePage;
 import org.apache.isis.applib.annotation.Nature;
 
+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.PetOwners;
+import petclinic.modules.pets.dom.petowner.PetOwnerRepository;
+import petclinic.modules.visits.dom.visit.Visit;
+import petclinic.modules.visits.dom.visit.VisitRepository;
 
 @DomainObject(
         nature = Nature.VIEW_MODEL,
-        logicalTypeName = "simple.HomePageViewModel"
+        logicalTypeName = "petclinic.HomePageViewModel"
         )
 @HomePage
 @DomainObjectLayout()
 public class HomePageViewModel {
 
     public String title() {
-        return getObjects().size() + " objects";
+        return getPetOwners().size() + " owners";
     }
 
-    public List<PetOwner> getObjects() {
-        return petOwners.listAll();
+    public List<PetOwner> getPetOwners() {
+        return petOwnerRepository.findAll();
+    }
+    public List<Pet> getPets() {
+        return petRepository.findAll();
+    }
+    public List<Visit> getVisits() {
+        return visitRepository.findAll();
     }
 
-    @Inject PetOwners petOwners;
+    @Inject PetOwnerRepository petOwnerRepository;
+    @Inject PetRepository petRepository;
+    @Inject VisitRepository visitRepository;
 }

[isis-app-demo] 04/19: updates PetRepository to inherit from JpaRepository rather than

Posted by da...@apache.org.
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 0c90488516df0629e92c1ca7ada970c18c086e6d
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Oct 5 19:03:21 2021 +0100

    updates PetRepository to inherit from JpaRepository rather than
    
    ... just Repository
---
 .../src/main/java/petclinic/modules/pets/dom/pet/PetRepository.java   | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/module-pets/src/main/java/petclinic/modules/pets/dom/pet/PetRepository.java b/module-pets/src/main/java/petclinic/modules/pets/dom/pet/PetRepository.java
index 42194ad..d098b55 100644
--- a/module-pets/src/main/java/petclinic/modules/pets/dom/pet/PetRepository.java
+++ b/module-pets/src/main/java/petclinic/modules/pets/dom/pet/PetRepository.java
@@ -3,11 +3,11 @@ package petclinic.modules.pets.dom.pet;
 import java.util.List;
 import java.util.Optional;
 
-import org.springframework.data.repository.Repository;
+import org.springframework.data.jpa.repository.JpaRepository;
 
 import petclinic.modules.pets.dom.petowner.PetOwner;
 
-public interface PetRepository extends Repository<Pet, Long> {
+public interface PetRepository extends JpaRepository<Pet, Long> {
 
     List<Pet> findByPetOwner(PetOwner petOwner);
     Optional<Pet> findByPetOwnerAndName(PetOwner petOwner, String name);

[isis-app-demo] 11/19: adds VisitPlusPetOwner view model

Posted by da...@apache.org.
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 2bea56259473079815513a770d7210841ead546a
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Oct 5 22:19:42 2021 +0100

    adds VisitPlusPetOwner view model
---
 .../services/homepage/VisitPlusPetOwner.java       | 48 ++++++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/webapp/src/main/java/petclinic/webapp/application/services/homepage/VisitPlusPetOwner.java b/webapp/src/main/java/petclinic/webapp/application/services/homepage/VisitPlusPetOwner.java
new file mode 100644
index 0000000..7ddfdbc
--- /dev/null
+++ b/webapp/src/main/java/petclinic/webapp/application/services/homepage/VisitPlusPetOwner.java
@@ -0,0 +1,48 @@
+package petclinic.webapp.application.services.homepage;
+
+import java.time.LocalDateTime;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.DomainObjectLayout;
+import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.annotation.Projecting;
+import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.Where;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+import petclinic.modules.pets.dom.pet.Pet;
+import petclinic.modules.pets.dom.petowner.PetOwner;
+import petclinic.modules.visits.dom.visit.Visit;
+
+@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "petclinic.VisitPlusPetOwner")
+@DomainObjectLayout(named = "Visit")
+@XmlRootElement
+@NoArgsConstructor
+@XmlType
+@XmlAccessorType(XmlAccessType.FIELD)
+public class VisitPlusPetOwner {
+
+    @Property(
+            projecting = Projecting.PROJECTED,
+            hidden = Where.EVERYWHERE
+    )
+    @Getter
+    private Visit visit;
+
+    VisitPlusPetOwner(Visit visit) {this.visit = visit;}
+
+    public Pet getPet() {return visit.getPet();}
+    public String getReason() {return visit.getReason();}
+    public LocalDateTime getVisitAt() {return visit.getVisitAt();}
+
+    public PetOwner getPetOwner() {
+        return getPet().getPetOwner();
+    }
+}

[isis-app-demo] 09/19: adds columnOrders for 2 new collections of HomePageViewModel

Posted by da...@apache.org.
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 c468f2357a236074c94f3f92826869137e7d42c0
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Oct 5 19:07:01 2021 +0100

    adds columnOrders for 2 new collections of HomePageViewModel
---
 .../services/homepage/HomePageViewModel#pets.columnOrder.txt         | 5 +++++
 .../services/homepage/HomePageViewModel#visits.columnOrder.txt       | 5 +++++
 2 files changed, 10 insertions(+)

diff --git a/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel#pets.columnOrder.txt b/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel#pets.columnOrder.txt
new file mode 100644
index 0000000..e026dce
--- /dev/null
+++ b/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel#pets.columnOrder.txt
@@ -0,0 +1,5 @@
+petOwner
+name
+#id
+#version
+
diff --git a/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel#visits.columnOrder.txt b/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel#visits.columnOrder.txt
new file mode 100644
index 0000000..2bffba2
--- /dev/null
+++ b/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel#visits.columnOrder.txt
@@ -0,0 +1,5 @@
+pet
+visitAt
+#id
+#version
+

[isis-app-demo] 08/19: renames columnOrder for HomePageViewModel objects to petOwners

Posted by da...@apache.org.
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 6bfedbc33f79940c143434db8e29708811de0fd0
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Oct 5 19:06:40 2021 +0100

    renames columnOrder for HomePageViewModel objects to petOwners
---
 ...ects.columnOrder.txt => HomePageViewModel#petOwners.columnOrder.txt} | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel#objects.columnOrder.txt b/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel#petOwners.columnOrder.txt
similarity index 78%
rename from webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel#objects.columnOrder.txt
rename to webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel#petOwners.columnOrder.txt
index 469b919..fa1f901 100644
--- a/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel#objects.columnOrder.txt
+++ b/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel#petOwners.columnOrder.txt
@@ -1,4 +1,4 @@
 name
-id
+#id
 #version
 

[isis-app-demo] 17/19: adds happy case for Pet#bookVisit integ test

Posted by da...@apache.org.
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 7f32eacc7fa1ec2c42265db9e4aabf9950939a2a
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Oct 6 18:22:49 2021 +0100

    adds happy case for Pet#bookVisit integ test
---
 .../integtest/tests/Pet_bookVisit_IntegTest.java   | 60 ++++++++++++++++++++++
 1 file changed, 60 insertions(+)

diff --git a/module-visits/src/test/java/petclinic/modules/visits/integtest/tests/Pet_bookVisit_IntegTest.java b/module-visits/src/test/java/petclinic/modules/visits/integtest/tests/Pet_bookVisit_IntegTest.java
new file mode 100644
index 0000000..72d2b3f
--- /dev/null
+++ b/module-visits/src/test/java/petclinic/modules/visits/integtest/tests/Pet_bookVisit_IntegTest.java
@@ -0,0 +1,60 @@
+package petclinic.modules.visits.integtest.tests;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+import javax.inject.Inject;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.apache.isis.applib.services.clock.ClockService;
+import org.apache.isis.testing.fakedata.applib.services.FakeDataService;
+
+import petclinic.modules.pets.dom.pet.Pet;
+import petclinic.modules.pets.fixture.pet.Pet_persona;
+import petclinic.modules.visits.contributions.pet.Pet_bookVisit;
+import petclinic.modules.visits.dom.visit.Visit;
+import petclinic.modules.visits.dom.visit.VisitRepository;
+import petclinic.modules.visits.integtest.VisitsModuleIntegTestAbstract;
+
+public class Pet_bookVisit_IntegTest extends VisitsModuleIntegTestAbstract {
+
+    @BeforeEach
+    void setup() {
+        fixtureScripts.run(new Pet_persona.PersistAll());
+    }
+
+    @Test
+    public void happy_case() {
+
+        // given
+        Pet somePet = fakeDataService.enums().anyOf(Pet_persona.class)
+                        .findUsing(serviceRegistry);
+        List<Visit> before = visitRepository.findByPetOrderByVisitAtDesc(somePet);
+
+        // when
+        LocalDateTime visitAt = clockService.getClock().nowAsLocalDateTime()
+                                    .plusDays(fakeDataService.ints().between(1, 3));
+        String reason = fakeDataService.strings().upper(40);
+
+        wrapMixin(Pet_bookVisit.class, somePet).act(visitAt, reason);
+
+        // then
+        List<Visit> after = visitRepository.findByPetOrderByVisitAtDesc(somePet);
+        after.removeAll(before);
+        assertThat(after).hasSize(1);
+        Visit visit = after.get(0);
+
+        assertThat(visit.getPet()).isSameAs(somePet);
+        assertThat(visit.getVisitAt()).isEqualTo(visitAt);
+        assertThat(visit.getReason()).isEqualTo(reason);
+    }
+
+    @Inject FakeDataService fakeDataService;
+    @Inject VisitRepository visitRepository;
+    @Inject ClockService clockService;
+
+}

[isis-app-demo] 18/19: adds error scenario for bookVisit that a reason is required

Posted by da...@apache.org.
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 f1a4dc2bec5719d42c1a3f2886677cec1956254e
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Oct 6 18:37:05 2021 +0100

    adds error scenario for bookVisit that a reason is required
---
 .../integtest/tests/Pet_bookVisit_IntegTest.java   | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/module-visits/src/test/java/petclinic/modules/visits/integtest/tests/Pet_bookVisit_IntegTest.java b/module-visits/src/test/java/petclinic/modules/visits/integtest/tests/Pet_bookVisit_IntegTest.java
index 72d2b3f..2127efa 100644
--- a/module-visits/src/test/java/petclinic/modules/visits/integtest/tests/Pet_bookVisit_IntegTest.java
+++ b/module-visits/src/test/java/petclinic/modules/visits/integtest/tests/Pet_bookVisit_IntegTest.java
@@ -9,8 +9,11 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import org.apache.isis.applib.services.clock.ClockService;
+import org.apache.isis.applib.services.wrapper.DisabledException;
+import org.apache.isis.applib.services.wrapper.InvalidException;
 import org.apache.isis.testing.fakedata.applib.services.FakeDataService;
 
 import petclinic.modules.pets.dom.pet.Pet;
@@ -53,6 +56,25 @@ public class Pet_bookVisit_IntegTest extends VisitsModuleIntegTestAbstract {
         assertThat(visit.getReason()).isEqualTo(reason);
     }
 
+    @Test
+    public void reason_is_required() {
+
+        // given
+        Pet somePet = fakeDataService.enums().anyOf(Pet_persona.class)
+                        .findUsing(serviceRegistry);
+        List<Visit> before = visitRepository.findByPetOrderByVisitAtDesc(somePet);
+
+        // when, then
+        LocalDateTime visitAt = clockService.getClock().nowAsLocalDateTime()
+                                    .plusDays(fakeDataService.ints().between(1, 3));
+
+        assertThatThrownBy(() ->
+            wrapMixin(Pet_bookVisit.class, somePet).act(visitAt, null)
+        )
+        .isInstanceOf(InvalidException.class)
+        .hasMessage("'Reason' is mandatory");
+    }
+
     @Inject FakeDataService fakeDataService;
     @Inject VisitRepository visitRepository;
     @Inject ClockService clockService;

[isis-app-demo] 10/19: Adds bookVisit mixin for HomePageViewModel

Posted by da...@apache.org.
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 c387532d136cf0fe3167e34aa1e1545549026f79
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Oct 5 22:20:03 2021 +0100

    Adds bookVisit mixin for HomePageViewModel
    
    
    updates layout
---
 .../services/homepage/HomePageViewModel.layout.xml |  1 +
 .../homepage/HomePageViewModel_bookVisit.java      | 51 ++++++++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel.layout.xml b/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel.layout.xml
index 148b6ca..14eebe6 100644
--- a/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel.layout.xml
+++ b/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel.layout.xml
@@ -5,6 +5,7 @@
             <bs3:row>
                 <bs3:col span="12" unreferencedActions="true">
                     <domainObject/>
+                    <action id="bookVisit"/>
                     <action id="clearHints" hidden="EVERYWHERE"/>
                     <action id="impersonate" hidden="EVERYWHERE"/>
                     <action id="impersonateWithRoles" hidden="EVERYWHERE"/>
diff --git a/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel_bookVisit.java b/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel_bookVisit.java
new file mode 100644
index 0000000..bdc1e21
--- /dev/null
+++ b/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel_bookVisit.java
@@ -0,0 +1,51 @@
+package petclinic.webapp.application.services.homepage;
+
+import java.time.LocalDateTime;
+import java.util.Collections;
+import java.util.List;
+
+import javax.inject.Inject;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.services.factory.FactoryService;
+import org.apache.isis.applib.services.wrapper.WrapperFactory;
+
+import lombok.RequiredArgsConstructor;
+
+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.PetOwnerRepository;
+import petclinic.modules.visits.contributions.pet.Pet_bookVisit;
+import petclinic.modules.visits.dom.visit.Visit;
+
+@Action
+@RequiredArgsConstructor
+public class HomePageViewModel_bookVisit {
+
+    final HomePageViewModel homePageViewModel;
+
+    public Object act(PetOwner petOwner, Pet pet, LocalDateTime visitAt, String reason, boolean showVisit) {
+        Visit visit = wrapperFactory.wrapMixin(Pet_bookVisit.class, pet).act(visitAt, reason);
+        return showVisit ? visit : homePageViewModel;
+    }
+    public List<PetOwner> autoComplete0Act(final String lastName) {
+        return petOwnerRepository.findByLastNameContaining(lastName);
+    }
+    public List<Pet> choices1Act(PetOwner petOwner) {
+        if(petOwner == null) return Collections.emptyList();
+        return petRepository.findByPetOwner(petOwner);
+    }
+    public LocalDateTime default2Act(PetOwner petOwner, Pet pet) {
+        if(pet == null) return null;
+        return factoryService.mixin(Pet_bookVisit.class, pet).default0Act();
+    }
+    public String validate2Act(PetOwner petOwner, Pet pet, LocalDateTime visitAt){
+         return factoryService.mixin(Pet_bookVisit.class, pet).validate0Act(visitAt);
+    }
+
+    @Inject PetRepository petRepository;
+    @Inject PetOwnerRepository petOwnerRepository;
+    @Inject WrapperFactory wrapperFactory;
+    @Inject FactoryService factoryService;
+}

[isis-app-demo] 13/19: adds integtest dependency for visits module

Posted by da...@apache.org.
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 015ede4b39d163f4bc65b9a11697bc2162e7640a
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Oct 6 18:23:29 2021 +0100

    adds integtest dependency for visits module
---
 module-visits/pom.xml | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/module-visits/pom.xml b/module-visits/pom.xml
index 3a0a436..1345717 100644
--- a/module-visits/pom.xml
+++ b/module-visits/pom.xml
@@ -77,6 +77,14 @@
             </exclusions>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.isis.mavendeps</groupId>
+            <artifactId>isis-mavendeps-integtests</artifactId>
+            <type>pom</type>
+            <scope>test</scope>
+        </dependency>
+
+
     </dependencies>
 
 </project>

[isis-app-demo] 14/19: adds VisitsModuleIntegTestAbstract, to bootstrap tests

Posted by da...@apache.org.
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 b2b9558bb5116a7e19a5fb6361034edf4c6cfbbc
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Oct 6 18:21:37 2021 +0100

    adds VisitsModuleIntegTestAbstract, to bootstrap tests
---
 .../integtest/VisitsModuleIntegTestAbstract.java   | 48 ++++++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/module-visits/src/test/java/petclinic/modules/visits/integtest/VisitsModuleIntegTestAbstract.java b/module-visits/src/test/java/petclinic/modules/visits/integtest/VisitsModuleIntegTestAbstract.java
new file mode 100644
index 0000000..63eb1f5
--- /dev/null
+++ b/module-visits/src/test/java/petclinic/modules/visits/integtest/VisitsModuleIntegTestAbstract.java
@@ -0,0 +1,48 @@
+package petclinic.modules.visits.integtest;
+
+import org.springframework.boot.SpringBootConfiguration;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Import;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.context.annotation.PropertySources;
+import org.springframework.test.context.ActiveProfiles;
+
+import org.apache.isis.core.config.presets.IsisPresets;
+import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;
+import org.apache.isis.persistence.jpa.eclipselink.IsisModulePersistenceJpaEclipselink;
+import org.apache.isis.security.bypass.IsisModuleSecurityBypass;
+import org.apache.isis.testing.fakedata.applib.IsisModuleTestingFakeDataApplib;
+import org.apache.isis.testing.fixtures.applib.IsisIntegrationTestAbstractWithFixtures;
+import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
+
+import petclinic.modules.pets.PetsModule;
+import petclinic.modules.visits.VisitsModule;
+
+
+@SpringBootTest(
+        classes = VisitsModuleIntegTestAbstract.TestApp.class
+)
+@ActiveProfiles("test")
+public abstract class VisitsModuleIntegTestAbstract extends IsisIntegrationTestAbstractWithFixtures {
+
+    @SpringBootConfiguration
+    @EnableAutoConfiguration
+    @Import({
+
+            IsisModuleCoreRuntimeServices.class,
+            IsisModuleSecurityBypass.class,
+            IsisModulePersistenceJpaEclipselink.class,
+            IsisModuleTestingFixturesApplib.class,
+
+            IsisModuleTestingFakeDataApplib.class,
+
+            VisitsModule.class
+    })
+    @PropertySources({
+            @PropertySource(IsisPresets.H2InMemory_withUniqueSchema),
+            @PropertySource(IsisPresets.UseLog4j2Test),
+    })
+    public static class TestApp {
+    }
+}

[isis-app-demo] 07/19: updates layout file for HomePageViewModel with new collections

Posted by da...@apache.org.
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 1cf7e4003da95c2c78bfba88e6efc4218f33ba3d
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Oct 5 19:11:58 2021 +0100

    updates layout file for HomePageViewModel with new collections
---
 .../services/homepage/HomePageViewModel.layout.xml  | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel.layout.xml b/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel.layout.xml
index 72ba56e..148b6ca 100644
--- a/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel.layout.xml
+++ b/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel.layout.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <bs3:grid xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd" xmlns="http://isis.apache.org/applib/layout/component" xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     <bs3:row>
-        <bs3:col span="3">
+        <bs3:col span="12">
             <bs3:row>
                 <bs3:col span="12" unreferencedActions="true">
                     <domainObject/>
@@ -17,18 +17,21 @@
                 </bs3:col>
             </bs3:row>
         </bs3:col>
-        <bs3:col span="6" unreferencedCollections="true">
+    </bs3:row>
+    <bs3:row>
+        <bs3:col span="12" unreferencedCollections="true">
             <bs3:row>
-                <bs3:col span="12">
-                    <collection id="objects" defaultView="table"/>
+                <bs3:col span="4">
+                    <collection id="petOwners" defaultView="table"/>
+                </bs3:col>
+                <bs3:col span="4">
+                    <collection id="pets" defaultView="table"/>
+                </bs3:col>
+                <bs3:col span="4">
+                    <collection id="visits" defaultView="table"/>
                 </bs3:col>
             </bs3:row>
         </bs3:col>
-        <bs3:col span="3">
-        </bs3:col>
-    </bs3:row>
-    <bs3:row>
-
     </bs3:row>
     <bs3:row>
         <bs3:col span="0">

[isis-app-demo] 05/19: updates VisitRepository to inherit from JpaRepository rather than

Posted by da...@apache.org.
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 05e843759a9859cf4f40fce1b6becd841f5280d7
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Oct 5 19:04:18 2021 +0100

    updates VisitRepository to inherit from JpaRepository rather than
    
    ... just Repository
---
 .../java/petclinic/modules/visits/dom/visit/VisitRepository.java    | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/module-visits/src/main/java/petclinic/modules/visits/dom/visit/VisitRepository.java b/module-visits/src/main/java/petclinic/modules/visits/dom/visit/VisitRepository.java
index ab83b5f..34e998e 100644
--- a/module-visits/src/main/java/petclinic/modules/visits/dom/visit/VisitRepository.java
+++ b/module-visits/src/main/java/petclinic/modules/visits/dom/visit/VisitRepository.java
@@ -1,14 +1,12 @@
 package petclinic.modules.visits.dom.visit;
 
 import java.util.List;
-import java.util.Optional;
 
-import org.springframework.data.repository.Repository;
+import org.springframework.data.jpa.repository.JpaRepository;
 
 import petclinic.modules.pets.dom.pet.Pet;
-import petclinic.modules.pets.dom.petowner.PetOwner;
 
-public interface VisitRepository extends Repository<Visit, Long> {
+public interface VisitRepository extends JpaRepository<Visit, Long> {
 
     List<Visit> findByPetOrderByVisitAtDesc(Pet pet);
 

[isis-app-demo] 12/19: updates HomePageViewModel to use VisitPlusPetOwner view model

Posted by da...@apache.org.
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 5fe75c936820af65b2f744ea867ab11d4072a0ba
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Oct 5 22:22:11 2021 +0100

    updates HomePageViewModel to use VisitPlusPetOwner view model
    
    ... rather than show Visit directly.
---
 .../services/homepage/HomePageViewModel#visits.columnOrder.txt   | 3 +--
 .../webapp/application/services/homepage/HomePageViewModel.java  | 9 ++++++---
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel#visits.columnOrder.txt b/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel#visits.columnOrder.txt
index 2bffba2..8eeb8b9 100644
--- a/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel#visits.columnOrder.txt
+++ b/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel#visits.columnOrder.txt
@@ -1,5 +1,4 @@
+petOwner
 pet
 visitAt
-#id
-#version
 
diff --git a/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel.java b/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel.java
index 854785d..7a3bb65 100644
--- a/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel.java
+++ b/webapp/src/main/java/petclinic/webapp/application/services/homepage/HomePageViewModel.java
@@ -1,6 +1,7 @@
 package petclinic.webapp.application.services.homepage;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.inject.Inject;
 
@@ -13,7 +14,6 @@ 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.PetOwnerRepository;
-import petclinic.modules.visits.dom.visit.Visit;
 import petclinic.modules.visits.dom.visit.VisitRepository;
 
 @DomainObject(
@@ -34,8 +34,11 @@ public class HomePageViewModel {
     public List<Pet> getPets() {
         return petRepository.findAll();
     }
-    public List<Visit> getVisits() {
-        return visitRepository.findAll();
+    public List<VisitPlusPetOwner> getVisits() {
+        return visitRepository.findAll()
+                .stream()
+                .map(VisitPlusPetOwner::new)
+                .collect(Collectors.toList());
     }
 
     @Inject PetOwnerRepository petOwnerRepository;

[isis-app-demo] 01/19: reworks PetOwner_delete to emit domain events.

Posted by da...@apache.org.
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 80928551f258229e598fedcf9f193a05da20981d
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Oct 5 18:30:49 2021 +0100

    reworks PetOwner_delete to emit domain events.
---
 .../modules/pets/dom/petowner/PetOwner_delete.java         | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)

diff --git a/module-pets/src/main/java/petclinic/modules/pets/dom/petowner/PetOwner_delete.java b/module-pets/src/main/java/petclinic/modules/pets/dom/petowner/PetOwner_delete.java
index c7bb58a..57bd75f 100644
--- a/module-pets/src/main/java/petclinic/modules/pets/dom/petowner/PetOwner_delete.java
+++ b/module-pets/src/main/java/petclinic/modules/pets/dom/petowner/PetOwner_delete.java
@@ -6,14 +6,13 @@ import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.events.domain.ActionDomainEvent;
 import org.apache.isis.applib.services.repository.RepositoryService;
-import org.apache.isis.applib.services.xactn.TransactionService;
 
 import lombok.RequiredArgsConstructor;
 
-import petclinic.modules.pets.dom.pet.PetRepository;
-
 @Action(
+        domainEvent = PetOwner_delete.ActionEvent.class,
         semantics = SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE,
         commandPublishing = Publishing.ENABLED,
         executionPublishing = Publishing.ENABLED
@@ -24,17 +23,14 @@ import petclinic.modules.pets.dom.pet.PetRepository;
 @RequiredArgsConstructor
 public class PetOwner_delete {
 
+    public static class ActionEvent extends ActionDomainEvent<PetOwner_delete>{}
+
     private final PetOwner petOwner;
 
-    public void act(
-            ) {
-        petRepository.findByPetOwner(petOwner).forEach(repositoryService::remove);
-        transactionService.flushTransaction();
+    public void act() {
         repositoryService.remove(petOwner);
         return;
     }
 
-    @Inject PetRepository petRepository;
     @Inject RepositoryService repositoryService;
-    @Inject TransactionService transactionService;
 }