minor
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / database / DatabaseTypeEnum.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9
10 package eu.etaxonomy.cdm.database;
11
12 import java.util.ArrayList;
13 import java.util.List;
14
15 import javax.sql.DataSource;
16
17 import org.apache.log4j.Logger;
18 import org.hibernate.dialect.Dialect;
19
20 import eu.etaxonomy.cdm.database.types.H2DatabaseType;
21 import eu.etaxonomy.cdm.database.types.HSqlDbDatabaseType;
22 import eu.etaxonomy.cdm.database.types.IDatabaseType;
23 import eu.etaxonomy.cdm.database.types.MySQLDatabaseType;
24 import eu.etaxonomy.cdm.database.types.OdbcDatabaseType;
25 import eu.etaxonomy.cdm.database.types.OracleDatabaseType;
26 import eu.etaxonomy.cdm.database.types.PostgreSQLDatabaseType;
27 import eu.etaxonomy.cdm.database.types.SqlServer2005DatabaseType;
28 import eu.etaxonomy.cdm.database.types.SybaseDatabaseType;
29
30 /**
31 * @author a.mueller
32 *
33 */
34 public enum DatabaseTypeEnum {
35 HSqlDb(1),
36 MySQL(2),
37 ODBC(3),
38 PostgreSQL(4),
39 Oracle(5),
40 //SqlServer2000(6),
41 SqlServer2005(7),
42 Sybase(8),
43 H2(9)
44 ;
45
46 /**
47 *
48 */
49 private static final String P6SPY_DRIVER_CLASS_NAME = "com.p6spy.engine.spy.P6SpyDriver";
50 private boolean useP6Spy = false;
51
52
53 /**
54 * @return the useP6Spy
55 */
56 public boolean isUseP6Spy() {
57 return useP6Spy;
58 }
59
60 /**
61 * @param useP6Spy the useP6Spy to set
62 */
63 public void setUseP6Spy(boolean useP6Spy) {
64 this.useP6Spy = useP6Spy;
65 }
66
67 /**
68 * Constructor
69 * @param i
70 */
71 private DatabaseTypeEnum(int i) {
72 switch(i)
73 {
74 case 1:
75 this.dbType = new HSqlDbDatabaseType(); break;
76 case 2:
77 this.dbType = new MySQLDatabaseType(); break;
78 case 3:
79 this.dbType = new OdbcDatabaseType(); break;
80 case 4:
81 this.dbType = new PostgreSQLDatabaseType(); break;
82 case 5:
83 this.dbType = new OracleDatabaseType(); break;
84 // case 6:
85 // this.dbType = new SqlServer2000DatabaseType(); break;
86 case 7:
87 this.dbType = new SqlServer2005DatabaseType(); break;
88 case 8:
89 this.dbType = new SybaseDatabaseType(); break;
90 case 9:
91 this.dbType = new H2DatabaseType(); break;
92 default:
93 //TODO Exception
94 }
95 }
96
97 public IDatabaseType getDatabaseType(){
98 return dbType;
99 }
100
101 //Logger
102 private static final Logger logger = Logger.getLogger(DatabaseTypeEnum.class);
103 protected IDatabaseType dbType;
104
105
106 /**
107 * @return
108 */
109 public String getName(){
110 return dbType.getName();
111 }
112
113 /**
114 * @return
115 */
116 public String getDriverClassName(){
117 if(useP6Spy){
118 return P6SPY_DRIVER_CLASS_NAME;
119
120 } else {
121 return dbType.getClassString();
122 }
123 }
124
125 /**
126 * Returns the DataSource class that that the datasource needs to create a spring bean
127 * @return the DataSource class
128 */
129 public Class<? extends DataSource> getDataSourceClass(){
130 return dbType.getDataSourceClass();
131 }
132
133 /**
134 * @return
135 */
136 public String getUrl(){
137 return dbType.getUrlString();
138 }
139
140 /**
141 * @return
142 */
143 public String getHibernateDialectCanonicalName(){
144 return dbType.getHibernateDialectCanonicalName();
145 }
146
147 /**
148 * @return
149 */
150 public int getDefaultPort(){
151 return dbType.getDefaultPort();
152 }
153
154 /**
155 * returns the connection string
156 * @param server the server, e.g. IP-Address
157 * @param database the database name on the server (e.g. "testDB")
158 * @param port the port number
159 * @return the connection string
160 */
161 public String getConnectionString(ICdmDataSource cdmDataSource){
162 String result = dbType.getConnectionString(cdmDataSource);
163 logger.debug("Connection String: " + result);
164 return result;
165 }
166
167 /**
168 * Returns the {@link Dialect hiberante dialect} used for this database type.
169 * @return hibernate dialect
170 */
171 public Dialect getHibernateDialect(){
172 Dialect result = dbType.getHibernateDialect();
173 return result;
174 }
175
176 /**
177 * Returns the Name of the initialization method to be used when a hibernate datasource is created for this database
178 * @return String name of the init method
179 */
180 public String getInitMethod(){
181 String result = dbType.getInitMethod();
182 logger.debug("InitMethod: " + result);
183 return result;
184 }
185
186 /**
187 * Returns the Name of the destroying method to be used when a hibernate datasource representing this database is destroyed
188 * @return String name of the destroy method
189 */
190 public String getDestroyMethod(){
191 String result = dbType.getDestroyMethod();
192 logger.debug("DestroyMethod: " + result);
193 return result;
194 }
195
196 /**
197 * Returns a List of all available DatabaseEnums.
198 * @return List of DatabaseEnums
199 */
200 public static List<DatabaseTypeEnum> getAllTypes(){
201 List<DatabaseTypeEnum> result = new ArrayList<DatabaseTypeEnum>();
202 for (DatabaseTypeEnum dbEnum : DatabaseTypeEnum.values()){
203 result.add(dbEnum);
204 }
205 return result;
206 }
207
208 /**
209 * Returns the DatabaseTypeEnum to a given DriverClass
210 * @param strDriverClass
211 * @return the according DatabaseTypeEnum. Null if the driver class does not exist.
212 */
213 public static DatabaseTypeEnum getDatabaseEnumByDriverClass(String strDriverClass){
214 for (DatabaseTypeEnum dbEnum : DatabaseTypeEnum.values()){
215 if (dbEnum.getDriverClassName().equals(strDriverClass)){
216 return dbEnum;
217 }
218 }
219 logger.warn("Unknown driver class " + strDriverClass==null ? "null" : strDriverClass);
220 return null;
221 }
222
223
224
225
226 }
227