Merge branch 'initial-sone-discovery' into next
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sun, 13 Nov 2011 12:08:26 +0000 (13:08 +0100)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sun, 13 Nov 2011 12:08:28 +0000 (13:08 +0100)
This resolves #251.

src/main/java/net/pterodactylus/sone/freenet/wot/DefaultOwnIdentity.java
src/main/java/net/pterodactylus/sone/freenet/wot/IdentityManager.java

index ab46b43..be2a3e7 100644 (file)
@@ -57,6 +57,22 @@ public class DefaultOwnIdentity extends DefaultIdentity implements OwnIdentity {
                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;
+               this.insertUri = ownIdentity.getInsertUri();
+               setContextsPrivate(ownIdentity.getContexts());
+               setPropertiesPrivate(ownIdentity.getProperties());
+       }
+
        //
        // ACCESSORS
        //
index 3c97e55..69af0ca 100644 (file)
@@ -26,6 +26,8 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import net.pterodactylus.sone.freenet.plugin.PluginException;
+import net.pterodactylus.util.collection.Mapper;
+import net.pterodactylus.util.collection.Mappers;
 import net.pterodactylus.util.logging.Logging;
 import net.pterodactylus.util.service.AbstractService;
 
@@ -140,7 +142,7 @@ public class IdentityManager extends AbstractService {
                Set<OwnIdentity> allOwnIdentities = getAllOwnIdentities();
                for (OwnIdentity ownIdentity : allOwnIdentities) {
                        if (ownIdentity.getId().equals(id)) {
-                               return ownIdentity;
+                               return new DefaultOwnIdentity(webOfTrustConnector, ownIdentity);
                        }
                }
                return null;
@@ -159,7 +161,17 @@ public class IdentityManager extends AbstractService {
                                newOwnIdentities.put(ownIdentity.getId(), ownIdentity);
                        }
                        checkOwnIdentities(newOwnIdentities);
-                       return ownIdentities;
+                       return Mappers.mappedSet(ownIdentities, new Mapper<OwnIdentity, OwnIdentity>() {
+
+                               /**
+                                * {@inheritDoc}
+                                */
+                               @Override
+                               @SuppressWarnings("synthetic-access")
+                               public OwnIdentity map(OwnIdentity input) {
+                                       return new DefaultOwnIdentity(webOfTrustConnector, input);
+                               }
+                       });
                } catch (WebOfTrustException wote1) {
                        logger.log(Level.WARNING, "Could not load all own identities!", wote1);
                        return Collections.emptySet();
@@ -295,15 +307,17 @@ public class IdentityManager extends AbstractService {
 
                        /* find removed own identities: */
                        for (OwnIdentity oldOwnIdentity : currentOwnIdentities.values()) {
-                               if (!newOwnIdentities.containsKey(oldOwnIdentity.getId())) {
-                                       identityListenerManager.fireOwnIdentityRemoved(oldOwnIdentity);
+                               OwnIdentity newOwnIdentity = newOwnIdentities.get(oldOwnIdentity.getId());
+                               if ((newOwnIdentity == null) || ((context != null) && oldOwnIdentity.hasContext(context) && !newOwnIdentity.hasContext(context))) {
+                                       identityListenerManager.fireOwnIdentityRemoved(new DefaultOwnIdentity(webOfTrustConnector, oldOwnIdentity));
                                }
                        }
 
                        /* find added own identities. */
                        for (OwnIdentity currentOwnIdentity : newOwnIdentities.values()) {
-                               if (!currentOwnIdentities.containsKey(currentOwnIdentity.getId())) {
-                                       identityListenerManager.fireOwnIdentityAdded(currentOwnIdentity);
+                               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));
                                }
                        }