Move plugin connector and related classes to its own package.
[Sone.git] / src / main / java / net / pterodactylus / sone / freenet / wot / IdentityManager.java
index 16789d1..fc9d651 100644 (file)
@@ -25,6 +25,7 @@ import java.util.Set;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import net.pterodactylus.sone.freenet.plugin.PluginException;
 import net.pterodactylus.util.logging.Logging;
 import net.pterodactylus.util.service.AbstractService;
 
@@ -263,6 +264,15 @@ public class IdentityManager extends AbstractService {
                        Set<OwnIdentity> ownIdentities;
                        try {
                                ownIdentities = webOfTrustConnector.loadAllOwnIdentities();
+
+                               /* check for changes. */
+                               for (OwnIdentity ownIdentity : ownIdentities) {
+                                       currentOwnIdentities.put(ownIdentity.getId(), ownIdentity);
+                               }
+                               checkOwnIdentities(currentOwnIdentities);
+
+                               /* now filter for context and get all identities. */
+                               currentOwnIdentities.clear();
                                for (OwnIdentity ownIdentity : ownIdentities) {
                                        if ((context != null) && !ownIdentity.hasContext(context)) {
                                                continue;
@@ -273,8 +283,6 @@ public class IdentityManager extends AbstractService {
                                        }
                                }
 
-                               checkOwnIdentities(currentOwnIdentities);
-
                                /* find removed identities. */
                                for (Identity oldIdentity : oldIdentities.values()) {
                                        if (!currentIdentities.containsKey(oldIdentity.getId())) {
@@ -289,6 +297,26 @@ public class IdentityManager extends AbstractService {
                                        }
                                }
 
+                               /* check for changes in the contexts. */
+                               for (Identity oldIdentity : oldIdentities.values()) {
+                                       if (!currentIdentities.containsKey(oldIdentity.getId())) {
+                                               continue;
+                                       }
+                                       Identity newIdentity = currentIdentities.get(oldIdentity.getId());
+                                       Set<String> oldContexts = oldIdentity.getContexts();
+                                       Set<String> newContexts = newIdentity.getContexts();
+                                       if (oldContexts.size() != newContexts.size()) {
+                                               identityListenerManager.fireIdentityUpdated(newIdentity);
+                                               continue;
+                                       }
+                                       for (String oldContext : oldContexts) {
+                                               if (!newContexts.contains(oldContext)) {
+                                                       identityListenerManager.fireIdentityUpdated(newIdentity);
+                                                       break;
+                                               }
+                                       }
+                               }
+
                                /* check for changes in the properties. */
                                for (Identity oldIdentity : oldIdentities.values()) {
                                        if (!currentIdentities.containsKey(oldIdentity.getId())) {