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.ColumnSlice; import me.prettyprint.hector.api.beans.HColumn; import org.apache.cassandra.thrift.Column; public final class ColumnSliceImpl<N,V> implements ColumnSlice<N, V> { private Map<N,HColumn<N,V>> columnsMap; private final List<HColumn<N,V>> columnsList; public ColumnSliceImpl(List<Column> tColumns, Serializer<N> nameSerializer, Serializer<V> valueSerializer) { Assert.noneNull(tColumns, nameSerializer, valueSerializer); List<HColumn<N,V>> list = new ArrayList<HColumn<N,V>>(tColumns.size()); for (Column c: tColumns) { HColumn<N, V> column = new HColumnImpl<N,V>(c, nameSerializer, valueSerializer); list.add(column); } columnsList = list; } /** * * @return an unmodifiable list of the columns */ @Override public List<HColumn<N,V>> getColumns() { return columnsList; } @Override public HColumn<N, V> getColumnByName(N columnName) { if ( null == columnsMap) { columnsMap = new HashMap<N,HColumn<N,V>>(columnsList.size()); for (HColumn<N, V> column : columnsList) { columnsMap.put(column.getName(), column); } } return columnsMap.get(columnName); } @Override public String toString() { return String.format("ColumnSlice(%s)", columnsList.toString()); } }