Package com.dotmarketing.db

Source Code of com.dotmarketing.db.DotSQLGeneratorTask

package com.dotmarketing.db;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.regex.Matcher;

import com.dotcms.repackage.net.sf.hibernate.cfg.Configuration;
import com.dotcms.repackage.net.sf.hibernate.tool.hbm2ddl.SchemaExport;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;

import com.dotmarketing.util.Logger;

public final class DotSQLGeneratorTask extends Task {
  /*
   * This class is meant to be run from ant in the project root. It will
   * create the db based on the Inode.hbm.xml
   *
   */
  private String dialect;

  public void setDialect(String dialect) {
    this.dialect = dialect;
  }

  public void execute() throws BuildException {
        Logger.info(this, "dialect:" + dialect);      
       
    if (dialect == null) {
      Logger.info(this, "no dialect:" + dialect);
    }
   
    try{
      Class.forName("oracle.jdbc.driver.OracleDriver");
      Class.forName("com.mysql.jdbc.Driver");
      Class.forName("org.postgresql.Driver");
      Class.forName("net.sourceforge.jtds.jdbc.Driver")
      Class.forName("org.h2.Driver");
    }
    catch(Exception e){
       Logger.info(this, "Driver not found dialect:" + e);
       throw new BuildException("database driver not found");
    }
   
    try {
      Configuration cfg = new Configuration();
      cfg.setProperty("hibernate.dialect", dialect);
           
      if (dialect.equals("com.dotcms.repackage.net.sf.hibernate.dialect.MySQLDialect")){
                cfg.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
        cfg.addResource("com/dotmarketing/beans/DotCMSId.hbm.xml");
      }else if (dialect.equals("com.dotcms.repackage.net.sf.hibernate.dialect.SybaseDialect")){
        cfg.addResource("com/dotmarketing/beans/DotCMSId.hbm.xml");
                cfg.setProperty("hibernate.connection.driver_class", "net.sourceforge.jtds.jdbc.Driver");
      }else if(dialect.equals("com.dotcms.repackage.net.sf.hibernate.dialect.OracleDialect")){
        cfg.addResource("com/dotmarketing/beans/DotCMSSeq.hbm.xml");
                cfg.setProperty("hibernate.connection.driver_class", "oracle.jdbc.driver.OracleDriver");
      }else if(dialect.equals("com.dotcms.repackage.net.sf.hibernate.dialect.PostgreSQLDialect")) {
        cfg.addResource("com/dotmarketing/beans/DotCMSSeq.hbm.xml");
                cfg.setProperty("hibernate.connection.driver_class", "org.postgresql.Driver");
      }else if(dialect.equals("com.dotcms.repackage.net.sf.hibernate.dialect.HSQLDialect")) {
          cfg.setProperty("hibernate.connection.driver_class", "org.h2.Driver");
          cfg.addResource("com/dotmarketing/beans/DotCMSId.hbm.xml");
      }

            SchemaExport sexp = new SchemaExport(cfg);
      sexp.setDelimiter(";");
      //DOTCMS-2915
      String basedir = this.getProject().getProperties().get("basedir").toString();
            File in = new File(basedir, "sql/sql.tmp");
      String[] x = dialect.split("[.]");
      String sqlFileName = ("sql/cms/dotcms_" + x[x.length - 1].replaceAll("Dialect", "") + ".sql").toLowerCase();
      sqlFileName = sqlFileName.replaceAll("sybase", "mssql-sybase").replaceAll("hsql", "h2");
            Logger.info(this, "writing file:" + sqlFileName);
            //DOTCMS-2915
            //File out = new File(sqlFileName);
            File out = new File(basedir, sqlFileName);
           
      boolean afterDrops = false;
      sexp.setOutputFile(in.getAbsolutePath());
      sexp.create(false, false);
      BufferedReader r = new BufferedReader(new FileReader(in));
      BufferedWriter wr = new BufferedWriter(new FileWriter(out));
      java.util.regex.Pattern p = java.util.regex.Pattern.compile("[a-zA-Z][A-Z,a-z,0-9]*\\s[A-Z,a-z,0-9]*\\s[a-zA-Z][A-Z,a-z,0-9]*\\s\\([a-zA-Z][A-Z,a-z,0-9]*.*");
      while (r.ready()) {
        String myLine = r.readLine().toLowerCase();
       
        if (myLine.startsWith("create table")) {
          afterDrops = true;
         
          Matcher m = p.matcher(myLine);
          if(m.matches()){
            //System.out.println("matches " + myLine);
            String [] fields = myLine.split(", ");
            StringBuilder s = new StringBuilder();
            for(int i = 0; i < fields.length; i++){
              if(i != fields.length - 1){
                s.append("\t").append(fields[i]).append(",").append("\n");
              }else{
                s.append("\t").append(fields[i]);
              }
             
            }
            myLine = s.toString();
          }
        }
                if (dialect.equals("com.dotcms.repackage.net.sf.hibernate.dialect.PostgreSQLDialect")
                        || dialect.equals("com.dotcms.repackage.net.sf.hibernate.dialect.SybaseDialect")
                        || dialect.equals("com.dotcms.repackage.net.sf.hibernate.dialect.HSQLDialect")) {
                    if (myLine.contains("varchar(123456789)")) {
                        myLine = myLine.replaceAll("varchar\\(123456789\\)", "text");
                    }
                } else if (dialect.equals("com.dotcms.repackage.net.sf.hibernate.dialect.OracleDialect")) {
                    if (myLine.contains("varchar2(123456789)")) {
                        myLine = myLine.replaceAll("varchar2\\(123456789\\)", "clob");
                    }
                    else if (myLine.contains(" long ") || myLine.contains(" long,")) {
                        myLine = myLine.replaceAll("long", "nclob");
                    }
                } else if (dialect.equals("com.dotcms.repackage.net.sf.hibernate.dialect.MySQLDialect")) {
                    if (myLine.contains("varchar(123456789)")) {
                        myLine = myLine.replaceAll("varchar\\(123456789\\)", "longtext");
                    }
                    if(myLine.contains("bit,")) {
                        myLine = myLine.replaceAll("bit,", "varchar(1),");
                    }
                }
        if (afterDrops) {
          wr.write(myLine);
          wr.write("\n");         
        }
      }

      r.close();
      wr.close();
      in.delete();
    } catch (Exception e) {
      throw new BuildException(e);

    }
  }

}
TOP

Related Classes of com.dotmarketing.db.DotSQLGeneratorTask

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.