/**al
*
*/
package smartkv.client.tables;
import java.io.Serializable;
import java.util.Collection;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import smartkv.client.TableDataStoreProxy;
import smartkv.client.util.JavaSerializer;
import smartkv.client.util.Serializer;
/**
* @author fabiim
*
*/
public abstract class AbstractTable<K, V> implements Table<K, V> {
TableDataStoreProxy datastore;
String tableName;
Serializer<K> keySerializer;
protected AbstractTable(TableDataStoreProxy proxy, String tableName, Serializer<K> keySerializer, String reference){
this.tableName = tableName;
this.datastore = proxy;
this.keySerializer = keySerializer;
if (!datastore.containsTable(tableName)){
if (reference == null){
datastore.createTable(tableName);
}
else{
datastore.createPointerTable(tableName, reference);
}
}
}
protected AbstractTable(TableDataStoreProxy proxy, String tableName, Serializer<K> keySerializer){
this(proxy, tableName, keySerializer, null);
}
/* (non-Javadoc)
* @see bonafide.datastore.tables.Table#clear()
*/
@Override
public void clear() {
datastore.clear(tableName);
}
/* (non-Javadoc)
* @see bonafide.datastore.tables.Table#containsKey(java.lang.Object)
*/
@Override
public boolean containsKey(K key) {
return datastore.containsKey(tableName, serializeKey(key));
}
/* (non-Javadoc)
* @see bonafide.datastore.tables.Table#entrySet()
*/
@Override
public Set<Entry<K, V>> entrySet() {
throw new UnsupportedOperationException("Not yet implemented!");
}
/* (non-Javadoc)
* @see bonafide.datastore.tables.Table#isEmpty()
*/
@Override
public boolean isEmpty() {
return datastore.isEmpty(tableName);
}
/* (non-Javadoc)
* @see bonafide.datastore.tables.Table#keySet()
*/
@Override
public Set<K> keySet() {
throw new UnsupportedOperationException("Not yet implemented!");
}
/* (non-Javadoc)
* @see bonafide.datastore.tables.Table#putAll(java.util.Map)
*/
@Override
public void putAll(Map<? extends K, ? extends V> m) {
throw new UnsupportedOperationException("Not yet implemented!");
}
/* (non-Javadoc)
* @see bonafide.datastore.tables.Table#size()
*/
@Override
public int size() {
//FIXME
return (int) datastore.size(tableName);
}
/* (non-Javadoc)
* @see bonafide.datastore.tables.Table#getAndIncrement(java.lang.Object)
*/
@Override
public int getAndIncrement(String key) {
//FIXME - documentation, data store etc.. If key of table is string, then you may have a problem.... Do not use the same
return datastore.getAndIncrement(tableName, key);
}
/**
* @param key
* @return
*/
protected byte[] serializeKey(K key) {
return keySerializer.serialize(key);
}
}