KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > dotmarketing > db > DotSQLGeneratorTask


1 package com.dotmarketing.db;
2
3 import java.io.BufferedReader JavaDoc;
4 import java.io.BufferedWriter JavaDoc;
5 import java.io.File JavaDoc;
6 import java.io.FileReader JavaDoc;
7 import java.io.FileWriter JavaDoc;
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     /*
19      * This class is meant to be run from ant in the project root. It will
20      * create the db based on the Inode.hbm.xml
21      *
22      */

23     private String JavaDoc dialect;
24
25     public void setDialect(String JavaDoc 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 JavaDoc 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 JavaDoc in = new File JavaDoc("sql/sql.tmp");
74             String JavaDoc[] x = dialect.split("[.]");
75             String JavaDoc 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 JavaDoc out = new File JavaDoc(sqlFileName);
82
83             boolean afterDrops = false;
84             sexp.setOutputFile(in.getAbsolutePath());
85             sexp.create(false, false);
86             BufferedReader JavaDoc r = new BufferedReader JavaDoc(new FileReader JavaDoc(in));
87             BufferedWriter JavaDoc wr = new BufferedWriter JavaDoc(new FileWriter JavaDoc(out));
88             while (r.ready()) {
89                 String JavaDoc 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 JavaDoc e) {
124             throw new BuildException(e);
125
126         }
127     }
128
129 }
130
Popular Tags