${database.allClassCopyright}package ${glPackageBaseCommon};
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.seasar.dbflute.DBDef;
import org.seasar.dbflute.QLog;
import org.seasar.dbflute.XLog;
import org.seasar.dbflute.bhv.core.supplement.SequenceCacheKeyGenerator;
import org.seasar.dbflute.jdbc.DataSourceHandler;
import org.seasar.dbflute.jdbc.StatementConfig;
import org.seasar.dbflute.jdbc.ValueType;
import org.seasar.dbflute.s2dao.valuetype.TnValueTypes;
import org.seasar.dbflute.twowaysql.DisplaySqlBuilder;
/**
* @author ${database.classAuthor}
*/
public class ${glDBFluteConfig} {
// ===================================================================================
// Definition
// ==========
/** Log instance. */
private static final Log _log = LogFactory.getLog(${glDBFluteConfig}.class);
#if ($database.isOutsideSqlPackageValid())
/** The default package of outside SQL. The default value is '${database.outsideSqlPackage}'. */
private static final String DEFAULT_OUTSIDE_SQL_PACKAGE = "${database.outsideSqlPackage}";
#else
/** The default package of outside SQL. */
private static final String DEFAULT_OUTSIDE_SQL_PACKAGE = null;
#end
#if ($database.isSqlLogRegistryValid())
/** The default value of whether it uses SQL Log Registry. The default value is true. */
private static final boolean DEFAULT_USE_SQL_LOG_REGISTRY = true;
#else
/** The default value of whether it uses SQL Log Registry. The default value is false. */
private static final boolean DEFAULT_USE_SQL_LOG_REGISTRY = false;
#end
/** Singleton instance. */
private static final ${glDBFluteConfig} _instance = new ${glDBFluteConfig}();
// ===================================================================================
// Attribute
// =========
// -----------------------------------------------------
// Configuration
// -------------
protected StatementConfig _defaultStatementConfig;
protected boolean _queryLogLevelInfo;
protected boolean _executeStatusLogLevelInfo;
protected String _logDateFormat;
protected String _logTimestampFormat;
protected DataSourceHandler _dataSourceHandler;
protected SequenceCacheKeyGenerator _sequenceCacheKeyGenerator;
protected String _outsideSqlPackage = DEFAULT_OUTSIDE_SQL_PACKAGE;
protected boolean _useSqlLogRegistry = DEFAULT_USE_SQL_LOG_REGISTRY;
protected boolean _disableSelectIndex;
protected boolean _internalDebug;
// -----------------------------------------------------
// Database Dependency
// -------------------
#if ($database.isAvailableDatabaseDependency())
#if ($database.isDatabasePostgreSQL())
protected org.seasar.dbflute.dbway.WayOfPostgreSQL.OperandOfLikeSearch _fullTextSearchOperand
= org.seasar.dbflute.dbway.WayOfPostgreSQL.OperandOfLikeSearch.FULL_TEXT_SEARCH;
#end
#end
// -----------------------------------------------------
// Lock
// ----
protected boolean _locked = false; // at first unlocked
// ===================================================================================
// Constructor
// ===========
/**
* Constructor.
*/
private ${glDBFluteConfig}() {
if (isCurrentDBDef(DBDef.Oracle)) {
// Date formatting has Two points:
// o The DATE type of Oracle has seconds.
// o It uses a date literal of Oracle.
String dateFormat = "yyyy-MM-dd HH:mm:ss";
_logDateFormat = "timestamp $df:{" + dateFormat + "}";
String timestampFormat = DisplaySqlBuilder.DEFAULT_TIMESTAMP_FORMAT;
_logTimestampFormat = "timestamp $df:{" + timestampFormat + "}";
// It should treat java.util.Date as time-stamp,
// because the DATE type of Oracle has seconds.
registerBasicValueType(java.util.Date.class, TnValueTypes.UTILDATE_AS_TIMESTAMP); // override
}
}
// ===================================================================================
// Singleton
// =========
/**
* Get singleton instance.
* @return Singleton instance. (NotNull)
*/
public static ${glDBFluteConfig} getInstance() {
return _instance;
}
// ===================================================================================
// Default Statement Config
// ========================
public StatementConfig getDefaultStatementConfig() {
return _defaultStatementConfig;
}
public void setDefaultStatementConfig(StatementConfig defaultStatementConfig) {
assertNotLocked();
if (_log.isInfoEnabled()) {
_log.info("...Setting defaultStatementConfig: " + defaultStatementConfig);
}
_defaultStatementConfig = defaultStatementConfig;
}
// ===================================================================================
// Query Log Level Info
// ====================
public void setQueryLogLevelInfo(boolean queryLogLevelInfo) {
assertNotLocked();
if (_log.isInfoEnabled()) {
_log.info("...Setting queryLogLevelInfo: " + queryLogLevelInfo);
}
QLog.unlock();
QLog.setQueryLogLevelInfo(queryLogLevelInfo);
QLog.lock();
}
// ===================================================================================
// Execute Status Log Level Info
// =============================
public void setExecuteStatusLogLevelInfo(boolean executeStatusLogLevelInfo) {
assertNotLocked();
if (_log.isInfoEnabled()) {
_log.info("...Setting executeStatusLogLevelInfo: " + executeStatusLogLevelInfo);
}
XLog.unlock();
XLog.setExecuteStatusLogLevelInfo(executeStatusLogLevelInfo);
XLog.lock();
}
// ===================================================================================
// Log Format
// ==========
public String getLogDateFormat() {
return _logDateFormat;
}
public void setLogDateFormat(String logDateFormat) {
assertNotLocked();
if (_log.isInfoEnabled()) {
_log.info("...Setting logDateFormat: " + logDateFormat);
}
_logDateFormat = logDateFormat;
}
public String getLogTimestampFormat() {
return _logTimestampFormat;
}
public void setLogTimestampFormat(String logTimestampFormat) {
assertNotLocked();
if (_log.isInfoEnabled()) {
_log.info("...Setting logTimestampFormat: " + logTimestampFormat);
}
_logTimestampFormat = logTimestampFormat;
}
// [DBFlute-0.9.0]
// ===================================================================================
// DataSource Handler
// ==================
/**
* @return The handler of data source. (Nullable)
*/
public DataSourceHandler getDataSourceHandler() {
return _dataSourceHandler;
}
/**
* @param dataSourceHandler The handler of data source. (Nullable)
*/
public void setDataSourceHandler(DataSourceHandler dataSourceHandler) {
assertNotLocked();
if (_log.isInfoEnabled()) {
_log.info("...Setting dataSourceHandler: " + dataSourceHandler);
}
_dataSourceHandler = dataSourceHandler;
}
// [DBFlute-0.9.6.4]
// ===================================================================================
// Sequence Cache
// ==============
/**
* @return The key generator of sequence cache. (Nullable)
*/
public SequenceCacheKeyGenerator getSequenceCacheKeyGenerator() {
return _sequenceCacheKeyGenerator;
}
/**
* @param sequenceCacheKeyGenerator The key generator of sequence cache. (Nullable)
*/
public void setSequenceCacheKeyGenerator(SequenceCacheKeyGenerator sequenceCacheKeyGenerator) {
assertNotLocked();
if (_log.isInfoEnabled()) {
_log.info("...Setting sequenceCacheKeyGenerator: " + sequenceCacheKeyGenerator);
}
_sequenceCacheKeyGenerator = sequenceCacheKeyGenerator;
}
// ===================================================================================
// OutsideSql Package
// ==================
/**
* @return The package of outside SQL. (Nullable)
*/
public String getOutsideSqlPackage() {
return _outsideSqlPackage;
}
/**
* @param outsideSqlPackage The package of outside SQL. (Nullable)
*/
public void setOutsideSqlPackage(String outsideSqlPackage) {
assertNotLocked();
if (_log.isInfoEnabled()) {
_log.info("...Setting outsideSqlPackage: " + outsideSqlPackage);
}
_outsideSqlPackage = outsideSqlPackage;
}
// [DBFlute-0.8.2]
// ===================================================================================
// SQL Log Registry
// ================
public boolean isUseSqlLogRegistry() {
return _useSqlLogRegistry;
}
public void setUseSqlLogRegistry(boolean useSqlLogRegistry) {
assertNotLocked();
if (_log.isInfoEnabled()) {
_log.info("...Setting useSqlLogRegistry: " + useSqlLogRegistry);
}
_useSqlLogRegistry = useSqlLogRegistry;
}
// [DBFlute-0.9.0]
// ===================================================================================
// Select Index
// ============
public boolean isDisableSelectIndex() {
return _disableSelectIndex;
}
public void setDisableSelectIndex(boolean disableSelectIndex) {
assertNotLocked();
if (_log.isInfoEnabled()) {
_log.info("...Setting disableSelectIndex: " + disableSelectIndex);
}
_disableSelectIndex = disableSelectIndex;
}
// ===================================================================================
// Database Dependency
// ===================
#if ($database.isAvailableDatabaseDependency())
#if ($database.isDatabasePostgreSQL())
// -----------------------------------------------------
// Full-Text Search Operand
// ------------------------
public org.seasar.dbflute.dbway.WayOfPostgreSQL.OperandOfLikeSearch getFullTextSearchOperand() {
return _fullTextSearchOperand;
}
public void useDefaultFullTextSearchOperand() {
assertNotLocked();
if (_log.isInfoEnabled()) {
_log.info("...Using fullTextSearchOperand: Default");
}
_fullTextSearchOperand = org.seasar.dbflute.dbway.WayOfPostgreSQL.OperandOfLikeSearch.FULL_TEXT_SEARCH;
}
public void useOldFullTextSearchOperand() {
assertNotLocked();
if (_log.isInfoEnabled()) {
_log.info("...Using fullTextSearchOperand: Old");
}
_fullTextSearchOperand = org.seasar.dbflute.dbway.WayOfPostgreSQL.OperandOfLikeSearch.OLD_FULL_TEXT_SEARCH;
}
#end
#end
// ===================================================================================
// Internal Debug
// ==============
public boolean isInternalDebug() {
return _internalDebug;
}
public void setInternalDebug(boolean internalDebug) {
assertNotLocked();
if (_log.isInfoEnabled()) {
_log.info("...Setting internalDebug: " + internalDebug);
}
_internalDebug = internalDebug;
}
// ===================================================================================
// Value Type
// ==========
/**
* Register the basic value type.
* This setting is shared by other DBFlute projects in the same class loader.
* @param keyType The type as key. (NotNull)
* @param valueType The basic value type. (NotNull)
*/
public void registerBasicValueType(Class> keyType, ValueType valueType) {
assertNotLocked();
if (_log.isInfoEnabled()) {
_log.info("...Registering basic valueType: keyType=" + keyType + " valueType=" + valueType);
}
TnValueTypes.registerBasicValueType(keyType, valueType);
}
public void removeBasicValueType(Class> keyType) {
assertNotLocked();
if (_log.isInfoEnabled()) {
_log.info("...Removing basic valueType: keyType=" + keyType);
}
TnValueTypes.removeBasicValueType(keyType);
}
/**
* Register the plug-in value type.
* This setting is shared by other DBFlute projects in the same class loader.
* @param keyName The name as key. (NotNull)
* @param valueType The plug-in value type. (NotNull)
*/
public void registerPluginValueType(String keyName, ValueType valueType) {
assertNotLocked();
if (_log.isInfoEnabled()) {
_log.info("...Registering plug-in valueType: keyName=" + keyName + " valueType=" + valueType);
}
TnValueTypes.registerPluginValueType(keyName, valueType);
}
public void removePluginValueType(String keyName) {
assertNotLocked();
if (_log.isInfoEnabled()) {
_log.info("...Removing plug-in valueType: keyName=" + keyName);
}
TnValueTypes.removePluginValueType(keyName);
}
// ===================================================================================
// Configuration Lock
// ==================
public boolean isLocked() {
return _locked;
}
public void lock() {
if (_log.isInfoEnabled()) {
_log.info("...Locking the configuration of DBFlute!");
}
_locked = true;
}
public void unlock() {
if (_log.isInfoEnabled()) {
_log.info("...Unlocking the configuration of DBFlute!");
}
_locked = false;
}
protected void assertNotLocked() {
if (!isLocked()) {
return;
}
String msg = "The configuration of DBFlute is locked! Don't access at this timing!";
throw new IllegalStateException(msg);
}
// ===================================================================================
// Assist Helper
// =============
protected boolean isCurrentDBDef(DBDef currentDBDef) {
return ${glDBCurrent}.getInstance().isCurrentDBDef(currentDBDef);
}
}