Project

General

Profile

Download (9.87 KB) Statistics
| Branch: | Tag: | Revision:
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.Enumeration;
13
import java.util.Properties;
14

    
15
import org.apache.commons.lang.StringUtils;
16
import org.apache.log4j.Logger;
17
import org.hibernate.cache.internal.NoCachingRegionFactory;
18
import org.hibernate.cache.spi.RegionFactory;
19
import org.hibernate.cfg.Environment;
20
import org.springframework.beans.MutablePropertyValues;
21
import org.springframework.beans.factory.config.BeanDefinition;
22
import org.springframework.beans.factory.config.PropertiesFactoryBean;
23
import org.springframework.beans.factory.support.AbstractBeanDefinition;
24
import org.springframework.beans.factory.support.RootBeanDefinition;
25

    
26
import eu.etaxonomy.cdm.common.CdmUtils;
27

    
28
/**
29
 * @author a.mueller
30
 *
31
 */
32
public class CdmDataSource extends CdmDataSourceBase {
33
	@SuppressWarnings("unused")
34
	private static final Logger logger = Logger.getLogger(CdmDataSource.class);
35

    
36
	private DatabaseTypeEnum dbType;
37
	private String server;
38
	private String database;
39
	private int port = -1;
40
	private String username;
41
	private String password;
42

    
43
	private String filePath;
44
	private H2Mode mode;
45

    
46
	private boolean isLazy = true;
47
	private String initMethodName = null;
48
	private String destroyMethodName = null;
49
	private DbSchemaValidation hbm2dll = DbSchemaValidation.VALIDATE;
50
	private boolean showSql = false;
51
	private boolean formatSql = false;
52
	private boolean registerSearchListener = false;
53
	private Class<? extends RegionFactory> cacheProviderClass = NoCachingRegionFactory.class;
54

    
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);
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);
61
	}
62

    
63

    
64
	static public CdmDataSource  NewMySqlInstance(String server, String database, String username, String password ){
65
		return new CdmDataSource(DatabaseTypeEnum.MySQL, server, database, -1, username, password, null, null);
66
	}
67

    
68
	static public CdmDataSource  NewMySqlInstance(String server, String database, int port, String username, String password){
69
		return new CdmDataSource(DatabaseTypeEnum.MySQL, server, database, port, username, password, null, null);
70
	}
71

    
72
	static public CdmDataSource  NewPostgreSQLInstance(String server, String database, int port, String username, String password){
73
		return new CdmDataSource(DatabaseTypeEnum.PostgreSQL, server, database, port, username, password, null, null);
74
	}
75

    
76
	static public CdmDataSource  NewSqlServer2005Instance(String server, String database, int port, String username, String password){
77
		return new CdmDataSource(DatabaseTypeEnum.SqlServer2005, server, database, port, username, password, null, null);
78
	}
79

    
80

    
81
	/** in work
82
	 * @param code TODO*/
83
	static public CdmDataSource  NewH2EmbeddedInstance(String database, String username, String password){
84
		return NewH2EmbeddedInstance(database, username, password, null);
85
	}
86

    
87
	/** in work
88
	 * @param code TODO*/
89
	static public CdmDataSource  NewH2EmbeddedInstance(String database, String username, String password, String filePath /*, NomenclaturalCode code*/){
90
		//FIXME in work
91
		int port = -1;
92
		H2Mode mode = H2Mode.EMBEDDED;
93
		CdmDataSource dataSource = new CdmDataSource(DatabaseTypeEnum.H2, null, database, port, username, password, filePath, mode);
94
		return dataSource;
95
	}
96

    
97
	/** in work */
98
	static public CdmDataSource  NewH2InMemoryInstance(){
99
		//FIXME in work
100
		int port = -1;
101
		H2Mode mode = H2Mode.IN_MEMORY;
102
		String username = "sa";
103
		String password = "";
104
		CdmDataSource dataSource = new CdmDataSource(DatabaseTypeEnum.H2, null, null, port, username, password, null, mode);
105
		return dataSource;
106
	}
107

    
108

    
109
	public static CdmDataSource NewInstance(ICdmDataSource dataSource) {
110
		return new CdmDataSource(dataSource.getDatabaseType(),
111
				dataSource.getServer(),
112
				dataSource.getDatabase(),
113
				dataSource.getPort(),
114
				dataSource.getUsername(),
115
				dataSource.getPassword(),
116
				dataSource.getFilePath(),
117
				dataSource.getMode());
118
	}
119
	/**
120
	 * @param server
121
	 * @param database
122
	 * @param port
123
	 */
124
	protected CdmDataSource(DatabaseTypeEnum dbType, String server, String database, int port, String username, String password, String filePath, H2Mode mode /*, NomenclaturalCode code*/) {
125
		super();
126
		this.dbType = dbType;
127
		this.server = server;
128
		this.database = database;
129
		this.port = port;
130
		this.username = username;
131
		this.password = password;
132
		this.initMethodName = dbType.getInitMethod();
133
		this.destroyMethodName = dbType.getDestroyMethod();
134
		this.filePath = filePath;
135
		this.mode = mode;
136
	}
137

    
138
	@Override
139
	public String getName() {
140
		return database;
141
	}
142

    
143
	@Override
144
	public String getServer() {
145
		return server;
146
	}
147

    
148
	@Override
149
	public int getPort() {
150
		return port;
151
	}
152

    
153
	@Override
