diff options
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; +    } +}  | 
