- * Gets all posts for the given Sone, creating a new collection if there is
- * none yet.
- *
- * @param soneId
- * The ID of the Sone to get the posts for
- * @return All posts
- */
- private Collection<Post> getPostsFrom(String soneId) {
- Collection<Post> posts = null;
- lock.readLock().lock();
- try {
- posts = sonePosts.get(soneId);
- } finally {
- lock.readLock().unlock();
- }
- if (posts != null) {
- return posts;
- }
-
- posts = new HashSet<Post>();
- lock.writeLock().lock();
- try {
- sonePosts.put(soneId, posts);
- } finally {
- lock.writeLock().unlock();
- }
-
- return posts;
- }
-
- /**
- * Gets all posts that are directed the given Sone, creating a new collection
- * if there is none yet.
- *
- * @param recipientId
- * The ID of the Sone to get the posts for
- * @return All posts
- */
- private Collection<Post> getPostsTo(String recipientId) {
- Collection<Post> posts = null;
- lock.readLock().lock();
- try {
- posts = recipientPosts.get(recipientId);
- } finally {
- lock.readLock().unlock();
- }
- if (posts != null) {
- return posts;
- }
-
- posts = new HashSet<Post>();
- lock.writeLock().lock();
- try {
- recipientPosts.put(recipientId, posts);
- } finally {
- lock.writeLock().unlock();
- }
-
- return posts;
- }
-
- /** Loads the known posts. */
- private void loadKnownPosts() {
- lock.writeLock().lock();
- try {
- int postCounter = 0;
- while (true) {
- String knownPostId = configuration.getStringValue("KnownPosts/" + postCounter++ + "/ID").getValue(null);
- if (knownPostId == null) {
- break;
- }
- knownPosts.add(knownPostId);
- }
- } finally {
- lock.writeLock().unlock();
- }
- }
-
- /**
- * Saves the known posts to the configuration.
- *
- * @throws DatabaseException
- * if a configuration error occurs
- */
- private void saveKnownPosts() throws DatabaseException {
- lock.readLock().lock();
- try {
- int postCounter = 0;
- for (String knownPostId : knownPosts) {
- configuration.getStringValue("KnownPosts/" + postCounter++ + "/ID").setValue(knownPostId);
- }
- configuration.getStringValue("KnownPosts/" + postCounter + "/ID").setValue(null);
- } catch (ConfigurationException ce1) {
- throw new DatabaseException("Could not save database.", ce1);
- } finally {
- lock.readLock().unlock();
- }
- }
-
- /**