001 package org.mesopotamia.lang.java.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 populates Mesopotamia table with Java-specific data. 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 // Set schema 026 "org/mesopotamia/Init.sql", 027 028 // Java 1.3 029 "org/mesopotamia/lang/java/v13/language.sql", 030 "org/mesopotamia/lang/java/v13/tokenTypes.sql", 031 "org/mesopotamia/lang/java/v13/tokenTypesUpdate.sql", 032 "org/mesopotamia/lang/java/v13/loaders.sql", 033 "org/mesopotamia/lang/java/v13/languageElementClass.sql", 034 035 // Java 1.4 036 "org/mesopotamia/lang/java/v14/language.sql", 037 "org/mesopotamia/lang/java/v14/tokenTypes.sql", 038 "org/mesopotamia/lang/java/v14/tokenTypesUpdate.sql", 039 "org/mesopotamia/lang/java/v14/loaders.sql", 040 "org/mesopotamia/lang/java/v14/languageElementClass.sql", 041 042 // Java 5 043 "org/mesopotamia/lang/java/v5/language.sql", 044 "org/mesopotamia/lang/java/v5/tokenTypes.sql", 045 "org/mesopotamia/lang/java/v5/tokenTypesUpdate.sql", 046 "org/mesopotamia/lang/java/v5/loaders.sql", 047 "org/mesopotamia/lang/java/v5/languageElementClass.sql" 048 049 }; 050 051 ClassLoader classLoader=InitDatabase.class.getClassLoader(); 052 for (int i=0; i<sqlResources.length; i++) { 053 String resourceName = sqlResources[i]; 054 System.out.println("Loading "+resourceName); 055 InputStream rStream = classLoader.getResourceAsStream(resourceName); 056 if (rStream==null) { 057 System.err.println("Resource not found: "+resourceName); 058 return false; 059 } 060 Reader r=new InputStreamReader(rStream); 061 try { 062 try { 063 processor.executeScript(r); 064 } finally { 065 r.close(); 066 } 067 } catch (IOException e) { 068 throw new SQLExceptionEx("Cannot intialize database: "+e, e); 069 } 070 } 071 return true; 072 } 073 074 /** 075 * Connects to database and initializes it. 076 * Connects to HSQLDB on localhost with user sa and empty password. 077 * @param args Optional first parameter is database name. 078 * @throws SQLException 079 * @throws ClassNotFoundException 080 */ 081 public static void main(String[] args) throws Exception { 082 System.out.println("Usage: java [options] org.mesopotamia.lang.java.util.InitDatabase "); 083 // Create empty data source. 084 HsqldbServerDataSource ds = new HsqldbServerDataSource( 085 args.length==0 ? "localhost" : args[0], 086 args.length<2 ? "sa" : args[1], 087 args.length<3 ? "" : args[2], 088 null); 089 090 SQLProcessor processor = new SQLProcessor(ds, null); 091 processor.executeTransaction(new InitDatabase()); 092 ds.shutdown(); 093 } 094 }