Add method to expose a Sone loader to the Sone provider.
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Mon, 24 Nov 2014 06:11:18 +0000 (07:11 +0100)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Mon, 24 Nov 2014 06:11:18 +0000 (07:11 +0100)
src/main/java/net/pterodactylus/sone/core/Core.java
src/main/java/net/pterodactylus/sone/database/SoneProvider.java
src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java
src/test/java/net/pterodactylus/sone/text/SoneTextParserTest.java

index dc5e207..dfe8074 100644 (file)
@@ -96,6 +96,7 @@ import net.pterodactylus.util.service.AbstractService;
 import net.pterodactylus.util.thread.NamedThreadFactory;
 
 import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Function;
 import com.google.common.base.Optional;
 import com.google.common.collect.FluentIterable;
 import com.google.common.collect.HashMultimap;
@@ -318,6 +319,11 @@ public class Core extends AbstractService implements SoneProvider, PostProvider,
                return database.getSones();
        }
 
+       @Override
+       public Function<String, Optional<Sone>> soneLoader() {
+               return database.soneLoader();
+       }
+
        /**
         * Returns the Sone with the given ID, regardless whether it’s local or
         * remote.
index f36eaba..73467a2 100644 (file)
@@ -22,6 +22,7 @@ import java.util.Collection;
 import net.pterodactylus.sone.core.Core;
 import net.pterodactylus.sone.data.Sone;
 
+import com.google.common.base.Function;
 import com.google.common.base.Optional;
 import com.google.inject.ImplementedBy;
 
@@ -33,6 +34,8 @@ import com.google.inject.ImplementedBy;
 @ImplementedBy(Core.class)
 public interface SoneProvider {
 
+       Function<String, Optional<Sone>> soneLoader();
+
        /**
         * Returns the Sone with the given ID, or {@link Optional#absent()} if it
         * does not exist.
index c611eea..4ee375e 100644 (file)
@@ -56,6 +56,7 @@ import net.pterodactylus.sone.database.SoneProvider;
 import net.pterodactylus.util.config.Configuration;
 import net.pterodactylus.util.config.ConfigurationException;
 
+import com.google.common.base.Function;
 import com.google.common.base.Optional;
 import com.google.common.base.Predicate;
 import com.google.common.collect.HashMultimap;
@@ -239,6 +240,16 @@ public class MemoryDatabase extends AbstractService implements Database {
        }
 
        @Override
+       public Function<String, Optional<Sone>> soneLoader() {
+               return new Function<String, Optional<Sone>>() {
+                       @Override
+                       public Optional<Sone> apply(String soneId) {
+                               return getSone(soneId);
+                       }
+               };
+       }
+
+       @Override
        public Optional<Sone> getSone(String soneId) {
                lock.readLock().lock();
                try {
index c805998..2ac6db7 100644 (file)
@@ -22,13 +22,14 @@ import java.io.StringReader;
 import java.util.Arrays;
 import java.util.Collection;
 
-import com.google.common.base.Optional;
-
-import junit.framework.TestCase;
 import net.pterodactylus.sone.data.Sone;
 import net.pterodactylus.sone.data.impl.IdOnlySone;
 import net.pterodactylus.sone.database.SoneProvider;
 
+import com.google.common.base.Function;
+import com.google.common.base.Optional;
+import junit.framework.TestCase;
+
 /**
  * JUnit test case for {@link SoneTextParser}.
  *
@@ -181,6 +182,16 @@ public class SoneTextParserTest extends TestCase {
         */
        private static class TestSoneProvider implements SoneProvider {
 
+               @Override
+               public Function<String, Optional<Sone>> soneLoader() {
+                       return new Function<String, Optional<Sone>>() {
+                               @Override
+                               public Optional<Sone> apply(String soneId) {
+                                       return getSone(soneId);
+                               }
+                       };
+               }
+
                /**
                 * {@inheritDoc}
                 */