From 16a3fa75fb747e734a819113431dfb3eff1fa9bf Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Thu, 17 Oct 2019 20:57:38 +0200 Subject: [PATCH] =?utf8?q?=F0=9F=8E=A8=20Replaced=20IdentityManager=20with?= =?utf8?q?=20Kotlin=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../sone/freenet/wot/IdentityManager.java | 20 --- .../sone/freenet/wot/IdentityManagerImpl.java | 147 --------------------- .../sone/freenet/wot/IdentityManager.kt | 18 +++ .../sone/freenet/wot/IdentityManagerImpl.kt | 88 ++++++++++++ 4 files changed, 106 insertions(+), 167 deletions(-) delete mode 100644 src/main/java/net/pterodactylus/sone/freenet/wot/IdentityManager.java delete mode 100644 src/main/java/net/pterodactylus/sone/freenet/wot/IdentityManagerImpl.java create mode 100644 src/main/kotlin/net/pterodactylus/sone/freenet/wot/IdentityManager.kt create mode 100644 src/main/kotlin/net/pterodactylus/sone/freenet/wot/IdentityManagerImpl.kt diff --git a/src/main/java/net/pterodactylus/sone/freenet/wot/IdentityManager.java b/src/main/java/net/pterodactylus/sone/freenet/wot/IdentityManager.java deleted file mode 100644 index c0f6f1b..0000000 --- a/src/main/java/net/pterodactylus/sone/freenet/wot/IdentityManager.java +++ /dev/null @@ -1,20 +0,0 @@ -package net.pterodactylus.sone.freenet.wot; - -import java.util.Set; - -import net.pterodactylus.util.service.Service; - -import com.google.common.eventbus.EventBus; -import com.google.inject.ImplementedBy; - -/** - * Connects to a {@link WebOfTrustConnector} and sends identity events to an - * {@link EventBus}. - */ -@ImplementedBy(IdentityManagerImpl.class) -public interface IdentityManager extends Service { - - boolean isConnected(); - Set getAllOwnIdentities(); - -} diff --git a/src/main/java/net/pterodactylus/sone/freenet/wot/IdentityManagerImpl.java b/src/main/java/net/pterodactylus/sone/freenet/wot/IdentityManagerImpl.java deleted file mode 100644 index 6f46465..0000000 --- a/src/main/java/net/pterodactylus/sone/freenet/wot/IdentityManagerImpl.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Sone - IdentityManagerImpl.java - Copyright © 2010–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 static java.util.logging.Logger.getLogger; - -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -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.service.AbstractService; - -import com.google.common.collect.Sets; -import com.google.common.eventbus.EventBus; -import com.google.inject.Inject; -import com.google.inject.Singleton; - -/** - * 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 - * exceptions but it only logs them and tries to return sensible defaults. - *

- * It is also responsible for polling identities from the Web of Trust plugin - * and sending events to the {@link EventBus} when {@link Identity}s and - * {@link OwnIdentity}s are discovered or disappearing. - */ -@Singleton -public class IdentityManagerImpl extends AbstractService implements IdentityManager { - - /** The logger. */ - private static final Logger logger = getLogger(IdentityManagerImpl.class.getName()); - - /** The event bus. */ - private final EventBus eventBus; - - private final IdentityLoader identityLoader; - - /** The Web of Trust connector. */ - private final WebOfTrustConnector webOfTrustConnector; - - /** The currently known own identities. */ - private final Set currentOwnIdentities = Sets.newHashSet(); - - /** - * Creates a new identity manager. - * - * @param eventBus - * The event bus - * @param webOfTrustConnector - * The Web of Trust connector - */ - @Inject - public IdentityManagerImpl(EventBus eventBus, WebOfTrustConnector webOfTrustConnector, IdentityLoader identityLoader) { - super("Sone Identity Manager", false); - this.eventBus = eventBus; - this.webOfTrustConnector = webOfTrustConnector; - this.identityLoader = identityLoader; - } - - // - // ACCESSORS - // - - /** - * Returns whether the Web of Trust plugin could be reached during the last - * try. - * - * @return {@code true} if the Web of Trust plugin is connected, - * {@code false} otherwise - */ - @Override - public boolean isConnected() { - try { - webOfTrustConnector.ping(); - return true; - } catch (PluginException pe1) { - /* not connected, ignore. */ - return false; - } - } - - /** - * Returns all own identities. - * - * @return All own identities - */ - @Override - public Set getAllOwnIdentities() { - synchronized (currentOwnIdentities) { - return new HashSet<>(currentOwnIdentities); - } - } - - // - // SERVICE METHODS - // - - /** - * {@inheritDoc} - */ - @Override - protected void serviceRun() { - Map> oldIdentities = new HashMap<>(); - - while (!shouldStop()) { - try { - Map> currentIdentities = identityLoader.loadIdentities(); - - IdentityChangeEventSender identityChangeEventSender = new IdentityChangeEventSender(eventBus, oldIdentities); - identityChangeEventSender.detectChanges(currentIdentities); - - oldIdentities = currentIdentities; - - synchronized (currentOwnIdentities) { - currentOwnIdentities.clear(); - currentOwnIdentities.addAll(currentIdentities.keySet()); - } - } catch (WebOfTrustException wote1) { - logger.log(Level.WARNING, "WoT has disappeared!", wote1); - } - - /* wait a minute before checking again. */ - sleep(60 * 1000); - } - } - -} diff --git a/src/main/kotlin/net/pterodactylus/sone/freenet/wot/IdentityManager.kt b/src/main/kotlin/net/pterodactylus/sone/freenet/wot/IdentityManager.kt new file mode 100644 index 0000000..e90af91 --- /dev/null +++ b/src/main/kotlin/net/pterodactylus/sone/freenet/wot/IdentityManager.kt @@ -0,0 +1,18 @@ +package net.pterodactylus.sone.freenet.wot + +import net.pterodactylus.util.service.Service + +import com.google.common.eventbus.EventBus +import com.google.inject.ImplementedBy + +/** + * Connects to a [WebOfTrustConnector] and sends identity events to an + * [EventBus]. + */ +@ImplementedBy(IdentityManagerImpl::class) +interface IdentityManager : Service { + + val isConnected: Boolean + val allOwnIdentities: Set + +} diff --git a/src/main/kotlin/net/pterodactylus/sone/freenet/wot/IdentityManagerImpl.kt b/src/main/kotlin/net/pterodactylus/sone/freenet/wot/IdentityManagerImpl.kt new file mode 100644 index 0000000..b7a48dd --- /dev/null +++ b/src/main/kotlin/net/pterodactylus/sone/freenet/wot/IdentityManagerImpl.kt @@ -0,0 +1,88 @@ +/* + * Sone - IdentityManagerImpl.java - Copyright © 2010–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.eventbus.* +import com.google.inject.* +import net.pterodactylus.util.service.* +import java.util.logging.* +import java.util.logging.Logger.* + +/** + * 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 + * exceptions but it only logs them and tries to return sensible defaults. + * + * + * It is also responsible for polling identities from the Web of Trust plugin + * and sending events to the [EventBus] when [Identity]s and + * [OwnIdentity]s are discovered or disappearing. + */ +@Singleton +class IdentityManagerImpl @Inject constructor( + private val eventBus: EventBus, + private val webOfTrustConnector: WebOfTrustConnector, + private val identityLoader: IdentityLoader +) : AbstractService("Sone Identity Manager", false), IdentityManager { + + private val currentOwnIdentities = mutableSetOf() + + override val isConnected: Boolean + get() = notThrowing { webOfTrustConnector.ping() } + + override val allOwnIdentities: Set + get() = synchronized(currentOwnIdentities) { + currentOwnIdentities.toSet() + } + + override fun serviceRun() { + var oldIdentities = mapOf>() + + while (!shouldStop()) { + try { + val currentIdentities = identityLoader.loadIdentities() + + val identityChangeEventSender = IdentityChangeEventSender(eventBus, oldIdentities) + identityChangeEventSender.detectChanges(currentIdentities) + + oldIdentities = currentIdentities + + synchronized(currentOwnIdentities) { + currentOwnIdentities.clear() + currentOwnIdentities.addAll(currentIdentities.keys) + } + } catch (wote1: WebOfTrustException) { + logger.log(Level.WARNING, "WoT has disappeared!", wote1) + } + + /* wait a minute before checking again. */ + sleep((60 * 1000).toLong()) + } + } + +} + +private val logger: Logger = getLogger(IdentityManagerImpl::class.java.name) + +private fun notThrowing(action: () -> Unit): Boolean = + try { + action() + true + } catch (e: Exception) { + false + } -- 2.7.4