/*
- * 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
* @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!");
} 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!");
+ }
}
//
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 <bombe@freenetproject.org>
*/
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 <bombe@freenetproject.org>
+ */
+ 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;
*
* @author David ‘Bombe’ Roden <bombe@freenetproject.org>
*/
- public static class OwnIdentity {
-
- /** The identity’s identifier. */
- private final String identifier;
-
- /** The identity’s nickname. */
- private final String nickname;
-
- /** The identity’s request URI. */
- private final String requestUri;
+ public static class OwnIdentity extends Identity {
/** The identity’s insert URI. */
private final String insertUri;
* The insert URI of the identity
*/
public OwnIdentity(String identifier, String nickname, String requestUri, String insertUri) {
- this.identifier = identifier;
- this.nickname = nickname;
- this.requestUri = requestUri;
+ super(identifier, nickname, requestUri);
this.insertUri = insertUri;
}
/**
- * Returns the identifier of this identity.
- *
- * @return This identity’s identifier
- */
- public String getIdentifier() {
- return identifier;
- }
-
- /**
- * Returns the nickname of this identity.
- *
- * @return This identity’s nickname
- */
- public String getNickname() {
- return nickname;
- }
-
- /**
- * Returns the request URI of this identity.
- *
- * @return This identity’s request URI
- */
- public String getRequestUri() {
- return requestUri;
- }
-
- /**
* Returns the insert URI of this identity.
*
* @return This identity’s insert URI