diff options
author | Jesse Morgan <jesse@jesterpm.net> | 2013-11-09 15:24:56 -0800 |
---|---|---|
committer | Jesse Morgan <jesse@jesterpm.net> | 2013-11-09 15:24:56 -0800 |
commit | 0d90da39f77ac3cfa607a68bc59336bf0bdff240 (patch) | |
tree | 1a2133dea8035004052e1fddf9b4c022fb8e21e1 /src/com/p4square/grow/backend/db | |
parent | ebbfb39ca9b63c170ca7b609dd07d234d89ab23a (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')
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; + } +} |