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;
import freenet.keys.FreenetURI;
+import com.google.common.collect.FluentIterable;
import com.google.common.hash.Hasher;
import com.google.common.hash.Hashing;
private volatile Profile profile = new Profile(this);
/** The client used by the Sone. */
- private volatile Client client;
+ private final Client client;
/** Whether this Sone is known. */
private volatile boolean known;
/** All posts. */
- private final Set<Post> posts = new CopyOnWriteArraySet<Post>();
+ private final Collection<Post> posts = new HashSet<Post>();
/** All replies. */
private final Set<PostReply> replies = new CopyOnWriteArraySet<PostReply>();
* @param local
* {@code true} if the Sone is a local Sone, {@code false} otherwise
*/
- public SoneImpl(Database database, Identity identity, boolean local, long time) {
+ public SoneImpl(Database database, Identity identity, boolean local, long time, Client client, Collection<Post> posts) {
this.database = database;
this.id = identity.getId();
this.identity = identity;
this.local = local;
this.time = time;
+ this.client = client;
+ this.posts.addAll(posts);
}
//
* @return This Sone (for method chaining)
*/
public Sone setClient(Client client) {
- this.client = client;
return this;
}
* @return All posts of this Sone
*/
public List<Post> getPosts() {
- List<Post> sortedPosts;
synchronized (this) {
- sortedPosts = new ArrayList<Post>(posts);
+ return FluentIterable.from(posts).toSortedList(Post.TIME_COMPARATOR);
}
- Collections.sort(sortedPosts, Post.TIME_COMPARATOR);
- return sortedPosts;
}
/**
* @return This Sone (for method chaining)
*/
public Sone setPosts(Collection<Post> posts) {
- synchronized (this) {
- this.posts.clear();
- this.posts.addAll(posts);
- }
return this;
}