/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 1997, 2015 Oracle and/or its affiliates. All rights reserved.
*
* $Id$
*/
package com.sleepycat.db;
import com.sleepycat.db.internal.DbLock;
/**
The LockRequest object is used to encapsulate a single lock request.
*/
public class LockRequest {
private DbLock lock;
private LockRequestMode mode;
private int modeFlag;
private DatabaseEntry obj;
private int op;
private int timeout;
/**
Construct a LockRequest with the specified operation and mode for the
specified object.
<p>
@param mode
The permissions mode for the object.
<p>
@param obj
The object being locked.
<p>
@param op
The operation being performed.
*/
public LockRequest(final LockOperation op,
final LockRequestMode mode,
final DatabaseEntry obj) {
this(op, mode, obj, null, 0);
}
/**
Construct a LockRequest with the specified operation, mode and lock,
for the specified object.
<p>
@param mode
The permissions mode for the object.
<p>
@param obj
The object being locked.
<p>
@param op
The operation being performed.
<p>
@param lock
The lock type for the object.
*/
public LockRequest(final LockOperation op,
final LockRequestMode mode,
final DatabaseEntry obj,
final Lock lock) {
this(op, mode, obj, lock, 0);
}
/**
Construct a LockRequest with the specified operation, mode, lock and
timeout for the specified object.
<p>
@param lock
The lock type for the object.
<p>
@param mode
The permissions mode for the object.
<p>
@param obj
The object being locked.
<p>
@param op
The operation being performed.
<p>
@param timeout
The timeout value for the lock.
*/
public LockRequest(final LockOperation op,
final LockRequestMode mode,
final DatabaseEntry obj,
final Lock lock,
final int timeout) {
this.setOp(op);
this.setMode(mode);
this.setObj(obj);
this.setLock(lock);
this.setTimeout(timeout);
}
/**
Set the lock reference.
<p>
@param lock
The lock reference.
*/
public void setLock(final Lock lock) {
this.lock = (lock == null) ? null : lock.unwrap();
}
/**
Set the lock mode.
<p>
@param mode
the lock mode.
*/
public void setMode(final LockRequestMode mode) {
this.mode = mode;
this.modeFlag = mode.getFlag();
}
/**
Set the lock object.
<p>
@param obj
The lock object.
*/
public void setObj(final DatabaseEntry obj) {
this.obj = obj;
}
/**
Set the operation.
<p>
@param op
The operation.
*/
public void setOp(final LockOperation op) {
this.op = op.getFlag();
}
/**
Set the lock timeout value.
<p>
@param timeout
The lock timeout value.
*/
public void setTimeout(final int timeout) {
this.timeout = timeout;
}
/**
Return the lock reference.
*/
public Lock getLock() {
if (lock != null && lock.wrapper != null)
return lock.wrapper;
else
return Lock.wrap(lock);
}
/**
Return the lock mode.
*/
public LockRequestMode getMode() {
return mode;
}
/**
Return the lock object.
*/
public DatabaseEntry getObj() {
return obj;
}
/**
Return the lock operation.
*/
public LockOperation getOp() {
return LockOperation.fromFlag(op);
}
/**
Return the lock timeout value.
*/
public int getTimeout() {
return timeout;
}
}