X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdatabase%2Fmemory%2FMemoryBookmarkDatabase.java;fp=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdatabase%2Fmemory%2FMemoryBookmarkDatabase.java;h=1aec5734090e61aac828aa3a1a60d99f9f40714b;hp=0000000000000000000000000000000000000000;hb=aba6bd1d58ef244050703e1b99d7389e024809c6;hpb=aeed1ea944bcfa2cc057ba99d258c055e55a9e2d diff --git a/src/main/java/net/pterodactylus/sone/database/memory/MemoryBookmarkDatabase.java b/src/main/java/net/pterodactylus/sone/database/memory/MemoryBookmarkDatabase.java new file mode 100644 index 0000000..1aec573 --- /dev/null +++ b/src/main/java/net/pterodactylus/sone/database/memory/MemoryBookmarkDatabase.java @@ -0,0 +1,86 @@ +package net.pterodactylus.sone.database.memory; + +import static com.google.common.collect.FluentIterable.from; + +import java.util.HashSet; +import java.util.Set; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +import net.pterodactylus.sone.data.Post; +import net.pterodactylus.sone.database.BookmarkDatabase; + +import com.google.common.base.Function; + +/** + * Memory-based {@link BookmarkDatabase} implementation. + * + * @author David ‘Bombe’ Roden + */ +public class MemoryBookmarkDatabase implements BookmarkDatabase { + + private final ReadWriteLock lock = new ReentrantReadWriteLock(); + private final MemoryDatabase memoryDatabase; + private final Set bookmarkedPosts = new HashSet(); + + public MemoryBookmarkDatabase(MemoryDatabase memoryDatabase) { + this.memoryDatabase = memoryDatabase; + } + + @Override + public void bookmarkPost(String postId) { + lock.writeLock().lock(); + try { + bookmarkedPosts.add(postId); + } finally { + lock.writeLock().unlock(); + } + } + + @Override + public void bookmarkPost(Post post) { + lock.writeLock().lock(); + try { + bookmarkedPosts.add(post.getId()); + } finally { + lock.writeLock().unlock(); + } + } + + @Override + public void unbookmarkPost(Post post) { + lock.writeLock().lock(); + try { + bookmarkedPosts.remove(post.getId()); + } finally { + lock.writeLock().unlock(); + } + } + + @Override + public boolean isPostBookmarked(Post post) { + lock.readLock().lock(); + try { + return bookmarkedPosts.contains(post.getId()); + } finally { + lock.readLock().unlock(); + } + } + + @Override + public Set getBookmarkedPosts() { + lock.readLock().lock(); + try { + return from(bookmarkedPosts).transformAndConcat( + new Function>() { + @Override + public Iterable apply(String postId) { + return memoryDatabase.getPost(postId).asSet(); + } + }).toSet(); + } finally { + lock.readLock().unlock(); + } + } + +}