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/05 13:53:12 UTC
[isis-app-demo] 04/07: refactors PetOwner delete action to a mixin,
and deletes associated 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 ac6a6b572dbe12b379d15f133495c0997ec01855
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Oct 5 14:36:04 2021 +0100
refactors PetOwner delete action to a mixin, and deletes associated Pets
Also:
- fixes the "associateWith",
- adds a "name" to the fieldset in layout.xml so that there is a titled panel for the "delete" action's button to appear in.
- deletes a defunct unit test
- fixes smoke test
---
.../modules/pets/dom/petowner/PetOwner_Test.java | 20 -----------
.../modules/pets/dom/petowner/PetOwner.java | 12 -------
.../modules/pets/dom/petowner/PetOwner.layout.xml | 2 +-
.../modules/pets/dom/petowner/PetOwner_delete.java | 40 ++++++++++++++++++++++
.../webapp/integtests/smoke/Smoke_IntegTest.java | 3 +-
5 files changed, 43 insertions(+), 34 deletions(-)
diff --git a/module-pets-tests/src/test/java/petclinic/modules/pets/dom/petowner/PetOwner_Test.java b/module-pets-tests/src/test/java/petclinic/modules/pets/dom/petowner/PetOwner_Test.java
index a153ab0..0ea697a 100644
--- a/module-pets-tests/src/test/java/petclinic/modules/pets/dom/petowner/PetOwner_Test.java
+++ b/module-pets-tests/src/test/java/petclinic/modules/pets/dom/petowner/PetOwner_Test.java
@@ -48,24 +48,4 @@ class PetOwner_Test {
}
}
- @Nested
- class delete {
-
- @Test
- void happy_case() throws Exception {
-
- // given
- assertThat(object).isNotNull();
-
- // expecting
- when(mockTitleService.titleOf(object)).thenReturn("Foo");
-
- // when
- object.delete();
-
- // then
- verify(mockMessageService).informUser("'Foo' deleted");
- verify(mockRepositoryService).removeAndFlush(object);
- }
- }
}
diff --git a/module-pets/src/main/java/petclinic/modules/pets/dom/petowner/PetOwner.java b/module-pets/src/main/java/petclinic/modules/pets/dom/petowner/PetOwner.java
index 02a3561..0f16c8e 100644
--- a/module-pets/src/main/java/petclinic/modules/pets/dom/petowner/PetOwner.java
+++ b/module-pets/src/main/java/petclinic/modules/pets/dom/petowner/PetOwner.java
@@ -32,7 +32,6 @@ import org.apache.isis.applib.services.title.TitleService;
import org.apache.isis.persistence.jpa.applib.integration.IsisEntityListener;
import static org.apache.isis.applib.annotation.SemanticsOf.IDEMPOTENT;
-import static org.apache.isis.applib.annotation.SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE;
import lombok.AccessLevel;
import lombok.Getter;
@@ -162,17 +161,6 @@ public class PetOwner implements Comparable<PetOwner> {
}
- @Action(semantics = NON_IDEMPOTENT_ARE_YOU_SURE)
- @ActionLayout(
- associateWith = "lastName", position = ActionLayout.Position.PANEL,
- describedAs = "Deletes this object from the persistent datastore")
- public void delete() {
- final String title = titleService.titleOf(this);
- messageService.informUser(String.format("'%s' deleted", title));
- repositoryService.removeAndFlush(this);
- }
-
-
private final static Comparator<PetOwner> comparator =
Comparator.comparing(PetOwner::getLastName);
diff --git a/module-pets/src/main/java/petclinic/modules/pets/dom/petowner/PetOwner.layout.xml b/module-pets/src/main/java/petclinic/modules/pets/dom/petowner/PetOwner.layout.xml
index 3dcd362..4217922 100644
--- a/module-pets/src/main/java/petclinic/modules/pets/dom/petowner/PetOwner.layout.xml
+++ b/module-pets/src/main/java/petclinic/modules/pets/dom/petowner/PetOwner.layout.xml
@@ -12,7 +12,7 @@
<bs3:tab name="General">
<bs3:row>
<bs3:col span="12">
- <c:fieldSet id="name"/>
+ <c:fieldSet id="name" name="Name"/>
</bs3:col>
</bs3:row>
</bs3:tab>
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
new file mode 100644
index 0000000..c7bb58a
--- /dev/null
+++ b/module-pets/src/main/java/petclinic/modules/pets/dom/petowner/PetOwner_delete.java
@@ -0,0 +1,40 @@
+package petclinic.modules.pets.dom.petowner;
+
+import javax.inject.Inject;
+
+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.services.repository.RepositoryService;
+import org.apache.isis.applib.services.xactn.TransactionService;
+
+import lombok.RequiredArgsConstructor;
+
+import petclinic.modules.pets.dom.pet.PetRepository;
+
+@Action(
+ semantics = SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE,
+ commandPublishing = Publishing.ENABLED,
+ executionPublishing = Publishing.ENABLED
+)
+@ActionLayout(
+ associateWith = "name", position = ActionLayout.Position.PANEL,
+ describedAs = "Deletes this object from the persistent datastore")
+@RequiredArgsConstructor
+public class PetOwner_delete {
+
+ private final PetOwner petOwner;
+
+ public void act(
+ ) {
+ petRepository.findByPetOwner(petOwner).forEach(repositoryService::remove);
+ transactionService.flushTransaction();
+ repositoryService.remove(petOwner);
+ return;
+ }
+
+ @Inject PetRepository petRepository;
+ @Inject RepositoryService repositoryService;
+ @Inject TransactionService transactionService;
+}
diff --git a/webapp-tests/src/test/java/petclinic/webapp/integtests/smoke/Smoke_IntegTest.java b/webapp-tests/src/test/java/petclinic/webapp/integtests/smoke/Smoke_IntegTest.java
index 1bc39d4..682b77f 100644
--- a/webapp-tests/src/test/java/petclinic/webapp/integtests/smoke/Smoke_IntegTest.java
+++ b/webapp-tests/src/test/java/petclinic/webapp/integtests/smoke/Smoke_IntegTest.java
@@ -14,6 +14,7 @@ import org.apache.isis.applib.services.xactn.TransactionService;
import static org.assertj.core.api.Assertions.assertThat;
import petclinic.modules.pets.dom.petowner.PetOwner;
+import petclinic.modules.pets.dom.petowner.PetOwner_delete;
import petclinic.webapp.integtests.WebAppIntegTestAbstract;
import petclinic.modules.pets.dom.petowner.PetOwners;
@@ -80,7 +81,7 @@ class Smoke_IntegTest extends WebAppIntegTestAbstract {
// when
- wrap(fred).delete();
+ wrapMixin(PetOwner_delete.class, fred).act();
transactionService.flushTransaction();
// then