X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdatabase%2Fmemory%2FMemoryDatabase.java;h=538d97fa8efbd7d99103a063a498f0f0c2ceb2fe;hb=d37132932d423abaca088fdf3496b9b0f38e3ae3;hp=6cb002734033a74039d9c14a2ffbdd0c18ad07df;hpb=31a732a2e18008ea65a31a4e8180c337458b2df9;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 6cb0027..538d97f 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,10 @@ 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.base.Predicates.not; +import static com.google.common.collect.FluentIterable.from; +import static java.util.Collections.emptyList; +import static net.pterodactylus.sone.data.Sone.LOCAL_SONE_FILTER; import java.util.ArrayList; import java.util.Collection; @@ -45,10 +49,11 @@ import net.pterodactylus.sone.database.DatabaseException; import net.pterodactylus.sone.database.PostBuilder; import net.pterodactylus.sone.database.PostDatabase; import net.pterodactylus.sone.database.PostReplyBuilder; -import net.pterodactylus.sone.database.SoneProvider; +import net.pterodactylus.sone.database.SoneBuilder; import net.pterodactylus.util.config.Configuration; import net.pterodactylus.util.config.ConfigurationException; +import com.google.common.base.Function; import com.google.common.base.Optional; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ListMultimap; @@ -67,12 +72,11 @@ public class MemoryDatabase extends AbstractService implements Database { /** The lock. */ private final ReadWriteLock lock = new ReentrantReadWriteLock(); - /** The Sone provider. */ - private final SoneProvider soneProvider; - /** The configuration. */ private final Configuration configuration; + private final Map sones = new HashMap(); + /** All posts by their ID. */ private final Map allPosts = new HashMap(); @@ -112,14 +116,11 @@ public class MemoryDatabase extends AbstractService implements Database { /** * Creates a new memory database. * - * @param soneProvider - * The Sone provider * @param configuration * The configuration for loading and saving elements */ @Inject - public MemoryDatabase(SoneProvider soneProvider, Configuration configuration) { - this.soneProvider = soneProvider; + public MemoryDatabase(Configuration configuration) { this.configuration = configuration; } @@ -162,6 +163,51 @@ public class MemoryDatabase extends AbstractService implements Database { } } + @Override + public Optional getSone(String soneId) { + lock.readLock().lock(); + try { + return fromNullable(sones.get(soneId)); + } finally { + lock.readLock().unlock(); + } + } + + @Override + public Collection getSones() { + lock.readLock().lock(); + try { + return Collections.unmodifiableCollection(sones.values()); + } finally { + lock.readLock().unlock(); + } + } + + @Override + public Collection getLocalSones() { + lock.readLock().lock(); + try { + return from(getSones()).filter(LOCAL_SONE_FILTER).toSet(); + } finally { + lock.readLock().unlock(); + } + } + + @Override + public Collection getRemoteSones() { + lock.readLock().lock(); + try { + return from(getSones()).filter(not(LOCAL_SONE_FILTER)).toSet(); + } finally { + lock.readLock().unlock(); + } + } + + @Override + public SoneBuilder newSoneBuilder() { + return null; + } + // // POSTPROVIDER METHODS // @@ -202,7 +248,7 @@ public class MemoryDatabase extends AbstractService implements Database { /** {@inheritDocs} */ @Override public PostBuilder newPostBuilder() { - return new MemoryPostBuilder(this, soneProvider); + return new MemoryPostBuilder(this); } // @@ -317,7 +363,7 @@ public class MemoryDatabase extends AbstractService implements Database { lock.readLock().lock(); try { if (!postReplies.containsKey(postId)) { - return Collections.emptyList(); + return emptyList(); } return new ArrayList(postReplies.get(postId)); } finally { @@ -332,7 +378,7 @@ public class MemoryDatabase extends AbstractService implements Database { /** {@inheritDocs} */ @Override public PostReplyBuilder newPostReplyBuilder() { - return new MemoryPostReplyBuilder(this, soneProvider); + return new MemoryPostReplyBuilder(this, this); } // @@ -436,6 +482,16 @@ public class MemoryDatabase extends AbstractService implements Database { } } + @Override + public List getAlbums(Album parent) { + lock.readLock().lock(); + try { + return from(albumChildren.get(parent.getId())).transformAndConcat(getAlbum()).toList(); + } finally { + lock.readLock().unlock(); + } + } + // // ALBUMSTORE METHODS // @@ -476,6 +532,16 @@ public class MemoryDatabase extends AbstractService implements Database { } } + @Override + public List getImages(Album parent) { + lock.readLock().lock(); + try { + return from(albumImages.get(parent.getId())).transformAndConcat(getImage()).toList(); + } finally { + lock.readLock().unlock(); + } + } + // // IMAGESTORE METHODS // @@ -802,4 +868,22 @@ public class MemoryDatabase extends AbstractService implements Database { } } + private Function> getAlbum() { + return new Function>() { + @Override + public Iterable apply(String input) { + return (input == null) ? Collections.emptyList() : getAlbum(input).asSet(); + } + }; + } + + private Function> getImage() { + return new Function>() { + @Override + public Iterable apply(String input) { + return (input == null) ? Collections.emptyList() : getImage(input).asSet(); + } + }; + } + }