From: David ‘Bombe’ Roden Date: Fri, 11 Oct 2019 21:49:21 +0000 (+0200) Subject: 🎨 Replace IdentityLoader with Kotlin version X-Git-Tag: v81^2~113 X-Git-Url: https://git.pterodactylus.net/?a=commitdiff_plain;h=dab61bd939edba1be97054a141c6e26bbea6ef5c;p=Sone.git 🎨 Replace IdentityLoader with Kotlin version --- diff --git a/src/main/java/net/pterodactylus/sone/freenet/wot/IdentityLoader.java b/src/main/java/net/pterodactylus/sone/freenet/wot/IdentityLoader.java deleted file mode 100644 index b446e71..0000000 --- a/src/main/java/net/pterodactylus/sone/freenet/wot/IdentityLoader.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Sone - IdentityLoader.java - Copyright © 2013–2019 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 - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.pterodactylus.sone.freenet.wot; - -import java.util.*; -import java.util.logging.*; -import javax.annotation.*; - -import com.google.common.base.*; -import com.google.inject.*; -import net.pterodactylus.sone.freenet.plugin.*; - -import static java.util.concurrent.TimeUnit.*; - -/** - * Loads {@link OwnIdentity}s and the {@link Identity}s they trust. - */ -public class IdentityLoader { - - private final Logger logger = Logger.getLogger(IdentityLoader.class.getName()); - private final WebOfTrustConnector webOfTrustConnector; - @Nullable - private final Context context; - - public IdentityLoader(WebOfTrustConnector webOfTrustConnector) { - this(webOfTrustConnector, null); - } - - @Inject - public IdentityLoader(WebOfTrustConnector webOfTrustConnector, @Nullable Context context) { - this.webOfTrustConnector = webOfTrustConnector; - this.context = context; - } - - public Map> loadIdentities() throws WebOfTrustException { - Stopwatch stopwatch = Stopwatch.createStarted(); - Collection currentOwnIdentities = webOfTrustConnector.loadAllOwnIdentities(); - logger.fine("Loaded " + currentOwnIdentities.size() + " own identities in " + (stopwatch.elapsed(MILLISECONDS) / 1000.0) + "s."); - return loadTrustedIdentitiesForOwnIdentities(currentOwnIdentities); - } - - private Map> loadTrustedIdentitiesForOwnIdentities(Collection ownIdentities) throws PluginException { - Map> currentIdentities = new HashMap<>(); - - for (OwnIdentity ownIdentity : ownIdentities) { - if (identityDoesNotHaveTheCorrectContext(ownIdentity)) { - currentIdentities.put(ownIdentity, Collections.emptySet()); - continue; - } - - Stopwatch stopwatch = Stopwatch.createStarted(); - Set trustedIdentities = webOfTrustConnector.loadTrustedIdentities(ownIdentity, (context == null) ? null : context.getContext()); - logger.fine("Loaded " + trustedIdentities.size() + " identities for " + ownIdentity.getNickname() + " in " + (stopwatch.elapsed(MILLISECONDS) / 1000.0) + "s."); - currentIdentities.put(ownIdentity, trustedIdentities); - } - - return currentIdentities; - } - - private boolean identityDoesNotHaveTheCorrectContext(OwnIdentity ownIdentity) { - return (context != null) && !ownIdentity.hasContext(context.getContext()); - } - -} diff --git a/src/main/kotlin/net/pterodactylus/sone/freenet/wot/IdentityLoader.kt b/src/main/kotlin/net/pterodactylus/sone/freenet/wot/IdentityLoader.kt new file mode 100644 index 0000000..3fa87ba --- /dev/null +++ b/src/main/kotlin/net/pterodactylus/sone/freenet/wot/IdentityLoader.kt @@ -0,0 +1,59 @@ +/* + * Sone - IdentityLoader.java - Copyright © 2013–2019 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 + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package net.pterodactylus.sone.freenet.wot + +import com.google.common.base.* +import com.google.inject.* +import net.pterodactylus.sone.freenet.plugin.* +import java.util.concurrent.TimeUnit.* +import java.util.logging.* + +/** + * Loads [OwnIdentity]s and the [Identity]s they trust. + */ +class IdentityLoader @Inject constructor(private val webOfTrustConnector: WebOfTrustConnector, private val context: Context? = null) { + + private val logger: Logger = Logger.getLogger(IdentityLoader::class.java.name) + + @Throws(WebOfTrustException::class) + fun loadIdentities(): Map> = + time({ stopwatch, identities -> "Loaded ${identities.size} own identities in ${stopwatch.elapsed(MILLISECONDS) / 1000.0}s." }) { + webOfTrustConnector.loadAllOwnIdentities() + }.let(this::loadTrustedIdentitiesForOwnIdentities) + + @Throws(PluginException::class) + private fun loadTrustedIdentitiesForOwnIdentities(ownIdentities: Collection) = + ownIdentities.associateWith { ownIdentity -> + if (ownIdentity.doesNotHaveCorrectContext()) { + emptySet() + } else { + time({ stopwatch, identities -> "Loaded ${identities.size} identities for ${ownIdentity.nickname} in ${stopwatch.elapsed(MILLISECONDS) / 1000.0}s." }) { + webOfTrustConnector.loadTrustedIdentities(ownIdentity, context?.context) + } + } + } + + private fun OwnIdentity.doesNotHaveCorrectContext() = + context != null && !hasContext(context.context) + + private fun time(logMessage: (Stopwatch, Collection) -> String, loader: () -> Collection): Collection = + Stopwatch.createStarted().let { stopwatch -> + loader().also { logger.fine(logMessage(stopwatch, it)) } + } + +}