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

55 lines
1.3 KiB
Java

package org.warp.jcwdb.ann;
import org.warp.jcwdb.Cleanable;
import org.warp.jcwdb.Cleaner;
import java.io.IOException;
import java.util.function.Supplier;
public class DatabaseManager implements Cleanable {
public static final long MAX_LOADED_INDICES = 100000;
private final Cleaner cleaner;
private final DataLoader dataLoader;
private DBObject loadedRootObject = null;
private volatile boolean closed;
DatabaseManager(DataLoader dataLoader) {
this.dataLoader = dataLoader;
this.cleaner = new Cleaner(this);
this.cleaner.start();
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
try {
DatabaseManager.this.close();
} catch (Exception e) {
e.printStackTrace();
}
}));
}
public <T extends DBObject> T loadRoot(Class<T> rootType, SupplierWithIO<T> ifAbsent) throws IOException {
if (loadedRootObject != null) {
throw new RuntimeException("Root already set!");
}
T root = dataLoader.loadRoot(rootType, ifAbsent);
loadedRootObject = root;
return root;
}
public void close() throws IOException {
if (!closed) {
closed = true;
DatabaseManager.this.cleaner.stop();
if (loadedRootObject != null) {
loadedRootObject.writeToDisk(0);
}
dataLoader.close();
}
}
@Override
public long clean() {
return 0;//indices.clean();
}
}