Don’t cache contexts.
[Sone.git] / src / main / java / net / pterodactylus / sone / freenet / wot / Identity.java
index c3053ae..60e24d6 100644 (file)
@@ -19,7 +19,6 @@ package net.pterodactylus.sone.freenet.wot;
 
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
@@ -30,6 +29,9 @@ import java.util.Set;
  */
 public class Identity {
 
+       /** The Web of Trust connector. */
+       protected final WebOfTrustConnector webOfTrustConnector;
+
        /** The ID of the identity. */
        private final String id;
 
@@ -39,15 +41,14 @@ public class Identity {
        /** The request URI of the identity. */
        private final String requestUri;
 
-       /** The contexts of the identity. */
-       protected final Set<String> contexts = Collections.synchronizedSet(new HashSet<String>());
-
        /** The properties of the identity. */
-       private final Map<String, String> properties = Collections.synchronizedMap(new HashMap<String, String>());
+       protected final Map<String, String> properties = Collections.synchronizedMap(new HashMap<String, String>());
 
        /**
         * Creates a new identity.
         *
+        * @param webOfTrustConnector
+        *            The Web of Trust connector
         * @param id
         *            The ID of the identity
         * @param nickname
@@ -55,7 +56,8 @@ public class Identity {
         * @param requestUri
         *            The request URI of the identity
         */
-       public Identity(String id, String nickname, String requestUri) {
+       public Identity(WebOfTrustConnector webOfTrustConnector, String id, String nickname, String requestUri) {
+               this.webOfTrustConnector = webOfTrustConnector;
                this.id = id;
                this.nickname = nickname;
                this.requestUri = requestUri;
@@ -93,12 +95,17 @@ public class Identity {
        }
 
        /**
-        * Returns the contexts of the identity.
+        * Returns the contexts of the identity. If the contexts have not been
+        * loaded yet, they will be loaded. If loading the contexts fails, an empty
+        * set is returned.
         *
         * @return The contexts of the identity
+        * @throws PluginException
+        *             if an error occured communicating with the Web of Trust
+        *             plugin
         */
-       public Set<String> getContexts() {
-               return Collections.unmodifiableSet(contexts);
+       public Set<String> getContexts() throws PluginException {
+               return webOfTrustConnector.loadIdentityContexts(this);
        }
 
        /**
@@ -108,9 +115,12 @@ public class Identity {
         *            The context to check for
         * @return {@code true} if this identity has the given context,
         *         {@code false} otherwise
+        * @throws PluginException
+        *             if an error occured communicating with the Web of Trust
+        *             plugin
         */
-       public boolean hasContext(String context) {
-               return contexts.contains(context);
+       public boolean hasContext(String context) throws PluginException {
+               return getContexts().contains(context);
        }
 
        /**
@@ -134,30 +144,6 @@ public class Identity {
                return properties.get(name);
        }
 
-       /**
-        * Sets the property with the given name to the given value.
-        *
-        * @param name
-        *            The name of the property to set
-        * @param value
-        *            The new value of the property
-        */
-       public void setProperty(String name, String value) {
-               properties.put(name, value);
-               /* TODO - set property. */
-       }
-
-       /**
-        * Removes the property with the given name.
-        *
-        * @param name
-        *            The name of the property to remove
-        */
-       public void removeProperty(String name) {
-               properties.remove(name);
-               /* TODO - remove property. */
-       }
-
        //
        // OBJECT METHODS
        //