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;
*/
public class Sone {
+ /** comparator that sorts Sones by their nice name. */
+ public static final Comparator<Sone> NICE_NAME_COMPARATOR = new Comparator<Sone>() {
+
+ @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;
/** All replies. */
private final Set<Reply> replies = Collections.synchronizedSet(new HashSet<Reply>());
- /** The IDs of all blocked Sones. */
- private final Set<String> blockedSoneIds = Collections.synchronizedSet(new HashSet<String>());
-
/** The IDs of all liked posts. */
private final Set<String> likedPostIds = Collections.synchronizedSet(new HashSet<String>());
/**
* 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;
}
//
//
/**
- * 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();
}
/**
}
/**
- * Returns the IDs of all blocked Sones. These Sones will not propagated
- * using the “known Sones” mechanism.
- *
- * @return The IDs of all blocked Sones
- */
- public Set<String> getBlockedSoneIds() {
- return Collections.unmodifiableSet(blockedSoneIds);
- }
-
- /**
- * Returns whether the given Sone ID is blocked.
- *
- * @param soneId
- * The Sone ID to check
- * @return {@code true} if the given Sone ID is blocked, {@code false}
- * otherwise
- */
- public boolean isSoneBlocked(String soneId) {
- return blockedSoneIds.contains(soneId);
- }
-
- /**
- * Adds the given ID to the list of blocked IDs.
- *
- * @param soneId
- * The Sone ID to block
- */
- public synchronized void addBlockedSoneId(String soneId) {
- if (blockedSoneIds.add(soneId)) {
- modificationCounter++;
- }
- }
-
- /**
- * Removes the given ID from the list of blocked IDs.
- *
- * @param soneId
- * The Sone ID to unblock
- */
- public synchronized void removeBlockedSoneId(String soneId) {
- if (blockedSoneIds.remove(soneId)) {
- modificationCounter++;
- }
- }
-
- /**
* Returns the IDs of all liked posts.
*
* @return All liked posts’ IDs
*/
@Override
public int hashCode() {
- return id.hashCode();
+ return identity.getId().hashCode();
}
/**
if (!(object instanceof Sone)) {
return false;
}
- return ((Sone) object).id.equals(id);
+ return ((Sone) object).identity.getId().equals(identity.getId());
}
/**
*/
@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() + ")]";
}
}