package com.sleepycat.je;
import de.ovgu.cide.jakutil.*;
/**
* Javadoc for this public class is generated via
* the doc templates in the doc_src directory.
*/
public class SecondaryConfig extends DatabaseConfig {
static SecondaryConfig DEFAULT=new SecondaryConfig();
private boolean allowPopulate;
private SecondaryKeyCreator keyCreator;
private SecondaryMultiKeyCreator multiKeyCreator;
private Database foreignKeyDatabase;
private ForeignKeyDeleteAction foreignKeyDeleteAction=ForeignKeyDeleteAction.ABORT;
private ForeignKeyNullifier foreignKeyNullifier;
private ForeignMultiKeyNullifier foreignMultiKeyNullifier;
private boolean immutableSecondaryKey;
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public SecondaryConfig(){
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setKeyCreator( SecondaryKeyCreator keyCreator){
this.keyCreator=keyCreator;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public SecondaryKeyCreator getKeyCreator(){
return keyCreator;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setMultiKeyCreator( SecondaryMultiKeyCreator multiKeyCreator){
this.multiKeyCreator=multiKeyCreator;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public SecondaryMultiKeyCreator getMultiKeyCreator(){
return multiKeyCreator;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setAllowPopulate( boolean allowPopulate){
this.allowPopulate=allowPopulate;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public boolean getAllowPopulate(){
return allowPopulate;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setForeignKeyDatabase( Database foreignKeyDatabase){
this.foreignKeyDatabase=foreignKeyDatabase;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public Database getForeignKeyDatabase(){
return foreignKeyDatabase;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setForeignKeyDeleteAction( ForeignKeyDeleteAction foreignKeyDeleteAction){
DatabaseUtil.checkForNullParam(foreignKeyDeleteAction,"foreignKeyDeleteAction");
this.foreignKeyDeleteAction=foreignKeyDeleteAction;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public ForeignKeyDeleteAction getForeignKeyDeleteAction(){
return foreignKeyDeleteAction;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setForeignKeyNullifier( ForeignKeyNullifier foreignKeyNullifier){
this.foreignKeyNullifier=foreignKeyNullifier;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public ForeignKeyNullifier getForeignKeyNullifier(){
return foreignKeyNullifier;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setForeignMultiKeyNullifier( ForeignMultiKeyNullifier foreignMultiKeyNullifier){
this.foreignMultiKeyNullifier=foreignMultiKeyNullifier;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public ForeignMultiKeyNullifier getForeignMultiKeyNullifier(){
return foreignMultiKeyNullifier;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public void setImmutableSecondaryKey( boolean immutableSecondaryKey){
this.immutableSecondaryKey=immutableSecondaryKey;
}
/**
* Javadoc for this public method is generated via
* the doc templates in the doc_src directory.
*/
public boolean getImmutableSecondaryKey(){
return immutableSecondaryKey;
}
void validate( DatabaseConfig configArg) throws DatabaseException {
super.validate(configArg);
if (configArg == null || !(configArg instanceof SecondaryConfig)) {
throw new DatabaseException("The SecondaryConfig argument is null.");
}
SecondaryConfig config=(SecondaryConfig)configArg;
boolean kcMatch=equalOrBothNull(config.getKeyCreator(),keyCreator);
boolean mkcMatch=equalOrBothNull(config.getMultiKeyCreator(),multiKeyCreator);
boolean fkdMatch=(config.getForeignKeyDatabase() == foreignKeyDatabase);
boolean fkdaMatch=(config.getForeignKeyDeleteAction() == foreignKeyDeleteAction);
boolean fknMatch=equalOrBothNull(config.getForeignKeyNullifier(),foreignKeyNullifier);
boolean fmknMatch=equalOrBothNull(config.getForeignMultiKeyNullifier(),foreignMultiKeyNullifier);
boolean imskMatch=(config.getImmutableSecondaryKey() == immutableSecondaryKey);
if (kcMatch && mkcMatch && fkdMatch&& fkdaMatch&& fknMatch&& fmknMatch&& imskMatch) {
return;
}
String message=genSecondaryConfigMismatchMessage(config,kcMatch,mkcMatch,fkdMatch,fkdaMatch,fknMatch,fmknMatch,imskMatch);
throw new DatabaseException(message);
}
private boolean equalOrBothNull( Object o1, Object o2){
return (o1 != null) ? o1.equals(o2) : (o2 == null);
}
String genSecondaryConfigMismatchMessage( DatabaseConfig config, boolean kcMatch, boolean mkcMatch, boolean fkdMatch, boolean fkdaMatch, boolean fknMatch, boolean fmknMatch, boolean imskMatch){
StringBuffer ret=new StringBuffer("The following SecondaryConfig parameters for the\n" + "cached Database do not match the parameters for the\n" + "requested Database:\n");
if (!kcMatch) {
ret.append(" SecondaryKeyCreator\n");
}
if (!mkcMatch) {
ret.append(" SecondaryMultiKeyCreator\n");
}
if (!fkdMatch) {
ret.append(" ForeignKeyDelete\n");
}
if (!fkdaMatch) {
ret.append(" ForeignKeyDeleteAction\n");
}
if (!fknMatch) {
ret.append(" ForeignKeyNullifier\n");
}
if (!fknMatch) {
ret.append(" ForeignMultiKeyNullifier\n");
}
if (!imskMatch) {
ret.append(" ImmutableSecondaryKey\n");
}
return ret.toString();
}
}