CavalliumDBEngine/src/main/java/it/cavallium/dbengine/utils/SimpleResource.java

38 lines
783 B
Java
Raw Normal View History

2022-06-14 18:05:26 +02:00
package it.cavallium.dbengine.utils;
import it.cavallium.dbengine.database.SafeCloseable;
import java.util.concurrent.atomic.AtomicBoolean;
public abstract class SimpleResource implements SafeCloseable {
private final AtomicBoolean closed = new AtomicBoolean();
2022-06-20 23:31:42 +02:00
private final boolean canClose;
public SimpleResource() {
canClose = true;
}
protected SimpleResource(boolean canClose) {
this.canClose = canClose;
}
2022-06-14 18:05:26 +02:00
@Override
public final void close() {
2022-06-20 23:31:42 +02:00
if (canClose && closed.compareAndSet(false, true)) {
2022-06-14 18:05:26 +02:00
onClose();
}
}
private boolean isClosed() {
2022-06-20 23:31:42 +02:00
return canClose && closed.get();
2022-06-14 18:05:26 +02:00
}
protected void ensureOpen() {
2022-06-20 23:31:42 +02:00
if (canClose && closed.get()) {
2022-06-14 18:05:26 +02:00
throw new IllegalStateException("Resource is closed");
}
}
protected abstract void onClose();
}