154
	public BeanDefinition getDatasourceBean(){
155
		AbstractBeanDefinition bd = new RootBeanDefinition(dbType.getDataSourceClass());
156
		//attributes
157
		bd.setLazyInit(isLazy);
158
		if (! CdmUtils.Nz(initMethodName).trim().equals("") ){
159
			bd.setInitMethodName(initMethodName);
160
		}
161
		if (! CdmUtils.Nz(destroyMethodName).trim().equals("") ){
162
			bd.setInitMethodName(destroyMethodName);
163
		}
164

    
165
		//properties
166
		MutablePropertyValues props = new MutablePropertyValues();
167
		Properties persistentProperties = getDatasourceProperties();
168
		Enumeration<Object> keys = persistentProperties.keys();
169
		while (keys.hasMoreElements()){
170
			String key = (String)keys.nextElement();
171
			props.addPropertyValue(key, persistentProperties.getProperty(key));
172
			Properties a = Environment.getProperties();
173
		}
174

    
175
		bd.setPropertyValues(props);
176
		return bd;
177
	}
178

    
179
	/**
180
	 * Returns the list of properties that are defined in the datasource
181
	 * @return
182
	 */
183
	private Properties getDatasourceProperties(){
184
		Properties result = new Properties();
185
		result.put("driverClassName", dbType.getDriverClassName());
186
		String connectionString = dbType.getConnectionString(this);
187
		result.put("url", connectionString);
188
		result.put("username", username);
189
		result.put("password", password);
190
		return result;
191
	}
192

    
193

    
194
	@Override
195
	public BeanDefinition getHibernatePropertiesBean(DbSchemaValidation hbm2dll){
196
		boolean showSql = false;
197
		boolean formatSql = false;
198
		boolean registerSearchListener = false;
199
		Class<? extends RegionFactory> cacheProviderClass = NoCachingRegionFactory.class;
200
		return getHibernatePropertiesBean(hbm2dll, showSql, formatSql, registerSearchListener, cacheProviderClass);
201
	}
202

    
203
	@Override
204
	public BeanDefinition getHibernatePropertiesBean(DbSchemaValidation hbm2dll, Boolean showSql, Boolean formatSql, Boolean registerSearchListener, Class<? extends RegionFactory> cacheProviderClass){
205
		//Hibernate default values
206
		if (hbm2dll == null){
207
			hbm2dll = this.hbm2dll;
208
		}
209
		if (showSql == null){
210
			showSql = this.showSql;
211
		}
212
		if (formatSql == null){
213
			formatSql = this.formatSql;
214
		}
215
		if (cacheProviderClass == null){
216
			cacheProviderClass = this.cacheProviderClass;
217
		}
218
		if(registerSearchListener == null){
219
			registerSearchListener = this.registerSearchListener;
220
		}
221

    
222
		DatabaseTypeEnum dbtype = dbType;
223
		AbstractBeanDefinition bd = new RootBeanDefinition(PropertiesFactoryBean.class);
224
		MutablePropertyValues hibernateProps = new MutablePropertyValues();
225

    
226
		Properties props = new Properties();
227
		props.setProperty("hibernate.hbm2ddl.auto", hbm2dll.toString());
228
		props.setProperty("hibernate.dialect", dbtype.getHibernateDialectCanonicalName());
229
//		OLD:props.setProperty("hibernate.cache.provider_class", cacheProviderClass.getName());
230
		props.setProperty("hibernate.cache.region.factory_class", cacheProviderClass.getName());
231
		props.setProperty("hibernate.show_sql", String.valueOf(showSql));
232
		props.setProperty("hibernate.format_sql", String.valueOf(formatSql));
233
		props.setProperty("hibernate.search.autoregister_listeners", String.valueOf(registerSearchListener));
234

    
235
		hibernateProps.addPropertyValue("properties",props);
236
		bd.setPropertyValues(hibernateProps);
237
		return bd;
238
	}
239

    
240
	public String getInitMethodName() {
241
		return initMethodName;
242
	}
243

    
244
	public void setInitMethodName(String initMethodName) {
245
		this.initMethodName = initMethodName;
246
	}
247

    
248
	public String getDestroyMethodName() {
249
		return destroyMethodName;
250
	}
251

    
252
	public void setDestroyMethodName(String destroyMethodName) {
253
		this.destroyMethodName = destroyMethodName;
254
	}
255

    
256
	@Override
257
	public String getDatabase() {
258
		return database;
259
	}
260

    
261
	@Override
262
	public void setDatabase(String database) {
263
		this.database = database;
264
	}
265

    
266
	@Override
267
	public DatabaseTypeEnum getDatabaseType() {
268
		return dbType;
269
	}
270

    
271
	@Override
272
	public String getFilePath() {
273
		return filePath;
274
	}
275

    
276
	@Override
277
	public H2Mode getMode() {
278
		return mode;
279
	}
280

    
281
	@Override
282
	public void setMode(H2Mode h2Mode) {
283
		this.mode = h2Mode;
284

    
285
	}
286

    
287
	@Override
288
	public String getPassword() {
289
		return password;
290
	}
291

    
292
	@Override
293
	public void setPassword(String password) {
294
		this.password = password;
295

    
296
	}
297

    
298
	@Override
299
	public String getUsername() {
300
		return username;
301
	}
302

    
303
	@Override
304
	public void setUsername(String username) {
305
		this.username = username;
306

    
307
	}
308

    
309
//********************* TO STRING() **********************/
310

    
311
	@Override
312
	public String toString() {
313
		if (StringUtils.isBlank(this.database)){
314
			return super.toString();
315
		}else{
316
			String result = "DataSource<" + dbType.getConnectionString(this).replace(CdmUtils.Nz(password), "") + ">";
317
			return result;
318
		}
319
	}
320

    
321
}
322

    
(1-1/20)