X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdata%2FSone.java;h=2149a6895014149fcdad5adfa20fa221e27b7698;hb=e2dfce49f775ca0084ed326ad56fe77321cb3d2d;hp=8d6a3a1231f6b4c0005973be3a65e8ec7a68e12e;hpb=976728d46fb22ab599107b9e42e71feeebe89108;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 8d6a3a1..2149a68 100644 --- a/src/main/java/net/pterodactylus/sone/data/Sone.java +++ b/src/main/java/net/pterodactylus/sone/data/Sone.java @@ -59,8 +59,11 @@ public class Sone { /** The logger. */ private static final Logger logger = Logging.getLogger(Sone.class); + /** The ID of this Sone. */ + private final String id; + /** The identity of this Sone. */ - private final Identity identity; + private Identity identity; /** The URI under which the Sone is stored in Freenet. */ private volatile FreenetURI requestUri; @@ -99,11 +102,11 @@ public class Sone { /** * Creates a new Sone. * - * @param identity - * The identity of the Sone + * @param id + * The ID of the Sone */ - public Sone(Identity identity) { - this.identity = identity; + public Sone(String id) { + this.id = id; } // @@ -116,7 +119,7 @@ public class Sone { * @return The identity of this Sone */ public String getId() { - return identity.getId(); + return id; } /** @@ -129,12 +132,30 @@ public class Sone { } /** + * Sets the identity of this Sone. The {@link Identity#getId() ID} of the + * identity has to match this Sone’s {@link #getId()}. + * + * @param identity + * The identity of this Sone + * @return This Sone (for method chaining) + * @throws IllegalArgumentException + * if the ID of the identity does not match this Sone’s ID + */ + public Sone setIdentity(Identity identity) throws IllegalArgumentException { + if (!identity.getId().equals(id)) { + throw new IllegalArgumentException("Identity’s ID does not match Sone’s ID!"); + } + this.identity = identity; + return this; + } + + /** * Returns the name of this Sone. * * @return The name of this Sone */ public String getName() { - return identity.getNickname(); + return (identity != null) ? identity.getNickname() : null; } /** @@ -143,7 +164,7 @@ public class Sone { * @return The request URI of this Sone */ public FreenetURI getRequestUri() { - return requestUri.setSuggestedEdition(latestEdition); + return (requestUri != null) ? requestUri.setSuggestedEdition(latestEdition) : null; } /** @@ -162,7 +183,6 @@ public class Sone { logger.log(Level.WARNING, "Request URI %s tried to overwrite %s!", new Object[] { requestUri, this.requestUri }); return this; } - setLatestEdition(requestUri.getEdition()); return this; } @@ -172,7 +192,7 @@ public class Sone { * @return The insert URI of this Sone */ public FreenetURI getInsertUri() { - return insertUri.setSuggestedEdition(latestEdition); + return (insertUri != null) ? insertUri.setSuggestedEdition(latestEdition) : null; } /** @@ -191,7 +211,6 @@ public class Sone { logger.log(Level.WARNING, "Request URI %s tried to overwrite %s!", new Object[] { insertUri, this.insertUri }); return this; } - setLatestEdition(insertUri.getEdition()); return this; } @@ -272,17 +291,7 @@ public class Sone { */ public List getFriends() { List friends = new ArrayList(friendSones); - Collections.sort(friends, new Comparator() { - - @Override - public int compare(Sone leftSone, Sone rightSone) { - int diff = SoneAccessor.getNiceName(leftSone).compareToIgnoreCase(SoneAccessor.getNiceName(rightSone)); - if (diff != 0) { - return diff; - } - return (int) Math.max(Integer.MIN_VALUE, Math.min(Integer.MAX_VALUE, rightSone.getTime() - leftSone.getTime())); - } - }); + Collections.sort(friends, NICE_NAME_COMPARATOR); return friends; } @@ -343,15 +352,11 @@ public class Sone { * @return All posts of this Sone */ public List getPosts() { - 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())); - } - - }); + List sortedPosts; + synchronized (this) { + sortedPosts = new ArrayList(posts); + } + Collections.sort(sortedPosts, Post.TIME_COMPARATOR); return sortedPosts; } @@ -400,8 +405,7 @@ public class Sone { * * @return All replies this Sone made */ - public Set getReplies() { - logger.log(Level.FINEST, "Friends of %s: %s", new Object[] { this, friendSones }); + public synchronized Set getReplies() { return Collections.unmodifiableSet(replies); } @@ -598,7 +602,7 @@ public class Sone { */ @Override public int hashCode() { - return identity.getId().hashCode(); + return id.hashCode(); } /** @@ -609,7 +613,7 @@ public class Sone { if (!(object instanceof Sone)) { return false; } - return ((Sone) object).identity.getId().equals(identity.getId()); + return ((Sone) object).id.equals(id); } /** @@ -617,7 +621,7 @@ public class Sone { */ @Override public String toString() { - return getClass().getName() + "[identity=" + identity + ",requestUri=" + requestUri + ",insertUri=" + insertUri + ",friends(" + friendSones.size() + "),posts(" + posts.size() + "),replies(" + replies.size() + ")]"; + return getClass().getName() + "[identity=" + identity + ",requestUri=" + requestUri + ",insertUri(" + String.valueOf(insertUri).length() + "),friends(" + friendSones.size() + "),posts(" + posts.size() + "),replies(" + replies.size() + ")]"; } }