Add test for DI constructability of ImageInserter
[Sone.git] / src / main / java / net / pterodactylus / sone / core / ImageInserter.java
index 791663f..cdab2ba 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Sone - ImageInserter.java - Copyright © 2011–2013 David Roden
+ * Sone - ImageInserter.java - Copyright © 2011–2016 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
@@ -19,6 +19,7 @@ package net.pterodactylus.sone.core;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
+import static java.util.logging.Logger.getLogger;
 
 import java.util.Collections;
 import java.util.HashMap;
@@ -26,10 +27,14 @@ import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import javax.inject.Inject;
+
 import net.pterodactylus.sone.core.FreenetInterface.InsertToken;
+import net.pterodactylus.sone.core.FreenetInterface.InsertTokenSupplier;
 import net.pterodactylus.sone.data.Image;
 import net.pterodactylus.sone.data.TemporaryImage;
-import net.pterodactylus.util.logging.Logging;
+
+import com.google.common.base.Function;
 
 /**
  * The image inserter is responsible for inserting images using
@@ -42,10 +47,11 @@ import net.pterodactylus.util.logging.Logging;
 public class ImageInserter {
 
        /** The logger. */
-       private static final Logger logger = Logging.getLogger(ImageInserter.class);
+       private static final Logger logger = getLogger(ImageInserter.class.getName());
 
        /** The freenet interface. */
        private final FreenetInterface freenetInterface;
+       private final Function<Image, InsertToken> insertTokenSupplier;
 
        /** The tokens of running inserts. */
        private final Map<String, InsertToken> insertTokens = Collections.synchronizedMap(new HashMap<String, InsertToken>());
@@ -55,9 +61,13 @@ public class ImageInserter {
         *
         * @param freenetInterface
         *            The freenet interface
+        * @param insertTokenSupplier
+        *            The supplier for insert tokens
         */
-       public ImageInserter(FreenetInterface freenetInterface) {
+       @Inject
+       public ImageInserter(FreenetInterface freenetInterface, InsertTokenSupplier insertTokenSupplier) {
                this.freenetInterface = freenetInterface;
+               this.insertTokenSupplier = insertTokenSupplier;
        }
 
        /**
@@ -73,7 +83,7 @@ public class ImageInserter {
                checkNotNull(image, "image must not be null");
                checkArgument(image.getId().equals(temporaryImage.getId()), "image IDs must match");
                try {
-                       InsertToken insertToken = freenetInterface.new InsertToken(image);
+                       InsertToken insertToken = insertTokenSupplier.apply(image);
                        insertTokens.put(image.getId(), insertToken);
                        freenetInterface.insertImage(temporaryImage, image, insertToken);
                } catch (SoneException se1) {