package me.xhh.hector07; import static me.prettyprint.cassandra.utils.Assert.noneNull; import static me.prettyprint.cassandra.utils.Assert.notNull; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; import me.prettyprint.cassandra.model.HColumnImpl; import me.prettyprint.hector.api.Serializer; import me.prettyprint.hector.api.beans.HColumn; import me.prettyprint.hector.api.beans.HSuperColumn; import org.apache.cassandra.thrift.Column; import org.apache.cassandra.thrift.SuperColumn; /** * Super column whose super name, name, and value are String type. */ public final class StringSuperColumn implements HSuperColumn<String, String, String> { private String superName; private List<HColumn<String,String>> columns; private long clock; private final Serializer<String> serializer; public StringSuperColumn(String sName, List<HColumn<String, String>> columns, long clock) { this(); notNull(sName, "Name is null"); notNull(columns, "Columns are null"); this.superName = sName; this.columns = columns; this.clock = clock; } public StringSuperColumn(SuperColumn thriftSuperColumn) { this(); noneNull(thriftSuperColumn); superName = serializer.fromByteBuffer(ByteBuffer.wrap(thriftSuperColumn.getName())); columns = fromThriftColumns(thriftSuperColumn.getColumns()); } /*package*/ StringSuperColumn() { this.serializer = DBUtil.STRING_SERIALIZER; } @Override public HSuperColumn<String, String, String> setName(String name) { notNull(name, "name is null"); this.superName = name; return this; } @Override public HSuperColumn<String, String, String> setSubcolumns(List<HColumn<String, String>> subcolumns) { notNull(subcolumns, "subcolumns are null"); this.columns = subcolumns; return this; } @Override public HSuperColumn<String, String, String> setClock(long clock) { this.clock = clock; return this; } @Override public long getClock() { return clock; } @Override public int getSize() { return columns == null ? 0 : columns.size(); } @Override public String getName() { return superName; } /** * * @return an unmodifiable list of columns */ @Override public List<HColumn<String,String>> getColumns() { return columns; } @Override public HColumn<String, String> get(int i) { return columns.get(i); } @Override public Serializer<String> getNameSerializer() { return serializer; } @Override public byte[] getNameBytes() { return serializer.toByteBuffer(getName()).array(); } public ByteBuffer getNameByteBuffer() { return serializer.toByteBuffer(getName()); } public SuperColumn toThrift() { if (superName == null || columns == null) { return null; } return new SuperColumn(serializer.toByteBuffer(superName), toThriftColumn()); } private List<Column> toThriftColumn() { List<Column> ret = new ArrayList<Column>(columns.size()); for (HColumn<String, String> c: columns) { ret.add(((HColumnImpl<String, String>) c).toThrift()); } return ret; } private List<HColumn<String, String>> fromThriftColumns(List<Column> tcolumns) { List<HColumn<String, String>> cs = new ArrayList<HColumn<String,String>>(tcolumns.size()); for (Column c: tcolumns) { cs.add(new HColumnImpl<String, String>(c, serializer, serializer)); } return cs; } @Override public Serializer<String> getSuperNameSerializer() { return serializer; } @Override public Serializer<String> getValueSerializer() { return serializer; } @Override public String toString() { return String.format("StringSuperColumn(%s,%s)", superName, columns); } }