Move dependency injection configuration closer to where it’s useful.
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Fri, 29 Aug 2014 16:26:20 +0000 (18:26 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Fri, 29 Aug 2014 16:26:20 +0000 (18:26 +0200)
16 files changed:
src/main/java/net/pterodactylus/sone/core/Core.java
src/main/java/net/pterodactylus/sone/core/FreenetInterface.java
src/main/java/net/pterodactylus/sone/core/WebOfTrustUpdater.java
src/main/java/net/pterodactylus/sone/core/WebOfTrustUpdaterImpl.java
src/main/java/net/pterodactylus/sone/database/Database.java
src/main/java/net/pterodactylus/sone/database/PostBuilderFactory.java
src/main/java/net/pterodactylus/sone/database/PostProvider.java
src/main/java/net/pterodactylus/sone/database/PostReplyBuilderFactory.java
src/main/java/net/pterodactylus/sone/database/SoneProvider.java
src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java
src/main/java/net/pterodactylus/sone/fcp/FcpInterface.java
src/main/java/net/pterodactylus/sone/freenet/plugin/PluginConnector.java
src/main/java/net/pterodactylus/sone/freenet/wot/IdentityManager.java
src/main/java/net/pterodactylus/sone/freenet/wot/IdentityManagerImpl.java
src/main/java/net/pterodactylus/sone/freenet/wot/WebOfTrustConnector.java
src/main/java/net/pterodactylus/sone/main/SonePlugin.java

index 87f858b..1229448 100644 (file)
@@ -101,6 +101,7 @@ import com.google.common.collect.Multimaps;
 import com.google.common.eventbus.EventBus;
 import com.google.common.eventbus.Subscribe;
 import com.google.inject.Inject;
+import com.google.inject.Singleton;
 
 import freenet.keys.FreenetURI;
 
@@ -109,6 +110,7 @@ import freenet.keys.FreenetURI;
  *
  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
  */
+@Singleton
 public class Core extends AbstractService implements SoneProvider, PostProvider, PostReplyProvider {
 
        /** The logger. */
index 9ccf5fc..d4640f8 100644 (file)
@@ -39,6 +39,7 @@ import com.db4o.ObjectContainer;
 import com.google.common.base.Function;
 import com.google.common.eventbus.EventBus;
 import com.google.inject.Inject;
+import com.google.inject.Singleton;
 
 import freenet.client.ClientMetadata;
 import freenet.client.FetchException;
@@ -66,6 +67,7 @@ import freenet.support.io.ArrayBucket;
  *
  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
  */
+@Singleton
 public class FreenetInterface {
 
        /** The logger. */
index c3eb24b..908bd96 100644 (file)
@@ -4,11 +4,14 @@ import net.pterodactylus.sone.freenet.wot.Identity;
 import net.pterodactylus.sone.freenet.wot.OwnIdentity;
 import net.pterodactylus.util.service.Service;
 
+import com.google.inject.ImplementedBy;
+
 /**
  * Updates WebOfTrust identity data.
  *
  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
  */
+@ImplementedBy(WebOfTrustUpdaterImpl.class)
 public interface WebOfTrustUpdater extends Service {
 
        void setTrust(OwnIdentity truster, Identity trustee, Integer score, String comment);
index 05deb29..8a6d083 100644 (file)
@@ -35,6 +35,7 @@ import net.pterodactylus.util.service.AbstractService;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.inject.Inject;
+import com.google.inject.Singleton;
 
 /**
  * Updates WebOfTrust identity data in a background thread because communicating
@@ -42,6 +43,7 @@ import com.google.inject.Inject;
  *
  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
  */
+@Singleton
 public class WebOfTrustUpdaterImpl extends AbstractService implements WebOfTrustUpdater {
 
        /** The logger. */
index ee7a9af..051e442 100644 (file)
 
 package net.pterodactylus.sone.database;
 
+import net.pterodactylus.sone.database.memory.MemoryDatabase;
+
 import com.google.common.util.concurrent.Service;
+import com.google.inject.ImplementedBy;
 
 /**
  * Database for Sone data. This interface combines the various provider, store,
@@ -26,6 +29,7 @@ import com.google.common.util.concurrent.Service;
  *
  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
  */
+@ImplementedBy(MemoryDatabase.class)
 public interface Database extends Service, PostDatabase, PostReplyDatabase, AlbumDatabase, ImageDatabase {
 
        /**
index b89ae28..e74a6bd 100644 (file)
 
 package net.pterodactylus.sone.database;
 
+import net.pterodactylus.sone.database.memory.MemoryDatabase;
+
+import com.google.inject.ImplementedBy;
+
 /**
  * Factory for {@link PostBuilder}s.
  *
  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
  */
+@ImplementedBy(MemoryDatabase.class)
 public interface PostBuilderFactory {
 
        /**
index 740373e..7d5437a 100644 (file)
@@ -20,14 +20,17 @@ package net.pterodactylus.sone.database;
 import java.util.Collection;
 
 import net.pterodactylus.sone.data.Post;
+import net.pterodactylus.sone.database.memory.MemoryDatabase;
 
 import com.google.common.base.Optional;
+import com.google.inject.ImplementedBy;
 
 /**
  * Interface for objects that can provide {@link Post}s by their ID.
  *
  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
  */
+@ImplementedBy(MemoryDatabase.class)
 public interface PostProvider {
 
        /**
index 7fd4ae1..cac3e30 100644 (file)
 
 package net.pterodactylus.sone.database;
 
+import net.pterodactylus.sone.database.memory.MemoryDatabase;
+
+import com.google.inject.ImplementedBy;
+
 /**
  * Factory for {@link PostReplyBuilder}s.
  *
  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
  */
+@ImplementedBy(MemoryDatabase.class)
 public interface PostReplyBuilderFactory {
 
        /**
index 993804f..f36eaba 100644 (file)
@@ -19,15 +19,18 @@ package net.pterodactylus.sone.database;
 
 import java.util.Collection;
 
+import net.pterodactylus.sone.core.Core;
 import net.pterodactylus.sone.data.Sone;
 
 import com.google.common.base.Optional;
+import com.google.inject.ImplementedBy;
 
 /**
  * Interface for objects that can provide {@link Sone}s by their ID.
  *
  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
  */
+@ImplementedBy(Core.class)
 public interface SoneProvider {
 
        /**
index 67ea671..237d321 100644 (file)
@@ -58,12 +58,14 @@ import com.google.common.collect.SortedSetMultimap;
 import com.google.common.collect.TreeMultimap;
 import com.google.common.util.concurrent.AbstractService;
 import com.google.inject.Inject;
+import com.google.inject.Singleton;
 
 /**
  * Memory-based {@link PostDatabase} implementation.
  *
  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
  */
+@Singleton
 public class MemoryDatabase extends AbstractService implements Database {
 
        /** The lock. */
index 18c017b..551dc4f 100644 (file)
@@ -41,6 +41,7 @@ import freenet.support.api.Bucket;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.inject.Inject;
+import com.google.inject.Singleton;
 
 /**
  * Implementation of an FCP interface for other clients or plugins to
@@ -48,6 +49,7 @@ import com.google.inject.Inject;
  *
  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
  */
+@Singleton
 public class FcpInterface {
 
        /**
index 47330e8..56ac807 100644 (file)
@@ -21,6 +21,7 @@ import net.pterodactylus.sone.freenet.plugin.event.ReceivedReplyEvent;
 
 import com.google.common.eventbus.EventBus;
 import com.google.inject.Inject;
+import com.google.inject.Singleton;
 
 import freenet.pluginmanager.FredPluginTalker;
 import freenet.pluginmanager.PluginNotFoundException;
@@ -35,6 +36,7 @@ import freenet.support.api.Bucket;
  *
  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
  */
+@Singleton
 public class PluginConnector implements FredPluginTalker {
 
        /** The event bus. */
index 99d757b..d3ba606 100644 (file)
@@ -5,6 +5,7 @@ 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
@@ -12,6 +13,7 @@ import com.google.common.eventbus.EventBus;
  *
  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
  */
+@ImplementedBy(IdentityManagerImpl.class)
 public interface IdentityManager extends Service {
 
        boolean isConnected();
index 3946c04..f568aa4 100644 (file)
@@ -32,6 +32,7 @@ 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
@@ -44,6 +45,7 @@ import com.google.inject.Inject;
  *
  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
  */
+@Singleton
 public class IdentityManagerImpl extends AbstractService implements IdentityManager {
 
        /** The logger. */
index 7938a09..4996c46 100644 (file)
@@ -35,6 +35,7 @@ import com.google.common.base.Optional;
 import com.google.common.collect.MapMaker;
 import com.google.common.eventbus.Subscribe;
 import com.google.inject.Inject;
+import com.google.inject.Singleton;
 
 import freenet.support.SimpleFieldSet;
 import freenet.support.api.Bucket;
@@ -44,6 +45,7 @@ import freenet.support.api.Bucket;
  *
  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
  */
+@Singleton
 public class WebOfTrustConnector {
 
        /** The logger. */
index ce2cd40..ae34c1c 100644 (file)
@@ -224,25 +224,12 @@ public class SonePlugin implements FredPlugin, FredPluginFCP, FredPluginL10n, Fr
 
                        @Override
                        protected void configure() {
-                               bind(Core.class).in(Singleton.class);
-                               bind(MemoryDatabase.class).in(Singleton.class);
                                bind(EventBus.class).toInstance(eventBus);
                                bind(Configuration.class).toInstance(startConfiguration);
-                               bind(FreenetInterface.class).in(Singleton.class);
-                               bind(PluginConnector.class).in(Singleton.class);
                                Context context = new Context("Sone");
                                bind(Context.class).toInstance(context);
                                bind(getOptionalContextTypeLiteral()).toInstance(of(context));
-                               bind(WebOfTrustConnector.class).in(Singleton.class);
-                               bind(WebOfTrustUpdater.class).to(WebOfTrustUpdaterImpl.class).in(Singleton.class);
-                               bind(IdentityManager.class).to(IdentityManagerImpl.class).in(Singleton.class);
                                bind(SonePlugin.class).toInstance(SonePlugin.this);
-                               bind(FcpInterface.class).in(Singleton.class);
-                               bind(Database.class).to(MemoryDatabase.class);
-                               bind(PostBuilderFactory.class).to(MemoryDatabase.class);
-                               bind(PostReplyBuilderFactory.class).to(MemoryDatabase.class);
-                               bind(SoneProvider.class).to(Core.class).in(Singleton.class);
-                               bind(PostProvider.class).to(MemoryDatabase.class);
                                bindListener(Matchers.any(), new TypeListener() {
 
                                        @Override