blob: 8b1697c57c177d6d0d40f3dfcb3cf15c10aa8598 [file] [log] [blame]
Matthias Andreas Benkardd5498fc2020-08-23 21:51:00 +02001package eu.mulk.mulkcms2.benki.posts;
2
Matthias Andreas Benkard299f5a52020-09-11 20:25:19 +02003import io.quarkus.hibernate.orm.panache.PanacheEntityBase;
Matthias Andreas Benkardd5498fc2020-08-23 21:51:00 +02004import javax.annotation.CheckForNull;
5import javax.json.bind.annotation.JsonbTransient;
6import javax.persistence.Column;
7import javax.persistence.Entity;
8import javax.persistence.FetchType;
9import javax.persistence.Id;
10import javax.persistence.IdClass;
11import javax.persistence.Inheritance;
12import javax.persistence.InheritanceType;
13import javax.persistence.JoinColumn;
14import javax.persistence.ManyToOne;
15import javax.persistence.Table;
16
17@Entity
18@Table(name = "post_texts", schema = "benki")
19@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
20@IdClass(PostTextPK.class)
Matthias Andreas Benkard299f5a52020-09-11 20:25:19 +020021public abstract class PostText<OwningPost extends Post<?>> extends PanacheEntityBase {
Matthias Andreas Benkardd5498fc2020-08-23 21:51:00 +020022
23 private static final int DESCRIPTION_CACHE_VERSION = 1;
24
25 @Id
26 @Column(name = "post", nullable = false, insertable = false, updatable = false)
27 public int postId;
28
29 @Id
30 @Column(name = "language", nullable = false, length = -1)
31 public String language;
32
33 @Column(name = "cached_description_version", nullable = true)
34 @CheckForNull
35 public Integer cachedDescriptionVersion;
36
37 @Column(name = "cached_description_html", nullable = true)
38 @CheckForNull
39 public String cachedDescriptionHtml;
40
41 @ManyToOne(fetch = FetchType.LAZY, targetEntity = Post.class)
42 @JoinColumn(name = "post", referencedColumnName = "id", nullable = false)
43 @JsonbTransient
44 public OwningPost post;
45
46 @CheckForNull
47 public final String getDescriptionHtml() {
48 if (cachedDescriptionHtml != null
49 && cachedDescriptionVersion != null
50 && cachedDescriptionVersion >= DESCRIPTION_CACHE_VERSION) {
51 return cachedDescriptionHtml;
52 } else {
53 @CheckForNull var descriptionHtml = computeDescriptionHtml();
54 cachedDescriptionHtml = descriptionHtml;
55 cachedDescriptionVersion = DESCRIPTION_CACHE_VERSION;
56 return descriptionHtml;
57 }
58 }
59
60 @CheckForNull
61 protected abstract String computeDescriptionHtml();
62}