X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdatabase%2Fmemory%2FMemoryDatabase.java;h=4bf66437f544557659aa412f8b155c69fa173eb6;hb=72407829d504a0444aadd09cc937bae10b6cb866;hp=bdc247e08c4c0415e3459868d7a269860982f638;hpb=6abff3e875d253a011c73574f2a6012a28af279a;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 bdc247e..4bf6643 100644 --- a/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java +++ b/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java @@ -95,6 +95,8 @@ public class MemoryDatabase extends AbstractService implements Database { /** All post replies by their ID. */ private final Map allPostReplies = new HashMap(); + private final SetMultimap likedPostRepliesBySone = HashMultimap.create(); + private final SetMultimap postReplyLikingSones = HashMultimap.create(); /** Replies sorted by Sone. */ private final SortedSetMultimap sonePostReplies = TreeMultimap.create(new Comparator() { @@ -176,6 +178,16 @@ public class MemoryDatabase extends AbstractService implements Database { } @Override + public void storeIdentity(Identity identitiy) { + lock.writeLock().lock(); + try { + identities.put(identitiy.getId(), identitiy); + } finally { + lock.writeLock().unlock(); + } + } + + @Override public Function> getSone() { return new Function>() { @Override @@ -226,6 +238,16 @@ public class MemoryDatabase extends AbstractService implements Database { } @Override + public void storeSone(Sone sone) { + lock.writeLock().lock(); + try { + sones.put(sone.getId(), sone); + } finally { + lock.writeLock().unlock(); + } + } + + @Override public SoneBuilder newSoneBuilder() { return new DefaultSoneBuilder(this) { @Override @@ -287,6 +309,39 @@ public class MemoryDatabase extends AbstractService implements Database { } } + /** + * Returns whether the given post is known. + * + * @param post + * The post + * @return {@code true} if the post is known, {@code false} otherwise + */ + @Override + public boolean isPostKnown(Post post) { + lock.readLock().lock(); + try { + return knownPosts.contains(post.getId()); + } finally { + lock.readLock().unlock(); + } + } + + /** + * Sets whether the given post is known. + * + * @param post + * The post + */ + @Override + public void setPostKnown(Post post) { + lock.writeLock().lock(); + try { + knownPosts.add(post.getId()); + } finally { + lock.writeLock().unlock(); + } + } + @Override public void likePost(Post post, Sone localSone) { lock.writeLock().lock(); @@ -312,7 +367,7 @@ public class MemoryDatabase extends AbstractService implements Database { public boolean isLiked(Post post, Sone sone) { lock.readLock().lock(); try { - return likedPostsBySone.containsEntry(sone, post); + return likedPostsBySone.containsEntry(sone.getId(), post.getId()); } finally { lock.readLock().unlock(); } @@ -442,6 +497,48 @@ public class MemoryDatabase extends AbstractService implements Database { } } + @Override + public void likePostReply(PostReply postReply, Sone localSone) { + lock.writeLock().lock(); + try { + likedPostRepliesBySone.put(localSone.getId(), postReply.getId()); + postReplyLikingSones.put(postReply.getId(), localSone.getId()); + } finally { + lock.writeLock().unlock(); + } + } + + @Override + public void unlikePostReply(PostReply postReply, Sone localSone) { + lock.writeLock().lock(); + try { + likedPostRepliesBySone.remove(localSone.getId(), postReply.getId()); + postReplyLikingSones.remove(postReply.getId(), localSone.getId()); + } finally { + lock.writeLock().unlock(); + } + } + + @Override + public boolean isLiked(PostReply postReply, Sone sone) { + lock.readLock().lock(); + try { + return postReplyLikingSones.containsEntry(postReply.getId(), sone.getId()); + } finally { + lock.readLock().unlock(); + } + } + + @Override + public Set getLikes(PostReply postReply) { + lock.readLock().lock(); + try { + return from(postReplyLikingSones.get(postReply.getId())).transform(getSone()).transformAndConcat(this.unwrap()).toSet(); + } finally { + lock.readLock().unlock(); + } + } + // // POSTREPLYSTORE METHODS // @@ -702,47 +799,6 @@ public class MemoryDatabase extends AbstractService implements Database { } // - // PACKAGE-PRIVATE METHODS - // - - /** - * Returns whether the given post is known. - * - * @param post - * The post - * @return {@code true} if the post is known, {@code false} otherwise - */ - boolean isPostKnown(Post post) { - lock.readLock().lock(); - try { - return knownPosts.contains(post.getId()); - } finally { - lock.readLock().unlock(); - } - } - - /** - * Sets whether the given post is known. - * - * @param post - * The post - * @param known - * {@code true} if the post is known, {@code false} otherwise - */ - void setPostKnown(Post post, boolean known) { - lock.writeLock().lock(); - try { - if (known) { - knownPosts.add(post.getId()); - } else { - knownPosts.remove(post.getId()); - } - } finally { - lock.writeLock().unlock(); - } - } - - // // PRIVATE METHODS //