Fix added-or-removed detection by making it context-sensitive.
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sun, 13 Nov 2011 11:31:07 +0000 (12:31 +0100)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sun, 13 Nov 2011 11:31:07 +0000 (12:31 +0100)
src/main/java/net/pterodactylus/sone/freenet/wot/IdentityManager.java

index 3c97e55..f9af361 100644 (file)
@@ -295,14 +295,16 @@ public class IdentityManager extends AbstractService {
 
                        /* find removed own identities: */
                        for (OwnIdentity oldOwnIdentity : currentOwnIdentities.values()) {
-                               if (!newOwnIdentities.containsKey(oldOwnIdentity.getId())) {
+                               OwnIdentity newOwnIdentity = newOwnIdentities.get(oldOwnIdentity.getId());
+                               if ((newOwnIdentity == null) || ((context != null) && oldOwnIdentity.hasContext(context) && !newOwnIdentity.hasContext(context))) {
                                        identityListenerManager.fireOwnIdentityRemoved(oldOwnIdentity);
                                }
                        }
 
                        /* find added own identities. */
                        for (OwnIdentity currentOwnIdentity : newOwnIdentities.values()) {
-                               if (!currentOwnIdentities.containsKey(currentOwnIdentity.getId())) {
+                               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(currentOwnIdentity);
                                }
                        }