strangedb/src/main/java/org/warp/jcwdb/ann/JCWDatabase.java

56 lines
1.6 KiB
Java

package org.warp.jcwdb.ann;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.nio.file.Path;
import java.util.function.Supplier;
public class JCWDatabase {
private final DatabaseManager database;
private final DataLoader dataLoader;
private final DataInitializer dataInitializer;
public JCWDatabase(Path dataFile, Path metadataFile, boolean registrationRequired) throws IOException {
this.dataLoader = new DataLoader(this, dataFile, metadataFile, registrationRequired);
this.dataInitializer = new DataInitializer(dataLoader);
this.database = new DatabaseManager(dataLoader);
}
public <T extends DBObject> T loadRoot(Class<T> rootClass) throws IOException {
return loadRoot(rootClass, () -> {
try {
return rootClass.getConstructor(JCWDatabase.class).newInstance(this);
} catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
throw new IOException(e);
}
});
}
public <T extends DBObject> T loadRoot(Class<T> rootClass, SupplierWithIO<T> ifAbsent) throws IOException {
return database.loadRoot(rootClass, ifAbsent);
}
public void registerClass(Class<?> clazz, int id) {
if (id < 0) {
throw new IllegalArgumentException();
}
dataLoader.registerClass(clazz, id);
}
public void close() throws IOException {
database.close();
}
public DataLoader getDataLoader() {
return dataLoader;
}
public DataInitializer getDataInitializer() {
return dataInitializer;
}
public void initializeDBObject(DBObject dbObject) throws IOException {
dataInitializer.initializeDBObject(dbObject);
}
}