(no commit message)
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / database / CdmDataSource.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.Enumeration;
13 import java.util.Properties;
14
15 import org.hibernate.cache.CacheProvider;
16 import org.hibernate.cache.NoCacheProvider;
17 import org.springframework.beans.MutablePropertyValues;
18 import org.springframework.beans.factory.config.BeanDefinition;
19 import org.springframework.beans.factory.config.PropertiesFactoryBean;
20 import org.springframework.beans.factory.support.AbstractBeanDefinition;
21 import org.springframework.beans.factory.support.RootBeanDefinition;
22
23 import eu.etaxonomy.cdm.database.DatabaseTypeEnum;
24 import eu.etaxonomy.cdm.database.DbSchemaValidation;
25
26 /**
27 * @author a.mueller
28 *
29 */
30 public class CdmDataSource implements ICdmDataSource {
31
32 private DatabaseTypeEnum dbType;
33 private String server;
34 private String database;
35 private int port = -1;
36 private String username;
37 private String password;
38 private boolean isLazy = true;
39 private String initMethodName = null;
40 private String destroyMethodName = null;
41 private DbSchemaValidation hbm2dll = DbSchemaValidation.VALIDATE;
42 private boolean showSql = false;
43 private boolean formatSql = false;
44 private Class<? extends CacheProvider> cacheProviderClass = NoCacheProvider.class;;
45
46 static public CdmDataSource NewMySqlInstance(String server, String database, String username, String password){
47 return new CdmDataSource(DatabaseTypeEnum.MySQL, server, database, -1, username, password);
48 }
49
50 static public CdmDataSource NewMySqlInstance(String server, String database, int port, String username, String password){
51 return new CdmDataSource(DatabaseTypeEnum.MySQL, server, database, port, username, password);
52 }
53
54 static public CdmDataSource NewSqlServer2005Instance(String server, String database, String username, String password){
55 return new CdmDataSource(DatabaseTypeEnum.SqlServer2005, server, database, -1, username, password);
56 }
57
58 static public CdmDataSource NewSqlServer2005Instance(String server, String database, int port, String username, String password){
59 return new CdmDataSource(DatabaseTypeEnum.SqlServer2005, server, database, port, username, password);
60 }
61
62
63
64 /**
65 * @param server
66 * @param database
67 * @param port
68 */
69 private CdmDataSource(DatabaseTypeEnum dbType, String server, String database, int port, String username, String password) {
70 super();
71 this.dbType = dbType;
72 this.server = server;
73 this.database = database;
74 this.port = port;
75 this.username = username;
76 this.password = password;
77 }
78
79
80 /* (non-Javadoc)
81 * @see eu.etaxonomy.cdm.database.ICdmDataSource#getName()
82 */
83 public String getName() {
84 return database;
85 }
86
87 /* (non-Javadoc)
88 * @see eu.etaxonomy.cdm.api.application.ICdmDataSource#getDatasourceBean()
89 */
90 public BeanDefinition getDatasourceBean(){
91 AbstractBeanDefinition bd = new RootBeanDefinition(dbType.getDriverManagerDataSourceClass());
92 //attributes
93 bd.setLazyInit(isLazy);
94 if (initMethodName != null && ! initMethodName.trim().equals("") ){
95 bd.setInitMethodName(initMethodName);
96 }
97 if (destroyMethodName != null && ! destroyMethodName.trim().equals("") ){
98 bd.setInitMethodName(destroyMethodName);
99 }
100
101 //properties
102 MutablePropertyValues props = new MutablePropertyValues();
103 Properties persistentProperties = getDatasourceProperties();
104 Enumeration<String> keys = (Enumeration)persistentProperties.keys();
105 while (keys.hasMoreElements()){
106 String key = (String)keys.nextElement();
107 props.addPropertyValue(key, persistentProperties.getProperty(key));
108 }
109
110 bd.setPropertyValues(props);
111 return bd;
112 }
113
114 /**
115 * Returns the list of properties that are defined in the datasource
116 * @return
117 */
118 private Properties getDatasourceProperties(){
119 Properties result = new Properties();
120 result.put("driverClassName", dbType.getDriverClassName());
121 String connectionString = ( port > 1 ? dbType.getConnectionString(server, database, port) : dbType.getConnectionString(server, database));
122 result.put("url", connectionString);
123 result.put("username", username);
124 result.put("password", password);
125 return result;
126 }
127
128
129 /* (non-Javadoc)
130 * @see eu.etaxonomy.cdm.api.application.ICdmDataSource#getHibernatePropertiesBean(eu.etaxonomy.cdm.database.CdmPersistentDataSource.HBM2DDL)
131 */
132 public BeanDefinition getHibernatePropertiesBean(DbSchemaValidation hbm2dll){
133 boolean showSql = false;
134 boolean formatSql = false;
135 Class<? extends CacheProvider> cacheProviderClass = NoCacheProvider.class;
136 return getHibernatePropertiesBean(hbm2dll, showSql, formatSql, cacheProviderClass);
137 }
138
139 /* (non-Javadoc)
140 * @see eu.etaxonomy.cdm.api.application.ICdmDataSource#getHibernatePropertiesBean(eu.etaxonomy.cdm.database.CdmPersistentDataSource.HBM2DDL, java.lang.Boolean, java.lang.Boolean, java.lang.Class)
141 */
142 public BeanDefinition getHibernatePropertiesBean(DbSchemaValidation hbm2dll, Boolean showSql, Boolean formatSql, Class<? extends CacheProvider> cacheProviderClass){
143 //Hibernate default values
144 if (hbm2dll == null){
145 hbm2dll = this.hbm2dll;
146 }
147 if (showSql == null){
148 showSql = this.showSql;
149 }
150 if (formatSql == null){
151 formatSql = this.formatSql;
152 }
153 if (cacheProviderClass == null){
154 cacheProviderClass = this.cacheProviderClass;
155 }
156
157 DatabaseTypeEnum dbtype = dbType;
158 AbstractBeanDefinition bd = new RootBeanDefinition(PropertiesFactoryBean.class);
159 MutablePropertyValues hibernateProps = new MutablePropertyValues();
160
161 Properties props = new Properties();
162 props.setProperty("hibernate.hbm2ddl.auto", hbm2dll.toString());
163 props.setProperty("hibernate.dialect", dbtype.getHibernateDialect());
164 props.setProperty("hibernate.cache.provider_class", cacheProviderClass.getName());
165 props.setProperty("hibernate.show_sql", String.valueOf(showSql));
166 props.setProperty("hibernate.format_sql", String.valueOf(formatSql));
167
168 hibernateProps.addPropertyValue("properties",props);
169 bd.setPropertyValues(hibernateProps);
170 return bd;
171 }
172
173
174
175
176
177
178 }