Project

General

Profile

Download (10.1 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.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
17
import org.hibernate.cache.internal.NoCachingRegionFactory;
18
import org.hibernate.cache.spi.RegionFactory;
19
import org.springframework.beans.MutablePropertyValues;
20
import org.springframework.beans.factory.config.BeanDefinition;
21
import org.springframework.beans.factory.support.AbstractBeanDefinition;
22
import org.springframework.beans.factory.support.RootBeanDefinition;
23

    
24
import eu.etaxonomy.cdm.common.CdmUtils;
25
import eu.etaxonomy.cdm.persistence.hibernate.HibernateConfiguration;
26

    
27
/**
28
 * @author a.mueller
29
 */
30
public class CdmDataSource extends CdmDataSourceBase {
31

    
32
    @SuppressWarnings("unused")
33
	private static final Logger logger = LogManager.getLogger(CdmDataSource.class);
34

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

    
41
	private String filePath;
42
	private H2Mode mode;
43

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

    
54
	public static CdmDataSource NewInstance(DatabaseTypeEnum dbType, String server, String database, String username, String password){
55
		return new CdmDataSource(dbType, server, database, -1, username, password, null, null);
56
	}
57

    
58
	public static CdmDataSource NewInstance(DatabaseTypeEnum dbType, String server, String database, int port, String username, String password){
59
		return new CdmDataSource(dbType, server, database, port, username, password, null, null);
60
	}
61

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

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

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

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

    
78
    static public CdmDataSource  NewSqlServer2008Instance(String server, String database, int port, String username, String password){
79
        return new CdmDataSource(DatabaseTypeEnum.SqlServer2008, server, database, port, username, password, null, null);
80
    }
81

    
82
    static public CdmDataSource  NewSqlServer2012Instance(String server, String database, int port, String username, String password){
83
        return new CdmDataSource(DatabaseTypeEnum.SqlServer2012, server, database, port, username, password, null, null);
84
    }
85

    
86
	/** in work
87
	 * @param code TODO*/
88
	static public CdmDataSource  NewH2EmbeddedInstance(String database, String username, String password){
89
		return NewH2EmbeddedInstance(database, username, password, null);
90
	}
91

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

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

    
113

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

    
143
	@Override
144
	public String getName() {
145
		return database;
146
	}
147

    
148
	@Override
149
	public String getServer() {
150
		return server;
151
	}
152

    
153
	@Override
154
	public int getPort() {
155
		return port;
156
	}
157

    
158
	@Override
159
	public BeanDefinition getDatasourceBean(){
160
		AbstractBeanDefinition bd = new RootBeanDefinition(dbType.getDataSourceClass());
161
		//attributes
162
		bd.setLazyInit(isLazy);
163
		if (! CdmUtils.Nz(initMethodName).trim().equals("") ){
164
			bd.setInitMethodName(initMethodName);
165
		}
166
		if (! CdmUtils.Nz(destroyMethodName).trim().equals("") ){
167
			bd.setInitMethodName(destroyMethodName);
168
		}
169

    
170
		//properties
171
		MutablePropertyValues props = new MutablePropertyValues();
172
		Properties persistentProperties = getDatasourceProperties();
173
		Enumeration<Object> keys = persistentProperties.keys();
174
		while (keys.hasMoreElements()){
175
			String key = (String)keys.nextElement();
176
			props.addPropertyValue(key, persistentProperties.getProperty(key));
177
//			Properties a = Environment.getProperties();
178
		}
179

    
180
		bd.setPropertyValues(props);
181
		return bd;
182
	}
183

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

    
198

    
199
	@Override
200
	public BeanDefinition getHibernatePropertiesBean(DbSchemaValidation hbm2dll){
201
        HibernateConfiguration hibernateConfig = HibernateConfiguration.NewDefaultInstance();
202
		return getHibernatePropertiesBean(hbm2dll, hibernateConfig);
203
	}
204

    
205
    @Override
206
    @Deprecated
207
    public BeanDefinition getHibernatePropertiesBean(DbSchemaValidation hbm2dll, Boolean showSql, Boolean formatSql,
208
            Boolean registerSearchListener, Class<? extends RegionFactory> cacheProviderClass, String byteCodeProvider){
209
        HibernateConfiguration hibernateConfig = HibernateConfiguration.NewInstance(showSql, formatSql,
210
                registerSearchListener, null, cacheProviderClass, byteCodeProvider);
211
        return getHibernatePropertiesBean(hbm2dll, hibernateConfig);
212
    }
213

    
214
    @Override
215
	public BeanDefinition getHibernatePropertiesBean(DbSchemaValidation hbm2dll,
216
	        HibernateConfiguration hibernateConfig){
217
        if (hibernateConfig == null){
218
            hibernateConfig = HibernateConfiguration.NewDefaultInstance();  //empty
219
        }
220

    
221
        boolean showSql = hibernateConfig.getShowSql(this.showSql);
222
        boolean formatSql = hibernateConfig.getFormatSql(this.formatSql);
223
        boolean registerAuditing = hibernateConfig.getRegisterEnvers(this.registerAuditing);
224
        boolean registerSearchListener = hibernateConfig.getRegisterSearch(this.registerSearchListener);
225
        Class<? extends RegionFactory> cacheProviderClass = hibernateConfig.getCacheProviderClass(this.cacheProviderClass);
226
        String byteCodeProvider = hibernateConfig.getByteCodeProvider(HibernateConfiguration.BYTECODE_PROVIDER_DEFAULT);
227

    
228
		//Hibernate default values
229
		if (hbm2dll == null){
230
			hbm2dll = this.hbm2dll;
231
		}
232

    
233
		AbstractBeanDefinition bd = makeHibernatePropertiesBean(dbType, hbm2dll, showSql, formatSql, registerAuditing,
234
                registerSearchListener, cacheProviderClass, byteCodeProvider);
235
		return bd;
236
	}
237

    
238
	public String getInitMethodName() {
239
		return initMethodName;
240
	}
241

    
242
	public void setInitMethodName(String initMethodName) {
243
		this.initMethodName = initMethodName;
244
	}
245

    
246
	public String getDestroyMethodName() {
247
		return destroyMethodName;
248
	}
249

    
250
	public void setDestroyMethodName(String destroyMethodName) {
251
		this.destroyMethodName = destroyMethodName;
252
	}
253

    
254
	@Override
255
	public String getDatabase() {
256
		return database;
257
	}
258

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

    
264
	@Override
265
	public DatabaseTypeEnum getDatabaseType() {
266
		return dbType;
267
	}
268

    
269
	@Override
270
	public String getFilePath() {
271
		return filePath;
272
	}
273

    
274
	@Override
275
	public H2Mode getMode() {
276
		return mode;
277
	}
278

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

    
284
	@Override
285
	public String getPassword() {
286
		return password;
287
	}
288

    
289
	@Override
290
	public void setPassword(String password) {
291
		this.password = password;
292

    
293
	}
294

    
295
	@Override
296
	public String getUsername() {
297
		return username;
298
	}
299

    
300
	@Override
301
	public void setUsername(String username) {
302
		this.username = username;
303
	}
304

    
305
//********************* TO STRING() **********************/
306

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

    
317
}
318

    
(1-1/21)