Store the “known” status of a post in the database.
[Sone.git] / src / main / java / net / pterodactylus / sone / data / impl / DefaultPost.java
index c4dcb62..a560185 100644 (file)
 
 package net.pterodactylus.sone.data.impl;
 
-import java.util.UUID;
+import static com.google.common.collect.FluentIterable.from;
+
+import java.util.List;
+import java.util.Set;
 
 import net.pterodactylus.sone.data.Post;
+import net.pterodactylus.sone.data.PostReply;
+import net.pterodactylus.sone.data.Reply;
 import net.pterodactylus.sone.data.Sone;
 import net.pterodactylus.sone.database.Database;
 
@@ -35,8 +40,8 @@ public class DefaultPost implements Post {
 
        private final Database database;
 
-       /** The GUID of the post. */
-       private final UUID id;
+       /** The ID of the post. */
+       private final String id;
 
        /** The ID of the owning Sone. */
        private final String soneId;
@@ -50,9 +55,6 @@ public class DefaultPost implements Post {
        /** The text of the post. */
        private final String text;
 
-       /** Whether the post is known. */
-       private volatile boolean known;
-
        /**
         * Creates a new post.
         *
@@ -71,7 +73,7 @@ public class DefaultPost implements Post {
         */
        public DefaultPost(Database database, String id, String soneId, String recipientId, long time, String text) {
                this.database = database;
-               this.id = UUID.fromString(id);
+               this.id = id;
                this.soneId = soneId;
                this.recipientId = recipientId;
                this.time = time;
@@ -82,86 +84,81 @@ public class DefaultPost implements Post {
        // ACCESSORS
        //
 
-       /**
-        * {@inheritDoc}
-        */
        @Override
        public String getId() {
-               return id.toString();
+               return id;
        }
 
-       /**
-        * {@inheritDoc}
-        */
        @Override
        public Sone getSone() {
                return database.getSone(soneId).get();
        }
 
-       /**
-        * {@inheritDocs}
-        */
        @Override
        public Optional<String> getRecipientId() {
                return Optional.fromNullable(recipientId);
        }
 
-       /**
-        * {@inheritDoc}
-        */
        @Override
        public Optional<Sone> getRecipient() {
                return database.getSone(recipientId);
        }
 
-       /**
-        * {@inheritDoc}
-        */
        @Override
        public long getTime() {
                return time;
        }
 
-       /**
-        * {@inheritDoc}
-        */
        @Override
        public String getText() {
                return text;
        }
 
-       /**
-        * {@inheritDoc}
-        */
        @Override
        public boolean isKnown() {
-               return known;
+               return database.isPostKnown(this);
        }
 
-       /**
-        * {@inheritDoc}
-        */
        @Override
-       public DefaultPost setKnown(boolean known) {
-               this.known = known;
+       public DefaultPost setKnown() {
+               database.setPostKnown(this);
                return this;
        }
 
+       @Override
+       public void like(Sone localSone) {
+               database.likePost(this, localSone);
+       }
+
+       @Override
+       public void unlike(Sone localSone) {
+               database.unlikePost(this, localSone);
+       }
+
+       @Override
+       public boolean isLiked(Sone sone) {
+               return database.isLiked(this, sone);
+       }
+
+       @Override
+       public Set<Sone> getLikes() {
+               return database.getLikes(this);
+       }
+
+       @Override
+       public List<PostReply> getReplies() {
+               return from(database.getReplies(getId())).toSortedList(Reply.TIME_COMPARATOR);
+       }
+
        //
        // OBJECT METHODS
        //
 
-       /**
-        * {@inheritDoc}
-        */
        @Override
        public int hashCode() {
                return id.hashCode();
        }
 
-       /**
-        * {@inheritDoc}
-        */
        @Override
        public boolean equals(Object object) {
                if (!(object instanceof DefaultPost)) {
@@ -171,9 +168,6 @@ public class DefaultPost implements Post {
                return post.id.equals(id);
        }
 
-       /**
-        * {@inheritDoc}
-        */
        @Override
        public String toString() {
                return String.format("%s[id=%s,sone=%s,recipient=%s,time=%d,text=%s]", getClass().getName(), id, soneId, recipientId, time, text);