From b9281ba712aac6ea70b7dc217607608ae80b594d Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Mon, 24 Nov 2014 07:11:18 +0100 Subject: [PATCH] Add method to expose a Sone loader to the Sone provider. --- src/main/java/net/pterodactylus/sone/core/Core.java | 6 ++++++ .../net/pterodactylus/sone/database/SoneProvider.java | 3 +++ .../sone/database/memory/MemoryDatabase.java | 11 +++++++++++ .../net/pterodactylus/sone/text/SoneTextParserTest.java | 17 ++++++++++++++--- 4 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/pterodactylus/sone/core/Core.java b/src/main/java/net/pterodactylus/sone/core/Core.java index dc5e207..dfe8074 100644 --- a/src/main/java/net/pterodactylus/sone/core/Core.java +++ b/src/main/java/net/pterodactylus/sone/core/Core.java @@ -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> soneLoader() { + return database.soneLoader(); + } + /** * Returns the Sone with the given ID, regardless whether it’s local or * remote. diff --git a/src/main/java/net/pterodactylus/sone/database/SoneProvider.java b/src/main/java/net/pterodactylus/sone/database/SoneProvider.java index f36eaba..73467a2 100644 --- a/src/main/java/net/pterodactylus/sone/database/SoneProvider.java +++ b/src/main/java/net/pterodactylus/sone/database/SoneProvider.java @@ -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> soneLoader(); + /** * Returns the Sone with the given ID, or {@link Optional#absent()} if it * does not exist. diff --git a/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java b/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java index c611eea..4ee375e 100644 --- a/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java +++ b/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java @@ -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> soneLoader() { + return new Function>() { + @Override + public Optional apply(String soneId) { + return getSone(soneId); + } + }; + } + + @Override public Optional getSone(String soneId) { lock.readLock().lock(); try { diff --git a/src/test/java/net/pterodactylus/sone/text/SoneTextParserTest.java b/src/test/java/net/pterodactylus/sone/text/SoneTextParserTest.java index c805998..2ac6db7 100644 --- a/src/test/java/net/pterodactylus/sone/text/SoneTextParserTest.java +++ b/src/test/java/net/pterodactylus/sone/text/SoneTextParserTest.java @@ -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> soneLoader() { + return new Function>() { + @Override + public Optional apply(String soneId) { + return getSone(soneId); + } + }; + } + /** * {@inheritDoc} */ -- 2.7.4