X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdata%2FSone.java;h=9219e990ac76390a088ca299b35d9de3c234f05c;hb=94041feaf2a141b8c75725301f06d7e4bc617a12;hp=7041289b90e3ca45e91cbd9ba8337c4aa98bb801;hpb=78cd820b392069def4640d45497e4097ef031d53;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 7041289..9219e99 100644 --- a/src/main/java/net/pterodactylus/sone/data/Sone.java +++ b/src/main/java/net/pterodactylus/sone/data/Sone.java @@ -18,6 +18,7 @@ package net.pterodactylus.sone.data; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashSet; @@ -47,7 +48,7 @@ public class Sone { private final UUID id; /** The name of this Sone. */ - private final String name; + private String name; /** The URI under which the Sone is stored in Freenet. */ private FreenetURI requestUri; @@ -76,32 +77,9 @@ public class Sone { * * @param id * The ID of this Sone - * @param name - * The name of the Sone - * @param requestUri - * The request URI of the Sone */ - public Sone(UUID id, String name, FreenetURI requestUri) { - this(id, name, requestUri, null); - } - - /** - * Creates a new Sone. - * - * @param id - * The ID of this Sone - * @param name - * The name of the Sone - * @param requestUri - * The request URI of the Sone - * @param insertUri - * The insert URI of the Sone - */ - public Sone(UUID id, String name, FreenetURI requestUri, FreenetURI insertUri) { - this.id = id; - this.name = name; - this.requestUri = requestUri; - this.insertUri = insertUri; + public Sone(String id) { + this.id = UUID.fromString(id); } // @@ -127,6 +105,18 @@ public class Sone { } /** + * Sets the name of this Sone. + * + * @param name + * The name of this Sone + * @return This sone (for method chaining) + */ + public Sone setName(String name) { + this.name = name; + return this; + } + + /** * Returns the request URI of this Sone. * * @return The request URI of this Sone @@ -136,6 +126,18 @@ public class Sone { } /** + * Sets the request URI of this Sone. + * + * @param requestUri + * The request URI of this Sone + * @return This Sone (for method chaining) + */ + public Sone setRequestUri(FreenetURI requestUri) { + this.requestUri = requestUri; + return this; + } + + /** * Returns the insert URI of this Sone. * * @return The insert URI of this Sone @@ -145,6 +147,18 @@ public class Sone { } /** + * Sets the insert URI of this Sone. + * + * @param insertUri + * The insert URI of this Sone + * @return This Sone (for method chaining) + */ + public Sone setInsertUri(FreenetURI insertUri) { + this.insertUri = insertUri; + return this; + } + + /** * Returns a copy of the profile. If you want to update values in the * profile of this Sone, update the values in the returned {@link Profile} * and use {@link #setProfile(Profile)} to change the profile in this Sone. @@ -178,6 +192,20 @@ public class Sone { } /** + * Sets all friends of this Sone at once. + * + * @param friends + * The new (and only) friends of this Sone + * @return This Sone (for method chaining) + */ + public synchronized Sone setFriends(Collection friends) { + friendSones.clear(); + friendSones.addAll(friends); + modificationCounter++; + return this; + } + + /** * Returns whether this Sone has the given Sone as a friend Sone. * * @param friendSone @@ -197,7 +225,7 @@ public class Sone { * @return This Sone (for method chaining) */ public synchronized Sone addFriend(Sone friendSone) { - if (friendSones.add(friendSone)) { + if (!friendSone.equals(this) && friendSones.add(friendSone)) { modificationCounter++; } return this; @@ -236,6 +264,20 @@ public class Sone { } /** + * 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 synchronized Sone setPosts(Collection posts) { + this.posts.clear(); + this.posts.addAll(posts); + modificationCounter++; + 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. * @@ -267,10 +309,25 @@ public class Sone { * @return All replies this Sone made */ public Set getReplies() { + logger.log(Level.FINEST, "Friends of %s: %s", new Object[] { this, friendSones }); return Collections.unmodifiableSet(replies); } /** + * Sets all replies of this Sone at once. + * + * @param replies + * The new (and only) replies of this Sone + * @return This Sone (for method chaining) + */ + public synchronized Sone setReplies(Collection replies) { + this.replies.clear(); + this.replies.addAll(replies); + modificationCounter++; + return this; + } + + /** * Adds a reply to this Sone. If the given reply was not made by this Sone, * nothing is added to this Sone. * @@ -324,7 +381,9 @@ public class Sone { /* TODO - check for the correct URI. */ long latestEdition = requestUri.getSuggestedEdition(); this.requestUri = this.requestUri.setSuggestedEdition(latestEdition); - this.insertUri = this.insertUri.setSuggestedEdition(latestEdition); + if (this.insertUri != null) { + this.insertUri = this.insertUri.setSuggestedEdition(latestEdition); + } } // @@ -355,7 +414,7 @@ public class Sone { */ @Override public String toString() { - return getClass().getName() + "[id=" + getId() + ",name=" + getName() + ",requestUri=" + getRequestUri() + ",insertUri=" + getInsertUri() + ",friends(" + friendSones.size() + "),posts(" + posts.size() + "),replies(" + replies.size() + ")]"; + return getClass().getName() + "[id=" + id + ",name=" + name + ",requestUri=" + requestUri + ",insertUri=" + insertUri + ",friends(" + friendSones.size() + "),posts(" + posts.size() + "),replies(" + replies.size() + ")]"; } }