X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdata%2FSone.java;h=21ffd6f6d908f8886b435e1bd9520c6d204aa24a;hb=44084738faad1c0c2609f332beef51feb148e66b;hp=fd1dedae02de8334707c4024710c4c819987bea5;hpb=8e73d78985dbf9b12257bcd1408d17cef98394c6;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 fd1deda..21ffd6f 100644 --- a/src/main/java/net/pterodactylus/sone/data/Sone.java +++ b/src/main/java/net/pterodactylus/sone/data/Sone.java @@ -24,10 +24,10 @@ import java.util.Comparator; import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; +import net.pterodactylus.sone.freenet.wot.Identity; import net.pterodactylus.sone.template.SoneAccessor; import net.pterodactylus.util.logging.Logging; import freenet.keys.FreenetURI; @@ -42,14 +42,25 @@ import freenet.keys.FreenetURI; */ public class Sone { + /** comparator that sorts Sones by their nice name. */ + public static final Comparator NICE_NAME_COMPARATOR = 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 leftSone.getId().compareToIgnoreCase(rightSone.getId()); + } + + }; + /** The logger. */ private static final Logger logger = Logging.getLogger(Sone.class); - /** A GUID for this Sone. */ - private final UUID id; - - /** The name of this Sone. */ - private volatile String name; + /** The identity of this Sone. */ + private final Identity identity; /** The URI under which the Sone is stored in Freenet. */ private volatile FreenetURI requestUri; @@ -58,6 +69,9 @@ public class Sone { /* This will be null for remote Sones! */ private volatile FreenetURI insertUri; + /** The latest edition of the Sone. */ + private volatile long latestEdition; + /** The time of the last inserted update. */ private volatile long time; @@ -85,11 +99,11 @@ public class Sone { /** * Creates a new Sone. * - * @param id - * The ID of this Sone + * @param identity + * The identity of the Sone */ - public Sone(String id) { - this.id = UUID.fromString(id); + public Sone(Identity identity) { + this.identity = identity; } // @@ -97,33 +111,30 @@ public class Sone { // /** - * Returns the ID of this Sone. + * Returns the identity of this Sone. * - * @return The ID of this Sone + * @return The identity of this Sone */ public String getId() { - return id.toString(); + return identity.getId(); } /** - * Returns the name of this Sone. + * Returns the identity of this Sone. * - * @return The name of this Sone + * @return The identity of this Sone */ - public String getName() { - return name; + public Identity getIdentity() { + return identity; } /** - * Sets the name of this Sone. + * Returns the name of this Sone. * - * @param name - * The name of this Sone - * @return This sone (for method chaining) + * @return The name of this Sone */ - public Sone setName(String name) { - this.name = name; - return this; + public String getName() { + return identity.getNickname(); } /** @@ -132,7 +143,7 @@ public class Sone { * @return The request URI of this Sone */ public FreenetURI getRequestUri() { - return requestUri; + return requestUri.setSuggestedEdition(latestEdition); } /** @@ -145,17 +156,13 @@ public class Sone { public Sone setRequestUri(FreenetURI requestUri) { if (this.requestUri == null) { this.requestUri = requestUri; - updateEditions(); return this; } if (!this.requestUri.equalsKeypair(requestUri)) { logger.log(Level.WARNING, "Request URI %s tried to overwrite %s!", new Object[] { requestUri, this.requestUri }); return this; } - long latestEdition = requestUri.getEdition(); - if ((latestEdition > this.requestUri.getEdition()) || (latestEdition > this.requestUri.getSuggestedEdition())) { - this.requestUri.setSuggestedEdition(latestEdition); - } + setLatestEdition(requestUri.getEdition()); return this; } @@ -165,7 +172,7 @@ public class Sone { * @return The insert URI of this Sone */ public FreenetURI getInsertUri() { - return insertUri; + return insertUri.setSuggestedEdition(latestEdition); } /** @@ -178,21 +185,42 @@ public class Sone { public Sone setInsertUri(FreenetURI insertUri) { if (this.insertUri == null) { this.insertUri = insertUri; - updateEditions(); return this; } if (!this.insertUri.equalsKeypair(insertUri)) { logger.log(Level.WARNING, "Request URI %s tried to overwrite %s!", new Object[] { insertUri, this.insertUri }); return this; } - long latestEdition = insertUri.getEdition(); - if ((latestEdition > this.insertUri.getEdition()) || (latestEdition > this.insertUri.getSuggestedEdition())) { - this.insertUri.setSuggestedEdition(latestEdition); - } + setLatestEdition(insertUri.getEdition()); return this; } /** + * Returns the latest edition of this Sone. + * + * @return The latest edition of this Sone + */ + public long getLatestEdition() { + return latestEdition; + } + + /** + * Sets the latest edition of this Sone. If the given latest edition is not + * greater than the current latest edition, the latest edition of this Sone + * is not changed. + * + * @param latestEdition + * The latest edition of this Sone + */ + public void setLatestEdition(long latestEdition) { + if (!(latestEdition > this.latestEdition)) { + logger.log(Level.INFO, "New latest edition %d is not greater than current latest edition %d!", new Object[] { latestEdition, this.latestEdition }); + return; + } + this.latestEdition = latestEdition; + } + + /** * Return the time of the last inserted update of this Sone. * * @return The time of the update (in milliseconds since Jan 1, 1970 UTC) @@ -561,41 +589,6 @@ public class Sone { this.modificationCounter = modificationCounter; } - /** - * Updates the suggested edition in both the request URI and the insert URI. - * - * @param latestEdition - * The latest edition to update the URIs to - */ - public void updateUris(long latestEdition) { - if ((requestUri != null) && (requestUri.getEdition() < latestEdition)) { - requestUri = requestUri.setSuggestedEdition(latestEdition); - } - if ((insertUri != null) && (insertUri.getEdition() < latestEdition)) { - insertUri = insertUri.setSuggestedEdition(latestEdition); - } - } - - // - // PRIVATE METHODS - // - - /** - * Updates the editions of the request URI and the insert URI (if latter is - * not {@code null}) with the greater edition of either one. - */ - private void updateEditions() { - long requestEdition = 0; - if (requestUri != null) { - requestEdition = requestUri.getEdition(); - } - long insertEdition = 0; - if (insertUri != null) { - insertEdition = insertUri.getEdition(); - } - updateUris(Math.max(requestEdition, insertEdition)); - } - // // OBJECT METHODS // @@ -605,7 +598,7 @@ public class Sone { */ @Override public int hashCode() { - return id.hashCode(); + return identity.getId().hashCode(); } /** @@ -616,7 +609,7 @@ public class Sone { if (!(object instanceof Sone)) { return false; } - return ((Sone) object).id.equals(id); + return ((Sone) object).identity.getId().equals(identity.getId()); } /** @@ -624,7 +617,7 @@ public class Sone { */ @Override public String toString() { - return getClass().getName() + "[id=" + id + ",name=" + name + ",requestUri=" + requestUri + ",insertUri=" + insertUri + ",friends(" + friendSones.size() + "),posts(" + posts.size() + "),replies(" + replies.size() + ")]"; + return getClass().getName() + "[identity=" + identity + ",requestUri=" + requestUri + ",insertUri=" + insertUri + ",friends(" + friendSones.size() + "),posts(" + posts.size() + "),replies(" + replies.size() + ")]"; } }