Move reply like functionality from Sone to Reply.
[Sone.git] / src / main / java / net / pterodactylus / sone / data / impl / DefaultPostReply.java
index ef275ff..5af6f42 100644 (file)
 
 package net.pterodactylus.sone.data.impl;
 
+import java.util.Set;
+
 import net.pterodactylus.sone.data.Post;
 import net.pterodactylus.sone.data.PostReply;
+import net.pterodactylus.sone.data.Sone;
 import net.pterodactylus.sone.database.Database;
 
 import com.google.common.base.Optional;
@@ -58,6 +61,11 @@ public class DefaultPostReply extends DefaultReply<PostReply> implements PostRep
        //
 
        @Override
+       public boolean isKnown() {
+               return database.isPostReplyKnown(this);
+       }
+
+       @Override
        public String getPostId() {
                return postId;
        }
@@ -67,4 +75,48 @@ public class DefaultPostReply extends DefaultReply<PostReply> implements PostRep
                return database.getPost(postId);
        }
 
+       @Override
+       public void like(Sone localSone) {
+               database.likePostReply(this, localSone);
+       }
+
+       @Override
+       public void unlike(Sone localSone) {
+               database.unlikePostReply(this, localSone);
+       }
+
+       @Override
+       public boolean isLiked(Sone sone) {
+               return database.isLiked(this, sone);
+       }
+
+       @Override
+       public Set<Sone> getLikes() {
+               return database.getLikes(this);
+       }
+
+       @Override
+       public Modifier<PostReply> modify() {
+               return new Modifier<PostReply>() {
+                       private boolean known = isKnown();
+
+                       @Override
+                       public Modifier<PostReply> setKnown() {
+                               known = true;
+                               return this;
+                       }
+
+                       @Override
+                       public PostReply update(Optional<ReplyUpdated<PostReply>> replyUpdated) {
+                               if (known) {
+                                       database.setPostReplyKnown(DefaultPostReply.this);
+                               }
+                               if (replyUpdated.isPresent()) {
+                                       replyUpdated.get().replyUpdated(DefaultPostReply.this);
+                               }
+                               return DefaultPostReply.this;
+                       }
+               };
+       }
+
 }