-
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / database / DataSourceBeanLoader.java
1 package eu.etaxonomy.cdm.database;
2
3 import java.io.File;
4 import java.util.HashMap;
5 import java.util.Map;
6
7 import org.apache.log4j.Logger;
8 import org.springframework.beans.factory.xml.XmlBeanFactory;
9 import org.springframework.core.io.FileSystemResource;
10 import org.springframework.stereotype.Component;
11
12 import eu.etaxonomy.cdm.common.CdmUtils;
13
14 @Component
15 public class DataSourceBeanLoader {
16
17 private static final Logger logger = Logger.getLogger(DataSourceBeanLoader.class);
18
19 private static final String DATASOURCE_BEANDEF_FILE = "datasources.xml";
20 private static final String DATASOURCE_BEANDEF_PATH = CdmUtils.getCdmHomeDir().getPath();
21
22 private static String userdefinedBeanDefinitionFile = null;
23
24 public void setBeanDefinitionFile(String filename){
25 userdefinedBeanDefinitionFile = filename;
26 }
27
28
29 /**
30 * @return
31 */
32 public static <T> Map<String, T> loadDataSources(final Class<T> requiredType) {
33
34 Map<String, T> dataSources = new HashMap<String, T>();
35 String path = DATASOURCE_BEANDEF_PATH + (userdefinedBeanDefinitionFile == null ? DATASOURCE_BEANDEF_FILE : userdefinedBeanDefinitionFile);
36
37 logger.info("loading DataSourceBeans from: " + path);
38 FileSystemResource file = new FileSystemResource(path);
39 XmlBeanFactory beanFactory = new XmlBeanFactory(file);
40
41 for(String beanName : beanFactory.getBeanDefinitionNames()){
42 T datasource = beanFactory.getBean(beanName, requiredType);
43 dataSources.put(beanName, datasource);
44 }
45 return (Map<String, T>) dataSources;
46 }
47
48 }