001 package org.mesopotamia.util; 002 003 import java.io.IOException; 004 import java.io.InputStream; 005 import java.io.InputStreamReader; 006 import java.io.Reader; 007 import java.sql.SQLException; 008 009 import biz.hammurapi.sql.SQLExceptionEx; 010 import biz.hammurapi.sql.SQLProcessor; 011 import biz.hammurapi.sql.Transaction; 012 import biz.hammurapi.sql.hsqldb.HsqldbServerDataSource; 013 014 015 /** 016 * This utility class creates core Mesopotamia database structurs. 017 * @author Pavel Vlasov 018 * 019 */ 020 public class InitDatabase implements Transaction { 021 022 public boolean execute(SQLProcessor processor) throws SQLException { 023 // Populate database 024 String[] sqlResources= { 025 // Shared text 026 "biz/hammurapi/persistence/ChunkingStringStorage.sql", 027 028 // Core Mesopotamia 029 "org/mesopotamia/Mesopotamia.sql", 030 "org/mesopotamia/GlobalParameters.sql" 031 032 }; 033 034 ClassLoader classLoader=InitDatabase.class.getClassLoader(); 035 for (int i=0; i<sqlResources.length; i++) { 036 String resourceName = sqlResources[i]; 037 System.out.println("Loading "+resourceName); 038 InputStream rStream = classLoader.getResourceAsStream(resourceName); 039 if (rStream==null) { 040 System.err.println("Resource not found: "+resourceName); 041 return false; 042 } 043 Reader r=new InputStreamReader(rStream); 044 try { 045 try { 046 processor.executeScript(r); 047 } finally { 048 r.close(); 049 } 050 } catch (IOException e) { 051 throw new SQLExceptionEx("Cannot intialize database: "+e, e); 052 } 053 } 054 return true; 055 } 056 057 /** 058 * Connects to database and initializes it. 059 * Connects to HSQLDB on localhost with user sa and empty password. 060 * @param args Optional first parameter is database name. 061 * @throws SQLException 062 * @throws ClassNotFoundException 063 */ 064 public static void main(String[] args) throws Exception { 065 System.out.println("Usage: java [options] org.mesopotamia.util.InitDatabase "); 066 // Create empty data source. 067 HsqldbServerDataSource ds = new HsqldbServerDataSource(args.length==0 ? "localhost" : args[0], args.length<2 ? "sa" : args[1], args.length<3 ? "" : args[2], null); 068 SQLProcessor processor = new SQLProcessor(ds, null); 069 processor.executeTransaction(new InitDatabase()); 070 ds.shutdown(); 071 } 072 }