package me.prettyprint.cassandra.model;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import me.prettyprint.cassandra.utils.Assert;
import me.prettyprint.hector.api.Serializer;
import me.prettyprint.hector.api.beans.Row;
import me.prettyprint.hector.api.beans.Rows;
import org.apache.cassandra.thrift.Column;
/**
* Returned by a MultigetSliceQuery (multiget_slice thrift call)
*
* @author Ran Tavory
*
* @param <N>
* @param <V>
*/
public class RowsImpl<K, N, V> implements Rows<K, N, V> {
protected final Map<K, Row<K, N, V>> rows;
public RowsImpl(Map<K, List<Column>> thriftRet, Serializer<N> nameSerializer,
Serializer<V> valueSerializer) {
Assert.noneNull(thriftRet, nameSerializer, valueSerializer);
rows = new LinkedHashMap<K, Row<K, N, V>>(thriftRet.size());
for (Map.Entry<K, List<Column>> entry : thriftRet.entrySet()) {
rows.put(entry.getKey(), new RowImpl<K, N, V>(entry.getKey(), entry.getValue(), nameSerializer,
valueSerializer));
}
}
protected RowsImpl() {
this.rows = new HashMap<K, Row<K,N,V>>();
}
@Override
public Row<K, N, V> getByKey(K key) {
return rows.get(key);
}
@Override
public int getCount() {
return rows.size();
}
@Override
public Iterator<Row<K, N, V>> iterator() {
return rows.values().iterator();
}
@Override
public String toString() {
return "Rows(" + rows + ")";
}
}