summaryrefslogtreecommitdiff
path: root/src/com
diff options
context:
space:
mode:
Diffstat (limited to 'src/com')
-rw-r--r--src/com/p4square/grow/backend/resources/TrainingRecordResource.java2
-rw-r--r--src/com/p4square/grow/model/Chapter.java29
-rw-r--r--src/com/p4square/grow/model/Playlist.java5
-rw-r--r--src/com/p4square/grow/provider/MapCollectionProvider.java74
-rw-r--r--src/com/p4square/grow/provider/MapProvider.java28
5 files changed, 133 insertions, 5 deletions
diff --git a/src/com/p4square/grow/backend/resources/TrainingRecordResource.java b/src/com/p4square/grow/backend/resources/TrainingRecordResource.java
index b316b75..4403b12 100644
--- a/src/com/p4square/grow/backend/resources/TrainingRecordResource.java
+++ b/src/com/p4square/grow/backend/resources/TrainingRecordResource.java
@@ -69,7 +69,7 @@ public class TrainingRecordResource extends ServerResource {
mVideoId = getAttribute("videoId");
try {
- Playlist defaultPlaylist = ((GrowBackend) getApplication()).getDefaultPlaylist();
+ Playlist defaultPlaylist = ((ProvidesTrainingRecords) getApplication()).getDefaultPlaylist();
mRecord = mTrainingRecordProvider.get(mUserId);
if (mRecord == null) {
diff --git a/src/com/p4square/grow/model/Chapter.java b/src/com/p4square/grow/model/Chapter.java
index 7b6e27c..3a08e4c 100644
--- a/src/com/p4square/grow/model/Chapter.java
+++ b/src/com/p4square/grow/model/Chapter.java
@@ -17,13 +17,38 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
* @author Jesse Morgan <jesse@jesterpm.net>
*/
public class Chapter implements Cloneable {
+ private String mName;
private Map<String, VideoRecord> mVideos;
- public Chapter() {
+ public Chapter(String name) {
+ mName = name;
mVideos = new HashMap<String, VideoRecord>();
}
/**
+ * Private constructor for JSON decoding.
+ */
+ private Chapter() {
+ this(null);
+ }
+
+ /**
+ * @return The Chapter name.
+ */
+ public String getName() {
+ return mName;
+ }
+
+ /**
+ * Set the chapter name.
+ *
+ * @param name The name of the chapter.
+ */
+ public void setName(final String name) {
+ mName = name;
+ }
+
+ /**
* @return The VideoRecord for videoid or null if videoid is not in the chapter.
*/
public VideoRecord getVideoRecord(String videoid) {
@@ -78,7 +103,7 @@ public class Chapter implements Cloneable {
* @return a new Chapter object identical but independent of this one.
*/
public Chapter clone() throws CloneNotSupportedException {
- Chapter c = new Chapter();
+ Chapter c = new Chapter(mName);
for (Map.Entry<String, VideoRecord> videoEntry : mVideos.entrySet()) {
c.setVideoRecord(videoEntry.getKey(), videoEntry.getValue().clone());
}
diff --git a/src/com/p4square/grow/model/Playlist.java b/src/com/p4square/grow/model/Playlist.java
index b697e66..3e77ada 100644
--- a/src/com/p4square/grow/model/Playlist.java
+++ b/src/com/p4square/grow/model/Playlist.java
@@ -86,7 +86,7 @@ public class Playlist {
Chapter chapter = mPlaylist.get(chapterId);
if (chapter == null) {
- chapter = new Chapter();
+ chapter = new Chapter(chapterId);
mPlaylist.put(chapterId, chapter);
}
@@ -102,6 +102,7 @@ public class Playlist {
*/
@JsonAnySetter
public void addChapter(String chapterId, Chapter chapter) {
+ chapter.setName(chapterId);
mPlaylist.put(chapterId, chapter);
}
@@ -158,7 +159,7 @@ public class Playlist {
if (myChapter == null) {
// Add new chapter
- myChapter = new Chapter();
+ myChapter = new Chapter(chapterName);
addChapter(chapterName, myChapter);
}
diff --git a/src/com/p4square/grow/provider/MapCollectionProvider.java b/src/com/p4square/grow/provider/MapCollectionProvider.java
new file mode 100644
index 0000000..4c5cef6
--- /dev/null
+++ b/src/com/p4square/grow/provider/MapCollectionProvider.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2015 Jesse Morgan
+ */
+
+package com.p4square.grow.provider;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * In-memory CollectionProvider implementation, useful for tests.
+ *
+ * @author Jesse Morgan <jesse@jesterpm.net>
+ */
+public class MapCollectionProvider<C, K, V> implements CollectionProvider<C, K, V> {
+ private final Map<C, Map<K, V>> mMap;
+
+ public MapCollectionProvider() {
+ mMap = new HashMap<>();
+ }
+
+ @Override
+ public synchronized V get(C collection, K key) throws IOException {
+ Map<K, V> map = mMap.get(collection);
+ if (map != null) {
+ return map.get(key);
+ }
+
+ return null;
+ }
+
+ @Override
+ public synchronized Map<K, V> query(C collection) throws IOException {
+ Map<K, V> map = mMap.get(collection);
+ if (map == null) {
+ map = new HashMap<K, V>();
+ }
+
+ return map;
+ }
+
+ @Override
+ public synchronized Map<K, V> query(C collection, int limit) throws IOException {
+ Map<K, V> map = query(collection);
+
+ if (map.size() > limit) {
+ Map<K, V> smallMap = new HashMap<>();
+
+ Iterator<Map.Entry<K, V>> iterator = map.entrySet().iterator();
+ for (int i = 0; i < limit; i++) {
+ Map.Entry<K, V> entry = iterator.next();
+ smallMap.put(entry.getKey(), entry.getValue());
+ }
+
+ return smallMap;
+
+ } else {
+ return map;
+ }
+ }
+
+ @Override
+ public synchronized void put(C collection, K key, V obj) throws IOException {
+ Map<K, V> map = mMap.get(collection);
+ if (map == null) {
+ map = new HashMap<K, V>();
+ mMap.put(collection, map);
+ }
+
+ map.put(key, obj);
+ }
+}
diff --git a/src/com/p4square/grow/provider/MapProvider.java b/src/com/p4square/grow/provider/MapProvider.java
new file mode 100644
index 0000000..40f8107
--- /dev/null
+++ b/src/com/p4square/grow/provider/MapProvider.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2015 Jesse Morgan
+ */
+
+package com.p4square.grow.provider;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * In-memory Provider implementation, useful for tests.
+ *
+ * @author Jesse Morgan <jesse@jesterpm.net>
+ */
+public class MapProvider<K, V> implements Provider<K, V> {
+ private final Map<K, V> mMap = new HashMap<K, V>();
+
+ @Override
+ public V get(K key) throws IOException {
+ return mMap.get(key);
+ }
+
+ @Override
+ public void put(K key, V obj) throws IOException {
+ mMap.put(key, obj);
+ }
+}