package me.prettyprint.cassandra.model; import java.util.ArrayList; import java.util.HashMap; 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.HSuperColumn; import me.prettyprint.hector.api.beans.SuperSlice; import org.apache.cassandra.thrift.SuperColumn; /** * Represents a return of the get_slice query for supercolumns * * @param <SN> Super column name type * @param <N> Column name type * @param <V> Column value type */ public final class SuperSliceImpl<SN,N,V> implements SuperSlice<SN, N, V> { private final Map<SN,HSuperColumn<SN,N,V>> columnsMap; private final List<HSuperColumn<SN,N,V>> columnsList; public SuperSliceImpl(List<SuperColumn> tSuperColumns, Serializer<SN> sNameSerializer, Serializer<N> nameSerializer, Serializer<V> valueSerializer) { Assert.noneNull(tSuperColumns, sNameSerializer, nameSerializer, valueSerializer); columnsMap = new HashMap<SN,HSuperColumn<SN,N,V>>(tSuperColumns.size()); columnsList = new ArrayList<HSuperColumn<SN,N,V>>(tSuperColumns.size()); for (SuperColumn sc: tSuperColumns) { HSuperColumn<SN,N,V> column = new HSuperColumnImpl<SN,N,V>(sc, sNameSerializer, nameSerializer, valueSerializer); columnsMap.put(column.getName(), column); columnsList.add(column); } } /** * @return an unmodifiable list of supercolumns */ @Override public List<HSuperColumn<SN,N,V>> getSuperColumns() { return columnsList; } @Override public HSuperColumn<SN, N, V> getColumnByName(SN columnName) { return columnsMap.get(columnName); } @Override public String toString() { return "SuperSlice(" + columnsList.toString() + ")"; } }