Project

General

Profile

Download (5.84 KB) Statistics
| Branch: | Tag: | Revision:
1 469d68d6 Andreas Müller
/**
2 4a3bf259 Andreas Müller
* 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 469d68d6 Andreas Müller
package eu.etaxonomy.cdm.database;
11
12
import java.util.ArrayList;
13
import java.util.List;
14
15 ece46ca8 Andreas Kohlbecker
import javax.sql.DataSource;
16
17 469d68d6 Andreas Müller
import org.apache.log4j.Logger;
18 0f9d4e5a Andreas Müller
import org.hibernate.dialect.Dialect;
19 469d68d6 Andreas Müller
20 8ea5435e Andreas Müller
import eu.etaxonomy.cdm.database.types.H2DatabaseType;
21 469d68d6 Andreas Müller
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 475e6c23 Andreas Müller
import eu.etaxonomy.cdm.database.types.OracleDatabaseType;
26 469d68d6 Andreas Müller
import eu.etaxonomy.cdm.database.types.PostgreSQLDatabaseType;
27 7eb02b6c Andreas Müller
import eu.etaxonomy.cdm.database.types.SqlServer2005DatabaseType;
28 475e6c23 Andreas Müller
import eu.etaxonomy.cdm.database.types.SybaseDatabaseType;
29 469d68d6 Andreas Müller
30
/**
31
 * @author a.mueller
32
 *
33
 */
34
public enum DatabaseTypeEnum {
35
	HSqlDb(1),
36
	MySQL(2),
37
	ODBC(3),
38
	PostgreSQL(4),
39 475e6c23 Andreas Müller
	Oracle(5),
40 19ed68ce Andreas Müller
	//SqlServer2000(6),
41 475e6c23 Andreas Müller
	SqlServer2005(7),
42
	Sybase(8),
43
	H2(9)
44 469d68d6 Andreas Müller
	;
45
46 4dc21725 em.lee
	/**
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 469d68d6 Andreas Müller
	/**
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 475e6c23 Andreas Müller
        	case 5:
83
             	this.dbType = new OracleDatabaseType(); break;
84 19ed68ce Andreas Müller
//            case 6:
85
//            	this.dbType = new SqlServer2000DatabaseType(); break;
86 8ea5435e Andreas Müller
            case 7:
87 475e6c23 Andreas Müller
            	this.dbType = new SqlServer2005DatabaseType(); break;
88
            case 8:
89
            	this.dbType = new SybaseDatabaseType(); break;
90
            case 9:
91 8ea5435e Andreas Müller
            	this.dbType = new H2DatabaseType(); break;
92 469d68d6 Andreas Müller
            default:
93
                //TODO Exception
94
        }
95
	}
96
	
97 79a8b5c2 Andreas Müller
	public IDatabaseType getDatabaseType(){
98
		return dbType;
99
	}
100
	
101 469d68d6 Andreas Müller
 	//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 4dc21725 em.lee
		if(useP6Spy){
118
			return P6SPY_DRIVER_CLASS_NAME;
119
			
120
		} else {
121
			return dbType.getClassString();			
122
		}
123 469d68d6 Andreas Müller
	}
124 18fc4f8a Andreas Müller
    
125
	/**
126 ebd0744c Andreas Müller
	 * Returns the DataSource class that the datasource needs to create a spring bean
127 ece46ca8 Andreas Kohlbecker
	 * @return the DataSource class
128 18fc4f8a Andreas Müller
	 */
129 ece46ca8 Andreas Kohlbecker
	public Class<? extends DataSource> getDataSourceClass(){
130
		return dbType.getDataSourceClass();
131 18fc4f8a Andreas Müller
	}
132 469d68d6 Andreas Müller
	
133
	/**
134
	 * @return
135
	 */
136
	public String getUrl(){
137
		return dbType.getUrlString();
138
	}
139
	
140
	/**
141
	 * @return
142
	 */
143 0f9d4e5a Andreas Müller
	public String getHibernateDialectCanonicalName(){
144
		return dbType.getHibernateDialectCanonicalName();
145 469d68d6 Andreas Müller
	}
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 79a8b5c2 Andreas Müller
    public String getConnectionString(ICdmDataSource cdmDataSource){
162
    	String result = dbType.getConnectionString(cdmDataSource);
163 469d68d6 Andreas Müller
    	logger.debug("Connection String: " + result);	
164
        return result;
165
    }
166 0f9d4e5a Andreas Müller
	
167
    /**
168 3352ecd6 Andreas Müller
     * Returns the {@link Dialect hibernate dialect} used for this database type.
169 0f9d4e5a Andreas Müller
	 * @return hibernate dialect
170
	 */
171
    public Dialect getHibernateDialect(){
172
    	Dialect result = dbType.getHibernateDialect();
173
    	return result;
174
    }
175 79a8b5c2 Andreas Müller
176 469d68d6 Andreas Müller
	/**
177 79a8b5c2 Andreas Müller
     * 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 469d68d6 Andreas Müller
        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 79a8b5c2 Andreas Müller
    
223
    
224 18fc4f8a Andreas Müller
225 469d68d6 Andreas Müller
 
226
}
227