X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdatabase%2Fmemory%2FMemoryDatabase.java;h=975b8ab42a9b31a5a968555c4657ddbb035fecd7;hb=4aec89e6f9c6eb0972be5e9a3e1363bb487a2898;hp=c73513d92ae4d95e3f60b0a826e9c5df18fbdc58;hpb=403b51bcf5b736808e3c554b8589759e7d3d5d47;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java b/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java index c73513d..975b8ab 100644 --- a/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java +++ b/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java @@ -84,7 +84,8 @@ public class MemoryDatabase extends AbstractService implements Database { /** All posts by their Sones. */ private final Multimap sonePosts = HashMultimap.create(); - private final SetMultimap likedPosts = HashMultimap.create(); + private final SetMultimap likedPostsBySone = HashMultimap.create(); + private final SetMultimap postLikingSones = HashMultimap.create(); /** All posts by their recipient. */ private final Multimap recipientPosts = HashMultimap.create(); @@ -290,7 +291,8 @@ public class MemoryDatabase extends AbstractService implements Database { public void likePost(Post post, Sone localSone) { lock.writeLock().lock(); try { - likedPosts.put(localSone.getId(), post.getId()); + likedPostsBySone.put(localSone.getId(), post.getId()); + postLikingSones.put(post.getId(), localSone.getId()); } finally { lock.writeLock().unlock(); } @@ -300,12 +302,23 @@ public class MemoryDatabase extends AbstractService implements Database { public void unlikePost(Post post, Sone localSone) { lock.writeLock().lock(); try { - likedPosts.remove(localSone.getId(), post.getId()); + likedPostsBySone.remove(localSone.getId(), post.getId()); + postLikingSones.remove(post.getId(), localSone.getId()); } finally { lock.writeLock().unlock(); } } + @Override + public Set getLikes(Post post) { + lock.readLock().lock(); + try { + return from(postLikingSones.get(post.getId())).transform(getSone()).transformAndConcat(this.unwrap()).toSet(); + } finally { + lock.readLock().unlock(); + } + } + // // POSTSTORE METHODS // @@ -837,4 +850,13 @@ public class MemoryDatabase extends AbstractService implements Database { }; } + private static Function, Iterable> unwrap() { + return new Function, Iterable>() { + @Override + public Iterable apply(Optional input) { + return (input == null) ? Collections.emptyList() : input.asSet(); + } + }; + } + }