package me.xhh.hector07;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import me.prettyprint.hector.api.Serializer;
import me.prettyprint.hector.api.beans.HColumn;
import me.prettyprint.hector.api.beans.HSuperColumn;
import me.prettyprint.hector.api.factory.HFactory;
/**
* Definition of super column family.
*/
public class SuperColumnFamily<K, SN, N, V> extends ColumnFamilyBase<K, N, V> {
private Serializer<SN> superNameSerializer;
public SuperColumnFamily(String columnFamilyName, Serializer<K> keySerializer, Serializer<SN> superNameSerializer,
Serializer<N> nameSerializer, Serializer<V> valueSerializer) {
super(columnFamilyName, keySerializer, nameSerializer, valueSerializer);
if (superNameSerializer == null) {
throw new IllegalArgumentException("superNameSerializer can not be null!");
}
this.superNameSerializer = superNameSerializer;
}
public Serializer<SN> getSuperNameSerializer() {
return superNameSerializer;
}
public HSuperColumn<SN, N, V> createSuperColumn(SN superColName, HColumn<N, V>... columns) {
List<HColumn<N, V>> columnList = columns == null || columns.length == 0
? new ArrayList<HColumn<N, V>>(0)
: Arrays.asList(columns);
return createSuperColumn(superColName, columnList);
}
public boolean addSuperColumn(SN superColName, List<HSuperColumn<SN, N, V>> superColumns, HColumn<N, V>... columns) {
if (superColName != null && columns != null && columns.length > 0) {
superColumns.add(createSuperColumn(superColName, columns));
return true;
} else {
return false;
}
}
public boolean addSuperColumn(SN superColName, List<HSuperColumn<SN, N, V>> superColumns, List<HColumn<N, V>> columns) {
if (superColName != null && columns != null && !columns.isEmpty()) {
superColumns.add(createSuperColumn(superColName, columns));
return true;
} else {
return false;
}
}
public HSuperColumn<SN, N, V> createSuperColumn(SN superColName, List<HColumn<N, V>> columns) {
return HFactory.createSuperColumn(superColName, columns, getSuperNameSerializer(), getNameSerializer(), getValueSerializer());
}
@Override
public boolean isSuperColumnFamily() {
return true;
}
}