package pt.ist.fenixframework.indexes;
import java.io.Serializable;
import java.lang.reflect.Field;
import pt.ist.fenixframework.FenixFramework;
import pt.ist.fenixframework.adt.bplustree.BPlusTree;
import pt.ist.fenixframework.adt.bplustree.IBPlusTree;
public class InitializerBPlusTree<T extends Serializable> implements IBPlusTree<T>{
private final String initializationKey;
private final Field fieldToInitialize;
public InitializerBPlusTree(String key, Class<?> domainClass, String slotName) {
this.initializationKey = key;
Field f = null;
try {
f = domainClass.getDeclaredField(slotName);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
this.fieldToInitialize = f;
}
@Override
public T get(Comparable key) {
return initialize().get(key);
}
@Override
public void insert(Comparable key, T value) {
initialize().insert(key, value);
}
@Override
public void remove(Comparable key) {
initialize().remove(key);
}
private BPlusTree<T> initialize() {
BPlusTree<T> tree = (BPlusTree<T>)FenixFramework.getDomainRoot().getIndexRoot().get(initializationKey);
try {
fieldToInitialize.set(null, tree);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return tree;
}
}