X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdata%2Fimpl%2FSoneImpl.java;h=142f4a25b75f03093d276075222cf2bc0a88ecd8;hb=be9ad815f992468e6501384c7d3d95f7094c7b18;hp=32cefb16398b04b3bcb16ddf5f287eedd488df51;hpb=1bc68398c8912a992d87087b79ad9bbea8964c76;p=Sone.git
diff --git a/src/main/java/net/pterodactylus/sone/data/impl/SoneImpl.java b/src/main/java/net/pterodactylus/sone/data/impl/SoneImpl.java
index 32cefb1..142f4a2 100644
--- a/src/main/java/net/pterodactylus/sone/data/impl/SoneImpl.java
+++ b/src/main/java/net/pterodactylus/sone/data/impl/SoneImpl.java
@@ -25,6 +25,7 @@ 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;
@@ -32,8 +33,8 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import net.pterodactylus.sone.data.Album;
-import net.pterodactylus.sone.data.AlbumImpl;
import net.pterodactylus.sone.data.Client;
+import net.pterodactylus.sone.data.LocalSone;
import net.pterodactylus.sone.data.Post;
import net.pterodactylus.sone.data.PostReply;
import net.pterodactylus.sone.data.Profile;
@@ -41,11 +42,13 @@ import net.pterodactylus.sone.data.Reply;
import net.pterodactylus.sone.data.Sone;
import net.pterodactylus.sone.data.SoneOptions;
import net.pterodactylus.sone.data.SoneOptions.DefaultSoneOptions;
+import net.pterodactylus.sone.database.Database;
import net.pterodactylus.sone.freenet.wot.Identity;
import net.pterodactylus.sone.freenet.wot.OwnIdentity;
import freenet.keys.FreenetURI;
+import com.google.common.collect.FluentIterable;
import com.google.common.hash.Hasher;
import com.google.common.hash.Hashing;
@@ -56,11 +59,14 @@ import com.google.common.hash.Hashing;
*
* @author David âBombeâ Roden
*/
-public class SoneImpl implements Sone {
+public class SoneImpl implements LocalSone {
/** The logger. */
private static final Logger logger = getLogger("Sone.Data");
+ /** The database. */
+ private final Database database;
+
/** The ID of this Sone. */
private final String id;
@@ -74,7 +80,7 @@ public class SoneImpl implements Sone {
private volatile long latestEdition;
/** The time of the last inserted update. */
- private volatile long time;
+ private final long time;
/** The status of this Sone. */
private volatile SoneStatus status = SoneStatus.unknown;
@@ -83,16 +89,13 @@ public class SoneImpl implements Sone {
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 friend Sones. */
- private final Set friendSones = new CopyOnWriteArraySet();
-
/** All posts. */
- private final Set posts = new CopyOnWriteArraySet();
+ private final Collection posts = new HashSet();
/** All replies. */
private final Set replies = new CopyOnWriteArraySet();
@@ -112,15 +115,20 @@ public class SoneImpl implements Sone {
/**
* Creates a new Sone.
*
+ * @param database The database
* @param identity
* The identity of the Sone
* @param local
* {@code true} if the Sone is a local Sone, {@code false} otherwise
*/
- public SoneImpl(Identity identity, boolean local) {
+ public SoneImpl(Database database, Identity identity, boolean local, long time, Client client, Collection posts) {
+ this.database = database;
this.id = identity.getId();
this.identity = identity;
this.local = local;
+ this.time = time;
+ this.client = client;
+ this.posts.addAll(posts);
}
//
@@ -236,18 +244,6 @@ public class SoneImpl implements Sone {
}
/**
- * Sets the time of the last inserted update of this Sone.
- *
- * @param time
- * The time of the update (in milliseconds since Jan 1, 1970 UTC)
- * @return This Sone (for method chaining)
- */
- public Sone setTime(long time) {
- this.time = time;
- return this;
- }
-
- /**
* Returns the status of this Sone.
*
* @return The status of this Sone
@@ -310,7 +306,6 @@ public class SoneImpl implements Sone {
* @return This Sone (for method chaining)
*/
public Sone setClient(Client client) {
- this.client = client;
return this;
}
@@ -340,8 +335,8 @@ public class SoneImpl implements Sone {
*
* @return The friend Sones of this Sone
*/
- public List getFriends() {
- return new ArrayList(friendSones);
+ public Collection getFriends() {
+ return database.getFriends(this);
}
/**
@@ -353,33 +348,7 @@ public class SoneImpl implements Sone {
* false} otherwise
*/
public boolean hasFriend(String friendSoneId) {
- return friendSones.contains(friendSoneId);
- }
-
- /**
- * Adds the given Sone as a friend Sone.
- *
- * @param friendSone
- * The friend Sone to add
- * @return This Sone (for method chaining)
- */
- public Sone addFriend(String friendSone) {
- if (!friendSone.equals(id)) {
- friendSones.add(friendSone);
- }
- return this;
- }
-
- /**
- * Removes the given Sone as a friend Sone.
- *
- * @param friendSoneId
- * The ID of the friend Sone to remove
- * @return This Sone (for method chaining)
- */
- public Sone removeFriend(String friendSoneId) {
- friendSones.remove(friendSoneId);
- return this;
+ return database.isFriend(this, friendSoneId);
}
/**
@@ -388,52 +357,7 @@ public class SoneImpl implements Sone {
* @return All posts of this Sone
*/
public List getPosts() {
- List sortedPosts;
- synchronized (this) {
- sortedPosts = new ArrayList(posts);
- }
- Collections.sort(sortedPosts, Post.TIME_COMPARATOR);
- return sortedPosts;
- }
-
- /**
- * 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 posts) {
- synchronized (this) {
- this.posts.clear();
- this.posts.addAll(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);
}
/**
@@ -712,7 +636,7 @@ public class SoneImpl implements Sone {
/** {@inheritDoc} */
@Override
public String toString() {
- return getClass().getName() + "[identity=" + identity + ",friends(" + friendSones.size() + "),posts(" + posts.size() + "),replies(" + replies.size() + "),albums(" + getRootAlbum().getAlbums().size() + ")]";
+ return getClass().getName() + "[identity=" + identity + ",posts(" + posts.size() + "),replies(" + replies.size() + "),albums(" + getRootAlbum().getAlbums().size() + ")]";
}
}