package co.codewizards.cloudstore.core.io;
import java.io.IOException;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.locks.Lock;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import co.codewizards.cloudstore.core.oio.File;
import co.codewizards.cloudstore.core.util.AssertUtil;
class LockFileProxy implements LockFile {
private static final Logger logger = LoggerFactory.getLogger(LockFileProxy.class);
private final LockFileImpl lockFileImpl;
private final AtomicBoolean released = new AtomicBoolean(false);
public LockFileProxy(final LockFileImpl lockFileImpl) {
this.lockFileImpl = AssertUtil.assertNotNull(lockFileImpl, "lockFileImpl");
}
@Override
public File getFile() {
return lockFileImpl.getFile();
}
@Override
public void release() {
if (!released.compareAndSet(false, true)) {
final IllegalStateException x = new IllegalStateException("Multiple invocations of release() should be avoided!");
logger.warn(x.toString(), x);
return;
}
lockFileImpl.release();
}
@Override
public final void close() {
release();
}
public LockFileImpl getLockFileImpl() {
return lockFileImpl;
}
@Override
public Lock getLock() {
return lockFileImpl.getLock();
}
@Override
public IInputStream createInputStream() throws IOException {
return lockFileImpl.createInputStream();
}
@Override
public IOutputStream createOutputStream() throws IOException {
return lockFileImpl.createOutputStream();
}
}