Lazy Chat: Implement editing of messages.
Change-Id: I291201da1fbc7c2b6563f0837f7ce3e2f7f8555c
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/posts/Post.java b/src/main/java/eu/mulk/mulkcms2/benki/posts/Post.java
index 20aec05..356461c 100644
--- a/src/main/java/eu/mulk/mulkcms2/benki/posts/Post.java
+++ b/src/main/java/eu/mulk/mulkcms2/benki/posts/Post.java
@@ -13,6 +13,7 @@
import java.util.Objects;
import java.util.Set;
import javax.annotation.CheckForNull;
+import javax.json.bind.annotation.JsonbTransient;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
@@ -57,6 +58,7 @@
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "owner", referencedColumnName = "id")
+ @JsonbTransient
public User owner;
@ManyToMany(fetch = FetchType.LAZY)
@@ -65,6 +67,7 @@
schema = "benki",
joinColumns = @JoinColumn(name = "message"),
inverseJoinColumns = @JoinColumn(name = "user"))
+ @JsonbTransient
public Set<User> visibleTo;
@ManyToMany(fetch = FetchType.LAZY)
@@ -73,6 +76,7 @@
schema = "benki",
joinColumns = @JoinColumn(name = "message"),
inverseJoinColumns = @JoinColumn(name = "target"))
+ @JsonbTransient
public Set<Role> targets;
public abstract boolean isBookmark();
@@ -88,6 +92,18 @@
@CheckForNull
public abstract String getUri();
+ public Visibility getVisibility() {
+ if (targets.isEmpty()) {
+ return Visibility.PRIVATE;
+ } else if (targets.contains(Role.getWorld())) {
+ return Visibility.PUBLIC;
+ } else {
+ // FIXME: There should really be a check whether targets.equals(owner.defaultTargets) here.
+ // Otherwise the actual visibility is DISCRETIONARY.
+ return Visibility.SEMIPRIVATE;
+ }
+ }
+
protected static <T extends Post> CriteriaQuery<T> queryViewable(
Class<T> entityClass,
SecurityIdentity readerIdentity,
@@ -236,4 +252,28 @@
return new PostPage<T>(prevCursor, cursor, nextCursor, forwardResults);
}
+
+ public enum Visibility {
+ PUBLIC,
+ SEMIPRIVATE,
+ DISCRETIONARY,
+ PRIVATE,
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (!(o instanceof Post)) {
+ return false;
+ }
+ Post post = (Post) o;
+ return Objects.equals(id, post.id);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(id);
+ }
}