X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Ffreenet%2Fwot%2FDefaultIdentity.java;h=f00fa4ed40535c64f3f30184b06abd8fba6e6679;hb=c7d7acf5f7325f4b8ffa8c564275782601a79059;hp=288a99ef066b7c9d19e691cc17289f888558d353;hpb=6ab999d8120ca28c4a1cb7370ae9e8ac61504556;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/freenet/wot/DefaultIdentity.java b/src/main/java/net/pterodactylus/sone/freenet/wot/DefaultIdentity.java index 288a99e..f00fa4e 100644 --- a/src/main/java/net/pterodactylus/sone/freenet/wot/DefaultIdentity.java +++ b/src/main/java/net/pterodactylus/sone/freenet/wot/DefaultIdentity.java @@ -23,6 +23,15 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; +import net.pterodactylus.sone.freenet.plugin.PluginException; +import net.pterodactylus.util.cache.CacheException; +import net.pterodactylus.util.cache.CacheItem; +import net.pterodactylus.util.cache.DefaultCacheItem; +import net.pterodactylus.util.cache.MemoryCache; +import net.pterodactylus.util.cache.ValueRetriever; +import net.pterodactylus.util.cache.WritableCache; +import net.pterodactylus.util.collection.TimedMap; + /** * A Web of Trust identity. * @@ -30,6 +39,9 @@ import java.util.Set; */ public class DefaultIdentity implements Identity { + /** The web of trust connector. */ + private final WebOfTrustConnector webOfTrustConnector; + /** The ID of the identity. */ private final String id; @@ -45,9 +57,26 @@ public class DefaultIdentity implements Identity { /** The properties of the identity. */ private final Map properties = Collections.synchronizedMap(new HashMap()); + /** Cached trust. */ + private final WritableCache trustCache = new MemoryCache(new ValueRetriever() { + + @Override + @SuppressWarnings("synthetic-access") + public CacheItem retrieve(OwnIdentity ownIdentity) throws CacheException { + try { + return new DefaultCacheItem(webOfTrustConnector.getTrust(ownIdentity, DefaultIdentity.this)); + } catch (PluginException pe1) { + throw new CacheException("Could not retrieve trust for OwnIdentity: " + ownIdentity, pe1); + } + } + + }, new TimedMap>(60000)); + /** * Creates a new identity. * + * @param webOfTrustConnector + * The web of trust connector * @param id * The ID of the identity * @param nickname @@ -55,7 +84,8 @@ public class DefaultIdentity implements Identity { * @param requestUri * The request URI of the identity */ - public DefaultIdentity(String id, String nickname, String requestUri) { + public DefaultIdentity(WebOfTrustConnector webOfTrustConnector, String id, String nickname, String requestUri) { + this.webOfTrustConnector = webOfTrustConnector; this.id = id; this.nickname = nickname; this.requestUri = requestUri; @@ -207,6 +237,30 @@ public class DefaultIdentity implements Identity { } } + /** + * {@inheritDoc} + */ + @Override + public Trust getTrust(OwnIdentity ownIdentity) throws WebOfTrustException { + try { + return trustCache.get(ownIdentity); + } catch (CacheException ce1) { + throw new WebOfTrustException("Could not get trust for OwnIdentity: " + ownIdentity, ce1); + } + } + + /** + * Sets the trust received for this identity by the given own identity. + * + * @param ownIdentity + * The own identity that gives the trust + * @param trust + * The trust received for this identity + */ + void setTrustPrivate(OwnIdentity ownIdentity, Trust trust) { + trustCache.put(ownIdentity, trust); + } + // // OBJECT METHODS //