Project

General

Profile

Download (5.83 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.hibernate4.SessionFactoryUtils;
21
import org.springframework.stereotype.Service;
22
import org.springframework.transaction.annotation.Transactional;
23

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

    
34

    
35

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

    
80

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

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

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

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

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

    
143

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