X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdatabase%2Fmemory%2FMemoryDatabase.java;h=5e5021c1eba108b7815713cb9dc09d9af57eca92;hb=fd32e307db87c617a4c455f592b6e649ec50ae8a;hp=eb0d20a7be718327396b6dc0fde4376e1ebc3c53;hpb=6e61aaf27462b1716569550e11f6074cacb628d6;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 eb0d20a..5e5021c 100644 --- a/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java +++ b/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java @@ -1,5 +1,5 @@ /* - * Sone - MemoryDatabase.java - Copyright © 2013 David Roden + * Sone - MemoryDatabase.java - Copyright © 2013–2016 David Roden * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,13 +21,13 @@ import static com.google.common.base.Optional.fromNullable; import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Predicates.not; import static com.google.common.collect.FluentIterable.from; -import static java.util.Collections.unmodifiableCollection; import static net.pterodactylus.sone.data.Reply.TIME_COMPARATOR; import static net.pterodactylus.sone.data.Sone.LOCAL_SONE_FILTER; import static net.pterodactylus.sone.data.Sone.toAllAlbums; import static net.pterodactylus.sone.data.Sone.toAllImages; import java.util.Collection; +import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; @@ -37,6 +37,9 @@ import java.util.Set; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + import net.pterodactylus.sone.data.Album; import net.pterodactylus.sone.data.Image; import net.pterodactylus.sone.data.Post; @@ -56,7 +59,6 @@ import net.pterodactylus.sone.database.SoneProvider; 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; @@ -65,6 +67,7 @@ import com.google.common.collect.TreeMultimap; import com.google.common.util.concurrent.AbstractService; import com.google.inject.Inject; import com.google.inject.Singleton; +import kotlin.jvm.functions.Function1; /** * Memory-based {@link PostDatabase} implementation. @@ -117,6 +120,7 @@ public class MemoryDatabase extends AbstractService implements Database { private final Multimap soneImages = HashMultimap.create(); private final MemoryBookmarkDatabase memoryBookmarkDatabase; + private final MemoryFriendDatabase memoryFriendDatabase; /** * Creates a new memory database. @@ -133,6 +137,7 @@ public class MemoryDatabase extends AbstractService implements Database { this.configurationLoader = new ConfigurationLoader(configuration); memoryBookmarkDatabase = new MemoryBookmarkDatabase(this, configurationLoader); + memoryFriendDatabase = new MemoryFriendDatabase(configurationLoader); } // @@ -178,7 +183,7 @@ public class MemoryDatabase extends AbstractService implements Database { @Override public SoneBuilder newSoneBuilder() { - return new MemorySoneBuilder(); + return new MemorySoneBuilder(this); } @Override @@ -238,11 +243,22 @@ public class MemoryDatabase extends AbstractService implements Database { } } + @Nonnull + @Override + public Function1 getSoneLoader() { + return new Function1() { + @Override + public Sone invoke(String soneId) { + return getSone(soneId); + } + }; + } + @Override - public Optional getSone(String soneId) { + public Sone getSone(String soneId) { lock.readLock().lock(); try { - return fromNullable(allSones.get(soneId)); + return allSones.get(soneId); } finally { lock.readLock().unlock(); } @@ -279,16 +295,48 @@ public class MemoryDatabase extends AbstractService implements Database { } } + @Override + public Collection getFriends(Sone localSone) { + if (!localSone.isLocal()) { + return Collections.emptySet(); + } + return memoryFriendDatabase.getFriends(localSone.getId()); + } + + @Override + public boolean isFriend(Sone localSone, String friendSoneId) { + if (!localSone.isLocal()) { + return false; + } + return memoryFriendDatabase.isFriend(localSone.getId(), friendSoneId); + } + + @Override + public void addFriend(Sone localSone, String friendSoneId) { + if (!localSone.isLocal()) { + return; + } + memoryFriendDatabase.addFriend(localSone.getId(), friendSoneId); + } + + @Override + public void removeFriend(Sone localSone, String friendSoneId) { + if (!localSone.isLocal()) { + return; + } + memoryFriendDatabase.removeFriend(localSone.getId(), friendSoneId); + } + // // POSTPROVIDER METHODS // - /** {@inheritDocs} */ + @Nullable @Override - public Optional getPost(String postId) { + public Post getPost(@Nonnull String postId) { lock.readLock().lock(); try { - return fromNullable(allPosts.get(postId)); + return allPosts.get(postId); } finally { lock.readLock().unlock(); } @@ -361,12 +409,12 @@ public class MemoryDatabase extends AbstractService implements Database { // POSTREPLYPROVIDER METHODS // - /** {@inheritDocs} */ + @Nullable @Override - public Optional getPostReply(String id) { + public PostReply getPostReply(String id) { lock.readLock().lock(); try { - return fromNullable(allPostReplies.get(id)); + return allPostReplies.get(id); } finally { lock.readLock().unlock(); } @@ -429,11 +477,12 @@ public class MemoryDatabase extends AbstractService implements Database { // ALBUMPROVDER METHODS // + @Nullable @Override - public Optional getAlbum(String albumId) { + public Album getAlbum(@Nonnull String albumId) { lock.readLock().lock(); try { - return fromNullable(allAlbums.get(albumId)); + return allAlbums.get(albumId); } finally { lock.readLock().unlock(); } @@ -478,11 +527,12 @@ public class MemoryDatabase extends AbstractService implements Database { // IMAGEPROVIDER METHODS // + @Nullable @Override - public Optional getImage(String imageId) { + public Image getImage(@Nonnull String imageId) { lock.readLock().lock(); try { - return fromNullable(allImages.get(imageId)); + return allImages.get(imageId); } finally { lock.readLock().unlock(); } @@ -676,22 +726,6 @@ public class MemoryDatabase extends AbstractService implements Database { } } - /** - * 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 { - return unmodifiableCollection(sonePostReplies.get(id)); - } finally { - lock.readLock().unlock(); - } - } - /** Loads the known post replies. */ private void loadKnownPostReplies() { Set knownPostReplies = configurationLoader.loadKnownPostReplies();