1 package com.dotmarketing.db; 2 3 import java.io.BufferedReader ; 4 import java.io.BufferedWriter ; 5 import java.io.File ; 6 import java.io.FileReader ; 7 import java.io.FileWriter ; 8 9 import net.sf.hibernate.cfg.Configuration; 10 import net.sf.hibernate.tool.hbm2ddl.SchemaExport; 11 12 import org.apache.tools.ant.BuildException; 13 import org.apache.tools.ant.Task; 14 15 import com.dotmarketing.beans.Inode; 16 17 public final class DotSQLGeneratorTask extends Task { 18 23 private String dialect; 24 25 public void setDialect(String dialect) { 26 this.dialect = dialect; 27 } 28 29 public void execute() throws BuildException { 30 System.out.println("dialect:" + dialect); 31 32 33 34 35 36 37 38 39 40 if (dialect == null) { 41 System.out.println("no dialect:" + dialect); 42 } 43 44 try{ 45 Class.forName("oracle.jdbc.driver.OracleDriver"); 46 Class.forName("com.mysql.jdbc.Driver"); 47 Class.forName("org.postgresql.Driver"); 48 Class.forName("net.sourceforge.jtds.jdbc.Driver"); 49 } 50 catch(Exception e){ 51 System.out.println("Driver not found dialect:" + e); 52 throw new BuildException("database driver not found"); 53 54 } 55 56 57 58 try { 59 Configuration cfg = new Configuration(); 60 cfg.addClass(Inode.class); 61 cfg.setProperty("hibernate.dialect", dialect); 62 63 if (dialect.equals("net.sf.hibernate.dialect.MySQLDialect")) 64 cfg.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver"); 65 else if (dialect.equals("net.sf.hibernate.dialect.SybaseDialect")) 66 cfg.setProperty("hibernate.connection.driver_class", "net.sourceforge.jtds.jdbc.Driver"); 67 else 68 cfg.setProperty("hibernate.connection.driver_class", "org.postgresql.Driver"); 69 70 SchemaExport sexp = new SchemaExport(cfg); 71 System.out.print("aqui"); 72 sexp.setDelimiter(";"); 73 File in = new File ("sql/sql.tmp"); 74 String [] x = dialect.split("[.]"); 75 String sqlFileName = ("sql/cms/dotcms_" + x[x.length - 1].replaceAll("Dialect", "") + ".sql").toLowerCase(); 76 sqlFileName = sqlFileName.replaceAll("sybase", "mssql-sybase"); 77 78 79 80 System.out.println("writing file:" + sqlFileName); 81 File out = new File (sqlFileName); 82 83 boolean afterDrops = false; 84 sexp.setOutputFile(in.getAbsolutePath()); 85 sexp.create(false, false); 86 BufferedReader r = new BufferedReader (new FileReader (in)); 87 BufferedWriter wr = new BufferedWriter (new FileWriter (out)); 88 while (r.ready()) { 89 String myLine = r.readLine(); 90 if (myLine.toLowerCase().startsWith("create table")) { 91 afterDrops = true; 92 } 93 if (dialect.equals("net.sf.hibernate.dialect.PostgreSQLDialect")) { 94 if (myLine.contains("VARCHAR(123456789)")) { 95 myLine = myLine.replaceAll("VARCHAR\\(123456789\\)", "text"); 96 } 97 } else if (dialect.equals("net.sf.hibernate.dialect.OracleDialect")) { 98 if (myLine.contains("VARCHAR2(123456789)")) { 99 myLine = myLine.replaceAll("VARCHAR2\\(123456789\\)", "clob"); 100 } 101 } else if (dialect.equals("net.sf.hibernate.dialect.MySQLDialect")) { 102 if (myLine.contains("VARCHAR(123456789)")) { 103 myLine = myLine.replaceAll("VARCHAR\\(123456789\\)", "longtext"); 104 } 105 if(myLine.contains("BIT,")) { 106 myLine = myLine.replaceAll("BIT,", "VARCHAR(1),"); 107 } 108 } else if (dialect.equals("net.sf.hibernate.dialect.SybaseDialect")) { 109 if (myLine.contains("VARCHAR(123456789)")) { 110 myLine = myLine.replaceAll("VARCHAR\\(123456789\\)", "text"); 111 } 112 } 113 if (afterDrops) { 114 wr.write(myLine); 115 wr.write("\n"); 116 } 117 } 118 119 120 r.close(); 121 wr.close(); 122 in.delete(); 123 } catch (Exception e) { 124 throw new BuildException(e); 125 126 } 127 } 128 129 } 130 | Popular Tags |