package com.sleepycat.je;
import java.util.Comparator;
import com.sleepycat.je.dbi.DatabaseImpl;
import de.ovgu.cide.jakutil.*;
/**
* Javadoc for this public class is generated
* via the doc templates in the doc_src directory.
*/
public class DatabaseConfig implements Cloneable {
public static final DatabaseConfig DEFAULT=new DatabaseConfig();
private boolean allowCreate=false;
private boolean exclusiveCreate=false;
private boolean transactional=false;
private boolean readOnly=false;
private boolean duplicatesAllowed=false;
private int nodeMax;
private int nodeMaxDupTree;
private Comparator btreeComparator=null;
private Comparator duplicateComparator=null;
private boolean overrideBtreeComparator=false;
private boolean overrideDupComparator=false;
private boolean useExistingConfig=false;
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public DatabaseConfig(){
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setAllowCreate( boolean allowCreate){
this.allowCreate=allowCreate;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public boolean getAllowCreate(){
return allowCreate;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setExclusiveCreate( boolean exclusiveCreate){
this.exclusiveCreate=exclusiveCreate;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public boolean getExclusiveCreate(){
return exclusiveCreate;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setSortedDuplicates( boolean duplicatesAllowed){
this.duplicatesAllowed=duplicatesAllowed;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public boolean getSortedDuplicates(){
return duplicatesAllowed;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setTransactional( boolean transactional){
this.transactional=transactional;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public boolean getTransactional(){
return transactional;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setReadOnly( boolean readOnly){
this.readOnly=readOnly;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public boolean getReadOnly(){
return readOnly;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setNodeMaxEntries( int nodeMaxEntries){
this.nodeMax=nodeMaxEntries;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setNodeMaxDupTreeEntries( int nodeMaxDupTreeEntries){
this.nodeMaxDupTree=nodeMaxDupTreeEntries;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNodeMaxEntries(){
return nodeMax;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public int getNodeMaxDupTreeEntries(){
return nodeMaxDupTree;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setBtreeComparator( Class btreeComparator){
this.btreeComparator=validateComparator(btreeComparator,"Btree");
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public Comparator getBtreeComparator(){
return btreeComparator;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setOverrideBtreeComparator( boolean override){
overrideBtreeComparator=override;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public boolean getOverrideBtreeComparator(){
return overrideBtreeComparator;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setDuplicateComparator( Class duplicateComparator){
this.duplicateComparator=validateComparator(duplicateComparator,"Duplicate");
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public Comparator getDuplicateComparator(){
return duplicateComparator;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setOverrideDuplicateComparator( boolean override){
overrideDupComparator=override;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public boolean getOverrideDuplicateComparator(){
return overrideDupComparator;
}
/**
* For utilities, to avoid having to know the configuration of a database.
*/
void setUseExistingConfig( boolean useExistingConfig){
this.useExistingConfig=useExistingConfig;
}
/**
* For utilities, to avoid having to know the configuration of a database.
*/
boolean getUseExistingConfig(){
return useExistingConfig;
}
/**
* Used by Database to create a copy of the application
* supplied configuration. Done this way to provide non-public cloning.
*/
DatabaseConfig cloneConfig(){
try {
return (DatabaseConfig)super.clone();
}
catch ( CloneNotSupportedException willNeverOccur) {
return null;
}
}
void validate( DatabaseConfig config) throws DatabaseException {
if (config == null) {
config=DatabaseConfig.DEFAULT;
}
boolean txnMatch=config.getTransactional() == transactional;
boolean roMatch=config.getReadOnly() == readOnly;
boolean sdMatch=config.getSortedDuplicates() == duplicatesAllowed;
boolean btCmpMatch=(config.overrideBtreeComparator ? btreeComparator.getClass() == config.getBtreeComparator().getClass() : true);
boolean dtCmpMatch=(config.getOverrideDuplicateComparator() ? duplicateComparator.getClass() == config.getDuplicateComparator().getClass() : true);
if (txnMatch && roMatch && sdMatch&& btCmpMatch&& dtCmpMatch) {
return;
}
else {
String message=genDatabaseConfigMismatchMessage(config,txnMatch,roMatch,sdMatch,btCmpMatch,dtCmpMatch);
throw new DatabaseException(message);
}
}
String genDatabaseConfigMismatchMessage( DatabaseConfig config, boolean txnMatch, boolean roMatch, boolean sdMatch, boolean btCmpMatch, boolean dtCmpMatch){
StringBuffer ret=new StringBuffer("The following DatabaseConfig parameters for the\n" + "cached Database do not match the parameters for the\n" + "requested Database:\n");
if (!txnMatch) {
ret.append(" Transactional\n");
}
if (!roMatch) {
ret.append(" Read-Only\n");
}
if (!sdMatch) {
ret.append(" Sorted Duplicates\n");
}
if (!btCmpMatch) {
ret.append(" Btree Comparator\n");
}
if (!dtCmpMatch) {
ret.append(" Duplicate Comparator\n");
}
return ret.toString();
}
/**
* Check that this comparator can be instantiated by JE.
*/
private Comparator validateComparator( Class comparator, String type) throws IllegalArgumentException {
if (comparator == null) {
return null;
}
try {
Comparator ret=DatabaseImpl.instantiateComparator(comparator,type);
if (ret instanceof Comparator) {
return ret;
}
else {
throw new IllegalArgumentException(comparator.getName() + " is is not valid as a " + type+ " comparator because it does not "+ " implement java.util.Comparator.");
}
}
catch ( DatabaseException e) {
throw new IllegalArgumentException(type + " comparator is not valid: " + e.getMessage()+ "\nPerhaps you have not implemented a zero-parameter "+ "constructor for the comparator or the comparator class "+ "cannot be found.");
}
}
}