X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdata%2FSone.java;h=91b1c10f667b3327e232ec04944bb0b9662c2117;hb=f910b58e34b2b94931c609f22ecde49b232b881d;hp=a0f87b227d257ade161c5e01ce251da237eb479c;hpb=22788933e4a2b4ee39f298ebcefda5b93b0496fb;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 a0f87b2..91b1c10 100644
--- a/src/main/java/net/pterodactylus/sone/data/Sone.java
+++ b/src/main/java/net/pterodactylus/sone/data/Sone.java
@@ -30,6 +30,7 @@ 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 net.pterodactylus.util.validation.Validation;
import freenet.keys.FreenetURI;
/**
@@ -40,7 +41,7 @@ import freenet.keys.FreenetURI;
*
* @author David âBombeâ Roden
*/
-public class Sone {
+public class Sone implements Fingerprintable {
/** comparator that sorts Sones by their nice name. */
public static final Comparator NICE_NAME_COMPARATOR = new Comparator() {
@@ -81,6 +82,9 @@ public class Sone {
/** The profile of this Sone. */
private volatile Profile profile = new Profile();
+ /** The client used by the Sone. */
+ private volatile Client client;
+
/** All friend Sones. */
private final Set friendSones = Collections.synchronizedSet(new HashSet());
@@ -96,6 +100,9 @@ public class Sone {
/** The IDs of all liked replies. */
private final Set likedReplyIds = Collections.synchronizedSet(new HashSet());
+ /** The albums of this Sone. */
+ private final List albums = Collections.synchronizedList(new ArrayList());
+
/**
* Creates a new Sone.
*
@@ -281,6 +288,27 @@ public class Sone {
}
/**
+ * Returns the client used by this Sone.
+ *
+ * @return The client used by this Sone, or {@code null}
+ */
+ public Client getClient() {
+ return client;
+ }
+
+ /**
+ * Sets the client used by this Sone.
+ *
+ * @param client
+ * The client used by this Sone, or {@code null}
+ * @return This Sone (for method chaining)
+ */
+ public Sone setClient(Client client) {
+ this.client = client;
+ return this;
+ }
+
+ /**
* Returns all friend Sones of this Sone.
*
* @return The friend Sones of this Sone
@@ -557,13 +585,44 @@ public class Sone {
}
/**
- * Returns a fingerprint of this Sone. The fingerprint only depends on data
- * that is actually stored when a Sone is inserted. The fingerprint can be
- * used to detect changes in Sone data and can also be used to detect if
- * previous changes are reverted.
+ * Returns the albums of this Sone.
+ *
+ * @return The albums of this Sone
+ */
+ public List getAlbums() {
+ return Collections.unmodifiableList(albums);
+ }
+
+ /**
+ * Adds an album to this Sone.
*
- * @return The fingerprint of this Sone
+ * @param album
+ * The album to add
+ */
+ public synchronized void addAlbum(Album album) {
+ Validation.begin().isNotNull("Album", album).check().isEqual("Album Owner", album.getSone(), this).check();
+ albums.add(album);
+ }
+
+ /**
+ * Removes an album from this Sone.
+ *
+ * @param album
+ * The album to remove
+ */
+ public synchronized void removeAlbum(Album album) {
+ Validation.begin().isNotNull("Album", album).check().isEqual("Album Owner", album.getSone(), this).check();
+ albums.remove(album);
+ }
+
+ //
+ // FINGERPRINTABLE METHODS
+ //
+
+ /**
+ * {@inheritDoc}
*/
+ @Override
public synchronized String getFingerprint() {
StringBuilder fingerprint = new StringBuilder();
fingerprint.append("Profile(");
@@ -617,6 +676,12 @@ public class Sone {
}
fingerprint.append(')');
+ fingerprint.append("Albums(");
+ for (Album album : albums) {
+ fingerprint.append(album.getFingerprint());
+ }
+ fingerprint.append(')');
+
return fingerprint.toString();
}