Project

General

Profile

Download (11.1 KB) Statistics
| Branch: | Tag: | Revision:
1 4a3bf259 Andreas Müller
/**
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 422db851 Andreas Müller
package eu.etaxonomy.cdm.database;
11
12
import java.util.Enumeration;
13
import java.util.Properties;
14
15 79a8b5c2 Andreas Müller
import org.apache.log4j.Logger;
16 422db851 Andreas Müller
import org.hibernate.cache.CacheProvider;
17
import org.hibernate.cache.NoCacheProvider;
18
import org.springframework.beans.MutablePropertyValues;
19
import org.springframework.beans.factory.config.BeanDefinition;
20
import org.springframework.beans.factory.config.PropertiesFactoryBean;
21
import org.springframework.beans.factory.support.AbstractBeanDefinition;
22
import org.springframework.beans.factory.support.RootBeanDefinition;
23
24 4acaf69f Andreas Müller
import eu.etaxonomy.cdm.common.CdmUtils;
25 01c21ead n.hoffmann
import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
26 422db851 Andreas Müller
27
/**
28
 * @author a.mueller
29
 *
30
 */
31 164411ea Andreas Müller
public class CdmDataSource extends CdmDataSourceBase {
32 1a9182c4 Andreas Müller
	@SuppressWarnings("unused")
33 79a8b5c2 Andreas Müller
	private static final Logger logger = Logger.getLogger(CdmDataSource.class);
34
	
35 422db851 Andreas Müller
	private DatabaseTypeEnum dbType;
36
	private String server;
37
	private String database; 
38
	private int port = -1;
39
	private String username;
40
	private String password;
41 89842e70 n.hoffmann
	private NomenclaturalCode nomenclaturalCode;
42 79a8b5c2 Andreas Müller
	
43
	private String filePath;
44
	private H2Mode mode;
45
46 422db851 Andreas Müller
	private boolean isLazy = true;
47
	private String initMethodName = null;
48
	private String destroyMethodName = null;
49 9c8bf5d6 Andreas Müller
	private DbSchemaValidation hbm2dll = DbSchemaValidation.VALIDATE;
50 422db851 Andreas Müller
	private boolean showSql = false;
51 f5438099 Andreas Müller
	private boolean formatSql = false;
52 16315da8 Andreas Müller
	private boolean registerSearchListener = false;
53 01c21ead n.hoffmann
	private Class<? extends CacheProvider> cacheProviderClass = NoCacheProvider.class;
54 b5fc49f9 Andreas Müller
	
55
	public static CdmDataSource NewInstance(DatabaseTypeEnum dbType, String server, String database, String username, String password){
56
		return new CdmDataSource(dbType, server, database, -1, username, password, null, null, null);
57
	}
58
59
	public static CdmDataSource NewInstance(DatabaseTypeEnum dbType, String server, String database, int port, String username, String password){
60
		return new CdmDataSource(dbType, server, database, port, username, password, null, null, null);
61
	}
62
	
63
	public static CdmDataSource NewInstance(DatabaseTypeEnum dbType, String server, String database, String username, String password , NomenclaturalCode code){
64
		return new CdmDataSource(dbType, server, database, -1, username, password, null, null, code);
65
	}
66
	
67
	public static CdmDataSource NewInstance(DatabaseTypeEnum dbType, String server, String database, int port, String username, String password , NomenclaturalCode code){
68 89842e70 n.hoffmann
		return new CdmDataSource(dbType, server, database, port, username, password, null, null, code);
69 01c21ead n.hoffmann
	}
70 b5fc49f9 Andreas Müller
71
	
72
	static public CdmDataSource  NewMySqlInstance(String server, String database, String username, String password ){
73
		return new CdmDataSource(DatabaseTypeEnum.MySQL, server, database, -1, username, password, null, null, null);
74
	}
75 01c21ead n.hoffmann
	
76 b5fc49f9 Andreas Müller
	static public CdmDataSource  NewMySqlInstance(String server, String database, String username, String password , NomenclaturalCode code){
77 89842e70 n.hoffmann
		return new CdmDataSource(DatabaseTypeEnum.MySQL, server, database, -1, username, password, null, null, code);
78 422db851 Andreas Müller
	}
79
	
80 89842e70 n.hoffmann
	static public CdmDataSource  NewMySqlInstance(String server, String database, int port, String username, String password, NomenclaturalCode code){
81
		return new CdmDataSource(DatabaseTypeEnum.MySQL, server, database, port, username, password, null, null, code);
82 422db851 Andreas Müller
	}
83
84 ece46ca8 Andreas Kohlbecker
	static public CdmDataSource  NewPostgreSQLInstance(String server, String database, int port, String username, String password, NomenclaturalCode code){
85
		return new CdmDataSource(DatabaseTypeEnum.PostgreSQL, server, database, port, username, password, null, null, code);
86
	}
87
88
	static public CdmDataSource  NewSqlServer2005Instance(String server, String database, int port, String username, String password, NomenclaturalCode code){
89
		return new CdmDataSource(DatabaseTypeEnum.SqlServer2005, server, database, port, username, password, null, null, code);
90 b04827d4 Andreas Müller
	}
91
	
92 b5fc49f9 Andreas Müller
	static public CdmDataSource  NewSqlServer2005Instance(String server, String database, int port, String username, String password /*, NomenclaturalCode code*/){
93 ece46ca8 Andreas Kohlbecker
		return new CdmDataSource(DatabaseTypeEnum.SqlServer2005, server, database, port, username, password, null, null, null);
94 b04827d4 Andreas Müller
	}
95
96 b5fc49f9 Andreas Müller
	
97
	/** in work 
98
	 * @param code TODO*/
99
	static public CdmDataSource  NewH2EmbeddedInstance(String database, String username, String password){
100 435eb2f9 Andreas Müller
		return NewH2EmbeddedInstance(database, username, password, null,  null);
101 b5fc49f9 Andreas Müller
	}
102 435eb2f9 Andreas Müller
	
103 89842e70 n.hoffmann
	/** in work 
104
	 * @param code TODO*/
105
	static public CdmDataSource  NewH2EmbeddedInstance(String database, String username, String password, NomenclaturalCode code){
106 435eb2f9 Andreas Müller
		return NewH2EmbeddedInstance(database, username, password, null, code);
107
	}
108
	
109
	/** in work 
110
	 * @param code TODO*/
111
	static public CdmDataSource  NewH2EmbeddedInstance(String database, String username, String password, String filePath, NomenclaturalCode code){
112 8ea5435e Andreas Müller
		//FIXME in work
113 79a8b5c2 Andreas Müller
		int port = -1;
114
		H2Mode mode = H2Mode.EMBEDDED;
115 89842e70 n.hoffmann
		CdmDataSource dataSource = new CdmDataSource(DatabaseTypeEnum.H2, null, database, port, username, password, null, mode, code);
116 a9348467 h.fradin
		return dataSource;
117
	}
118 79a8b5c2 Andreas Müller
119
	/** in work */
120
	static public CdmDataSource  NewH2InMemoryInstance(){
121
		//FIXME in work
122
		int port = -1;
123
		H2Mode mode = H2Mode.IN_MEMORY;
124
		String username = "sa";
125
		String password = "";
126 89842e70 n.hoffmann
		CdmDataSource dataSource = new CdmDataSource(DatabaseTypeEnum.H2, null, null, port, username, password, null, mode, null);
127 79a8b5c2 Andreas Müller
		return dataSource;
128
	}
129
130 b04827d4 Andreas Müller
	
131 422db851 Andreas Müller
	/**
132
	 * @param server
133
	 * @param database
134
	 * @param port
135
	 */
136 89842e70 n.hoffmann
	protected CdmDataSource(DatabaseTypeEnum dbType, String server, String database, int port, String username, String password, String filePath, H2Mode mode, NomenclaturalCode code) {
137 422db851 Andreas Müller
		super();
138
		this.dbType = dbType;
139
		this.server = server;
140
		this.database = database;
141
		this.port = port;
142
		this.username = username;
143
		this.password = password;
144 79a8b5c2 Andreas Müller
		this.initMethodName = dbType.getInitMethod();
145
		this.destroyMethodName = dbType.getDestroyMethod();
146
		this.filePath = filePath;
147
		this.mode = mode;
148 89842e70 n.hoffmann
		this.nomenclaturalCode = code;
149 422db851 Andreas Müller
	}
150
	
151 9aaf5258 Andreas Müller
	
152
	/* (non-Javadoc)
153
	 * @see eu.etaxonomy.cdm.database.ICdmDataSource#getName()
154 475e6c23 Andreas Müller
	 * A CdmDataSource does not have a name representation therefor the database name is returned
155 9aaf5258 Andreas Müller
	 */
156
	public String getName() {
157
		return database;
158
	}
159
	
160 422db851 Andreas Müller
	/* (non-Javadoc)
161
	 * @see eu.etaxonomy.cdm.api.application.ICdmDataSource#getDatasourceBean()
162
	 */
163 1a9182c4 Andreas Müller
	@SuppressWarnings("unchecked")
164 422db851 Andreas Müller
	public BeanDefinition getDatasourceBean(){
165 ece46ca8 Andreas Kohlbecker
		AbstractBeanDefinition bd = new RootBeanDefinition(dbType.getDataSourceClass());
166 422db851 Andreas Müller
		//attributes
167
		bd.setLazyInit(isLazy);
168 4acaf69f Andreas Müller
		if (! CdmUtils.Nz(initMethodName).trim().equals("") ){
169 422db851 Andreas Müller
			bd.setInitMethodName(initMethodName);
170
		}
171 4acaf69f Andreas Müller
		if (! CdmUtils.Nz(destroyMethodName).trim().equals("") ){
172 422db851 Andreas Müller
			bd.setInitMethodName(destroyMethodName);
173
		}
174
		
175
		//properties
176
		MutablePropertyValues props = new MutablePropertyValues();
177
		Properties persistentProperties = getDatasourceProperties();
178
		Enumeration<String> keys = (Enumeration)persistentProperties.keys(); 
179
		while (keys.hasMoreElements()){
180
			String key = (String)keys.nextElement();
181
			props.addPropertyValue(key, persistentProperties.getProperty(key));
182
		}
183
184
		bd.setPropertyValues(props);
185
		return bd;
186
	}
187
	
188
	/**
189
	 * Returns the list of properties that are defined in the datasource    
190
	 * @return 
191
	 */
192
	private Properties getDatasourceProperties(){
193
		Properties result = new Properties();
194
		result.put("driverClassName", dbType.getDriverClassName());
195 79a8b5c2 Andreas Müller
		String connectionString = dbType.getConnectionString(this);
196 f5438099 Andreas Müller
		result.put("url", connectionString);
197 422db851 Andreas Müller
		result.put("username", username);
198
		result.put("password", password);
199
		return result;
200
	}
201
	
202
203
	/* (non-Javadoc)
204
	 * @see eu.etaxonomy.cdm.api.application.ICdmDataSource#getHibernatePropertiesBean(eu.etaxonomy.cdm.database.CdmPersistentDataSource.HBM2DDL)
205
	 */
206 9c8bf5d6 Andreas Müller
	public BeanDefinition getHibernatePropertiesBean(DbSchemaValidation hbm2dll){
207 422db851 Andreas Müller
		boolean showSql = false;
208
		boolean formatSql = false;
209 16315da8 Andreas Müller
		boolean registerSearchListener = false;
210 422db851 Andreas Müller
		Class<? extends CacheProvider> cacheProviderClass = NoCacheProvider.class;
211 16315da8 Andreas Müller
		return getHibernatePropertiesBean(hbm2dll, showSql, formatSql, registerSearchListener, cacheProviderClass);
212 422db851 Andreas Müller
	}
213
	
214
	/* (non-Javadoc)
215
	 * @see eu.etaxonomy.cdm.api.application.ICdmDataSource#getHibernatePropertiesBean(eu.etaxonomy.cdm.database.CdmPersistentDataSource.HBM2DDL, java.lang.Boolean, java.lang.Boolean, java.lang.Class)
216
	 */
217 16315da8 Andreas Müller
	public BeanDefinition getHibernatePropertiesBean(DbSchemaValidation hbm2dll, Boolean showSql, Boolean formatSql, Boolean registerSearchListener, Class<? extends CacheProvider> cacheProviderClass){
218 422db851 Andreas Müller
		//Hibernate default values
219
		if (hbm2dll == null){
220
			hbm2dll = this.hbm2dll;
221
		}
222
		if (showSql == null){
223
			showSql = this.showSql;
224
		}
225
		if (formatSql == null){
226
			formatSql = this.formatSql;
227
		}
228
		if (cacheProviderClass == null){
229
			cacheProviderClass = this.cacheProviderClass;
230
		}
231 16315da8 Andreas Müller
		if(registerSearchListener == null){
232
			registerSearchListener = this.registerSearchListener;
233
		}
234 422db851 Andreas Müller
		
235
		DatabaseTypeEnum dbtype = dbType;
236
		AbstractBeanDefinition bd = new RootBeanDefinition(PropertiesFactoryBean.class);
237
		MutablePropertyValues hibernateProps = new MutablePropertyValues();
238
239
		Properties props = new Properties();
240
		props.setProperty("hibernate.hbm2ddl.auto", hbm2dll.toString());
241
		props.setProperty("hibernate.dialect", dbtype.getHibernateDialect());
242
		props.setProperty("hibernate.cache.provider_class", cacheProviderClass.getName());
243
		props.setProperty("hibernate.show_sql", String.valueOf(showSql));
244
		props.setProperty("hibernate.format_sql", String.valueOf(formatSql));
245 16315da8 Andreas Müller
		props.setProperty("hibernate.search.autoregister_listeners", String.valueOf(registerSearchListener));
246 422db851 Andreas Müller
247
		hibernateProps.addPropertyValue("properties",props);
248
		bd.setPropertyValues(hibernateProps);
249
		return bd;
250 4acaf69f Andreas Müller
	}
251
252
	public String getInitMethodName() {
253
		return initMethodName;
254
	}
255
256
	public void setInitMethodName(String initMethodName) {
257
		this.initMethodName = initMethodName;
258
	}
259
260
	public String getDestroyMethodName() {
261
		return destroyMethodName;
262
	}
263
264
	public void setDestroyMethodName(String destroyMethodName) {
265
		this.destroyMethodName = destroyMethodName;
266 79a8b5c2 Andreas Müller
	}
267
268
	public String getDatabase() {
269
		return database;
270
	}
271
272 c5370a16 a.babadshanjan
	public DatabaseTypeEnum getDatabaseType() {
273
		return dbType;
274
	}
275
	
276 79a8b5c2 Andreas Müller
	public String getFilePath() {
277
		return filePath;
278
	}
279
280
281
	public int getPort() {
282
		return port;
283
	}
284
285
	public String getServer() {
286
		return server;
287
	}
288
289
	public H2Mode getMode() {
290
		return mode;
291 164411ea Andreas Müller
	}
292
293
	/* (non-Javadoc)
294
	 * @see eu.etaxonomy.cdm.database.ICdmDataSource#getPassword()
295
	 */
296
	public String getPassword() {
297
		return password;
298
	}
299
300
	/* (non-Javadoc)
301
	 * @see eu.etaxonomy.cdm.database.ICdmDataSource#getUserName()
302
	 */
303 475e6c23 Andreas Müller
	public String getUsername() {
304 164411ea Andreas Müller
		return username;
305 89842e70 n.hoffmann
	}
306
307
	/* (non-Javadoc)
308
	 * @see eu.etaxonomy.cdm.database.ICdmDataSource#getNomenclaturalCode()
309
	 */
310
	public NomenclaturalCode getNomenclaturalCode() {
311
		return nomenclaturalCode;
312
	}		
313 422db851 Andreas Müller
}
314 79a8b5c2 Andreas Müller