package com.sleepycat.je.txn;
import de.ovgu.cide.jakutil.*;
/** 
 * LockConflict is a type safe enumeration of lock conflict types.  Methods on
 * LockConflict objects are used to determine whether a conflict exists and, if
 * so, how it should be handled.
 */
class LockConflict {
  static final LockConflict ALLOW=new LockConflict(true,false);
  static final LockConflict BLOCK=new LockConflict(false,false);
  static final LockConflict RESTART=new LockConflict(false,true);
  private boolean allowed;
  private boolean restart;
  /** 
 * No conflict types can be defined outside this class.
 */
  private LockConflict(  boolean allowed,  boolean restart){
    this.allowed=allowed;
    this.restart=restart;
  }
  /** 
 * This method is called first to determine whether the locks is allowed.
 * If true, there is no conflict.  If false, there is a conflict and the
 * requester must wait for or be denied the lock, or (if getRestart returns
 * true) an exception should be thrown to cause the requester's operation
 * to be restarted.
 */
  boolean getAllowed(){
    return allowed;
  }
  /** 
 * This method is called when getAllowed returns false to determine whether
 * an exception should be thrown to cause the requester's operation to be
 * restarted.  If getAllowed returns false and this method returns false,
 * the requester should wait for or be denied the lock, depending on the
 * request mode.  If getAllowed returns true, this method will always
 * return false.
 */
  boolean getRestart(){
    return restart;
  }
}
