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);
+ private final MemoryBookmarkDatabase memoryBookmarkDatabase;
/**
* Creates a new memory database.
this.soneProvider = soneProvider;
this.configuration = configuration;
this.configurationLoader = new ConfigurationLoader(configuration);
+ memoryBookmarkDatabase =
+ new MemoryBookmarkDatabase(this, configurationLoader);
}
//
/** {@inheritDocs} */
@Override
protected void doStart() {
+ memoryBookmarkDatabase.start();
loadKnownPosts();
loadKnownPostReplies();
notifyStarted();
@Override
protected void doStop() {
try {
+ memoryBookmarkDatabase.stop();
save();
notifyStopped();
} catch (DatabaseException de1) {
}
}
- /** {@inheritDocs} */
- @Override
- public void storePosts(Sone sone, Collection<Post> posts) throws IllegalArgumentException {
- checkNotNull(sone, "sone must not be null");
- /* verify that all posts are from the same Sone. */
- for (Post post : posts) {
- if (!sone.equals(post.getSone())) {
- throw new IllegalArgumentException(String.format("Post from different Sone found: %s", post));
- }
- }
-
- lock.writeLock().lock();
- try {
- /* remove all posts by the Sone. */
- Collection<Post> oldPosts = getPostsFrom(sone.getId());
- for (Post post : oldPosts) {
- allPosts.remove(post.getId());
- }
-
- /* add new posts. */
- getPostsFrom(sone.getId()).addAll(posts);
- for (Post post : posts) {
- allPosts.put(post.getId(), post);
- }
- } finally {
- lock.writeLock().unlock();
- }
- }
-
- /** {@inheritDocs} */
- @Override
- public void removePosts(Sone sone) {
- checkNotNull(sone, "sone must not be null");
- lock.writeLock().lock();
- try {
- /* remove all posts by the Sone. */
- getPostsFrom(sone.getId()).clear();
- for (Post post : sone.getPosts()) {
- allPosts.remove(post.getId());
- }
- } finally {
- lock.writeLock().unlock();
- }
- }
-
//
// POSTREPLYPROVIDER METHODS
//
/** {@inheritDocs} */
@Override
- public void storePostReplies(Sone sone, Collection<PostReply> postReplies) {
- checkNotNull(sone, "sone must not be null");
- /* verify that all posts are from the same Sone. */
- for (PostReply postReply : postReplies) {
- if (!sone.equals(postReply.getSone())) {
- throw new IllegalArgumentException(String.format("PostReply from different Sone found: %s", postReply));
- }
- }
-
- lock.writeLock().lock();
- try {
- /* remove all post replies of the Sone. */
- for (PostReply postReply : getRepliesFrom(sone.getId())) {
- removePostReply(postReply);
- }
- for (PostReply postReply : postReplies) {
- allPostReplies.put(postReply.getId(), postReply);
- sonePostReplies.put(postReply.getSone().getId(), postReply);
- }
- } finally {
- lock.writeLock().unlock();
- }
- }
-
- /** {@inheritDocs} */
- @Override
public void removePostReply(PostReply postReply) {
lock.writeLock().lock();
try {
}
}
- /** {@inheritDocs} */
- @Override
- public void removePostReplies(Sone sone) {
- checkNotNull(sone, "sone must not be null");
-
- lock.writeLock().lock();
- try {
- for (PostReply postReply : sone.getReplies()) {
- removePostReply(postReply);
- }
- } finally {
- lock.writeLock().unlock();
- }
- }
-
//
// ALBUMPROVDER METHODS
//
}
@Override
- public void bookmarkPost(String postId) {
- memoryBookmarkDatabase.bookmarkPost(postId);
- }
-
- @Override
public void bookmarkPost(Post post) {
memoryBookmarkDatabase.bookmarkPost(post);
}
}
}
- /**
- * 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<PostReply> 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<String> knownPostReplies = configurationLoader.loadKnownPostReplies();
lock.writeLock().lock();
try {
- int replyCounter = 0;
- while (true) {
- String knownReplyId = configuration.getStringValue("KnownReplies/" + replyCounter++ + "/ID").getValue(null);
- if (knownReplyId == null) {
- break;
- }
- knownPostReplies.add(knownReplyId);
- }
+ this.knownPostReplies.clear();
+ this.knownPostReplies.addAll(knownPostReplies);
} finally {
lock.writeLock().unlock();
}