/* * Copyright 2014 Jesse Morgan */ package com.p4square.grow.backend; import java.io.IOException; import com.p4square.grow.config.Config; import com.p4square.grow.backend.db.CassandraDatabase; import com.p4square.grow.backend.db.CassandraKey; import com.p4square.grow.backend.db.CassandraProviderImpl; import com.p4square.grow.backend.db.CassandraCollectionProvider; import com.p4square.grow.backend.db.CassandraTrainingRecordProvider; import com.p4square.grow.model.Message; import com.p4square.grow.model.MessageThread; import com.p4square.grow.model.Playlist; import com.p4square.grow.model.Question; import com.p4square.grow.model.TrainingRecord; import com.p4square.grow.model.UserRecord; import com.p4square.grow.provider.CollectionProvider; import com.p4square.grow.provider.DelegateCollectionProvider; import com.p4square.grow.provider.DelegateProvider; import com.p4square.grow.provider.Provider; /** * * @author Jesse Morgan */ class CassandraGrowData implements GrowData { private static final String DEFAULT_COLUMN = "value"; private final Config mConfig; private final CassandraDatabase mDatabase; private final Provider mUserRecordProvider; private final Provider mQuestionProvider; private final CassandraTrainingRecordProvider mTrainingRecordProvider; private final CollectionProvider mVideoProvider; private final CollectionProvider mFeedThreadProvider; private final CollectionProvider mFeedMessageProvider; private final Provider mStringProvider; private final CollectionProvider mAnswerProvider; public CassandraGrowData(final Config config) { mConfig = config; mDatabase = new CassandraDatabase(); mUserRecordProvider = new DelegateProvider( new CassandraProviderImpl(mDatabase, UserRecord.class)) { @Override public CassandraKey makeKey(String userid) { return new CassandraKey("accounts", userid, DEFAULT_COLUMN); } }; mQuestionProvider = new DelegateProvider( new CassandraProviderImpl(mDatabase, Question.class)) { @Override public CassandraKey makeKey(String questionId) { return new CassandraKey("strings", "/questions/" + questionId, DEFAULT_COLUMN); } }; mFeedThreadProvider = new CassandraCollectionProvider(mDatabase, "feedthreads", MessageThread.class); mFeedMessageProvider = new CassandraCollectionProvider(mDatabase, "feedmessages", Message.class); mTrainingRecordProvider = new CassandraTrainingRecordProvider(mDatabase); mVideoProvider = new DelegateCollectionProvider( new CassandraCollectionProvider(mDatabase, "strings", String.class)) { @Override public String makeCollectionKey(String key) { return "/training/" + key; } @Override public String makeKey(String key) { return key; } @Override public String unmakeKey(String key) { return key; } }; mStringProvider = new DelegateProvider( new CassandraProviderImpl(mDatabase, String.class)) { @Override public CassandraKey makeKey(String id) { return new CassandraKey("strings", id, DEFAULT_COLUMN); } }; mAnswerProvider = new CassandraCollectionProvider( mDatabase, "assessments", String.class); } @Override public void start() throws Exception { mDatabase.setClusterName(mConfig.getString("clusterName", "Dev Cluster")); mDatabase.setKeyspaceName(mConfig.getString("keyspace", "GROW")); mDatabase.init(); } @Override public void stop() throws Exception { mDatabase.close(); } /** * @return the current database. */ public CassandraDatabase getDatabase() { return mDatabase; } @Override public Provider getUserRecordProvider() { return mUserRecordProvider; } @Override public Provider getQuestionProvider() { return mQuestionProvider; } @Override public Provider getTrainingRecordProvider() { return mTrainingRecordProvider; } @Override public CollectionProvider getVideoProvider() { return mVideoProvider; } @Override public Playlist getDefaultPlaylist() throws IOException { return mTrainingRecordProvider.getDefaultPlaylist(); } @Override public CollectionProvider getThreadProvider() { return mFeedThreadProvider; } @Override public CollectionProvider getMessageProvider() { return mFeedMessageProvider; } @Override public Provider getStringProvider() { return mStringProvider; } @Override public CollectionProvider getAnswerProvider() { return mAnswerProvider; } }