You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by da...@apache.org on 2024/05/26 19:35:27 UTC
(causeway-app-petclinic) 12/14: adds PetOwner_bookVisit mixin action, to allow visits to be booked
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch v2
in repository https://gitbox.apache.org/repos/asf/causeway-app-petclinic.git
commit 51e22394a70669f2d6035fd7893275e8804d44bd
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sun May 26 20:24:14 2024 +0100
adds PetOwner_bookVisit mixin action, to allow visits to be booked
---
.../visit/contributions/PetOwner_bookVisit.java | 63 ++++++++++++++++++++++
1 file changed, 63 insertions(+)
diff --git a/module-visit/src/main/java/domainapp/modules/visit/contributions/PetOwner_bookVisit.java b/module-visit/src/main/java/domainapp/modules/visit/contributions/PetOwner_bookVisit.java
new file mode 100644
index 0000000..b1b539a
--- /dev/null
+++ b/module-visit/src/main/java/domainapp/modules/visit/contributions/PetOwner_bookVisit.java
@@ -0,0 +1,63 @@
+package domainapp.modules.visit.contributions;
+
+import java.time.LocalDateTime;
+import java.util.Set;
+
+import javax.inject.Inject;
+
+import org.apache.causeway.applib.annotation.Action;
+import org.apache.causeway.applib.annotation.ActionLayout;
+import org.apache.causeway.applib.annotation.MemberSupport;
+import org.apache.causeway.applib.services.clock.ClockService;
+import org.apache.causeway.applib.services.repository.RepositoryService;
+
+import lombok.RequiredArgsConstructor;
+
+import domainapp.modules.petowner.dom.pet.Pet;
+import domainapp.modules.petowner.dom.petowner.PetOwner;
+import domainapp.modules.visit.dom.visit.Visit;
+
+@Action
+@ActionLayout(associateWith = "visits")
+@RequiredArgsConstructor
+public class PetOwner_bookVisit {
+
+ private final PetOwner petOwner;
+ private Pet pet;
+
+ @MemberSupport
+ public PetOwner act(Pet pet, LocalDateTime visitAt) {
+ Visit visit = new Visit(pet, visitAt);
+ repositoryService.persistAndFlush(visit);
+ return petOwner;
+ }
+ @MemberSupport
+ public Pet default0Act() {
+ Set<Pet> pets = petOwner.getPets();
+ return pets.size() == 1 ? pets.iterator().next() : null;
+ }
+ @MemberSupport
+ public Set<Pet> choices0Act() {
+ return petOwner.getPets();
+ }
+ @MemberSupport
+ public String validate1Act(LocalDateTime visitAt) {
+ if (visitAt.isBefore(officeHoursTomorrow())) {
+ return "Must book in the future";
+ }
+ return null;
+ }
+ @MemberSupport
+ public LocalDateTime default1Act() {
+ return officeHoursTomorrow();
+ }
+
+ private LocalDateTime officeHoursTomorrow() {
+ return clockService.getClock().nowAsLocalDate().atStartOfDay().plusDays(1).plusHours(9);
+ }
+
+
+ @Inject ClockService clockService;
+ @Inject RepositoryService repositoryService;
+
+}