X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdata%2FSone.java;h=3baed89278cde8e756440e097b226282988430ca;hb=5391ee6663db685d2e6283117ff8a17e91165350;hp=a40b12e756ca72cdc69c244852668802572b07c5;hpb=ec41f5f45fe6f31bfec77ca9b41c9bf60bfcd5dc;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/data/Sone.java b/src/main/java/net/pterodactylus/sone/data/Sone.java index a40b12e..3baed89 100644 --- a/src/main/java/net/pterodactylus/sone/data/Sone.java +++ b/src/main/java/net/pterodactylus/sone/data/Sone.java @@ -19,6 +19,7 @@ package net.pterodactylus.sone.data; import java.util.ArrayList; import java.util.Collections; +import java.util.Comparator; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -27,8 +28,8 @@ import java.util.UUID; import freenet.keys.FreenetURI; /** - * A Sone defines everything about a user: the {@link User} itself, her profile, - * her status updates. + * A Sone defines everything about a user: her profile, her status updates, her + * replies, her likes and dislikes, etc. *

* Operations that modify the Sone need to synchronize on the Sone in question. * @@ -58,6 +59,9 @@ public class Sone { /** All posts. */ private final List posts = new ArrayList(); + /** All replies. */ + private final Set replies = new HashSet(); + /** Modification count. */ private volatile long modificationCounter = 0; @@ -208,23 +212,32 @@ public class Sone { } /** - * Returns the list of posts of this Sone. + * Returns the list of posts of this Sone, sorted by time, newest first. * * @return All posts of this Sone */ public List getPosts() { - return Collections.unmodifiableList(posts); + List sortedPosts = new ArrayList(posts); + Collections.sort(sortedPosts, new Comparator() { + + @Override + public int compare(Post leftPost, Post rightPost) { + return (int) Math.max(Integer.MIN_VALUE, Math.min(Integer.MAX_VALUE, rightPost.getTime() - leftPost.getTime())); + } + + }); + return sortedPosts; } /** - * Adds a post with the given text to this Sone. + * Adds the given post to this Sone. The post will not be added if its + * {@link Post#getSone() Sone} is not this Sone. * - * @param text - * The text to post + * @param post + * The post to add */ - public synchronized void addPost(String text) { - Post post = new Post(this, System.currentTimeMillis(), text); - if (posts.add(post)) { + public synchronized void addPost(Post post) { + if (post.getSone().equals(this) && posts.add(post)) { modificationCounter++; } } @@ -242,6 +255,40 @@ public class Sone { } /** + * Returns all replies this Sone made. + * + * @return All replies this Sone made + */ + public Set getReplies() { + return Collections.unmodifiableSet(replies); + } + + /** + * Adds a reply to this Sone. If the given reply was not made by this Sone, + * nothing is added to this Sone. + * + * @param reply + * The reply to add + */ + public synchronized void addReply(Reply reply) { + if (reply.getSone().equals(this) && replies.add(reply)) { + modificationCounter++; + } + } + + /** + * Removes a reply from this Sone. + * + * @param reply + * The reply to remove + */ + public synchronized void removeReply(Reply reply) { + if (reply.getSone().equals(this) && replies.remove(reply)) { + modificationCounter++; + } + } + + /** * Returns the modification counter. * * @return The modification counter