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

Last change on this file since 15948 was 15948, checked in by xiao, 16 years ago
File size: 3.4 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 HashMap wrapperMap = new HashMap();
15 private static Logger logger = Logger.getLogger(org.greenstone.gsdl3.sql.DatabaseFactory.class.getName());
16
17
18 //upcase the first letter
19 public static String properDBName(String name_in){
20 String name_out = "";
21 name_in = name_in.toLowerCase();
22 if (name_in.length() >= 1){
23 String firstLetter = name_in.substring(0,1).toUpperCase();
24 name_out = firstLetter + name_in.substring(1);
25 }
26 return name_out;
27 }
28
29
30 public static final SQLServer getDatabaseServer(String dbname){
31 dbname = properDBName(dbname);
32 if (serverMap.containsKey(dbname)) return (SQLServer) serverMap.get(dbname);
33 String fullName = "org.greenstone.gsdl3.sql." + dbname.toLowerCase()+ "." + dbname +"SQLServer";
34 try {
35 SQLServer server = (SQLServer)Class.forName(fullName).newInstance();
36 serverMap.put(dbname, server);
37 return server;
38 } catch (Exception e) {
39 logger.info("Couldn't load the database server "+ fullName);
40 }
41
42 return null;
43 }
44
45 public static final SQLStatements getSQLStatements(String sqlstate){
46 String fullsqlstate = "org.greenstone.gsdl3.sql." + sqlstate;
47 //load SQLStatements class
48 try{
49 SQLStatements state = (SQLStatements)Class.forName(fullsqlstate).newInstance();
50 return state;
51 }
52 catch (Exception e) {
53 // if falied use sqlstate as a full path
54 try{
55 SQLStatements state = (SQLStatements)Class.forName(sqlstate).newInstance();
56 return state;
57 }
58 catch (Exception e2) {
59 // failed again, give up
60 logger.info("Couldn't load the sql statement "+ sqlstate);
61 }
62 }
63
64 return null;
65 }
66
67 public static final MetadataDBWrapper getMetadataDBWrapper(String dbname, String sqlstate){
68 dbname = properDBName(dbname);
69 if (wrapperMap.containsKey(dbname + ":" + sqlstate)) return (MetadataDBWrapper)wrapperMap.get(dbname + ":" + sqlstate);
70
71 String fullName = "org.greenstone.gsdl3.sql." + dbname.toLowerCase()+ "." + dbname +"DBWrapper";
72 try {
73 MetadataDBWrapper wrapper = (MetadataDBWrapper)Class.forName(fullName).newInstance();
74 if (wrapper != null){
75 //load SQLServer class
76 SQLServer server = getDatabaseServer(dbname);
77 if (server != null){
78 wrapper.setSQLServer(server);
79 }
80
81 String fullsqlstate = "org.greenstone.gsdl3.sql." + sqlstate;
82 //load SQLStatements class
83 try{
84 SQLStatements state = (SQLStatements)Class.forName(fullsqlstate).newInstance();
85 if (state != null){
86 wrapper.setSQLStatements(state);
87 wrapperMap.put(dbname + ":" + sqlstate, wrapper);
88 return wrapper;
89 }
90 }
91 catch (Exception e) {
92 // if falied use sqlstate as a full path
93 try{
94 SQLStatements state = (SQLStatements)Class.forName(sqlstate).newInstance();
95 if (state != null){
96 wrapper.setSQLStatements(state);
97 wrapperMap.put(dbname + ":" + sqlstate,wrapper);
98 return wrapper;
99 }
100 }
101 catch (Exception e2) {
102 // failed again, give up
103 logger.info("Couldn't load the sql statement "+ sqlstate);
104 }
105 }
106 }
107 } catch (Exception e) {
108 logger.info("Couldn't load the database wrapper "+ fullName);
109 }
110
111 return null;
112
113 }
114
115}
Note: See TracBrowser for help on using the repository browser.