Add test for DI constructability of ImageInserter
[Sone.git] / src / main / java / net / pterodactylus / sone / core / ImageInserter.java
index 4655c33..cdab2ba 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Sone - ImageInserter.java - Copyright © 2011–2012 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
 
 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;
 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 net.pterodactylus.util.validation.Validation;
+
+import com.google.common.base.Function;
 
 /**
  * The image inserter is responsible for inserting images using
@@ -40,10 +47,11 @@ import net.pterodactylus.util.validation.Validation;
 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>());
@@ -53,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;
        }
 
        /**
@@ -67,9 +79,11 @@ public class ImageInserter {
         *            The image
         */
        public void insertImage(TemporaryImage temporaryImage, Image image) {
-               Validation.begin().isNotNull("Temporary Image", temporaryImage).isNotNull("Image", image).check().isEqual("Image IDs", image.getId(), temporaryImage.getId()).check();
+               checkNotNull(temporaryImage, "temporaryImage must not be null");
+               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) {