From 255b10334bcf190cf56c0d57791e39d5e808497b Mon Sep 17 00:00:00 2001 From: Jesse Morgan Date: Fri, 23 May 2014 13:05:19 -0700 Subject: Abstracting out Cassandra. --- .../grow/provider/DelegateCollectionProvider.java | 69 ++++++++++++++++++++++ .../p4square/grow/provider/DelegateProvider.java | 6 +- .../grow/provider/JsonEncodedProvider.java | 4 +- .../grow/provider/ProvidesAssessments.java | 20 +++++++ .../p4square/grow/provider/ProvidesStrings.java | 19 ++++++ .../grow/provider/ProvidesTrainingRecords.java | 8 +++ src/com/p4square/grow/provider/ProvidesVideos.java | 16 +++++ 7 files changed, 137 insertions(+), 5 deletions(-) create mode 100644 src/com/p4square/grow/provider/DelegateCollectionProvider.java create mode 100644 src/com/p4square/grow/provider/ProvidesAssessments.java create mode 100644 src/com/p4square/grow/provider/ProvidesStrings.java create mode 100644 src/com/p4square/grow/provider/ProvidesVideos.java (limited to 'src/com/p4square/grow/provider') diff --git a/src/com/p4square/grow/provider/DelegateCollectionProvider.java b/src/com/p4square/grow/provider/DelegateCollectionProvider.java new file mode 100644 index 0000000..e17af87 --- /dev/null +++ b/src/com/p4square/grow/provider/DelegateCollectionProvider.java @@ -0,0 +1,69 @@ +/* + * Copyright 2014 Jesse Morgan + */ + +package com.p4square.grow.provider; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +/** + * + * @author Jesse Morgan + */ +public abstract class DelegateCollectionProvider + implements CollectionProvider { + + private CollectionProvider mProvider; + + public DelegateCollectionProvider(final CollectionProvider provider) { + mProvider = provider; + } + + public V get(C collection, K key) throws IOException { + return mProvider.get(makeCollectionKey(collection), makeKey(key)); + } + + public Map query(C collection) throws IOException { + return query(collection, -1); + } + + public Map query(C collection, int limit) throws IOException { + Map delegateResult = mProvider.query(makeCollectionKey(collection), limit); + Map result = new HashMap<>(); + for (Map.Entry entry : delegateResult.entrySet()) { + result.put(unmakeKey(entry.getKey()), entry.getValue()); + } + + return result; + } + + public void put(C collection, K key, V obj) throws IOException { + mProvider.put(makeCollectionKey(collection), makeKey(key), obj); + } + + /** + * Make a collection key for the delegated provider. + * + * @param input The pre-transform key. + * @return the post-transform key. + */ + protected abstract DC makeCollectionKey(final C input); + + /** + * Make a key for the delegated provider. + * + * @param input The pre-transform key. + * @return the post-transform key. + */ + protected abstract DK makeKey(final K input); + + /** + * Transform a key for the delegated provider to an input key. + * + * @param input The post-transform key. + * @return the pre-transform key. + */ + protected abstract K unmakeKey(final DK input); +} diff --git a/src/com/p4square/grow/provider/DelegateProvider.java b/src/com/p4square/grow/provider/DelegateProvider.java index 66c5666..42dcc63 100644 --- a/src/com/p4square/grow/provider/DelegateProvider.java +++ b/src/com/p4square/grow/provider/DelegateProvider.java @@ -31,10 +31,10 @@ public abstract class DelegateProvider implements Provider { } /** - * Make a Key for questionId. + * Make a Key for the delegated provider. * - * @param questionId The question id. - * @return a key for questionId. + * @param input The pre-transform key. + * @return the post-transform key. */ protected abstract D makeKey(final K input); } diff --git a/src/com/p4square/grow/provider/JsonEncodedProvider.java b/src/com/p4square/grow/provider/JsonEncodedProvider.java index 7ae3f71..7651443 100644 --- a/src/com/p4square/grow/provider/JsonEncodedProvider.java +++ b/src/com/p4square/grow/provider/JsonEncodedProvider.java @@ -25,8 +25,8 @@ public abstract class JsonEncodedProvider { MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); } - private final Class mClazz; - private final JavaType mType; + protected final Class mClazz; + protected final JavaType mType; public JsonEncodedProvider(Class clazz) { mClazz = clazz; diff --git a/src/com/p4square/grow/provider/ProvidesAssessments.java b/src/com/p4square/grow/provider/ProvidesAssessments.java new file mode 100644 index 0000000..62ba8f6 --- /dev/null +++ b/src/com/p4square/grow/provider/ProvidesAssessments.java @@ -0,0 +1,20 @@ +/* + * Copyright 2014 Jesse Morgan + */ + +package com.p4square.grow.provider; + +import com.p4square.grow.model.RecordedAnswer; + +/** + * + * @author Jesse Morgan + */ +public interface ProvidesAssessments { + /** + * Provides a collection of user assessments. + * The collection key is the user id. + * The key is the question id. + */ + CollectionProvider getAnswerProvider(); +} diff --git a/src/com/p4square/grow/provider/ProvidesStrings.java b/src/com/p4square/grow/provider/ProvidesStrings.java new file mode 100644 index 0000000..5d9976e --- /dev/null +++ b/src/com/p4square/grow/provider/ProvidesStrings.java @@ -0,0 +1,19 @@ +/* + * Copyright 2014 Jesse Morgan + */ + +package com.p4square.grow.provider; + +/** + * Indicates the ability to provide a String provider. + * + * Strings are typically configuration settings stored as a String. + * + * @author Jesse Morgan + */ +public interface ProvidesStrings { + /** + * @return A Provider of Questions keyed by question id. + */ + Provider getStringProvider(); +} \ No newline at end of file diff --git a/src/com/p4square/grow/provider/ProvidesTrainingRecords.java b/src/com/p4square/grow/provider/ProvidesTrainingRecords.java index 27ffa3e..586e649 100644 --- a/src/com/p4square/grow/provider/ProvidesTrainingRecords.java +++ b/src/com/p4square/grow/provider/ProvidesTrainingRecords.java @@ -4,7 +4,10 @@ package com.p4square.grow.provider; +import java.io.IOException; + import com.p4square.grow.model.TrainingRecord; +import com.p4square.grow.model.Playlist; /** * Indicates the ability to provide a TrainingRecord Provider. @@ -16,4 +19,9 @@ public interface ProvidesTrainingRecords { * @return A Provider of Questions keyed by question id. */ Provider getTrainingRecordProvider(); + + /** + * @return the Default Playlist. + */ + Playlist getDefaultPlaylist() throws IOException; } diff --git a/src/com/p4square/grow/provider/ProvidesVideos.java b/src/com/p4square/grow/provider/ProvidesVideos.java new file mode 100644 index 0000000..3d055d3 --- /dev/null +++ b/src/com/p4square/grow/provider/ProvidesVideos.java @@ -0,0 +1,16 @@ +/* + * Copyright 2014 Jesse Morgan + */ + +package com.p4square.grow.provider; + +/** + * + * @author Jesse Morgan + */ +public interface ProvidesVideos { + /** + * @return A Provider of Questions keyed by question id. + */ + CollectionProvider getVideoProvider(); +} -- cgit v1.2.3