Store posts and replies in immutable sets.
[Sone.git] / src / main / java / net / pterodactylus / sone / data / impl / SoneImpl.java
index 2479276..2ca73a2 100644 (file)
@@ -25,7 +25,6 @@ import java.net.MalformedURLException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.CopyOnWriteArraySet;
@@ -49,6 +48,7 @@ import net.pterodactylus.sone.freenet.wot.OwnIdentity;
 import freenet.keys.FreenetURI;
 
 import com.google.common.collect.FluentIterable;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.hash.Hasher;
 import com.google.common.hash.Hashing;
 
@@ -95,10 +95,10 @@ public class SoneImpl implements LocalSone {
        private volatile boolean known;
 
        /** All posts. */
-       private final Collection<Post> posts = new HashSet<Post>();
+       private final ImmutableSet<Post> posts;
 
        /** All replies. */
-       private final Set<PostReply> replies = new CopyOnWriteArraySet<PostReply>();
+       private final ImmutableSet<PostReply> replies;
 
        /** The IDs of all liked posts. */
        private final Set<String> likedPostIds = new CopyOnWriteArraySet<String>();
@@ -121,14 +121,15 @@ public class SoneImpl implements LocalSone {
         * @param local
         *              {@code true} if the Sone is a local Sone, {@code false} otherwise
         */
-       public SoneImpl(Database database, Identity identity, boolean local, long time, Client client, Collection<Post> posts) {
+       public SoneImpl(Database database, Identity identity, boolean local, long time, Client client, Collection<Post> posts, Collection<PostReply> postReplies) {
                this.database = database;
                this.id = identity.getId();
                this.identity = identity;
                this.local = local;
                this.time = time;
                this.client = client;
-               this.posts.addAll(posts);
+               this.posts = ImmutableSet.copyOf(posts);
+               this.replies = ImmutableSet.copyOf(postReplies);
        }
 
        //
@@ -357,45 +358,7 @@ public class SoneImpl implements LocalSone {
         * @return All posts of this Sone
         */
        public List<Post> getPosts() {
-               synchronized (this) {
-                       return FluentIterable.from(posts).toSortedList(Post.TIME_COMPARATOR);
-               }
-       }
-
-       /**
-        * Sets all posts of this Sone at once.
-        *
-        * @param posts
-        *              The new (and only) posts of this Sone
-        * @return This Sone (for method chaining)
-        */
-       public Sone setPosts(Collection<Post> posts) {
-               return this;
-       }
-
-       /**
-        * Adds the given post to this Sone. The post will not be added if its {@link
-        * Post#getSone() Sone} is not this Sone.
-        *
-        * @param post
-        *              The post to add
-        */
-       public void addPost(Post post) {
-               if (post.getSone().equals(this) && posts.add(post)) {
-                       logger.log(Level.FINEST, String.format("Adding %s to ā€œ%sā€.", post, getName()));
-               }
-       }
-
-       /**
-        * Removes the given post from this Sone.
-        *
-        * @param post
-        *              The post to remove
-        */
-       public void removePost(Post post) {
-               if (post.getSone().equals(this)) {
-                       posts.remove(post);
-               }
+               return FluentIterable.from(posts).toSortedList(Post.TIME_COMPARATOR);
        }
 
        /**