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

Last change on this file since 25635 was 25635, checked in by sjm84, 12 years ago

Fixing Greenstone 3's use (or lack thereof) of generics, this was done automatically so we may want to change it over time. This change will also auto-format any files that have not already been formatted.

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<String, SQLServer> serverMap = new HashMap<String, SQLServer>();
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 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.debug("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.debug("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.debug("Couldn't load the sql statement "+ sqlstate);
100 }
101 }
102 }
103 } catch (Exception e) {
104 logger.debug("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.