package me.prettyprint.cassandra.examples;
import static me.prettyprint.hector.api.factory.HFactory.createColumn;
import static me.prettyprint.hector.api.factory.HFactory.createColumnQuery;
import static me.prettyprint.hector.api.factory.HFactory.createKeyspace;
import static me.prettyprint.hector.api.factory.HFactory.createMultigetSliceQuery;
import static me.prettyprint.hector.api.factory.HFactory.createMutator;
import static me.prettyprint.hector.api.factory.HFactory.getOrCreateCluster;
import java.util.HashMap;
import java.util.Map;
import me.prettyprint.cassandra.serializers.StringSerializer;
import me.prettyprint.hector.api.Cluster;
import me.prettyprint.hector.api.Keyspace;
import me.prettyprint.hector.api.Serializer;
import me.prettyprint.hector.api.beans.HColumn;
import me.prettyprint.hector.api.beans.Rows;
import me.prettyprint.hector.api.exceptions.HectorException;
import me.prettyprint.hector.api.mutation.Mutator;
import me.prettyprint.hector.api.query.ColumnQuery;
import me.prettyprint.hector.api.query.MultigetSliceQuery;
import me.prettyprint.hector.api.query.QueryResult;
/**
* Thread Safe
* @author Ran Tavory
*
*/
public class ExampleDaoV2 {
private final static String KEYSPACE = "Keyspace1";
private final static String HOST_PORT = "localhost:9170";
private final static String CF_NAME = "Standard1";
/** Column name where values are stored */
private final static String COLUMN_NAME = "v";
private final StringSerializer serializer = StringSerializer.get();
private final Keyspace keyspace;
public static void main(String[] args) throws HectorException {
Cluster c = getOrCreateCluster("MyCluster", HOST_PORT);
ExampleDaoV2 ed = new ExampleDaoV2(createKeyspace(KEYSPACE, c));
ed.insert("key1", "value1", StringSerializer.get());
System.out.println(ed.get("key1", StringSerializer.get()));
}
public ExampleDaoV2(Keyspace keyspace) {
this.keyspace = keyspace;
}
/**
* Insert a new value keyed by key
*
* @param key Key for the value
* @param value the String value to insert
*/
public <K> void insert(final K key, final String value, Serializer<K> keySerializer) {
createMutator(keyspace, keySerializer).insert(
key, CF_NAME, createColumn(COLUMN_NAME, value, serializer, serializer));
}
/**
* Get a string value.
*
* @return The string value; null if no value exists for the given key.
*/
public <K> String get(final K key, Serializer<K> keySerializer) throws HectorException {
ColumnQuery<K, String, String> q = createColumnQuery(keyspace, keySerializer, serializer, serializer);
QueryResult<HColumn<String, String>> r = q.setKey(key).
setName(COLUMN_NAME).
setColumnFamily(CF_NAME).
execute();
HColumn<String, String> c = r.get();
return c == null ? null : c.getValue();
}
/**
* Get multiple values
* @param keys
* @return
*/
public <K> Map<K, String> getMulti(Serializer<K> keySerializer, K... keys) {
MultigetSliceQuery<K, String,String> q = createMultigetSliceQuery(keyspace, keySerializer, serializer, serializer);
q.setColumnFamily(CF_NAME);
q.setKeys(keys);
q.setColumnNames(COLUMN_NAME);
QueryResult<Rows<K, String,String>> r = q.execute();
Rows<K, String,String> rows = r.get();
Map<K, String> ret = new HashMap<K, String>(keys.length);
for (K k: keys) {
HColumn<String,String> c = rows.getByKey(k).getColumnSlice().getColumnByName(COLUMN_NAME);
if (c != null && c.getValue() != null) {
ret.put(k, c.getValue());
}
}
return ret;
}
/**
* Insert multiple values
*/
public <K> void insertMulti(Map<K, String> keyValues, Serializer<K> keySerializer) {
Mutator<K> m = createMutator(keyspace, keySerializer);
for (Map.Entry<K, String> keyValue: keyValues.entrySet()) {
m.addInsertion(keyValue.getKey(), CF_NAME,
createColumn(COLUMN_NAME, keyValue.getValue(), keyspace.createClock(), serializer, serializer));
}
m.execute();
}
/**
* Delete multiple values
*/
public <K> void delete(Serializer<K> keySerializer, K... keys) {
Mutator<K> m = createMutator(keyspace, keySerializer);
for (K key: keys) {
m.addDeletion(key, CF_NAME, COLUMN_NAME, serializer);
}
m.execute();
}
}