Store the Sone ID instead of the Sone itself in the session.
[Sone.git] / src / main / java / net / pterodactylus / sone / data / Sone.java
index 5efcc06..4a73470 100644 (file)
 
 package net.pterodactylus.sone.data;
 
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
 import freenet.keys.FreenetURI;
 
 /**
@@ -27,6 +32,12 @@ import freenet.keys.FreenetURI;
  */
 public class Sone {
 
+       /** A GUID for this Sone. */
+       private final UUID id;
+
+       /** The name of this Sone. */
+       private final String name;
+
        /** The URI under which the Sone is stored in Freenet. */
        private final FreenetURI requestUri;
 
@@ -34,25 +45,38 @@ public class Sone {
        /* This will be null for remote Sones! */
        private final FreenetURI insertUri;
 
+       /** All friend Sones. */
+       private final Set<Sone> friendSones = new HashSet<Sone>();
+
        /**
         * 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
         */
-       public Sone(FreenetURI requestUri) {
-               this(requestUri, null);
+       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(FreenetURI requestUri, FreenetURI insertUri) {
+       public Sone(UUID id, String name, FreenetURI requestUri, FreenetURI insertUri) {
+               this.id = id;
+               this.name = name;
                this.requestUri = requestUri;
                this.insertUri = insertUri;
        }
@@ -62,11 +86,29 @@ public class Sone {
        //
 
        /**
+        * Returns the ID of this Sone.
+        *
+        * @return The ID of this Sone
+        */
+       public String getId() {
+               return id.toString();
+       }
+
+       /**
+        * Returns the name of this Sone.
+        *
+        * @return The name of this Sone
+        */
+       public String getName() {
+               return name;
+       }
+
+       /**
         * Returns the request URI of this Sone.
         *
         * @return The request URI of this Sone
         */
-       public FreenetURI requestUri() {
+       public FreenetURI getRequestUri() {
                return requestUri;
        }
 
@@ -75,8 +117,65 @@ public class Sone {
         *
         * @return The insert URI of this Sone
         */
-       public FreenetURI insertUri() {
+       public FreenetURI getInsertUri() {
                return insertUri;
        }
 
+       /**
+        * Returns all friend Sones of this Sone.
+        *
+        * @return The friend Sones of this Sone
+        */
+       public Set<Sone> getFriendSones() {
+               return Collections.unmodifiableSet(friendSones);
+       }
+
+       /**
+        * Returns whether this Sone has the given Sone as a friend Sone.
+        *
+        * @param friendSone
+        *            The friend Sone to check for
+        * @return {@code true} if this Sone has the given Sone as a friend,
+        *         {@code false} otherwise
+        */
+       public boolean hasFriendSone(Sone friendSone) {
+               return friendSones.contains(friendSone);
+       }
+
+       /**
+        * Adds the given Sone as a friend Sone.
+        *
+        * @param friendSone
+        *            The friend Sone to add
+        * @return This Sone (for method chaining)
+        */
+       public Sone addFriendSone(Sone friendSone) {
+               friendSones.add(friendSone);
+               return this;
+       }
+
+       /**
+        * Removes the given Sone as a friend Sone.
+        *
+        * @param friendSone
+        *            The friend Sone to remove
+        * @return This Sone (for method chaining)
+        */
+       public Sone removeFriendSone(Sone friendSone) {
+               friendSones.remove(friendSone);
+               return this;
+       }
+
+       //
+       // OBJECT METHODS
+       //
+
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       public int hashCode() {
+               return id.hashCode();
+       }
+
 }