source: greenstone3/trunk/src/java/org/greenstone/gsdl3/sql/DatabaseFactory.java@ 16652

Last change on this file since 16652 was 16652, checked in by shaoqun, 16 years ago

remove the caching of DBWrapper

File size: 3.1 KB
Line 
1package org.greenstone.gsdl3.sql;
2
3/**
4 * Returns a sql server according to the user's selection
5 *
6 */
7
8import org.apache.log4j.*;
9
10import java.util.HashMap;
11
12public class DatabaseFactory{
13 private static HashMap serverMap = new HashMap();
14 private static Logger logger = Logger.getLogger(org.greenstone.gsdl3.sql.DatabaseFactory.class.getName());
15
16
17 //upcase the first letter
18 public static String properDBName(String name_in){
19 String name_out = "";
20 name_in = name_in.toLowerCase();
21 if (name_in.length() >= 1){
22 String firstLetter = name_in.substring(0,1).toUpperCase();
23 name_out = firstLetter + name_in.substring(1);
24 }
25 return name_out;
26 }
27
28
29 public static final SQLServer getDatabaseServer(String dbname){
30 dbname = properDBName(dbname);
31 if (serverMap.containsKey(dbname)) return (SQLServer) serverMap.get(dbname);
32 String fullName = "org.greenstone.gsdl3.sql." + dbname.toLowerCase()+ "." + dbname +"SQLServer";
33 try {
34 SQLServer server = (SQLServer)Class.forName(fullName).newInstance();
35 serverMap.put(dbname, server);
36 return server;
37 } catch (Exception e) {
38 logger.info("Couldn't load the database server "+ fullName);
39 }
40
41 return null;
42 }
43
44 public static final SQLStatements getSQLStatements(String sqlstate){
45 String fullsqlstate = "org.greenstone.gsdl3.sql." + sqlstate;
46 //load SQLStatements class
47 try{
48 SQLStatements state = (SQLStatements)Class.forName(fullsqlstate).newInstance();
49 return state;
50 }
51 catch (Exception e) {
52 // if falied use sqlstate as a full path
53 try{
54 SQLStatements state = (SQLStatements)Class.forName(sqlstate).newInstance();
55 return state;
56 }
57 catch (Exception e2) {
58 // failed again, give up
59 logger.info("Couldn't load the sql statement "+ sqlstate);
60 }
61 }
62
63 return null;
64 }
65
66 public static final MetadataDBWrapper getMetadataDBWrapper(String dbname, String sqlstate){
67 dbname = properDBName(dbname);
68
69 String fullName = "org.greenstone.gsdl3.sql." + dbname.toLowerCase()+ "." + dbname +"DBWrapper";
70 try {
71 MetadataDBWrapper wrapper = (MetadataDBWrapper)Class.forName(fullName).newInstance();
72 if (wrapper != null){
73 //load SQLServer class
74 SQLServer server = getDatabaseServer(dbname);
75 if (server != null){
76 wrapper.setSQLServer(server);
77 }
78
79 String fullsqlstate = "org.greenstone.gsdl3.sql." + sqlstate;
80 //load SQLStatements class
81 try{
82 SQLStatements state = (SQLStatements)Class.forName(fullsqlstate).newInstance();
83 if (state != null){
84 wrapper.setSQLStatements(state);
85 return wrapper;
86 }
87 }
88 catch (Exception e) {
89 // if falied use sqlstate as a full path
90 try{
91 SQLStatements state = (SQLStatements)Class.forName(sqlstate).newInstance();
92 if (state != null){
93 wrapper.setSQLStatements(state);
94 return wrapper;
95 }
96 }
97 catch (Exception e2) {
98 // failed again, give up
99 logger.info("Couldn't load the sql statement "+ sqlstate);
100 }
101 }
102 }
103 } catch (Exception e) {
104 logger.info("Couldn't load the database wrapper "+ fullName);
105 }
106
107 return null;
108
109 }
110
111}
Note: See TracBrowser for help on using the repository browser.