X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdatabase%2Fmemory%2FMemoryDatabase.java;h=3f30d1191783091355523cd050c77fd860f7f3c5;hb=6e9a43ccd93ae125720547c0fe421dc81a54ba90;hp=6e5546b25ccbfe9309943c3a906a1bd3d9602cf2;hpb=c1eb83f20e772ece19a173f26f28c4a810249679;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 6e5546b..3f30d11 100644 --- a/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java +++ b/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java @@ -17,11 +17,12 @@ package net.pterodactylus.sone.database.memory; -import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Preconditions.*; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -46,6 +47,8 @@ import net.pterodactylus.util.config.Configuration; import net.pterodactylus.util.config.ConfigurationException; import com.google.common.base.Optional; +import com.google.common.collect.SortedSetMultimap; +import com.google.common.collect.TreeMultimap; import com.google.common.util.concurrent.AbstractService; import com.google.inject.Inject; @@ -80,6 +83,15 @@ public class MemoryDatabase extends AbstractService implements Database { /** All post replies by their ID. */ private final Map allPostReplies = new HashMap(); + /** Replies sorted by Sone. */ + private final SortedSetMultimap sonePostReplies = TreeMultimap.create(new Comparator() { + + @Override + public int compare(String leftString, String rightString) { + return leftString.compareTo(rightString); + } + }, PostReply.TIME_COMPARATOR); + /** Replies by post. */ private final Map> postReplies = new HashMap>(); @@ -90,9 +102,9 @@ public class MemoryDatabase extends AbstractService implements Database { * Creates a new memory database. * * @param soneProvider - * The Sone provider + * The Sone provider * @param configuration - * The configuration for loading and saving elements + * The configuration for loading and saving elements */ @Inject public MemoryDatabase(SoneProvider soneProvider, Configuration configuration) { @@ -108,7 +120,7 @@ public class MemoryDatabase extends AbstractService implements Database { * Saves the database. * * @throws DatabaseException - * if an error occurs while saving + * if an error occurs while saving */ @Override public void save() throws DatabaseException { @@ -120,9 +132,7 @@ public class MemoryDatabase extends AbstractService implements Database { // SERVICE METHODS // - /** - * {@inheritDocs} - */ + /** {@inheritDocs} */ @Override protected void doStart() { loadKnownPosts(); @@ -130,9 +140,7 @@ public class MemoryDatabase extends AbstractService implements Database { notifyStarted(); } - /** - * {@inheritDocs} - */ + /** {@inheritDocs} */ @Override protected void doStop() { try { @@ -147,9 +155,7 @@ public class MemoryDatabase extends AbstractService implements Database { // POSTPROVIDER METHODS // - /** - * {@inheritDocs} - */ + /** {@inheritDocs} */ @Override public Optional getPost(String postId) { lock.readLock().lock(); @@ -160,23 +166,19 @@ public class MemoryDatabase extends AbstractService implements Database { } } - /** - * {@inheritDocs} - */ + /** {@inheritDocs} */ @Override public Collection getPosts(String soneId) { return new HashSet(getPostsFrom(soneId)); } - /** - * {@inheritDocs} - */ + /** {@inheritDocs} */ @Override public Collection getDirectedPosts(String recipientId) { lock.readLock().lock(); try { Collection posts = recipientPosts.get(recipientId); - return (posts == null) ? Collections. emptySet() : new HashSet(posts); + return (posts == null) ? Collections.emptySet() : new HashSet(posts); } finally { lock.readLock().unlock(); } @@ -186,9 +188,7 @@ public class MemoryDatabase extends AbstractService implements Database { // POSTBUILDERFACTORY METHODS // - /** - * {@inheritDocs} - */ + /** {@inheritDocs} */ @Override public PostBuilder newPostBuilder() { return new MemoryPostBuilder(this, soneProvider); @@ -198,9 +198,7 @@ public class MemoryDatabase extends AbstractService implements Database { // POSTSTORE METHODS // - /** - * {@inheritDocs} - */ + /** {@inheritDocs} */ @Override public void storePost(Post post) { checkNotNull(post, "post must not be null"); @@ -216,9 +214,7 @@ public class MemoryDatabase extends AbstractService implements Database { } } - /** - * {@inheritDocs} - */ + /** {@inheritDocs} */ @Override public void removePost(Post post) { checkNotNull(post, "post must not be null"); @@ -235,9 +231,7 @@ public class MemoryDatabase extends AbstractService implements Database { } } - /** - * {@inheritDocs} - */ + /** {@inheritDocs} */ @Override public void storePosts(Sone sone, Collection posts) throws IllegalArgumentException { checkNotNull(sone, "sone must not be null"); @@ -272,9 +266,7 @@ public class MemoryDatabase extends AbstractService implements Database { } } - /** - * {@inheritDocs} - */ + /** {@inheritDocs} */ @Override public void removePosts(Sone sone) { checkNotNull(sone, "sone must not be null"); @@ -297,9 +289,7 @@ public class MemoryDatabase extends AbstractService implements Database { // POSTREPLYPROVIDER METHODS // - /** - * {@inheritDocs} - */ + /** {@inheritDocs} */ @Override public Optional getPostReply(String id) { lock.readLock().lock(); @@ -310,9 +300,7 @@ public class MemoryDatabase extends AbstractService implements Database { } } - /** - * {@inheritDocs} - */ + /** {@inheritDocs} */ @Override public List getReplies(String postId) { lock.readLock().lock(); @@ -330,9 +318,7 @@ public class MemoryDatabase extends AbstractService implements Database { // POSTREPLYBUILDERFACTORY METHODS // - /** - * {@inheritDocs} - */ + /** {@inheritDocs} */ @Override public PostReplyBuilder newPostReplyBuilder() { return new MemoryPostReplyBuilder(this, soneProvider); @@ -342,9 +328,7 @@ public class MemoryDatabase extends AbstractService implements Database { // POSTREPLYSTORE METHODS // - /** - * {@inheritDocs} - */ + /** {@inheritDocs} */ @Override public void storePostReply(PostReply postReply) { lock.writeLock().lock(); @@ -362,9 +346,7 @@ public class MemoryDatabase extends AbstractService implements Database { } } - /** - * {@inheritDocs} - */ + /** {@inheritDocs} */ @Override public void storePostReplies(Sone sone, Collection postReplies) { checkNotNull(sone, "sone must not be null"); @@ -383,6 +365,7 @@ public class MemoryDatabase extends AbstractService implements Database { } for (PostReply postReply : postReplies) { allPostReplies.put(postReply.getId(), postReply); + sonePostReplies.put(postReply.getSone().getId(), postReply); if (this.postReplies.containsKey(postReply.getPostId())) { this.postReplies.get(postReply.getPostId()).add(postReply); } else { @@ -396,9 +379,7 @@ public class MemoryDatabase extends AbstractService implements Database { } } - /** - * {@inheritDocs} - */ + /** {@inheritDocs} */ @Override public void removePostReply(PostReply postReply) { lock.writeLock().lock(); @@ -415,9 +396,7 @@ public class MemoryDatabase extends AbstractService implements Database { } } - /** - * {@inheritDocs} - */ + /** {@inheritDocs} */ @Override public void removePostReplies(Sone sone) { checkNotNull(sone, "sone must not be null"); @@ -440,7 +419,7 @@ public class MemoryDatabase extends AbstractService implements Database { * Returns whether the given post is known. * * @param post - * The post + * The post * @return {@code true} if the post is known, {@code false} otherwise */ boolean isPostKnown(Post post) { @@ -456,9 +435,9 @@ public class MemoryDatabase extends AbstractService implements Database { * Sets whether the given post is known. * * @param post - * The post + * The post * @param known - * {@code true} if the post is known, {@code false} otherwise + * {@code true} if the post is known, {@code false} otherwise */ void setPostKnown(Post post, boolean known) { lock.writeLock().lock(); @@ -477,7 +456,7 @@ public class MemoryDatabase extends AbstractService implements Database { * Returns whether the given post reply is known. * * @param postReply - * The post reply + * The post reply * @return {@code true} if the given post reply is known, {@code false} * otherwise */ @@ -494,10 +473,9 @@ public class MemoryDatabase extends AbstractService implements Database { * Sets whether the given post reply is known. * * @param postReply - * The post reply + * The post reply * @param known - * {@code true} if the post reply is known, {@code false} - * otherwise + * {@code true} if the post reply is known, {@code false} otherwise */ void setPostReplyKnown(PostReply postReply, boolean known) { lock.writeLock().lock(); @@ -521,7 +499,7 @@ public class MemoryDatabase extends AbstractService implements Database { * none yet. * * @param soneId - * The ID of the Sone to get the posts for + * The ID of the Sone to get the posts for * @return All posts */ private Collection getPostsFrom(String soneId) { @@ -548,11 +526,11 @@ 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. + * 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 + * The ID of the Sone to get the posts for * @return All posts */ private Collection getPostsTo(String recipientId) { @@ -578,9 +556,7 @@ public class MemoryDatabase extends AbstractService implements Database { return posts; } - /** - * Loads the known posts. - */ + /** Loads the known posts. */ private void loadKnownPosts() { lock.writeLock().lock(); try { @@ -601,7 +577,7 @@ public class MemoryDatabase extends AbstractService implements Database { * Saves the known posts to the configuration. * * @throws DatabaseException - * if a configuration error occurs + * if a configuration error occurs */ private void saveKnownPosts() throws DatabaseException { lock.readLock().lock(); @@ -619,8 +595,25 @@ public class MemoryDatabase extends AbstractService implements Database { } /** - * Loads the known post replies. + * Returns all replies by the given Sone. + * + * @param id + * The ID of the Sone + * @return The post replies of the Sone, sorted by time (newest first) */ + private Collection getRepliesFrom(String id) { + lock.readLock().lock(); + try { + if (sonePostReplies.containsKey(id)) { + return Collections.unmodifiableCollection(sonePostReplies.get(id)); + } + return Collections.emptySet(); + } finally { + lock.readLock().unlock(); + } + } + + /** Loads the known post replies. */ private void loadKnownPostReplies() { lock.writeLock().lock(); try { @@ -641,7 +634,7 @@ public class MemoryDatabase extends AbstractService implements Database { * Saves the known post replies to the configuration. * * @throws DatabaseException - * if a configuration error occurs + * if a configuration error occurs */ private void saveKnownPostReplies() throws DatabaseException { lock.readLock().lock();