import net.pterodactylus.sone.database.PostBuilder;
import net.pterodactylus.sone.database.PostDatabase;
import net.pterodactylus.sone.database.PostReplyBuilder;
+import net.pterodactylus.sone.database.SoneBuilder;
import net.pterodactylus.sone.database.SoneProvider;
import net.pterodactylus.util.config.Configuration;
import net.pterodactylus.util.config.ConfigurationException;
private final Map<String, Image> allImages = new HashMap<String, Image>();
private final Multimap<String, Image> soneImages = HashMultimap.create();
+ private final MemoryBookmarkDatabase memoryBookmarkDatabase =
+ new MemoryBookmarkDatabase(this);
+
/**
* Creates a new memory database.
*
}
@Override
+ public SoneBuilder newSoneBuilder() {
+ return new MemorySoneBuilder();
+ }
+
+ @Override
public void storeSone(Sone sone) {
lock.writeLock().lock();
try {
+ removeSone(sone);
+
+ allSones.put(sone.getId(), sone);
+ sonePosts.putAll(sone.getId(), sone.getPosts());
+ for (Post post : sone.getPosts()) {
+ allPosts.put(post.getId(), post);
+ }
+ sonePostReplies.putAll(sone.getId(), sone.getReplies());
+ for (PostReply postReply : sone.getReplies()) {
+ allPostReplies.put(postReply.getId(), postReply);
+ }
+ soneAlbums.putAll(sone.getId(), toAllAlbums.apply(sone));
+ for (Album album : toAllAlbums.apply(sone)) {
+ allAlbums.put(album.getId(), album);
+ }
+ soneImages.putAll(sone.getId(), toAllImages.apply(sone));
+ for (Image image : toAllImages.apply(sone)) {
+ allImages.put(image.getId(), image);
+ }
+ } finally {
+ lock.writeLock().unlock();
+ }
+ }
+
+ @Override
+ public void removeSone(Sone sone) {
+ lock.writeLock().lock();
+ try {
+ allSones.remove(sone.getId());
Collection<Post> removedPosts = sonePosts.removeAll(sone.getId());
for (Post removedPost : removedPosts) {
allPosts.remove(removedPost.getId());
for (Image removedImage : removedImages) {
allImages.remove(removedImage.getId());
}
-
- allSones.put(sone.getId(), sone);
- sonePosts.putAll(sone.getId(), sone.getPosts());
- for (Post post : sone.getPosts()) {
- allPosts.put(post.getId(), post);
- }
- sonePostReplies.putAll(sone.getId(), sone.getReplies());
- for (PostReply postReply : sone.getReplies()) {
- allPostReplies.put(postReply.getId(), postReply);
- }
- soneAlbums.putAll(sone.getId(), toAllAlbums.apply(sone));
- for (Album album : toAllAlbums.apply(sone)) {
- allAlbums.put(album.getId(), album);
- }
- soneImages.putAll(sone.getId(), toAllImages.apply(sone));
- for (Image image : toAllImages.apply(sone)) {
- allImages.put(image.getId(), image);
- }
} finally {
lock.writeLock().unlock();
}
public Collection<Sone> getSones() {
lock.readLock().lock();
try {
- return unmodifiableCollection(allSones.values());
+ return new HashSet<Sone>(allSones.values());
} finally {
lock.readLock().unlock();
}
}
}
+ @Override
+ public void bookmarkPost(String postId) {
+ memoryBookmarkDatabase.bookmarkPost(postId);
+ }
+
+ @Override
+ public void bookmarkPost(Post post) {
+ memoryBookmarkDatabase.bookmarkPost(post);
+ }
+
+ @Override
+ public void unbookmarkPost(Post post) {
+ memoryBookmarkDatabase.unbookmarkPost(post);
+ }
+
+ @Override
+ public boolean isPostBookmarked(Post post) {
+ return memoryBookmarkDatabase.isPostBookmarked(post);
+ }
+
+ @Override
+ public Set<Post> getBookmarkedPosts() {
+ return memoryBookmarkDatabase.getBookmarkedPosts();
+ }
+
//
// PACKAGE-PRIVATE METHODS
//
private Collection<PostReply> getRepliesFrom(String id) {
lock.readLock().lock();
try {
- return Collections.unmodifiableCollection(sonePostReplies.get(id));
+ return unmodifiableCollection(sonePostReplies.get(id));
} finally {
lock.readLock().unlock();
}