Add Maven project description.
[jFCPlib.git] / src / net / pterodactylus / fcp / plugin / WebOfTrustPlugin.java
index 1949527..3e99b1e 100644 (file)
@@ -1,6 +1,5 @@
 /*
- * jFCPlib - WebOfTrustPlugin.java -
- * Copyright © 2009 David Roden
+ * jFCPlib - WebOfTrustPlugin.java - Copyright © 2009 David Roden
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -147,7 +146,7 @@ public class WebOfTrustPlugin {
         * @throws FcpException
         *             if an FCP error occurs
         */
-       public IdentityTrust getIdentityTrust(OwnIdentity ownIdentity, String identifier) throws IOException, FcpException {
+       public CalculatedTrust getIdentityTrust(OwnIdentity ownIdentity, String identifier) throws IOException, FcpException {
                Map<String, String> replies = fcpClient.sendPluginMessage("plugins.WoT.WoT", createParameters("Message", "GetIdentity", "TreeOwner", ownIdentity.getIdentifier(), "Identity", identifier));
                if (!replies.get("Message").equals("Identity")) {
                        throw new FcpException("WebOfTrust Plugin did not reply with “Identity” message!");
@@ -170,7 +169,242 @@ public class WebOfTrustPlugin {
                } catch (NumberFormatException nfe1) {
                        /* ignore. */
                }
-               return new IdentityTrust(trust, score, rank);
+               return new CalculatedTrust(trust, score, rank);
+       }
+
+       /**
+        * Adds a new identity by its request URI.
+        *
+        * @param requestUri
+        *            The request URI of the identity to add
+        * @return The added identity
+        * @throws IOException
+        *             if an I/O error occurs
+        * @throws FcpException
+        *             if an FCP error occurs
+        */
+       public Identity addIdentity(String requestUri) throws IOException, FcpException {
+               Map<String, String> replies = fcpClient.sendPluginMessage("plugins.WoT.WoT", createParameters("Message", "AddIdentity", "RequestURI", requestUri));
+               if (!replies.get("Message").equals("IdentityAdded")) {
+                       throw new FcpException("WebOfTrust Plugin did not reply with “IdentityAdded” message!");
+               }
+               String identifier = replies.get("ID");
+               String nickname = replies.get("Nickname");
+               return new Identity(identifier, nickname, requestUri);
+       }
+
+       /**
+        * Returns identities by the given score.
+        *
+        * @param ownIdentity
+        *            The own identity
+        * @param context
+        *            The context to get the identities for
+        * @param positive
+        *            {@code null} to return neutrally trusted identities, {@code
+        *            true} to return positively trusted identities, {@code false}
+        *            for negatively trusted identities
+        * @return The trusted identites
+        * @throws IOException
+        *             if an I/O error occurs
+        * @throws FcpException
+        *             if an FCP error occurs
+        */
+       public Set<Identity> getIdentitesByScore(OwnIdentity ownIdentity, String context, Boolean positive) throws IOException, FcpException {
+               Map<String, String> replies = fcpClient.sendPluginMessage("plugins.WoT.WoT", createParameters("Message", "GetIdentitiesByScore", "TreeOwner", ownIdentity.getIdentifier(), "Context", context, "Selection", ((positive == null) ? "0" : (positive ? "+" : "-"))));
+               if (!replies.get("Message").equals("Identities")) {
+                       throw new FcpException("WebOfTrust Plugin did not reply with “Identities” message!");
+               }
+               Set<Identity> identities = new HashSet<Identity>();
+               for (int identityIndex = 1; replies.containsKey("Identity" + identityIndex); identityIndex++) {
+                       String identifier = replies.get("Identity" + identityIndex);
+                       String nickname = replies.get("Nickname" + identityIndex);
+                       String requestUri = replies.get("RequestURI" + identityIndex);
+                       identities.add(new Identity(identifier, nickname, requestUri));
+               }
+               return identities;
+       }
+
+       /**
+        * Returns the identities that trust the given identity.
+        *
+        * @param identity
+        *            The identity to get the trusters for
+        * @param context
+        *            The context to get the trusters for
+        * @return The identities and their trust values
+        * @throws IOException
+        *             if an I/O error occurs
+        * @throws FcpException
+        *             if an FCP error occurs
+        */
+       public Map<Identity, IdentityTrust> getTrusters(Identity identity, String context) throws IOException, FcpException {
+               Map<String, String> replies = fcpClient.sendPluginMessage("plugins.WoT.WoT", createParameters("Message", "GetTrusters", "Identity", identity.getIdentifier(), "Context", context));
+               if (!replies.get("Message").equals("Identities")) {
+                       throw new FcpException("WebOfTrust Plugin did not reply with “Identities” message!");
+               }
+               Map<Identity, IdentityTrust> identityTrusts = new HashMap<Identity, IdentityTrust>();
+               for (int identityIndex = 1; replies.containsKey("Identity" + identityIndex); identityIndex++) {
+                       String identifier = replies.get("Identity" + identityIndex);
+                       String nickname = replies.get("Nickname" + identityIndex);
+                       String requestUri = replies.get("RequestURI" + identityIndex);
+                       byte trust = Byte.parseByte(replies.get("Value" + identityIndex));
+                       String comment = replies.get("Comment" + identityIndex);
+                       identityTrusts.put(new Identity(identifier, nickname, requestUri), new IdentityTrust(trust, comment));
+               }
+               return identityTrusts;
+       }
+
+       /**
+        * Returns the identities that given identity trusts.
+        *
+        * @param identity
+        *            The identity to get the trustees for
+        * @param context
+        *            The context to get the trustees for
+        * @return The identities and their trust values
+        * @throws IOException
+        *             if an I/O error occurs
+        * @throws FcpException
+        *             if an FCP error occurs
+        */
+       public Map<Identity, IdentityTrust> getTrustees(Identity identity, String context) throws IOException, FcpException {
+               Map<String, String> replies = fcpClient.sendPluginMessage("plugins.WoT.WoT", createParameters("Message", "GetTrustees", "Identity", identity.getIdentifier(), "Context", context));
+               if (!replies.get("Message").equals("Identities")) {
+                       throw new FcpException("WebOfTrust Plugin did not reply with “Identities” message!");
+               }
+               Map<Identity, IdentityTrust> identityTrusts = new HashMap<Identity, IdentityTrust>();
+               for (int identityIndex = 1; replies.containsKey("Identity" + identityIndex); identityIndex++) {
+                       String identifier = replies.get("Identity" + identityIndex);
+                       String nickname = replies.get("Nickname" + identityIndex);
+                       String requestUri = replies.get("RequestURI" + identityIndex);
+                       byte trust = Byte.parseByte(replies.get("Value" + identityIndex));
+                       String comment = replies.get("Comment" + identityIndex);
+                       identityTrusts.put(new Identity(identifier, nickname, requestUri), new IdentityTrust(trust, comment));
+               }
+               return identityTrusts;
+       }
+
+       /**
+        * Sets the trust given to the given identify by the given own identity.
+        *
+        * @param ownIdentity
+        *            The identity that gives the trust
+        * @param identity
+        *            The identity that receives the trust
+        * @param trust
+        *            The trust value (ranging from {@code -100} to {@code 100}
+        * @param comment
+        *            The comment for setting the trust
+        * @throws IOException
+        *             if an I/O error occurs
+        * @throws FcpException
+        *             if an FCP error occurs
+        */
+       public void setTrust(OwnIdentity ownIdentity, Identity identity, byte trust, String comment) throws IOException, FcpException {
+               Map<String, String> replies = fcpClient.sendPluginMessage("plugins.WoT.WoT", createParameters("Message", "SetTrust", "Truster", ownIdentity.getIdentifier(), "Trustee", identity.getIdentifier(), "Value", String.valueOf(trust), "Comment", comment));
+               if (!replies.get("Message").equals("TrustSet")) {
+                       throw new FcpException("WebOfTrust Plugin did not reply with “TrustSet” message!");
+               }
+       }
+
+       /**
+        * Adds the given context to the given identity.
+        *
+        * @param ownIdentity
+        *            The identity to add the context to
+        * @param context
+        *            The context to add
+        * @throws IOException
+        *             if an I/O error occurs
+        * @throws FcpException
+        *             if an FCP error occurs
+        */
+       public void addContext(OwnIdentity ownIdentity, String context) throws IOException, FcpException {
+               Map<String, String> replies = fcpClient.sendPluginMessage("plugins.WoT.WoT", createParameters("Message", "AddContext", "Identity", ownIdentity.getIdentifier(), "Context", context));
+               if (!replies.get("Message").equals("ContextAdded")) {
+                       throw new FcpException("WebOfTrust Plugin did not reply with “ContextAdded” message!");
+               }
+       }
+
+       /**
+        * Removes the given context from the given identity.
+        *
+        * @param ownIdentity
+        *            The identity to remove the context from
+        * @param context
+        *            The context to remove
+        * @throws IOException
+        *             if an I/O error occurs
+        * @throws FcpException
+        *             if an FCP error occurs
+        */
+       public void removeContext(OwnIdentity ownIdentity, String context) throws IOException, FcpException {
+               Map<String, String> replies = fcpClient.sendPluginMessage("plugins.WoT.WoT", createParameters("Message", "RemoveContext", "Identity", ownIdentity.getIdentifier(), "Context", context));
+               if (!replies.get("Message").equals("ContextRemoved")) {
+                       throw new FcpException("WebOfTrust Plugin did not reply with “ContextRemoved” message!");
+               }
+       }
+
+       /**
+        * Sets the given property for the given identity.
+        *
+        * @param ownIdentity
+        *            The identity to set a property for
+        * @param property
+        *            The name of the property to set
+        * @param value
+        *            The value of the property to set
+        * @throws IOException
+        *             if an I/O error occurs
+        * @throws FcpException
+        *             if an FCP error occurs
+        */
+       public void setProperty(OwnIdentity ownIdentity, String property, String value) throws IOException, FcpException {
+               Map<String, String> replies = fcpClient.sendPluginMessage("plugins.WoT.WoT", createParameters("Message", "SetProperty", "Identity", ownIdentity.getIdentifier(), "Property", property, "Value", value));
+               if (!replies.get("Message").equals("PropertyAdded")) {
+                       throw new FcpException("WebOfTrust Plugin did not reply with “PropertyAdded” message!");
+               }
+       }
+
+       /**
+        * Returns the value of the given property for the given identity.
+        *
+        * @param ownIdentity
+        *            The identity to get a property for
+        * @param property
+        *            The name of the property to get
+        * @return The value of the property
+        * @throws IOException
+        *             if an I/O error occurs
+        * @throws FcpException
+        *             if an FCP error occurs
+        */
+       public String getProperty(OwnIdentity ownIdentity, String property) throws IOException, FcpException {
+               Map<String, String> replies = fcpClient.sendPluginMessage("plugins.WoT.WoT", createParameters("Message", "GetProperty", "Identity", ownIdentity.getIdentifier(), "Property", property));
+               if (!replies.get("Message").equals("PropertyValue")) {
+                       throw new FcpException("WebOfTrust Plugin did not reply with “PropertyValue” message!");
+               }
+               return replies.get("Property");
+       }
+
+       /**
+        * Removes the given property from the given identity.
+        *
+        * @param ownIdentity
+        *            The identity to remove a property from
+        * @param property
+        *            The name of the property to remove
+        * @throws IOException
+        *             if an I/O error occurs
+        * @throws FcpException
+        *             if an FCP error occurs
+        */
+       public void removeProperty(OwnIdentity ownIdentity, String property) throws IOException, FcpException {
+               Map<String, String> replies = fcpClient.sendPluginMessage("plugins.WoT.WoT", createParameters("Message", "RemoveProperty", "Identity", ownIdentity.getIdentifier(), "Property", property));
+               if (!replies.get("Message").equals("PropertyRemoved")) {
+                       throw new FcpException("WebOfTrust Plugin did not reply with “PropertyRemoved” message!");
+               }
        }
 
        //
@@ -254,65 +488,131 @@ public class WebOfTrustPlugin {
                        return requestUri;
                }
 
+               /**
+                * {@inheritDoc}
+                */
+               @Override
+               public boolean equals(Object obj) {
+                       if ((obj == null) || (obj.getClass() != this.getClass())) {
+                               return false;
+                       }
+                       Identity identity = (Identity) obj;
+                       return identifier.equals(identity.identifier);
+               }
+
+               /**
+                * {@inheritDoc}
+                */
+               @Override
+               public int hashCode() {
+                       return identifier.hashCode();
+               }
+
        }
 
        /**
-        * Container that stores the trust given to an identity.
+        * Container for the trust given from one identity to another.
         *
         * @author David ‘Bombe’ Roden &lt;bombe@freenetproject.org&gt;
         */
        public static class IdentityTrust {
 
-               /** The identity’s trust value. */
+               /** The trust given to the identity. */
+               private final byte trust;
+
+               /** The command for the trust value. */
+               private final String comment;
+
+               /**
+                * Creates a new identity trust container.
+                *
+                * @param trust
+                *            The trust given to the identity
+                * @param comment
+                *            The comment for the trust value
+                */
+               public IdentityTrust(byte trust, String comment) {
+                       this.trust = trust;
+                       this.comment = comment;
+               }
+
+               /**
+                * Returns the trust value given to the identity.
+                *
+                * @return The trust value
+                */
+               public byte getTrust() {
+                       return trust;
+               }
+
+               /**
+                * Returns the comment for the trust value.
+                *
+                * @return The comment for the trust value
+                */
+               public String getComment() {
+                       return comment;
+               }
+
+       }
+
+       /**
+        * Container that stores the trust that is calculated by taking all trustees
+        * and their trust lists into account.
+        *
+        * @author David ‘Bombe’ Roden &lt;bombe@freenetproject.org&gt;
+        */
+       public static class CalculatedTrust {
+
+               /** The calculated trust value. */
                private final Byte trust;
 
-               /** The identity’s score value. */
+               /** The calculated score value. */
                private final Integer score;
 
-               /** The identity’s rank. */
+               /** The calculated rank. */
                private final Integer rank;
 
                /**
-                * Creates a new identity trust container.
+                * Creates a new calculated trust container.
                 *
                 * @param trust
-                *            The trust value of the identity
+                *            The calculated trust value
                 * @param score
-                *            The score value of the identity
+                *            The calculated score value
                 * @param rank
-                *            The rank of the identity
+                *            The calculated rank of the
                 */
-               public IdentityTrust(Byte trust, Integer score, Integer rank) {
+               public CalculatedTrust(Byte trust, Integer score, Integer rank) {
                        this.trust = trust;
                        this.score = score;
                        this.rank = rank;
                }
 
                /**
-                * Returns the trust value of this identity.
+                * Returns the calculated trust value.
                 *
-                * @return This identity’s trust value, or {@code null} if this
-                *         identity’s trust value is not known
+                * @return The calculated trust value, or {@code null} if the trust
+                *         value is not known
                 */
                public Byte getTrust() {
                        return trust;
                }
 
                /**
-                * Returns the score value of this identity.
+                * Returns the calculated score value.
                 *
-                * @return This identity’s score value, or {@code null} if this
-                *         identity’s score value is not known
+                * @return The calculated score value, or {@code null} if the score
+                *         value is not known
                 */
                public Integer getScore() {
                        return score;
                }
 
                /**
-                * Returns the rank of this identity.
+                * Returns the calculated rank.
                 *
-                * @return This identity’s rank, or {@code null} if this identity’s rank
-                *         is not known
+                * @return The calculated rank, or {@code null} if the rank is not known
                 */
                public Integer getRank() {
                        return rank;