/*
- * Sone - IdentityManager.java - Copyright © 2010 David Roden
+ * Sone - IdentityManager.java - Copyright © 2010–2012 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
import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
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;
+import com.google.inject.Inject;
+import com.google.inject.name.Named;
+
/**
* The identity manager takes care of loading and storing identities, their
* contexts, and properties. It does so in a way that does not expose errors via
private final WebOfTrustConnector webOfTrustConnector;
/** The context to filter for. */
- private volatile String context;
+ private final String context;
/** The currently known own identities. */
/* synchronize access on syncObject. */
- private Map<String, OwnIdentity> currentOwnIdentities = new HashMap<String, OwnIdentity>();
+ private final Map<String, OwnIdentity> currentOwnIdentities = new HashMap<String, OwnIdentity>();
+
+ /** The last time all identities were loaded. */
+ private volatile long identitiesLastLoaded;
/**
* Creates a new identity manager.
*
* @param webOfTrustConnector
* The Web of Trust connector
+ * @param context
+ * The context to focus on (may be {@code null} to ignore
+ * contexts)
*/
- public IdentityManager(WebOfTrustConnector webOfTrustConnector) {
+ @Inject
+ public IdentityManager(WebOfTrustConnector webOfTrustConnector, @Named("WebOfTrustContext") String context) {
super("Sone Identity Manager", false);
this.webOfTrustConnector = webOfTrustConnector;
+ this.context = context;
}
//
//
/**
- * Sets the context to filter own identities and trusted identities for.
+ * Returns the last time all identities were loaded.
*
- * @param context
- * The context to filter for, or {@code null} to not filter
+ * @return The last time all identities were loaded (in milliseconds since
+ * Jan 1, 1970 UTC)
*/
- public void setContext(String context) {
- this.context = context;
+ public long getIdentitiesLastLoaded() {
+ return identitiesLastLoaded;
}
/**
Set<OwnIdentity> allOwnIdentities = getAllOwnIdentities();
for (OwnIdentity ownIdentity : allOwnIdentities) {
if (ownIdentity.getId().equals(id)) {
- return new DefaultOwnIdentity(webOfTrustConnector, ownIdentity);
+ return new DefaultOwnIdentity(ownIdentity);
}
}
return null;
* @return All own identities
*/
public Set<OwnIdentity> getAllOwnIdentities() {
- try {
- Set<OwnIdentity> ownIdentities = webOfTrustConnector.loadAllOwnIdentities();
- Map<String, OwnIdentity> newOwnIdentities = new HashMap<String, OwnIdentity>();
- for (OwnIdentity ownIdentity : ownIdentities) {
- newOwnIdentities.put(ownIdentity.getId(), ownIdentity);
- }
- checkOwnIdentities(newOwnIdentities);
- 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();
- }
+ return new HashSet<OwnIdentity>(currentOwnIdentities.values());
}
//
/* load trusted identities. */
for (OwnIdentity ownIdentity : ownIdentities) {
+ currentOwnIdentities.put(ownIdentity.getId(), ownIdentity);
+ Map<String, Identity> identities = new HashMap<String, Identity>();
+ currentIdentities.put(ownIdentity, identities);
+
+ /*
+ * if the context doesn’t match, skip getting trusted
+ * identities.
+ */
if ((context != null) && !ownIdentity.hasContext(context)) {
continue;
}
- currentOwnIdentities.put(ownIdentity.getId(), ownIdentity);
+ /* load trusted identities. */
Set<Identity> trustedIdentities = webOfTrustConnector.loadTrustedIdentities(ownIdentity, context);
- Map<String, Identity> identities = new HashMap<String, Identity>();
- currentIdentities.put(ownIdentity, identities);
for (Identity identity : trustedIdentities) {
identities.put(identity.getId(), identity);
}
}
identitiesLoaded = true;
+ identitiesLastLoaded = System.currentTimeMillis();
} catch (WebOfTrustException wote1) {
logger.log(Level.WARNING, "WoT has disappeared!", wote1);
}
for (OwnIdentity oldOwnIdentity : currentOwnIdentities.values()) {
OwnIdentity newOwnIdentity = newOwnIdentities.get(oldOwnIdentity.getId());
if ((newOwnIdentity == null) || ((context != null) && oldOwnIdentity.hasContext(context) && !newOwnIdentity.hasContext(context))) {
- identityListenerManager.fireOwnIdentityRemoved(new DefaultOwnIdentity(webOfTrustConnector, oldOwnIdentity));
+ identityListenerManager.fireOwnIdentityRemoved(new DefaultOwnIdentity(oldOwnIdentity));
}
}
for (OwnIdentity currentOwnIdentity : newOwnIdentities.values()) {
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));
+ identityListenerManager.fireOwnIdentityAdded(new DefaultOwnIdentity(currentOwnIdentity));
}
}