summaryrefslogtreecommitdiff
path: root/src/com/p4square/grow/backend/db
diff options
context:
space:
mode:
authorJesse Morgan <jesse@jesterpm.net>2013-11-09 15:24:56 -0800
committerJesse Morgan <jesse@jesterpm.net>2013-11-09 15:24:56 -0800
commit0d90da39f77ac3cfa607a68bc59336bf0bdff240 (patch)
tree1a2133dea8035004052e1fddf9b4c022fb8e21e1 /src/com/p4square/grow/backend/db
parentebbfb39ca9b63c170ca7b609dd07d234d89ab23a (diff)
Refactored TrainingResource to use the Provider interface.
Playlists are now generated from a default playlist and regularly merged with the default playlist to get updates. Also adding the Question tests that got left out of a previous commit.
Diffstat (limited to 'src/com/p4square/grow/backend/db')
-rw-r--r--src/com/p4square/grow/backend/db/CassandraKey.java8
-rw-r--r--src/com/p4square/grow/backend/db/CassandraProviderImpl.java12
-rw-r--r--src/com/p4square/grow/backend/db/CassandraTrainingRecordProvider.java71
3 files changed, 81 insertions, 10 deletions
diff --git a/src/com/p4square/grow/backend/db/CassandraKey.java b/src/com/p4square/grow/backend/db/CassandraKey.java
index 8e23087..853fe96 100644
--- a/src/com/p4square/grow/backend/db/CassandraKey.java
+++ b/src/com/p4square/grow/backend/db/CassandraKey.java
@@ -10,14 +10,20 @@ package com.p4square.grow.backend.db;
* @author Jesse Morgan <jesse@jesterpm.net>
*/
public class CassandraKey {
+ private final String mColumnFamily;
private final String mId;
private final String mColumn;
- public CassandraKey(String id, String column) {
+ public CassandraKey(String columnFamily, String id, String column) {
+ mColumnFamily = columnFamily;
mId = id;
mColumn = column;
}
+ public String getColumnFamily() {
+ return mColumnFamily;
+ }
+
public String getId() {
return mId;
}
diff --git a/src/com/p4square/grow/backend/db/CassandraProviderImpl.java b/src/com/p4square/grow/backend/db/CassandraProviderImpl.java
index fb6e34e..c1f6e6d 100644
--- a/src/com/p4square/grow/backend/db/CassandraProviderImpl.java
+++ b/src/com/p4square/grow/backend/db/CassandraProviderImpl.java
@@ -6,10 +6,6 @@ package com.p4square.grow.backend.db;
import java.io.IOException;
-import org.codehaus.jackson.map.DeserializationConfig;
-import org.codehaus.jackson.map.ObjectMapper;
-import org.codehaus.jackson.map.SerializationConfig;
-
import com.p4square.grow.provider.JsonEncodedProvider;
/**
@@ -19,24 +15,22 @@ import com.p4square.grow.provider.JsonEncodedProvider;
*/
public class CassandraProviderImpl<V> extends JsonEncodedProvider<CassandraKey, V> {
private final CassandraDatabase mDb;
- private final String mColumnFamily;
- public CassandraProviderImpl(CassandraDatabase db, String columnFamily, Class<V> clazz) {
+ public CassandraProviderImpl(CassandraDatabase db, Class<V> clazz) {
super(clazz);
mDb = db;
- mColumnFamily = columnFamily;
}
@Override
public V get(CassandraKey key) throws IOException {
- String blob = mDb.getKey(mColumnFamily, key.getId(), key.getColumn());
+ String blob = mDb.getKey(key.getColumnFamily(), key.getId(), key.getColumn());
return decode(blob);
}
@Override
public void put(CassandraKey key, V obj) throws IOException {
String blob = encode(obj);
- mDb.putKey(mColumnFamily, key.getId(), key.getColumn(), blob);
+ mDb.putKey(key.getColumnFamily(), key.getId(), key.getColumn(), blob);
}
}
diff --git a/src/com/p4square/grow/backend/db/CassandraTrainingRecordProvider.java b/src/com/p4square/grow/backend/db/CassandraTrainingRecordProvider.java
new file mode 100644
index 0000000..4face52
--- /dev/null
+++ b/src/com/p4square/grow/backend/db/CassandraTrainingRecordProvider.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2013 Jesse Morgan
+ */
+
+package com.p4square.grow.backend.db;
+
+import java.io.IOException;
+
+import com.p4square.grow.model.Playlist;
+import com.p4square.grow.model.TrainingRecord;
+
+import com.p4square.grow.provider.JsonEncodedProvider;
+import com.p4square.grow.provider.Provider;
+
+/**
+ *
+ * @author Jesse Morgan <jesse@jesterpm.net>
+ */
+public class CassandraTrainingRecordProvider implements Provider<String, TrainingRecord> {
+ private static final CassandraKey DEFAULT_PLAYLIST_KEY = new CassandraKey("strings", "defaultPlaylist", "value");
+
+ private static final String COLUMN_FAMILY = "training";
+ private static final String PLAYLIST_KEY = "playlist";
+ private static final String LAST_VIDEO_KEY = "lastVideo";
+
+ private final CassandraDatabase mDb;
+ private final Provider<CassandraKey, Playlist> mPlaylistProvider;
+
+ public CassandraTrainingRecordProvider(CassandraDatabase db) {
+ mDb = db;
+ mPlaylistProvider = new CassandraProviderImpl<>(db, Playlist.class);
+ }
+
+ @Override
+ public TrainingRecord get(String userid) throws IOException {
+ Playlist playlist = mPlaylistProvider.get(new CassandraKey(COLUMN_FAMILY, userid, PLAYLIST_KEY));
+
+ if (playlist == null) {
+ // We consider no playlist to mean no record whatsoever.
+ return null;
+ }
+
+ TrainingRecord r = new TrainingRecord();
+ r.setPlaylist(playlist);
+ r.setLastVideo(mDb.getKey(COLUMN_FAMILY, userid, LAST_VIDEO_KEY));
+
+ return r;
+ }
+
+ @Override
+ public void put(String userid, TrainingRecord record) throws IOException {
+ String lastVideo = record.getLastVideo();
+ Playlist playlist = record.getPlaylist();
+
+ mDb.putKey(COLUMN_FAMILY, userid, LAST_VIDEO_KEY, lastVideo);
+ mPlaylistProvider.put(new CassandraKey(COLUMN_FAMILY, userid, PLAYLIST_KEY), playlist);
+ }
+
+ /**
+ * @return the default playlist stored in the database.
+ */
+ public Playlist getDefaultPlaylist() throws IOException {
+ Playlist playlist = mPlaylistProvider.get(DEFAULT_PLAYLIST_KEY);
+
+ if (playlist == null) {
+ playlist = new Playlist();
+ }
+
+ return playlist;
+ }
+}