X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdatabase%2Fmemory%2FMemoryDatabase.java;h=0b2c5a21c14869ec2f3545c0f4847bf69ba60b61;hp=cd3be84c02484e99b5da22744e3c6100bc3fc1df;hb=b1057c2e5f77a74a3d64c5ad9ff6b0c5894c4a73;hpb=f2eaa4ab7f0055a704425f2159efaa5be46b7c5e 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 cd3be84..0b2c5a2 100644 --- a/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java +++ b/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java @@ -19,6 +19,7 @@ package net.pterodactylus.sone.database.memory; import static com.google.common.base.Optional.fromNullable; import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.collect.FluentIterable.from; import static net.pterodactylus.sone.data.Reply.TIME_COMPARATOR; import java.util.ArrayList; @@ -52,6 +53,7 @@ import net.pterodactylus.util.config.Configuration; import net.pterodactylus.util.config.ConfigurationException; import com.google.common.base.Optional; +import com.google.common.base.Predicate; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import com.google.common.collect.SortedSetMultimap; @@ -83,9 +85,6 @@ public class MemoryDatabase extends AbstractService implements Database { /** All posts by their Sones. */ private final Multimap sonePosts = HashMultimap.create(); - /** All posts by their recipient. */ - private final Multimap recipientPosts = HashMultimap.create(); - /** Whether posts are known. */ private final Set knownPosts = new HashSet(); @@ -195,11 +194,15 @@ public class MemoryDatabase extends AbstractService implements Database { /** {@inheritDocs} */ @Override - public Collection getDirectedPosts(String recipientId) { + public Collection getDirectedPosts(final String recipientId) { lock.readLock().lock(); try { - Collection posts = recipientPosts.get(recipientId); - return (posts == null) ? Collections.emptySet() : new HashSet(posts); + return from(sonePosts.values()).filter(new Predicate() { + @Override + public boolean apply(Post post) { + return post.getRecipientId().asSet().contains(recipientId); + } + }).toSet(); } finally { lock.readLock().unlock(); } @@ -227,9 +230,6 @@ public class MemoryDatabase extends AbstractService implements Database { try { allPosts.put(post.getId(), post); getPostsFrom(post.getSone().getId()).add(post); - if (post.getRecipientId().isPresent()) { - getPostsTo(post.getRecipientId().get()).add(post); - } } finally { lock.writeLock().unlock(); } @@ -243,9 +243,6 @@ public class MemoryDatabase extends AbstractService implements Database { try { allPosts.remove(post.getId()); getPostsFrom(post.getSone().getId()).remove(post); - if (post.getRecipientId().isPresent()) { - getPostsTo(post.getRecipientId().get()).remove(post); - } post.getSone().removePost(post); } finally { lock.writeLock().unlock(); @@ -269,18 +266,12 @@ public class MemoryDatabase extends AbstractService implements Database { Collection oldPosts = getPostsFrom(sone.getId()); for (Post post : oldPosts) { allPosts.remove(post.getId()); - if (post.getRecipientId().isPresent()) { - getPostsTo(post.getRecipientId().get()).remove(post); - } } /* add new posts. */ getPostsFrom(sone.getId()).addAll(posts); for (Post post : posts) { allPosts.put(post.getId(), post); - if (post.getRecipientId().isPresent()) { - getPostsTo(post.getRecipientId().get()).add(post); - } } } finally { lock.writeLock().unlock(); @@ -297,9 +288,6 @@ public class MemoryDatabase extends AbstractService implements Database { getPostsFrom(sone.getId()).clear(); for (Post post : sone.getPosts()) { allPosts.remove(post.getId()); - if (post.getRecipientId().isPresent()) { - getPostsTo(post.getRecipientId().get()).remove(post); - } } } finally { lock.writeLock().unlock(); @@ -615,23 +603,6 @@ public class MemoryDatabase extends AbstractService implements Database { } } - /** - * Gets all posts that are directed the given Sone, creating a new collection - * if there is none yet. - * - * @param recipientId - * The ID of the Sone to get the posts for - * @return All posts - */ - private Collection getPostsTo(String recipientId) { - lock.readLock().lock(); - try { - return recipientPosts.get(recipientId); - } finally { - lock.readLock().unlock(); - } - } - /** Loads the known posts. */ private void loadKnownPosts() { lock.writeLock().lock();