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 15:15:29 UTC
[isis-app-demo] 01/04: adds Visit entity
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to tag tags/05-02-visit-entity-key-properties
in repository https://gitbox.apache.org/repos/asf/isis-app-demo.git
commit ee7749a3c7d21caf7ec8109ff4032bc100ad00bb
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Oct 5 16:13:27 2021 +0100
adds Visit entity
uses (transient) TitleService to determine title of referenced Pet
---
.../petclinic/modules/visits/dom/visit/Visit.java | 108 +++++++++++++++++++++
1 file changed, 108 insertions(+)
diff --git a/module-visits/src/main/java/petclinic/modules/visits/dom/visit/Visit.java b/module-visits/src/main/java/petclinic/modules/visits/dom/visit/Visit.java
new file mode 100644
index 0000000..bd3d3e2
--- /dev/null
+++ b/module-visits/src/main/java/petclinic/modules/visits/dom/visit/Visit.java
@@ -0,0 +1,108 @@
+package petclinic.modules.visits.dom.visit;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Comparator;
+
+import javax.inject.Inject;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EntityListeners;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+import javax.persistence.UniqueConstraint;
+import javax.persistence.Version;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.DomainObjectLayout;
+import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Publishing;
+import org.apache.isis.applib.jaxb.PersistentEntityAdapter;
+import org.apache.isis.applib.services.title.TitleService;
+import org.apache.isis.persistence.jpa.applib.integration.IsisEntityListener;
+
+import lombok.AccessLevel;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.ToString;
+
+import petclinic.modules.pets.dom.pet.Pet;
+import petclinic.modules.pets.dom.pet.PetSpecies;
+import petclinic.modules.pets.dom.petowner.PetOwner;
+import petclinic.modules.pets.types.FirstName;
+import petclinic.modules.pets.types.Notes;
+import petclinic.modules.pets.types.PetName;
+
+
+@Entity
+@Table(
+ schema="visits",
+ name = "Visit",
+ uniqueConstraints = {
+ @UniqueConstraint(name = "Visit__pet_visitAt__UNQ", columnNames = {"owner_id", "name"})
+ }
+)
+@EntityListeners(IsisEntityListener.class)
+@DomainObject(logicalTypeName = "visits.Visit", entityChangePublishing = Publishing.ENABLED)
+@DomainObjectLayout()
+@NoArgsConstructor(access = AccessLevel.PUBLIC)
+@XmlJavaTypeAdapter(PersistentEntityAdapter.class)
+@ToString(onlyExplicitlyIncluded = true)
+public class Visit implements Comparable<Visit> {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ @Column(name = "id", nullable = false)
+ @Getter @Setter
+ @PropertyLayout(fieldSetId = "metadata", sequence = "1")
+ private Long id;
+
+ @Version
+ @Column(name = "version", nullable = false)
+ @PropertyLayout(fieldSetId = "metadata", sequence = "999")
+ @Getter @Setter
+ private long version;
+
+
+ Visit(Pet pet, LocalDateTime visitAt) {
+ this.pet = pet;
+ this.visitAt = visitAt;
+ }
+
+
+ public String title() {
+ return titleService.titleOf(getPet()) + " @ " + getVisitAt().format(DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm"));
+ }
+
+ @ManyToOne(optional = false)
+ @JoinColumn(name = "pet_id")
+ @PropertyLayout(fieldSetId = "name", sequence = "1")
+ @Getter @Setter
+ private Pet pet;
+
+ @Column(name = "visitAt", nullable = false)
+ @Getter @Setter
+ @PropertyLayout(fieldSetId = "name", sequence = "2")
+ private LocalDateTime visitAt;
+
+
+ private final static Comparator<Visit> comparator =
+ Comparator.comparing(Visit::getPet).thenComparing(Visit::getVisitAt);
+
+ @Override
+ public int compareTo(final Visit other) {
+ return comparator.compare(this, other);
+ }
+
+ @Inject @Transient TitleService titleService;
+}