diff options
author | Jesse Morgan <jesse@jesterpm.net> | 2013-10-20 23:14:51 -0700 |
---|---|---|
committer | Jesse Morgan <jesse@jesterpm.net> | 2013-10-20 23:14:51 -0700 |
commit | e472550fe154f0afa5b36d2a7e2334d4680d7884 (patch) | |
tree | 8131e3fa7db162f9a072ef4d89e7fb25d338cdd4 /src/com/p4square/grow/backend/db | |
parent | 31303114ef03b13ab320ee553f11a73346be7f4a (diff) |
First stage of a major refactoring.
Question and Answer can now be serialized and deserialized to/from JSON.
As such, I no longer have to pass awkward maps around. As part of this
change I have introduced a Provider interface to abstract out loading
and persisting these beans.
The scoring logic has been completed factored out of
SurveyResultsResource and into the various ScoringEngines. Tests have
been added for Question, Answer, and the ScoringEngines. A bug has been
fixed in computing the value for slider questions.
The label identifiers in the circle questions have changed from all
lower case to camel case. That is, topleft is now topLeft. Several
issues have been corrected in the circle answers where the point values
did not match the labels.
Testing and code coverage support and reports have been added.
Diffstat (limited to 'src/com/p4square/grow/backend/db')
-rw-r--r-- | src/com/p4square/grow/backend/db/CassandraKey.java | 28 | ||||
-rw-r--r-- | src/com/p4square/grow/backend/db/CassandraProviderImpl.java | 42 |
2 files changed, 70 insertions, 0 deletions
diff --git a/src/com/p4square/grow/backend/db/CassandraKey.java b/src/com/p4square/grow/backend/db/CassandraKey.java new file mode 100644 index 0000000..8e23087 --- /dev/null +++ b/src/com/p4square/grow/backend/db/CassandraKey.java @@ -0,0 +1,28 @@ +/* + * Copyright 2013 Jesse Morgan + */ + +package com.p4square.grow.backend.db; + +/** + * CassandraKey represents a Cassandra key / column pair. + * + * @author Jesse Morgan <jesse@jesterpm.net> + */ +public class CassandraKey { + private final String mId; + private final String mColumn; + + public CassandraKey(String id, String column) { + mId = id; + mColumn = column; + } + + public String getId() { + return mId; + } + + public String getColumn() { + return mColumn; + } +} diff --git a/src/com/p4square/grow/backend/db/CassandraProviderImpl.java b/src/com/p4square/grow/backend/db/CassandraProviderImpl.java new file mode 100644 index 0000000..fb6e34e --- /dev/null +++ b/src/com/p4square/grow/backend/db/CassandraProviderImpl.java @@ -0,0 +1,42 @@ +/* + * Copyright 2013 Jesse Morgan + */ + +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; + +/** + * Provider implementation backed by a Cassandra ColumnFamily. + * + * @author Jesse Morgan <jesse@jesterpm.net> + */ +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) { + super(clazz); + + mDb = db; + mColumnFamily = columnFamily; + } + + @Override + public V get(CassandraKey key) throws IOException { + String blob = mDb.getKey(mColumnFamily, 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); + } +} |