package net.pterodactylus.sone.freenet.wot;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
-import java.util.logging.Logger;
-
-import net.pterodactylus.util.logging.Logging;
/**
* A Web of Trust identity.
*/
public class DefaultIdentity implements Identity {
- /** The logger. */
- private static final Logger logger = Logging.getLogger(DefaultIdentity.class);
-
- /** The web of trust connector. */
- private final WebOfTrustConnector webOfTrustConnector;
-
/** The ID of the identity. */
private final String id;
private final Map<String, String> properties = Collections.synchronizedMap(new HashMap<String, String>());
/** Cached trust. */
- /* synchronize on itself. */
- private final Map<OwnIdentity, Trust> trustCache = new HashMap<OwnIdentity, Trust>();
+ private final Map<OwnIdentity, Trust> trustCache = Collections.synchronizedMap(new HashMap<OwnIdentity, Trust>());
/**
* Creates a new identity.
*
- * @param webOfTrustConnector
- * The web of trust connector
* @param id
* The ID of the identity
* @param nickname
* @param requestUri
* The request URI of the identity
*/
- public DefaultIdentity(WebOfTrustConnector webOfTrustConnector, String id, String nickname, String requestUri) {
- this.webOfTrustConnector = webOfTrustConnector;
+ public DefaultIdentity(String id, String nickname, String requestUri) {
this.id = id;
this.nickname = nickname;
this.requestUri = requestUri;
}
/**
- * Sets the contexts of this identity.
- * <p>
- * This method is only called by the {@link IdentityManager}.
- *
- * @param contexts
- * The contexts to set
+ * {@inheritDoc}
*/
- void setContextsPrivate(Set<String> contexts) {
- this.contexts.clear();
- this.contexts.addAll(contexts);
+ @Override
+ public boolean hasContext(String context) {
+ return contexts.contains(context);
}
/**
* {@inheritDoc}
*/
@Override
- public boolean hasContext(String context) {
- return contexts.contains(context);
+ public void setContexts(Collection<String> contexts) {
+ this.contexts.clear();
+ this.contexts.addAll(contexts);
}
/**
- * Adds the given context to this identity.
- * <p>
- * This method is only called by the {@link IdentityManager}.
- *
- * @param context
- * The context to add
+ * {@inheritDoc}
*/
- void addContextPrivate(String context) {
+ @Override
+ public void addContext(String context) {
contexts.add(context);
}
/**
- * Removes the given context from this identity.
- * <p>
- * This method is only called by the {@link IdentityManager}.
- *
- * @param context
- * The context to remove
+ * {@inheritDoc}
*/
- public void removeContextPrivate(String context) {
+ @Override
+ public void removeContext(String context) {
contexts.remove(context);
}
*/
@Override
public Map<String, String> getProperties() {
- synchronized (properties) {
- return Collections.unmodifiableMap(properties);
- }
+ return Collections.unmodifiableMap(properties);
}
/**
- * Sets all properties of this identity.
- * <p>
- * This method is only called by the {@link IdentityManager}.
- *
- * @param properties
- * The new properties of this identity
+ * {@inheritDoc}
*/
- void setPropertiesPrivate(Map<String, String> properties) {
- synchronized (this.properties) {
- this.properties.clear();
- this.properties.putAll(properties);
- }
+ @Override
+ public void setProperties(Map<String, String> properties) {
+ this.properties.clear();
+ this.properties.putAll(properties);
}
/**
- * Sets the property with the given name to the given value.
- * <p>
- * This method is only called by the {@link IdentityManager}.
- *
- * @param name
- * The name of the property
- * @param value
- * The value of the property
+ * {@inheritDoc}
*/
- void setPropertyPrivate(String name, String value) {
- synchronized (properties) {
- properties.put(name, value);
- }
+ @Override
+ public String getProperty(String name) {
+ return properties.get(name);
}
/**
* {@inheritDoc}
*/
@Override
- public String getProperty(String name) {
- synchronized (properties) {
- return properties.get(name);
- }
+ public void setProperty(String name, String value) {
+ properties.put(name, value);
}
/**
- * Removes the property with the given name.
- * <p>
- * This method is only called by the {@link IdentityManager}.
- *
- * @param name
- * The name of the property to remove
+ * {@inheritDoc}
*/
- void removePropertyPrivate(String name) {
- synchronized (properties) {
- properties.remove(name);
- }
+ @Override
+ public void removeProperty(String name) {
+ properties.remove(name);
}
/**
*/
@Override
public Trust getTrust(OwnIdentity ownIdentity) {
- synchronized (trustCache) {
- return trustCache.get(ownIdentity);
- }
+ return trustCache.get(ownIdentity);
}
/**
- * Sets the trust received for this identity by the given own identity.
- *
- * @param ownIdentity
- * The own identity that gives the trust
- * @param trust
- * The trust received for this identity
+ * {@inheritDoc}
*/
+ @Override
public void setTrust(OwnIdentity ownIdentity, Trust trust) {
- synchronized (trustCache) {
- trustCache.put(ownIdentity, trust);
- }
+ trustCache.put(ownIdentity, trust);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void removeTrust(OwnIdentity ownIdentity) {
+ trustCache.remove(ownIdentity);
}
//
package net.pterodactylus.sone.freenet.wot;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import net.pterodactylus.util.validation.Validation;
-
/**
* An own identity is an identity that the owner of the node has full control
* over.
*/
public class DefaultOwnIdentity extends DefaultIdentity implements OwnIdentity {
- /** The identity manager. */
- private final WebOfTrustConnector webOfTrustConnector;
-
/** The insert URI of the identity. */
private final String insertUri;
/**
* Creates a new own identity.
*
- * @param webOfTrustConnector
- * The identity manager
* @param id
* The ID of the identity
* @param nickname
* @param insertUri
* The insert URI of the identity
*/
- public DefaultOwnIdentity(WebOfTrustConnector webOfTrustConnector, String id, String nickname, String requestUri, String insertUri) {
- super(webOfTrustConnector, id, nickname, requestUri);
- this.webOfTrustConnector = webOfTrustConnector;
+ public DefaultOwnIdentity(String id, String nickname, String requestUri, String insertUri) {
+ super(id, nickname, requestUri);
this.insertUri = insertUri;
}
/**
* Copy constructor for an own identity.
*
- * @param webOfTrustConnector
- * The web of trust connector
* @param ownIdentity
* The own identity to copy
*/
- public DefaultOwnIdentity(WebOfTrustConnector webOfTrustConnector, OwnIdentity ownIdentity) {
- super(webOfTrustConnector, ownIdentity.getId(), ownIdentity.getNickname(), ownIdentity.getRequestUri());
- this.webOfTrustConnector = webOfTrustConnector;
+ public DefaultOwnIdentity(OwnIdentity ownIdentity) {
+ super(ownIdentity.getId(), ownIdentity.getNickname(), ownIdentity.getRequestUri());
this.insertUri = ownIdentity.getInsertUri();
- setContextsPrivate(ownIdentity.getContexts());
- setPropertiesPrivate(ownIdentity.getProperties());
+ setContexts(ownIdentity.getContexts());
+ setProperties(ownIdentity.getProperties());
}
//
return insertUri;
}
- /**
- * {@inheritDoc}
- */
- @Override
- public void addContext(String context) throws WebOfTrustException {
- webOfTrustConnector.addContext(this, context);
- addContextPrivate(context);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void removeContext(String context) throws WebOfTrustException {
- webOfTrustConnector.removeContext(this, context);
- removeContextPrivate(context);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void setContexts(Set<String> contexts) throws WebOfTrustException {
- for (String context : getContexts()) {
- if (!contexts.contains(context)) {
- webOfTrustConnector.removeContext(this, context);
- }
- }
- for (String context : contexts) {
- if (!getContexts().contains(context)) {
- webOfTrustConnector.addContext(this, context);
- }
- }
- setContextsPrivate(contexts);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void setProperty(String name, String value) throws WebOfTrustException {
- webOfTrustConnector.setProperty(this, name, value);
- setPropertyPrivate(name, value);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void removeProperty(String name) throws WebOfTrustException {
- webOfTrustConnector.removeProperty(this, name);
- removePropertyPrivate(name);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void setProperties(Map<String, String> properties) throws WebOfTrustException {
- for (Entry<String, String> oldProperty : getProperties().entrySet()) {
- if (!properties.containsKey(oldProperty.getKey())) {
- webOfTrustConnector.removeProperty(this, oldProperty.getKey());
- } else {
- webOfTrustConnector.setProperty(this, oldProperty.getKey(), properties.get(oldProperty.getKey()));
- }
- }
- for (Entry<String, String> newProperty : properties.entrySet()) {
- if (!getProperties().containsKey(newProperty.getKey())) {
- webOfTrustConnector.setProperty(this, newProperty.getKey(), newProperty.getValue());
- }
- }
- setPropertiesPrivate(properties);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void setTrust(Identity target, int trustValue, String comment) throws WebOfTrustException {
- Validation.begin().isNotNull("Trust Target", target).isNotNull("Trust Comment", comment).isLessOrEqual("Trust Value", trustValue, 100).isGreaterOrEqual("Trust Value", trustValue, -100).check();
- webOfTrustConnector.setTrust(this, target, trustValue, comment);
- if (target instanceof DefaultIdentity) {
- ((DefaultIdentity) target).setTrust(this, new Trust(trustValue, trustValue, 0));
- }
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void removeTrust(Identity target) throws WebOfTrustException {
- Validation.begin().isNotNull("Trust Target", target).check();
- webOfTrustConnector.removeTrust(this, target);
- if (target instanceof DefaultIdentity) {
- ((DefaultIdentity) target).setTrust(this, new Trust(null, null, null));
- }
- }
-
- //
- // OBJECT METHODS
- //
-
- /**
- * {@inheritDoc}
- */
- @Override
- public int hashCode() {
- /* The hash of DefaultIdentity is fine. */
- return super.hashCode();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean equals(Object object) {
- /* The ID of the superclass is still enough. */
- return super.equals(object);
- }
-
}
package net.pterodactylus.sone.freenet.wot;
+import java.util.Collection;
import java.util.Map;
import java.util.Set;
/**
* Interface for web of trust identities, defining all functions that can be
- * performed on an identity. The identity is the main entry point for identity
- * management.
+ * performed on an identity. An identity is only a container for identity data
+ * and will not perform any updating in the WebOfTrust plugin itself.
*
* @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
*/
public boolean hasContext(String context);
/**
+ * Adds the given context to this identity.
+ *
+ * @param context
+ * The context to add
+ */
+ public void addContext(String context);
+
+ /**
+ * Sets all contexts of this identity.
+ *
+ * @param contexts
+ * All contexts of the identity
+ */
+ public void setContexts(Collection<String> contexts);
+
+ /**
+ * Removes the given context from this identity.
+ *
+ * @param context
+ * The context to remove
+ */
+ public void removeContext(String context);
+
+ /**
* Returns all properties of this identity.
*
* @return All properties of this identity
public String getProperty(String name);
/**
+ * Sets the property with the given name to the given value.
+ *
+ * @param name
+ * The name of the property
+ * @param value
+ * The value of the property
+ */
+ public void setProperty(String name, String value);
+
+ /**
+ * Sets all properties of this identity.
+ *
+ * @param properties
+ * The new properties of this identity
+ */
+ public void setProperties(Map<String, String> properties);
+
+ /**
+ * Removes the property with the given name.
+ *
+ * @param name
+ * The name of the property to remove
+ */
+ public void removeProperty(String name);
+
+ /**
* Retrieves the trust that this identity receives from the given own
* identity. If this identity is not in the own identity’s trust tree, a
* {@link Trust} is returned that has all its elements set to {@code null}.
*/
public Trust getTrust(OwnIdentity ownIdentity);
+ /**
+ * Sets the trust given by an own identity to this identity.
+ *
+ * @param ownIdentity
+ * The own identity that gave trust to this identity
+ * @param trust
+ * The trust given by the given own identity
+ */
+ public void setTrust(OwnIdentity ownIdentity, Trust trust);
+
+ /**
+ * Removes trust assignment from the given own identity for this identity.
+ *
+ * @param ownIdentity
+ * The own identity that removed the trust assignment for this
+ * identity
+ */
+ public void removeTrust(OwnIdentity ownIdentity);
+
}
Set<OwnIdentity> allOwnIdentities = getAllOwnIdentities();
for (OwnIdentity ownIdentity : allOwnIdentities) {
if (ownIdentity.getId().equals(id)) {
- return new DefaultOwnIdentity(webOfTrustConnector, ownIdentity);
+ return new DefaultOwnIdentity(ownIdentity);
}
}
return null;
* {@inheritDoc}
*/
@Override
- @SuppressWarnings("synthetic-access")
public OwnIdentity map(OwnIdentity input) {
- return new DefaultOwnIdentity(webOfTrustConnector, input);
+ return new DefaultOwnIdentity(input);
}
});
} catch (WebOfTrustException wote1) {
for (OwnIdentity oldOwnIdentity : currentOwnIdentities.values()) {
OwnIdentity newOwnIdentity = newOwnIdentities.get(oldOwnIdentity.getId());
if ((newOwnIdentity == null) || ((context != null) && oldOwnIdentity.hasContext(context) && !newOwnIdentity.hasContext(context))) {
- identityListenerManager.fireOwnIdentityRemoved(new DefaultOwnIdentity(webOfTrustConnector, oldOwnIdentity));
+ identityListenerManager.fireOwnIdentityRemoved(new DefaultOwnIdentity(oldOwnIdentity));
}
}
for (OwnIdentity currentOwnIdentity : newOwnIdentities.values()) {
OwnIdentity oldOwnIdentity = currentOwnIdentities.get(currentOwnIdentity.getId());
if (((oldOwnIdentity == null) && ((context == null) || currentOwnIdentity.hasContext(context))) || ((oldOwnIdentity != null) && (context != null) && (!oldOwnIdentity.hasContext(context) && currentOwnIdentity.hasContext(context)))) {
- identityListenerManager.fireOwnIdentityAdded(new DefaultOwnIdentity(webOfTrustConnector, currentOwnIdentity));
+ identityListenerManager.fireOwnIdentityAdded(new DefaultOwnIdentity(currentOwnIdentity));
}
}
package net.pterodactylus.sone.freenet.wot;
-import java.util.Map;
-import java.util.Set;
/**
* Defines a local identity, an own identity.
*/
public String getInsertUri();
- /**
- * Adds the given context to this identity.
- * <p>
- * This method is only called by the {@link IdentityManager}.
- *
- * @param context
- * The context to add
- * @throws WebOfTrustException
- * if an error occurs
- */
- public void addContext(String context) throws WebOfTrustException;
-
- /**
- * Sets all contexts of this identity.
- * <p>
- * This method is only called by the {@link IdentityManager}.
- *
- * @param contexts
- * All contexts of the identity
- * @throws WebOfTrustException
- * if an error occurs
- */
- public void setContexts(Set<String> contexts) throws WebOfTrustException;
-
- /**
- * Removes the given context from this identity.
- * <p>
- * This method is only called by the {@link IdentityManager}.
- *
- * @param context
- * The context to remove
- * @throws WebOfTrustException
- * if an error occurs
- */
- public void removeContext(String context) throws WebOfTrustException;
-
- /**
- * Sets the property with the given name to the given value.
- *
- * @param name
- * The name of the property
- * @param value
- * The value of the property
- * @throws WebOfTrustException
- * if an error occurs
- */
- public void setProperty(String name, String value) throws WebOfTrustException;
-
- /**
- * Sets all properties of this identity.
- * <p>
- * This method is only called by the {@link IdentityManager}.
- *
- * @param properties
- * The new properties of this identity
- * @throws WebOfTrustException
- * if an error occurs
- */
- public void setProperties(Map<String, String> properties) throws WebOfTrustException;
-
- /**
- * Removes the property with the given name.
- * <p>
- * This method is only called by the {@link IdentityManager}.
- *
- * @param name
- * The name of the property to remove
- * @throws WebOfTrustException
- * if an error occurs
- */
- public void removeProperty(String name) throws WebOfTrustException;
-
- /**
- * Sets the trust for the given target identity.
- *
- * @param target
- * The target to set the trust for
- * @param trustValue
- * The new trust value (from {@code -100} or {@code 100})
- * @param comment
- * The comment for the trust assignment
- * @throws WebOfTrustException
- * if an error occurs
- */
- public void setTrust(Identity target, int trustValue, String comment) throws WebOfTrustException;
-
- /**
- * Removes any trust assignment for the given target identity.
- *
- * @param target
- * The targe to remove the trust assignment for
- * @throws WebOfTrustException
- * if an error occurs
- */
- public void removeTrust(Identity target) throws WebOfTrustException;
-
}
String requestUri = fields.get("RequestURI" + ownIdentityCounter);
String insertUri = fields.get("InsertURI" + ownIdentityCounter);
String nickname = fields.get("Nickname" + ownIdentityCounter);
- DefaultOwnIdentity ownIdentity = new DefaultOwnIdentity(this, id, nickname, requestUri, insertUri);
- ownIdentity.setContextsPrivate(parseContexts("Contexts" + ownIdentityCounter + ".", fields));
- ownIdentity.setPropertiesPrivate(parseProperties("Properties" + ownIdentityCounter + ".", fields));
+ DefaultOwnIdentity ownIdentity = new DefaultOwnIdentity(id, nickname, requestUri, insertUri);
+ ownIdentity.setContexts(parseContexts("Contexts" + ownIdentityCounter + ".", fields));
+ ownIdentity.setProperties(parseProperties("Properties" + ownIdentityCounter + ".", fields));
ownIdentities.add(ownIdentity);
}
return ownIdentities;
}
String nickname = fields.get("Nickname" + identityCounter);
String requestUri = fields.get("RequestURI" + identityCounter);
- DefaultIdentity identity = new DefaultIdentity(this, id, nickname, requestUri);
- identity.setContextsPrivate(parseContexts("Contexts" + identityCounter + ".", fields));
- identity.setPropertiesPrivate(parseProperties("Properties" + identityCounter + ".", fields));
+ DefaultIdentity identity = new DefaultIdentity(id, nickname, requestUri);
+ identity.setContexts(parseContexts("Contexts" + identityCounter + ".", fields));
+ identity.setProperties(parseProperties("Properties" + identityCounter + ".", fields));
identities.add(identity);
}
return identities;