diff options
Diffstat (limited to 'src/com/p4square/grow/provider')
7 files changed, 137 insertions, 5 deletions
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 <jesse@jesterpm.net> + */ +public abstract class DelegateCollectionProvider<C, DC, K, DK, V> + implements CollectionProvider<C, K, V> { + + private CollectionProvider<DC, DK, V> mProvider; + + public DelegateCollectionProvider(final CollectionProvider<DC, DK, V> provider) { + mProvider = provider; + } + + public V get(C collection, K key) throws IOException { + return mProvider.get(makeCollectionKey(collection), makeKey(key)); + } + + public Map<K, V> query(C collection) throws IOException { + return query(collection, -1); + } + + public Map<K, V> query(C collection, int limit) throws IOException { + Map<DK, V> delegateResult = mProvider.query(makeCollectionKey(collection), limit); + Map<K, V> result = new HashMap<>(); + for (Map.Entry<DK, V> 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<K, D, V> implements Provider<K, V> { } /** - * 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<V> { MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); } - private final Class<V> mClazz; - private final JavaType mType; + protected final Class<V> mClazz; + protected final JavaType mType; public JsonEncodedProvider(Class<V> 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 <jesse@jesterpm.net> + */ +public interface ProvidesAssessments { + /** + * Provides a collection of user assessments. + * The collection key is the user id. + * The key is the question id. + */ + CollectionProvider<String, String, String> 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 <jesse@jesterpm.net> + */ +public interface ProvidesStrings { + /** + * @return A Provider of Questions keyed by question id. + */ + Provider<String, String> 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<String, TrainingRecord> 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 <jesse@jesterpm.net> + */ +public interface ProvidesVideos { + /** + * @return A Provider of Questions keyed by question id. + */ + CollectionProvider<String, String, String> getVideoProvider(); +} |