Move unliking a post from Sone to Post.
[Sone.git] / src / main / java / net / pterodactylus / sone / database / memory / MemoryDatabase.java
index 02ca290..c73513d 100644 (file)
@@ -57,6 +57,7 @@ import com.google.common.collect.HashMultimap;
 import com.google.common.collect.ListMultimap;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Multimap;
+import com.google.common.collect.SetMultimap;
 import com.google.common.collect.SortedSetMultimap;
 import com.google.common.collect.TreeMultimap;
 import com.google.common.util.concurrent.AbstractService;
@@ -83,6 +84,7 @@ public class MemoryDatabase extends AbstractService implements Database {
 
        /** All posts by their Sones. */
        private final Multimap<String, Post> sonePosts = HashMultimap.create();
+       private final SetMultimap<String, String> likedPosts = HashMultimap.create();
 
        /** All posts by their recipient. */
        private final Multimap<String, Post> recipientPosts = HashMultimap.create();
@@ -244,6 +246,16 @@ public class MemoryDatabase extends AbstractService implements Database {
        //
 
        @Override
+       public Function<String, Optional<Post>> getPost() {
+               return new Function<String, Optional<Post>>() {
+                       @Override
+                       public Optional<Post> apply(String postId) {
+                               return (postId == null) ? Optional.<Post>absent() : getPost(postId);
+                       }
+               };
+       }
+
+       @Override
        public Optional<Post> getPost(String postId) {
                lock.readLock().lock();
                try {
@@ -274,6 +286,26 @@ public class MemoryDatabase extends AbstractService implements Database {
                }
        }
 
+       @Override
+       public void likePost(Post post, Sone localSone) {
+               lock.writeLock().lock();
+               try {
+                       likedPosts.put(localSone.getId(), post.getId());
+               } finally {
+                       lock.writeLock().unlock();
+               }
+       }
+
+       @Override
+       public void unlikePost(Post post, Sone localSone) {
+               lock.writeLock().lock();
+               try {
+                       likedPosts.remove(localSone.getId(), post.getId());
+               } finally {
+                       lock.writeLock().unlock();
+               }
+       }
+
        //
        // POSTSTORE METHODS
        //