View Javadoc
1 /* 2 Bloof - visualize the evolution of your software project 3 Copyright ( C ) 2003 Lukasz Pekacki <lukasz@pekacki.de> 4 http://bloof.sf.net/ 5 6 This program is free software; you can redistribute it and/or modify it 7 under the terms of the GNU General Public License. 8 9 This program is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 GNU General Public License for more details. 13 14 You should have received a copy of the GNU General Public License along with 15 this program; if not, write to the Free Software Foundation, Inc., 16 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 18 $RCSfile: McKoiControl.java,v $ 19 Created on $Date: 2003/09/06 08:35:09 $ 20 */ 21 package net.sf.bloof.db; 22 23 24 import java.io.IOException; 25 import java.sql.Connection; 26 import java.sql.DriverManager; 27 import java.sql.SQLException; 28 import java.sql.Statement; 29 30 import com.mckoi.database.control.DBController; 31 import com.mckoi.database.control.DBSystem; 32 import com.mckoi.database.control.DefaultDBConfig; 33 34 /*** 35 * This class is responsible for controlling the internal database McKoi. 36 * @see <a href = "http://www.mckoi.com">McKoi SQL Database</a> 37 * @author Lukasz Pekacki <pekacki@users.sourceforge.net> 38 * @version $Id: McKoiControl.java,v 1.9 2003/09/06 08:35:09 pekacki Exp $ 39 */ 40 public class McKoiControl { 41 42 /*** 43 * Closes the database, freeing resources 44 * @throws SQLException on error 45 * @throws IOException on error 46 */ 47 public static void close() throws SQLException, IOException { 48 if (sConnection != null){ 49 sConnection.close(); 50 sSession.close(); 51 sConnection = null; 52 sSession = null; 53 } 54 } 55 56 private static DefaultDBConfig configDatabase(DbAccess aDbAccess) { 57 DefaultDBConfig config = new DefaultDBConfig(); 58 config.setDatabasePath(fetchLocalDatabasePath(aDbAccess)); 59 config.setValue("dont_synch_filesystem", "enabled"); 60 config.setValue("table_lock_check", "off"); 61 config.setValue("debug_level", "40"); 62 config.setLogPath(fetchLocalDatabasePath(aDbAccess) + java.io.File.separator + "log"); 63 return config; 64 65 } 66 /*** 67 * Creates a new McKoi SQL Database 68 * @param aDbAccess access info for database 69 * @return Connection to the database 70 * @throws SQLException if error on database connect occurs 71 * @throws IOException if the dll file could not be read 72 */ 73 public static Connection create(DbAccess aDbAccess) throws SQLException, IOException { 74 if (sSession != null) { 75 /* drop and recrate tables */ 76 dropTables(); 77 dropSchema(); 78 createSchema(); 79 selectSchema(); 80 createTables(); 81 return sConnection; 82 } else { 83 // create a database configuration 84 DefaultDBConfig config = configDatabase(aDbAccess); 85 DBController control = DBController.getDefault(); 86 // Does the database exist already? 87 if (control.databaseExists(config)) { 88 sSession = control.startDatabase(config); 89 sConnection = sSession.getConnection(aDbAccess.getLogin(), aDbAccess.getPassword()); 90 selectSchema(); 91 /* drop and recreate tables */ 92 dropTables(); 93 dropSchema(); 94 createSchema(); 95 selectSchema(); 96 createTables(); 97 } else { 98 sSession = 99 control.createDatabase(config, aDbAccess.getLogin(), aDbAccess.getPassword()); 100 sConnection = sSession.getConnection(aDbAccess.getLogin(), aDbAccess.getPassword()); 101 /* create tables */ 102 createSchema(); 103 selectSchema(); 104 createTables(); 105 } 106 return sConnection; 107 } 108 } 109 /*** 110 * Create indices on the databaes for faster processing 111 * @throws IOException on access error to ddl file 112 */ 113 public static void createIndices() throws IOException { 114 Database.proccessDBScript(Database.CREATE_INDEX_FILE, sConnection); 115 } 116 /*** 117 * Creates a connection to remote McKoi SQL Database 118 * @param aDbAccess access info for database 119 * @return Connection to the database 120 * @throws SQLException if error on database connect occurs 121 * @throws IOException if the dll file could not be read 122 */ 123 public static Connection createRemoteConnection(DbAccess aDbAccess) 124 throws SQLException, IOException { 125 if (sConnection != null) { 126 /* drop and recrate tables */ 127 dropTables(); 128 createTables(); 129 return sConnection; 130 } else { 131 openRemote(aDbAccess); 132 dropTables(); 133 createTables(); 134 return sConnection; 135 } 136 } 137 private static void createSchema() throws SQLException { 138 Statement statement = sConnection.createStatement(); 139 statement.execute("CREATE SCHEMA bloof"); 140 } 141 142 private static void createTables() throws IOException { 143 Database.proccessDBScript(Database.CREATE_TABLE_FILE, sConnection); 144 } 145 private static void dropSchema() throws SQLException { 146 Statement statement = sConnection.createStatement(); 147 statement.execute("DROP SCHEMA bloof"); 148 } 149 private static void dropTables() throws IOException { 150 Database.proccessDBScript(Database.DROP_TABLE_FILE, sConnection); 151 } 152 153 private static String fetchLocalDatabasePath(DbAccess aDbAccess) { 154 return aDbAccess.getDatabaseUrl(); 155 } 156 157 /*** 158 * Returns true if the given String has the prefix of this Database JDBC URL 159 * @param aDbUrl URL to check 160 * @return true if the given String has the prefix of this Database JDBC URL 161 */ 162 public static boolean isMyUrl(String aDbUrl) { 163 return aDbUrl.startsWith(MY_URL_PREFIX); 164 } 165 166 /*** 167 * Starts a local internal McKoi SQL Database; 168 * if the database does not exist yet, it will be created 169 * @param aDbAccess access info for database 170 * @return Connection to the database 171 * @throws SQLException if error on database connect occurs 172 * @throws IOException if the dll file could not be read 173 */ 174 public static Connection open(DbAccess aDbAccess) throws SQLException, IOException { 175 if (sSession != null && sConnection != null) { 176 return sConnection; 177 } else { 178 // create a database configuration 179 DefaultDBConfig config = configDatabase(aDbAccess); 180 DBController control = DBController.getDefault(); 181 // Does the database exist already? 182 if (control.databaseExists(config)) { 183 sSession = control.startDatabase(config); 184 sConnection = sSession.getConnection(aDbAccess.getLogin(), aDbAccess.getPassword()); 185 selectSchema(); 186 return sConnection; 187 } else { 188 throw new SQLException("An internal database does not exist yet. Create a new project first."); 189 } 190 } 191 } 192 /*** 193 * Opens a connection to remote McKoi SQL Database; 194 * @param aDbAccess access info for database 195 * @return Connection to the database 196 * @throws SQLException if error on database connect occurs 197 */ 198 public static Connection openRemote(DbAccess aDbAccess) throws SQLException { 199 if (sConnection != null ) { 200 return sConnection; 201 } else { 202 try { 203 Class.forName("com.mckoi.JDBCDriver"); 204 } catch (ClassNotFoundException e) { 205 throw new SQLException("Could not load mckoi JDBC Driver. " + e.toString()); 206 } 207 sConnection = 208 DriverManager.getConnection( 209 aDbAccess.getDatabaseUrl(), 210 aDbAccess.getLogin(), 211 aDbAccess.getPassword()); 212 return sConnection; 213 } 214 } 215 216 private static void selectSchema() throws SQLException { 217 Statement statement = sConnection.createStatement(); 218 statement.execute("SET SCHEMA bloof"); 219 } 220 221 /*** 222 * Name and prefix of the Database 223 * */ 224 public static final String MY_URL_PREFIX = "jdbc:mckoi:", NAME = "McKoi"; 225 private static Connection sConnection = null; 226 private static DBSystem sSession = null; 227 }

This page was automatically generated by Maven