Rework own identity selection algorithm to always find the best result.
[WoTNS.git] / src / main / java / net / pterodactylus / wotns / main / Resolver.java
index 7ec725c..94a098e 100644 (file)
@@ -23,7 +23,10 @@ import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
+import net.pterodactylus.util.logging.Logging;
 import net.pterodactylus.util.object.Default;
 import net.pterodactylus.wotns.freenet.wot.Identity;
 import net.pterodactylus.wotns.freenet.wot.IdentityManager;
@@ -38,6 +41,8 @@ import freenet.keys.FreenetURI;
  */
 public class Resolver {
 
+       private static final Logger logger = Logging.getLogger(Resolver.class);
+
        private final IdentityManager identityManager;
 
        private String ownIdentityId;
@@ -46,6 +51,10 @@ public class Resolver {
                this.identityManager = identityManager;
        }
 
+       public String getOwnIdentityId() {
+               return ownIdentityId;
+       }
+
        public void setOwnIdentityId(String ownIdentityId) {
                this.ownIdentityId = ownIdentityId;
        }
@@ -81,23 +90,22 @@ public class Resolver {
                        identityName = shortName.substring(0, atSign);
                        keyStart = shortName.substring(atSign + 1);
                }
-               @SuppressWarnings("hiding")
                final OwnIdentity ownIdentity;
-               if (this.ownIdentityId == null) {
-                       Set<OwnIdentity> ownIdentities = identityManager.getAllOwnIdentities();
-                       if (!ownIdentities.isEmpty()) {
-                               ownIdentity = ownIdentities.iterator().next();
+               if (this.ownIdentityId != null) {
+                       if (identityManager.getOwnIdentity(this.ownIdentityId) != null) {
+                               ownIdentity = identityManager.getOwnIdentity(this.ownIdentityId);
                        } else {
-                               ownIdentity = null;
+                               ownIdentity = getFirstOwnIdentity();
                        }
                } else {
-                       ownIdentity = identityManager.getOwnIdentity(ownIdentityId);
+                       ownIdentity = getFirstOwnIdentity();
                }
                if (ownIdentity == null) {
+                       logger.log(Level.SEVERE, "Can not resolve “" + shortName + "” without a Web of Trust Identity!");
                        return null;
                }
                System.out.println("using own identity " + ownIdentity + " to resolve " + shortName);
-               Set<Identity> trustedIdentities = Default.forNull(identityManager.getTrustedIdentities(ownIdentity), Collections.<Identity>emptySet());
+               Set<Identity> trustedIdentities = Default.forNull(identityManager.getTrustedIdentities(ownIdentity), Collections.<Identity> emptySet());
                List<Identity> matchingIdentities = new ArrayList<Identity>();
                System.out.println("checking " + trustedIdentities);
                for (Identity identity : trustedIdentities) {
@@ -122,4 +130,12 @@ public class Resolver {
                return matchingIdentities.get(0);
        }
 
+       private OwnIdentity getFirstOwnIdentity() {
+               Set<OwnIdentity> ownIdentities = identityManager.getAllOwnIdentities();
+               if (!ownIdentities.isEmpty()) {
+                       return ownIdentities.iterator().next();
+               }
+               return null;
+       }
+
 }