Implement Identity.getContexts().
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Fri, 29 Oct 2010 20:08:25 +0000 (22:08 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Fri, 29 Oct 2010 20:08:25 +0000 (22:08 +0200)
src/main/java/net/pterodactylus/sone/freenet/wot/Identity.java
src/main/java/net/pterodactylus/sone/freenet/wot/OwnIdentity.java
src/main/java/net/pterodactylus/sone/freenet/wot/WebOfTrustConnector.java

index c3053ae..2909936 100644 (file)
@@ -30,6 +30,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;
 
@@ -48,6 +51,8 @@ public class Identity {
        /**
         * Creates a new identity.
         *
+        * @param webOfTrustConnector
+        *            The Web of Trust connector
         * @param id
         *            The ID of the identity
         * @param nickname
@@ -55,7 +60,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;
@@ -96,8 +102,30 @@ public class Identity {
         * Returns the contexts of the identity.
         *
         * @return The contexts of the identity
+        * @throws PluginException
+        *             if an error occured communicating with the Web of Trust
+        *             plugin
         */
-       public Set<String> getContexts() {
+       public Set<String> getContexts() throws PluginException {
+               return getContexts(false);
+       }
+
+       /**
+        * Returns the contexts of the identity.
+        *
+        * @param forceReload
+        *            {@code true} to force a reload of the contexts
+        * @return The contexts of the identity
+        * @throws PluginException
+        *             if an error occured communicating with the Web of Trust
+        *             plugin
+        */
+       public Set<String> getContexts(boolean forceReload) throws PluginException {
+               if (contexts.isEmpty() || forceReload) {
+                       Set<String> contexts = webOfTrustConnector.loadIdentityContexts(this);
+                       this.contexts.clear();
+                       this.contexts.addAll(contexts);
+               }
                return Collections.unmodifiableSet(contexts);
        }
 
index 626c4a8..cfcab65 100644 (file)
@@ -31,6 +31,8 @@ public class OwnIdentity extends Identity {
        /**
         * Creates a new own identity.
         *
+        * @param webOfTrustConnector
+        *            The Web of Trust connector
         * @param id
         *            The ID of the identity
         * @param nickname
@@ -40,8 +42,8 @@ public class OwnIdentity extends Identity {
         * @param insertUri
         *            The insert URI of the identity
         */
-       public OwnIdentity(String id, String nickname, String requestUri, String insertUri) {
-               super(id, nickname, requestUri);
+       public OwnIdentity(WebOfTrustConnector webOfTrustConnector, String id, String nickname, String requestUri, String insertUri) {
+               super(webOfTrustConnector, id, nickname, requestUri);
                this.insertUri = insertUri;
        }
 
index 65b7ce8..100241e 100644 (file)
@@ -87,12 +87,36 @@ public class WebOfTrustConnector implements ConnectorListener {
                        String requestUri = fields.get("RequestURI" + ownIdentityCounter);
                        String insertUri = fields.get("InsertURI" + ownIdentityCounter);
                        String nickname = fields.get("Nickname" + ownIdentityCounter);
-                       OwnIdentity ownIdentity = new OwnIdentity(id, nickname, requestUri, insertUri);
+                       OwnIdentity ownIdentity = new OwnIdentity(this, id, nickname, requestUri, insertUri);
                        ownIdentities.add(ownIdentity);
                }
                return ownIdentities;
        }
 
+       /**
+        * Loads the contexts of the given identity.
+        *
+        * @param identity
+        *            The identity to load the contexts for
+        * @return The contexts of the identity
+        * @throws PluginException
+        *             if an error occured talking to the Web of Trust plugin
+        */
+       public Set<String> loadIdentityContexts(Identity identity) throws PluginException {
+               Reply reply = performRequest("Identity", SimpleFieldSetConstructor.create().put("Message", "GetIdentity").put("TreeOwner", identity.getId()).put("Identity", identity.getId()).get());
+               SimpleFieldSet fields = reply.getFields();
+               int contextCounter = -1;
+               Set<String> contexts = new HashSet<String>();
+               while (true) {
+                       String context = fields.get("Context" + ++contextCounter);
+                       if (context == null) {
+                               break;
+                       }
+                       contexts.add(context);
+               }
+               return contexts;
+       }
+
        //
        // PRIVATE ACTIONS
        //