package me.xhh.hector07;
import java.util.List;
import me.prettyprint.hector.api.Serializer;
import me.prettyprint.hector.api.beans.HColumn;
import me.prettyprint.hector.api.factory.HFactory;
/**
* Base class for column family and super column family.
*/
public abstract class ColumnFamilyBase<K, N, V> {
private String columnFamilyName;
private Serializer<K> keySerializer;
private Serializer<N> nameSerializer;
private Serializer<V> valueSerializer;
public ColumnFamilyBase(String columnFamilyName, Serializer<K> keySerializer, Serializer<N> nameSerializer,
Serializer<V> valueSerializer) {
super();
if (columnFamilyName == null) {
throw new IllegalArgumentException("column family name can not be null!");
}
if (keySerializer == null) {
throw new IllegalArgumentException("keySerializer can not be null!");
}
if (nameSerializer == null) {
throw new IllegalArgumentException("nameSerializer can not be null!");
}
if (valueSerializer == null) {
throw new IllegalArgumentException("valueSerializere can not be null!");
}
this.columnFamilyName = columnFamilyName;
this.keySerializer = keySerializer;
this.nameSerializer = nameSerializer;
this.valueSerializer = valueSerializer;
}
public HColumn<N, V> createColumn(N name, V value) {
return HFactory.createColumn(name, value, getNameSerializer(), getValueSerializer());
}
public boolean addColumn(N name, V value, List<HColumn<N, V>> columns) {
if (name != null && value != null) {
columns.add(createColumn(name, value));
return true;
} else {
return false;
}
}
public String getColumnFamilyName() {
return columnFamilyName;
}
public Serializer<K> getKeySerializer() {
return keySerializer;
}
public Serializer<N> getNameSerializer() {
return nameSerializer;
}
public Serializer<V> getValueSerializer() {
return valueSerializer;
}
abstract boolean isSuperColumnFamily();
public NormalColumnFamily<K, N, V> asNormal() {
if (isSuperColumnFamily()) {
return null;
} else {
return (NormalColumnFamily<K, N, V>) this;
}
}
@SuppressWarnings("unchecked")
public <SN> SuperColumnFamily<K, SN, N, V> asSuper() {
if (isSuperColumnFamily()) {
return (SuperColumnFamily<K, SN, N, V>) this;
} else {
return null;
}
}
}