Project

General

Profile

Download (5.91 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2007 EDIT
4
* European Distributed Institute of Taxonomy 
5
* http://www.e-taxonomy.eu
6
* 
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10

    
11
package eu.etaxonomy.cdm.api.service;
12

    
13
import org.apache.log4j.Logger;
14
import org.hibernate.SessionFactory;
15
import org.springframework.beans.BeansException;
16
import org.springframework.beans.factory.annotation.Autowired;
17
import org.springframework.context.ApplicationContext;
18
import org.springframework.context.ApplicationContextAware;
19
import org.springframework.jdbc.datasource.AbstractDriverBasedDataSource;
20
import org.springframework.orm.hibernate3.SessionFactoryUtils;
21
import org.springframework.stereotype.Service;
22
import org.springframework.transaction.annotation.Propagation;
23
import org.springframework.transaction.annotation.Transactional;
24

    
25
import eu.etaxonomy.cdm.api.application.CdmApplicationController;
26
import eu.etaxonomy.cdm.database.CdmDataSource;
27
import eu.etaxonomy.cdm.database.CdmPersistentDataSource;
28
import eu.etaxonomy.cdm.database.DataSourceNotFoundException;
29
import eu.etaxonomy.cdm.database.DatabaseTypeEnum;
30
import eu.etaxonomy.cdm.database.H2Mode;
31
import eu.etaxonomy.cdm.database.ICdmDataSource;
32
import eu.etaxonomy.cdm.model.common.init.TermNotFoundException;
33
import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
34

    
35

    
36

    
37
/**
38
 * @author a.mueller
39
 *
40
 */
41
@Service
42
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
43
public class DatabaseServiceHibernateImpl  implements IDatabaseService, ApplicationContextAware {
44
	private static final Logger logger = Logger.getLogger(DatabaseServiceHibernateImpl.class);
45
	
46
	private static final String TMP_DATASOURCE = "tmp"; 
47
	
48
	@Autowired
49
	private SessionFactory factory;
50
	
51
	@Autowired
52
	protected ApplicationContext appContext;
53
	
54
	private CdmApplicationController application;
55
	public void setApplicationController(CdmApplicationController cdmApplicationController){
56
		this.application = cdmApplicationController;
57
	}
58
	
59
	
60
	/* (non-Javadoc)
61
	 * @see eu.etaxonomy.cdm.api.service.IDatabaseService#connectToDatasource(eu.etaxonomy.cdm.database.CdmDataSource)
62
	 */
63
	public boolean connectToDatasource(CdmPersistentDataSource dataSource) throws TermNotFoundException{
64
		this.application.changeDataSource(dataSource);
65
		logger.debug("DataSource changed to " + dataSource.getName());
66
		return true;
67
	}
68
	
69
	/* (non-Javadoc)
70
	 * @see eu.etaxonomy.cdm.api.service.IDatabaseService#connectToDatabase(eu.etaxonomy.cdm.database.DatabaseTypeEnum, java.lang.String, java.lang.String, java.lang.String, java.lang.String, int)
71
	 */
72
	public boolean connectToDatabase(DatabaseTypeEnum databaseTypeEnum, String server,
73
			String database, String username, String password, int port, String filePath, H2Mode mode, NomenclaturalCode code) throws TermNotFoundException  {
74
		ICdmDataSource dataSource = CdmDataSource.NewInstance(databaseTypeEnum, server, database, port, username, password, code);
75
		CdmPersistentDataSource tmpDataSource =  saveDataSource(TMP_DATASOURCE, dataSource);
76
		boolean result = connectToDatasource(tmpDataSource);
77
		CdmPersistentDataSource.delete(tmpDataSource);
78
		return result;
79
	}
80

    
81

    
82
	/* (non-Javadoc)
83
	 * @see eu.etaxonomy.cdm.api.service.IDatabaseService#connectToDatabase(eu.etaxonomy.cdm.database.DatabaseTypeEnum, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
84
	 */
85
	public boolean connectToDatabase(DatabaseTypeEnum databaseTypeEnum, String server,
86
			String database, String username, String password)  throws TermNotFoundException {
87
		return connectToDatabase(databaseTypeEnum, server, database, username, password, databaseTypeEnum.getDefaultPort(), null, null, null) ;
88
	}
89
	
90
	/* (non-Javadoc)
91
	 * @see eu.etaxonomy.cdm.api.service.IDatabaseService#saveDataSource(java.lang.String, eu.etaxonomy.cdm.database.ICdmDataSource)
92
	 */
93
	public CdmPersistentDataSource saveDataSource(String strDataSourceName,
94
			ICdmDataSource dataSource) {
95
		return CdmPersistentDataSource.save(strDataSourceName, dataSource);
96
	}
97
	
98
	/* (non-Javadoc)
99
	 * @see eu.etaxonomy.cdm.api.service.IDatabaseService#updateDataSource(java.lang.String, eu.etaxonomy.cdm.database.CdmPersistentDataSource)
100
	 */
101
	public CdmPersistentDataSource updateDataSource(String strDataSourceName,
102
			CdmPersistentDataSource dataSource) throws DataSourceNotFoundException {
103
		return CdmPersistentDataSource.update(strDataSourceName, dataSource);
104
	}
105

    
106
	
107
//TODO removed 04.02.2009 as spring 2.5.6 does not support DriverManagerDataSource.getDriverClassName anymore
108
//Let's see if this is not needed by any other application
109
//	/* (non-Javadoc)
110
//	 * @see eu.etaxonomy.cdm.api.service.IDatabaseService#getDatabaseTypeName()
111
//	 */
112
//	public DatabaseTypeEnum getDatabaseEnum() {
113
//		return DatabaseTypeEnum.getDatabaseEnumByDriverClass(getDataSource().getDriverClassName());
114
//	}
115
//
116
//	/* (non-Javadoc)
117
//	 * @see eu.etaxonomy.cdm.api.service.IDatabaseService#getDriverClassName()
118
//	 */
119
//	public String getDriverClassName() {
120
//		return ( getDataSource()).getDriverClassName();
121
//	}
122

    
123
	/* (non-Javadoc)
124
	 * @see eu.etaxonomy.cdm.api.service.IDatabaseService#getUrl()
125
	 */
126
	public String getUrl() {
127
		return getDataSource().getUrl();
128
	}
129

    
130
	/* (non-Javadoc)
131
	 * @see eu.etaxonomy.cdm.api.service.IDatabaseService#getUsername()
132
	 */
133
	public String getUsername() {
134
		return getDataSource().getUsername();
135
	}
136

    
137
    //  returns the AbstractDriverBasedDataSource from hibernate 
138
	// (generalized in order to also allow using SimpleDriverDataSource)
139
	private AbstractDriverBasedDataSource getDataSource(){
140
		AbstractDriverBasedDataSource ds = (AbstractDriverBasedDataSource)SessionFactoryUtils.getDataSource(factory);
141
		return ds;
142
	}
143

    
144

    
145
	public void setApplicationContext(ApplicationContext applicationContext)
146
			throws BeansException {
147
		this.appContext = applicationContext;
148
	}
149
}
(10-10/76)