55 lines
1.3 KiB
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();
|
|
}
|
|
}
|