/*
* Copyright 2004-2015 the Seasar Foundation and the Others.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package org.seasar.extension.jdbc.gen.dialect;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.seasar.extension.jdbc.DbmsDialect;
import org.seasar.extension.jdbc.dialect.Db2390Dialect;
import org.seasar.extension.jdbc.dialect.Db2400Dialect;
import org.seasar.extension.jdbc.dialect.Db2Dialect;
import org.seasar.extension.jdbc.dialect.DerbyDialect;
import org.seasar.extension.jdbc.dialect.FirebirdDialect;
import org.seasar.extension.jdbc.dialect.H2Dialect;
import org.seasar.extension.jdbc.dialect.HsqlDialect;
import org.seasar.extension.jdbc.dialect.InterbaseDialect;
import org.seasar.extension.jdbc.dialect.MaxdbDialect;
import org.seasar.extension.jdbc.dialect.Mssql2005Dialect;
import org.seasar.extension.jdbc.dialect.MssqlDialect;
import org.seasar.extension.jdbc.dialect.MysqlDialect;
import org.seasar.extension.jdbc.dialect.OracleDialect;
import org.seasar.extension.jdbc.dialect.Postgre81Dialect;
import org.seasar.extension.jdbc.dialect.PostgreDialect;
import org.seasar.extension.jdbc.dialect.SqliteDialect;
import org.seasar.extension.jdbc.dialect.SybaseDialect;
import org.seasar.extension.jdbc.gen.internal.dialect.Db2390GenDialect;
import org.seasar.extension.jdbc.gen.internal.dialect.Db2400GenDialect;
import org.seasar.extension.jdbc.gen.internal.dialect.Db2GenDialect;
import org.seasar.extension.jdbc.gen.internal.dialect.DerbyGenDialect;
import org.seasar.extension.jdbc.gen.internal.dialect.FirebirdGenDialect;
import org.seasar.extension.jdbc.gen.internal.dialect.H2GenDialect;
import org.seasar.extension.jdbc.gen.internal.dialect.HsqlGenDialect;
import org.seasar.extension.jdbc.gen.internal.dialect.InterbaseGenDialect;
import org.seasar.extension.jdbc.gen.internal.dialect.MaxdbGenDialect;
import org.seasar.extension.jdbc.gen.internal.dialect.Mssql2005GenDialect;
import org.seasar.extension.jdbc.gen.internal.dialect.MssqlGenDialect;
import org.seasar.extension.jdbc.gen.internal.dialect.MysqlGenDialect;
import org.seasar.extension.jdbc.gen.internal.dialect.OracleGenDialect;
import org.seasar.extension.jdbc.gen.internal.dialect.Postgre81GenDialect;
import org.seasar.extension.jdbc.gen.internal.dialect.PostgreGenDialect;
import org.seasar.extension.jdbc.gen.internal.dialect.SqliteGenDialect;
import org.seasar.extension.jdbc.gen.internal.dialect.StandardGenDialect;
import org.seasar.extension.jdbc.gen.internal.dialect.SybaseGenDialect;
/**
* S2JDBC-Genのデータベースごとの方言を管理するクラスです。
*
* @author taedium
*/
public class GenDialectRegistry {
/** DB2 390の方言 */
protected static Db2390GenDialect DB2_390 = new Db2390GenDialect();
/** DB2 400の方言 */
protected static Db2400GenDialect DB2_400 = new Db2400GenDialect();
/** DB2の方言 */
protected static Db2GenDialect DB2 = new Db2GenDialect();
/** Derbyの方言 */
protected static DerbyGenDialect DERBY = new DerbyGenDialect();
/** Firebirdの方言 */
protected static FirebirdGenDialect FIREBIRD = new FirebirdGenDialect();
/** H2の方言 */
protected static H2GenDialect H2 = new H2GenDialect();
/** HSQLDBの方言 */
protected static HsqlGenDialect HSQL = new HsqlGenDialect();
/** Interbaseの方言 */
protected static InterbaseGenDialect INTERBASE = new InterbaseGenDialect();
/** MaxDBの方言 */
protected static MaxdbGenDialect MAXDB = new MaxdbGenDialect();
/** MS SQL Server 2005の方言 */
protected static Mssql2005GenDialect MSSQL_2005 = new Mssql2005GenDialect();
/** MS SQL Serverの方言 */
protected static MssqlGenDialect MSSQL = new MssqlGenDialect();
/** MySQLの方言 */
protected static MysqlGenDialect MYSQL = new MysqlGenDialect();
/** Oracleの方言 */
protected static OracleGenDialect ORACLE = new OracleGenDialect();
/** PostgreSQLの方言 */
protected static PostgreGenDialect POSTGRE = new PostgreGenDialect();
/** PostgreSQL 8.1の方言 */
protected static Postgre81GenDialect POSTGRE81 = new Postgre81GenDialect();
/** Sqliteの方言 */
protected static SqliteGenDialect SQLITE = new SqliteGenDialect();
/** Sybaseの方言 */
protected static SybaseGenDialect SYBASE = new SybaseGenDialect();
/** 標準的な方言 */
protected static StandardGenDialect STANDARD = new StandardGenDialect();
/** {@link DbmsDialect}のクラス名をキー、 {@link GenDialect}を値とするマップ */
protected static Map<String, GenDialect> dialectMap = new ConcurrentHashMap<String, GenDialect>();
static {
dialectMap.put(Db2390Dialect.class.getName(), DB2_390);
dialectMap.put(Db2400Dialect.class.getName(), DB2_400);
dialectMap.put(Db2Dialect.class.getName(), DB2);
dialectMap.put(DerbyDialect.class.getName(), DERBY);
dialectMap.put(FirebirdDialect.class.getName(), FIREBIRD);
dialectMap.put(H2Dialect.class.getName(), H2);
dialectMap.put(HsqlDialect.class.getName(), HSQL);
dialectMap.put(InterbaseDialect.class.getName(), INTERBASE);
dialectMap.put(MaxdbDialect.class.getName(), MAXDB);
dialectMap.put(MssqlDialect.class.getName(), MSSQL);
dialectMap.put(Mssql2005Dialect.class.getName(), MSSQL_2005);
dialectMap.put(MysqlDialect.class.getName(), MYSQL);
dialectMap.put(OracleDialect.class.getName(), ORACLE);
dialectMap.put(PostgreDialect.class.getName(), POSTGRE);
dialectMap.put(Postgre81Dialect.class.getName(), POSTGRE81);
dialectMap.put(SqliteDialect.class.getName(), SQLITE);
dialectMap.put(SybaseDialect.class.getName(), SYBASE);
}
private GenDialectRegistry() {
}
/**
* S2JDBC-Genのデータベースごとの方言を返します。
*
* @param dbmsDialect
* データベースごとの方言
* @return S2JDBC-Genのデータベースごとの方言
*/
public static GenDialect getGenDialect(DbmsDialect dbmsDialect) {
if (dbmsDialect == null) {
throw new NullPointerException("dbmsDialect");
}
return getGenDialectInternal(dbmsDialect.getClass());
}
/**
* S2JDBC-Genのデータベースごとの方言を返します。
*
* @param dbmsDialectClass
* {@link DbmsDialect}のクラス
* @return S2JDBC-Genのデータベースごとの方言
*/
public static GenDialect getGenDialect(
Class<? extends DbmsDialect> dbmsDialectClass) {
if (dbmsDialectClass == null) {
throw new NullPointerException("dbmsDialectClass");
}
return getGenDialectInternal(dbmsDialectClass);
}
/**
* 内部的にS2JDBC-Genのデータベースごとの方言を返します。
*
* @param dbmsDialectClass
* {@link DbmsDialect}のクラス
* @return S2JDBC-Genのデータベースごとの方言
*/
protected static GenDialect getGenDialectInternal(
Class<? extends DbmsDialect> dbmsDialectClass) {
GenDialect dialect = dialectMap.get(dbmsDialectClass.getName());
if (dialect != null) {
return dialect;
}
return STANDARD;
}
/**
* S2JDBC-Genのデータベースごとの方言を登録します。
*
* @param dbmsDialectClass
* {@link DbmsDialect}のクラス
* @param genDialect
* S2JDBC-Genのデータベースごとの方言
*/
public static void register(Class<? extends DbmsDialect> dbmsDialectClass,
GenDialect genDialect) {
if (dbmsDialectClass == null) {
throw new NullPointerException("dbmsDialectClass");
}
if (genDialect == null) {
throw new NullPointerException("genDialect");
}
dialectMap.put(dbmsDialectClass.getName(), genDialect);
}
/**
* S2JDBC-Genのデータベースごとの方言を削除します。
*
* @param dbmsDialectClass
* {@link DbmsDialect}のクラス
*/
public static void deregister(Class<? extends DbmsDialect> dbmsDialectClass) {
if (dbmsDialectClass == null) {
throw new NullPointerException("dbmsDialectClass");
}
dialectMap.remove(dbmsDialectClass.getName());
}
}