From 6ab999d8120ca28c4a1cb7370ae9e8ac61504556 Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Mon, 13 Dec 2010 21:47:13 +0100 Subject: [PATCH] Extract Identity interfaces, move functionality to identity classes. This commit also makes all non-local identity events depend on an own identity so that a real view on a web of trust is achieved. --- .../sone/freenet/wot/DefaultIdentity.java | 242 +++++++++++++++++++++ .../sone/freenet/wot/DefaultOwnIdentity.java | 138 ++++++++++++ .../pterodactylus/sone/freenet/wot/Identity.java | 190 +--------------- .../sone/freenet/wot/IdentityListener.java | 12 +- .../sone/freenet/wot/IdentityListenerManager.java | 24 +- .../sone/freenet/wot/IdentityManager.java | 207 ++++++------------ .../sone/freenet/wot/OwnIdentity.java | 102 ++++++--- .../sone/freenet/wot/WebOfTrustConnector.java | 12 +- 8 files changed, 562 insertions(+), 365 deletions(-) create mode 100644 src/main/java/net/pterodactylus/sone/freenet/wot/DefaultIdentity.java create mode 100644 src/main/java/net/pterodactylus/sone/freenet/wot/DefaultOwnIdentity.java diff --git a/src/main/java/net/pterodactylus/sone/freenet/wot/DefaultIdentity.java b/src/main/java/net/pterodactylus/sone/freenet/wot/DefaultIdentity.java new file mode 100644 index 0000000..288a99e --- /dev/null +++ b/src/main/java/net/pterodactylus/sone/freenet/wot/DefaultIdentity.java @@ -0,0 +1,242 @@ +/* + * Sone - DefaultIdentity.java - Copyright © 2010 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 + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +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; + +/** + * A Web of Trust identity. + * + * @author David ‘Bombe’ Roden + */ +public class DefaultIdentity implements Identity { + + /** The ID of the identity. */ + private final String id; + + /** The nickname of the identity. */ + private final String nickname; + + /** The request URI of the identity. */ + private final String requestUri; + + /** The contexts of the identity. */ + private final Set contexts = Collections.synchronizedSet(new HashSet()); + + /** The properties of the identity. */ + private final Map properties = Collections.synchronizedMap(new HashMap()); + + /** + * Creates a new identity. + * + * @param id + * The ID of the identity + * @param nickname + * The nickname of the identity + * @param requestUri + * The request URI of the identity + */ + public DefaultIdentity(String id, String nickname, String requestUri) { + this.id = id; + this.nickname = nickname; + this.requestUri = requestUri; + } + + // + // ACCESSORS + // + + /** + * {@inheritDoc} + */ + @Override + public String getId() { + return id; + } + + /** + * {@inheritDoc} + */ + @Override + public String getNickname() { + return nickname; + } + + /** + * {@inheritDoc} + */ + @Override + public String getRequestUri() { + return requestUri; + } + + /** + * {@inheritDoc} + */ + @Override + public Set getContexts() { + return Collections.unmodifiableSet(contexts); + } + + /** + * Sets the contexts of this identity. + *

+ * This method is only called by the {@link IdentityManager}. + * + * @param contexts + * The contexts to set + */ + void setContextsPrivate(Set contexts) { + this.contexts.clear(); + this.contexts.addAll(contexts); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean hasContext(String context) { + return contexts.contains(context); + } + + /** + * Adds the given context to this identity. + *

+ * This method is only called by the {@link IdentityManager}. + * + * @param context + * The context to add + */ + void addContextPrivate(String context) { + contexts.add(context); + } + + /** + * Removes the given context from this identity. + *

+ * This method is only called by the {@link IdentityManager}. + * + * @param context + * The context to remove + */ + public void removeContextPrivate(String context) { + contexts.remove(context); + } + + /** + * {@inheritDoc} + */ + @Override + public Map getProperties() { + synchronized (properties) { + return Collections.unmodifiableMap(properties); + } + } + + /** + * Sets all properties of this identity. + *

+ * This method is only called by the {@link IdentityManager}. + * + * @param properties + * The new properties of this identity + */ + void setPropertiesPrivate(Map properties) { + synchronized (this.properties) { + this.properties.clear(); + this.properties.putAll(properties); + } + } + + /** + * Sets the property with the given name to the given value. + *

+ * This method is only called by the {@link IdentityManager}. + * + * @param name + * The name of the property + * @param value + * The value of the property + */ + void setPropertyPrivate(String name, String value) { + synchronized (properties) { + properties.put(name, value); + } + } + + /** + * {@inheritDoc} + */ + @Override + public String getProperty(String name) { + synchronized (properties) { + return properties.get(name); + } + } + + /** + * Removes the property with the given name. + *

+ * This method is only called by the {@link IdentityManager}. + * + * @param name + * The name of the property to remove + */ + void removePropertyPrivate(String name) { + synchronized (properties) { + properties.remove(name); + } + } + + // + // OBJECT METHODS + // + + /** + * {@inheritDoc} + */ + @Override + public int hashCode() { + return id.hashCode(); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean equals(Object object) { + if (!(object instanceof DefaultIdentity)) { + return false; + } + DefaultIdentity identity = (DefaultIdentity) object; + return identity.id.equals(id); + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() { + return getClass().getSimpleName() + "[id=" + id + ",nickname=" + nickname + ",contexts=" + contexts + ",properties=" + properties + "]"; + } + +} diff --git a/src/main/java/net/pterodactylus/sone/freenet/wot/DefaultOwnIdentity.java b/src/main/java/net/pterodactylus/sone/freenet/wot/DefaultOwnIdentity.java new file mode 100644 index 0000000..01ddc12 --- /dev/null +++ b/src/main/java/net/pterodactylus/sone/freenet/wot/DefaultOwnIdentity.java @@ -0,0 +1,138 @@ +/* + * Sone - DefaultOwnIdentity.java - Copyright © 2010 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 + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.pterodactylus.sone.freenet.wot; + +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +/** + * An own identity is an identity that the owner of the node has full control + * over. + * + * @author David ‘Bombe’ Roden + */ +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 + * The nickname of the identity + * @param requestUri + * The request URI of the identity + * @param insertUri + * The insert URI of the identity + */ + public DefaultOwnIdentity(WebOfTrustConnector webOfTrustConnector, String id, String nickname, String requestUri, String insertUri) { + super(id, nickname, requestUri); + this.webOfTrustConnector = webOfTrustConnector; + this.insertUri = insertUri; + } + + // + // ACCESSORS + // + + /** + * {@inheritDoc} + */ + @Override + public String getInsertUri() { + return insertUri; + } + + /** + * {@inheritDoc} + */ + @Override + public void addContext(String context) throws WebOfTrustException { + webOfTrustConnector.addContext(this, context); + } + + /** + * {@inheritDoc} + */ + @Override + public void removeContext(String context) throws WebOfTrustException { + webOfTrustConnector.removeContext(this, context); + } + + /** + * {@inheritDoc} + */ + @Override + public void setContexts(Set 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); + } + } + } + + /** + * {@inheritDoc} + */ + @Override + public void setProperty(String name, String value) throws WebOfTrustException { + webOfTrustConnector.setProperty(this, name, value); + } + + /** + * {@inheritDoc} + */ + @Override + public void removeProperty(String name) throws WebOfTrustException { + webOfTrustConnector.removeProperty(this, name); + } + + /** + * {@inheritDoc} + */ + @Override + public void setProperties(Map properties) throws WebOfTrustException { + for (Entry 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 newProperty : properties.entrySet()) { + if (!getProperties().containsKey(newProperty.getKey())) { + webOfTrustConnector.setProperty(this, newProperty.getKey(), newProperty.getValue()); + } + } + } + +} diff --git a/src/main/java/net/pterodactylus/sone/freenet/wot/Identity.java b/src/main/java/net/pterodactylus/sone/freenet/wot/Identity.java index 5816b47..6df6447 100644 --- a/src/main/java/net/pterodactylus/sone/freenet/wot/Identity.java +++ b/src/main/java/net/pterodactylus/sone/freenet/wot/Identity.java @@ -17,102 +17,45 @@ 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; /** - * A Web of Trust identity. + * 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. * * @author David ‘Bombe’ Roden */ -public class Identity { - - /** The ID of the identity. */ - private final String id; - - /** The nickname of the identity. */ - private final String nickname; - - /** The request URI of the identity. */ - private final String requestUri; - - /** The contexts of the identity. */ - private final Set contexts = Collections.synchronizedSet(new HashSet()); - - /** The properties of the identity. */ - private final Map properties = Collections.synchronizedMap(new HashMap()); - - /** - * Creates a new identity. - * - * @param id - * The ID of the identity - * @param nickname - * The nickname of the identity - * @param requestUri - * The request URI of the identity - */ - public Identity(String id, String nickname, String requestUri) { - this.id = id; - this.nickname = nickname; - this.requestUri = requestUri; - } - - // - // ACCESSORS - // +public interface Identity { /** * Returns the ID of the identity. * * @return The ID of the identity */ - public String getId() { - return id; - } + public String getId(); /** * Returns the nickname of the identity. * * @return The nickname of the identity */ - public String getNickname() { - return nickname; - } + public String getNickname(); /** * Returns the request URI of the identity. * * @return The request URI of the identity */ - public String getRequestUri() { - return requestUri; - } + public String getRequestUri(); /** * Returns all contexts of this identity. * * @return All contexts of this identity */ - public Set getContexts() { - return Collections.unmodifiableSet(contexts); - } - - /** - * Sets all contexts of this identity. - *

- * This method is only called by the {@link IdentityManager}. - * - * @param contexts - * All contexts of the identity - */ - void setContexts(Set contexts) { - this.contexts.clear(); - this.contexts.addAll(contexts); - } + public Set getContexts(); /** * Returns whether this identity has the given context. @@ -122,75 +65,14 @@ public class Identity { * @return {@code true} if this identity has the given context, * {@code false} otherwise */ - public boolean hasContext(String context) { - return contexts.contains(context); - } - - /** - * Adds the given context to this identity. - *

- * This method is only called by the {@link IdentityManager}. - * - * @param context - * The context to add - */ - void addContext(String context) { - contexts.add(context); - } - - /** - * Removes the given context from this identity. - *

- * This method is only called by the {@link IdentityManager}. - * - * @param context - * The context to remove - */ - void removeContext(String context) { - contexts.remove(context); - } + public boolean hasContext(String context); /** * Returns all properties of this identity. * * @return All properties of this identity */ - public Map getProperties() { - synchronized (properties) { - return Collections.unmodifiableMap(properties); - } - } - - /** - * Sets all properties of this identity. - *

- * This method is only called by the {@link IdentityManager}. - * - * @param properties - * The new properties of this identity - */ - void setProperties(Map properties) { - synchronized (this.properties) { - this.properties.clear(); - this.properties.putAll(properties); - } - } - - /** - * Sets the property with the given name to the given value. - *

- * This method is only called by the {@link IdentityManager}. - * - * @param name - * The name of the property - * @param value - * The value of the property - */ - void setProperty(String name, String value) { - synchronized (properties) { - properties.put(name, value); - } - } + public Map getProperties(); /** * Returns the value of the property with the given name. @@ -199,56 +81,6 @@ public class Identity { * The name of the property * @return The value of the property */ - public String getProperty(String name) { - synchronized (properties) { - return properties.get(name); - } - } - - /** - * Removes the property with the given name. - *

- * This method is only called by the {@link IdentityManager}. - * - * @param name - * The name of the property to remove - */ - void removeProperty(String name) { - synchronized (properties) { - properties.remove(name); - } - } - - // - // OBJECT METHODS - // - - /** - * {@inheritDoc} - */ - @Override - public int hashCode() { - return id.hashCode(); - } - - /** - * {@inheritDoc} - */ - @Override - public boolean equals(Object object) { - if (!(object instanceof Identity)) { - return false; - } - Identity identity = (Identity) object; - return identity.id.equals(id); - } - - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return getClass().getSimpleName() + "[id=" + id + ",nickname=" + nickname + ",contexts=" + contexts + ",properties=" + properties + "]"; - } + public String getProperty(String name); } diff --git a/src/main/java/net/pterodactylus/sone/freenet/wot/IdentityListener.java b/src/main/java/net/pterodactylus/sone/freenet/wot/IdentityListener.java index 64ea61f..3721f49 100644 --- a/src/main/java/net/pterodactylus/sone/freenet/wot/IdentityListener.java +++ b/src/main/java/net/pterodactylus/sone/freenet/wot/IdentityListener.java @@ -47,25 +47,31 @@ public interface IdentityListener extends EventListener { /** * Notifies a listener that a new identity was discovered. * + * @param ownIdentity + * The own identity at the root of the trust tree * @param identity * The new identity */ - public void identityAdded(Identity identity); + public void identityAdded(OwnIdentity ownIdentity, Identity identity); /** * Notifies a listener that some properties of the identity have changed. * + * @param ownIdentity + * The own identity at the root of the trust tree * @param identity * The updated identity */ - public void identityUpdated(Identity identity); + public void identityUpdated(OwnIdentity ownIdentity, Identity identity); /** * Notifies a listener that an identity has gone away. * + * @param ownIdentity + * The own identity at the root of the trust tree * @param identity * The disappeared identity */ - public void identityRemoved(Identity identity); + public void identityRemoved(OwnIdentity ownIdentity, Identity identity); } diff --git a/src/main/java/net/pterodactylus/sone/freenet/wot/IdentityListenerManager.java b/src/main/java/net/pterodactylus/sone/freenet/wot/IdentityListenerManager.java index c08fd16..c6ea783 100644 --- a/src/main/java/net/pterodactylus/sone/freenet/wot/IdentityListenerManager.java +++ b/src/main/java/net/pterodactylus/sone/freenet/wot/IdentityListenerManager.java @@ -68,39 +68,45 @@ public class IdentityListenerManager extends AbstractListenerManager oldIdentities = Collections.emptyMap(); + Map> oldIdentities = Collections.emptyMap(); while (!shouldStop()) { - Map currentIdentities = new HashMap(); + Map> currentIdentities = new HashMap>(); Map currentOwnIdentities = new HashMap(); - /* get all identities with the wanted context from WoT. */ - Set ownIdentities; try { - ownIdentities = webOfTrustConnector.loadAllOwnIdentities(); + /* get all identities with the wanted context from WoT. */ + Set ownIdentities = webOfTrustConnector.loadAllOwnIdentities(); /* check for changes. */ for (OwnIdentity ownIdentity : ownIdentities) { @@ -272,76 +191,80 @@ public class IdentityManager extends AbstractService { checkOwnIdentities(currentOwnIdentities); /* now filter for context and get all identities. */ - currentOwnIdentities.clear(); for (OwnIdentity ownIdentity : ownIdentities) { if ((context != null) && !ownIdentity.hasContext(context)) { continue; } - currentOwnIdentities.put(ownIdentity.getId(), ownIdentity); - for (Identity identity : webOfTrustConnector.loadTrustedIdentities(ownIdentity, context)) { - currentIdentities.put(identity.getId(), identity); - } - } - /* find removed identities. */ - for (Identity oldIdentity : oldIdentities.values()) { - if (!currentIdentities.containsKey(oldIdentity.getId())) { - identityListenerManager.fireIdentityRemoved(oldIdentity); + Set trustedIdentities = webOfTrustConnector.loadTrustedIdentities(ownIdentity, context); + Map identities = new HashMap(); + currentIdentities.put(ownIdentity, identities); + for (Identity identity : trustedIdentities) { + identities.put(identity.getId(), identity); } - } - /* find new identities. */ - for (Identity currentIdentity : currentIdentities.values()) { - if (!oldIdentities.containsKey(currentIdentity.getId())) { - identityListenerManager.fireIdentityAdded(currentIdentity); + /* find new identities. */ + for (Identity currentIdentity : currentIdentities.get(ownIdentities).values()) { + if (!oldIdentities.containsKey(currentIdentity.getId())) { + identityListenerManager.fireIdentityAdded(ownIdentity, currentIdentity); + } } - } - /* check for changes in the contexts. */ - for (Identity oldIdentity : oldIdentities.values()) { - if (!currentIdentities.containsKey(oldIdentity.getId())) { - continue; - } - Identity newIdentity = currentIdentities.get(oldIdentity.getId()); - Set oldContexts = oldIdentity.getContexts(); - Set newContexts = newIdentity.getContexts(); - if (oldContexts.size() != newContexts.size()) { - identityListenerManager.fireIdentityUpdated(newIdentity); - continue; - } - for (String oldContext : oldContexts) { - if (!newContexts.contains(oldContext)) { - identityListenerManager.fireIdentityUpdated(newIdentity); - break; + /* find removed identities. */ + if (oldIdentities.containsKey(ownIdentity)) { + for (Identity oldIdentity : oldIdentities.get(ownIdentities).values()) { + if (!currentIdentities.containsKey(oldIdentity.getId())) { + identityListenerManager.fireIdentityRemoved(ownIdentity, oldIdentity); + } } - } - } - /* check for changes in the properties. */ - for (Identity oldIdentity : oldIdentities.values()) { - if (!currentIdentities.containsKey(oldIdentity.getId())) { - continue; - } - Identity newIdentity = currentIdentities.get(oldIdentity.getId()); - Map oldProperties = oldIdentity.getProperties(); - Map newProperties = newIdentity.getProperties(); - if (oldProperties.size() != newProperties.size()) { - identityListenerManager.fireIdentityUpdated(newIdentity); - continue; - } - for (Entry oldProperty : oldProperties.entrySet()) { - if (!newProperties.containsKey(oldProperty.getKey()) || !newProperties.get(oldProperty.getKey()).equals(oldProperty.getValue())) { - identityListenerManager.fireIdentityUpdated(newIdentity); - break; + /* check for changes in the contexts. */ + for (Identity oldIdentity : oldIdentities.get(ownIdentity).values()) { + if (!currentIdentities.get(ownIdentity).containsKey(oldIdentity.getId())) { + continue; + } + Identity newIdentity = currentIdentities.get(ownIdentity).get(oldIdentity.getId()); + Set oldContexts = oldIdentity.getContexts(); + Set newContexts = newIdentity.getContexts(); + if (oldContexts.size() != newContexts.size()) { + identityListenerManager.fireIdentityUpdated(ownIdentity, newIdentity); + continue; + } + for (String oldContext : oldContexts) { + if (!newContexts.contains(oldContext)) { + identityListenerManager.fireIdentityUpdated(ownIdentity, newIdentity); + break; + } + } + } + + /* check for changes in the properties. */ + for (Identity oldIdentity : oldIdentities.get(ownIdentity).values()) { + if (!currentIdentities.get(ownIdentity).containsKey(oldIdentity.getId())) { + continue; + } + Identity newIdentity = currentIdentities.get(ownIdentity).get(oldIdentity.getId()); + Map oldProperties = oldIdentity.getProperties(); + Map newProperties = newIdentity.getProperties(); + if (oldProperties.size() != newProperties.size()) { + identityListenerManager.fireIdentityUpdated(ownIdentity, newIdentity); + continue; + } + for (Entry oldProperty : oldProperties.entrySet()) { + if (!newProperties.containsKey(oldProperty.getKey()) || !newProperties.get(oldProperty.getKey()).equals(oldProperty.getValue())) { + identityListenerManager.fireIdentityUpdated(ownIdentity, newIdentity); + break; + } + } } } - } - /* remember the current set of identities. */ - oldIdentities = currentIdentities; + /* remember the current set of identities. */ + oldIdentities = currentIdentities; + } - } catch (PluginException pe1) { - logger.log(Level.WARNING, "WoT has disappeared!", pe1); + } catch (WebOfTrustException wote1) { + logger.log(Level.WARNING, "WoT has disappeared!", wote1); } /* wait a minute before checking again. */ diff --git a/src/main/java/net/pterodactylus/sone/freenet/wot/OwnIdentity.java b/src/main/java/net/pterodactylus/sone/freenet/wot/OwnIdentity.java index d9ec160..deaf25c 100644 --- a/src/main/java/net/pterodactylus/sone/freenet/wot/OwnIdentity.java +++ b/src/main/java/net/pterodactylus/sone/freenet/wot/OwnIdentity.java @@ -17,45 +17,95 @@ package net.pterodactylus.sone.freenet.wot; +import java.util.Map; +import java.util.Set; + /** - * An own identity is an identity that the owner of the node has full control - * over. + * Defines a local identity, an own identity. * * @author David ‘Bombe’ Roden */ -public class OwnIdentity extends Identity { +public interface OwnIdentity extends Identity { - /** The insert URI of the identity. */ - private final String insertUri; + /** + * Returns the insert URI of the identity. + * + * @return The insert URI of the identity + */ + public String getInsertUri(); /** - * Creates a new own identity. + * Adds the given context to this identity. + *

+ * This method is only called by the {@link IdentityManager}. * - * @param id - * The ID of the identity - * @param nickname - * The nickname of the identity - * @param requestUri - * The request URI of the identity - * @param insertUri - * The insert URI of the identity + * @param context + * The context to add + * @throws WebOfTrustException + * if an error occurs */ - public OwnIdentity(String id, String nickname, String requestUri, String insertUri) { - super(id, nickname, requestUri); - this.insertUri = insertUri; - } + public void addContext(String context) throws WebOfTrustException; - // - // ACCESSORS - // + /** + * Sets all contexts of this identity. + *

+ * 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 contexts) throws WebOfTrustException; /** - * Returns the insert URI of the identity. + * Removes the given context from this identity. + *

+ * This method is only called by the {@link IdentityManager}. * - * @return The insert URI of the identity + * @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. + *

+ * This method is only called by the {@link IdentityManager}. + * + * @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. + *

+ * 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 properties) throws WebOfTrustException; + + /** + * Removes the property with the given name. + *

+ * 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 String getInsertUri() { - return insertUri; - } + public void removeProperty(String name) throws WebOfTrustException; } diff --git a/src/main/java/net/pterodactylus/sone/freenet/wot/WebOfTrustConnector.java b/src/main/java/net/pterodactylus/sone/freenet/wot/WebOfTrustConnector.java index 61068f8..08f512c 100644 --- a/src/main/java/net/pterodactylus/sone/freenet/wot/WebOfTrustConnector.java +++ b/src/main/java/net/pterodactylus/sone/freenet/wot/WebOfTrustConnector.java @@ -90,9 +90,9 @@ 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.setContexts(parseContexts("Contexts" + ownIdentityCounter + ".", fields)); - ownIdentity.setProperties(parseProperties("Properties" + ownIdentityCounter + ".", fields)); + DefaultOwnIdentity ownIdentity = new DefaultOwnIdentity(this, id, nickname, requestUri, insertUri); + ownIdentity.setContextsPrivate(parseContexts("Contexts" + ownIdentityCounter + ".", fields)); + ownIdentity.setPropertiesPrivate(parseProperties("Properties" + ownIdentityCounter + ".", fields)); ownIdentities.add(ownIdentity); } return ownIdentities; @@ -136,9 +136,9 @@ public class WebOfTrustConnector implements ConnectorListener { } String nickname = fields.get("Nickname" + identityCounter); String requestUri = fields.get("RequestURI" + identityCounter); - Identity identity = new Identity(id, nickname, requestUri); - identity.setContexts(parseContexts("Contexts" + identityCounter + ".", fields)); - identity.setProperties(parseProperties("Properties" + identityCounter + ".", fields)); + DefaultIdentity identity = new DefaultIdentity(id, nickname, requestUri); + identity.setContextsPrivate(parseContexts("Contexts" + identityCounter + ".", fields)); + identity.setPropertiesPrivate(parseProperties("Properties" + identityCounter + ".", fields)); identities.add(identity); } return identities; -- 2.7.4