Diff for /FM2SQL/src/Convert.java between versions 1.5 and 1.11

version 1.5, 2005/03/21 10:32:03 version 1.11, 2005/04/22 10:57:32
Line 29  import java.sql.ResultSet; Line 29  import java.sql.ResultSet;
 import java.sql.SQLException;  import java.sql.SQLException;
 import java.sql.Statement;  import java.sql.Statement;
 import java.sql.Types;  import java.sql.Types;
   import java.text.DateFormat;
 import java.text.ParseException;  import java.text.ParseException;
 import java.util.ArrayList;  import java.util.ArrayList;
   import java.util.Date;
 import java.util.Hashtable;  import java.util.Hashtable;
 import java.util.Iterator;  import java.util.Iterator;
 import java.util.List;  import java.util.List;
   import java.util.Locale;
 import java.util.StringTokenizer;  import java.util.StringTokenizer;
 import java.util.TreeSet;  import java.util.TreeSet;
 import java.util.Vector;  import java.util.Vector;
Line 47  import com.exploringxml.xml.Xparse; Line 50  import com.exploringxml.xml.Xparse;
   
 class Convert  class Convert
 {  {
     private static final String _TEMP = "_temp";
   
   /**    /**
    * Helper class for index creation     * Helper class for index creation
    *      * 
Line 93  class Convert Line 98  class Convert
   
     public void executeCommand() throws SQLException, Exception      public void executeCommand() throws SQLException, Exception
     {      {
         System.out.println("Executing command: \n");
         System.out.println(command);
   
       java.sql.Connection con = bean.getConnection();        java.sql.Connection con = bean.getConnection();
       Statement stm = con.createStatement();        Statement stm = con.createStatement();
       stm.execute(command);        stm.execute(command);
         stm.close();
     }      }
   }    }
   
Line 115  class Convert Line 124  class Convert
   
   final static int numIntervalls = 4;    final static int numIntervalls = 4;
   
   static boolean debug = false;    static boolean debug = !false;
   
   static boolean isGUI = true;    static boolean isGUI = true;
   
Line 129  class Convert Line 138  class Convert
   
   static Vector postSQLCommands = new Vector();    static Vector postSQLCommands = new Vector();
   
     static final String versionID = new String("FM2SQL Version 0.9.2b\n");
   
     private static boolean noError = false;
   
   public static void main(String args[]) throws IOException    public static void main(String args[]) throws IOException
   {    {
       DateFormat d = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT,
           Locale.GERMANY);
       System.out.println(convertText("rogoistSuper" + "_" + d.format(new Date()).replace(':', '_')));
     /*      /*
      * try { //byte[] b = "�".getBytes("UTF-8"); //       * try { //byte[] b = "�".getBytes("UTF-8"); //
      * System.out.println("QueryString " +b[0]+" "+b[1]+(new       * System.out.println("QueryString " +b[0]+" "+b[1]+(new
Line 138  class Convert Line 154  class Convert
      * //System.out.println(new String(b,"UTF-8")); } catch       * //System.out.println(new String(b,"UTF-8")); } catch
      * (UnsupportedEncodingException e) { e.printStackTrace(); }       * (UnsupportedEncodingException e) { e.printStackTrace(); }
      */       */
       File tmpPath = new File(System.getProperty("java.io.tmpdir"));
     isGUI = false;      isGUI = false;
     FileOutputStream file = null;      FileOutputStream file = null;
     if (args.length != 1)      if (args.length != 1)
     {      {
         System.out.println(versionID);
       System.out.println("Usage: java Convert <xml config file>");        System.out.println("Usage: java Convert <xml config file>");
       System.exit(-1);        System.exit(-1);
     }      }
       File temp = null;
     try      try
     {      {
       File temp = File.createTempFile("fm2sql", ".txt");        temp = new File(tmpPath, "fm2sql.txt");
         int count = 1;
         while (temp.exists())
         {
           temp = new File(tmpPath, "fm2sql" + generateSuffix(count++) + ".txt");
         }
       file = new FileOutputStream(temp);        file = new FileOutputStream(temp);
     } catch (FileNotFoundException e1)      } catch (FileNotFoundException e1)
     {      {
       e1.printStackTrace();        e1.printStackTrace();
     }      }
     PrintStream stream = new PrintStream(file, true);      PrintStream stream = new PrintStream(file, true);
       // write info for user to stdout
       System.out.println(versionID);
       System.out.println("Loading " + args[0] + "....");
       System.out.println("Log  will be written to " + temp.getCanonicalPath());
   
     if (!debug)      if (!debug)
     {      {
       System.setOut(stream);        System.setOut(stream);
       System.setErr(stream);        System.setErr(stream);
     }      }
       System.out.println(versionID);
       System.out.println("Using config file : " + args[0] + "....");
   
     StringBuffer sb = readXMLFile(args[0]);      StringBuffer sb = readXMLFile(args[0]);
     parseXMLConfig(sb);      parseXMLConfig(sb);
     if (!(new File(args[0]).exists()))      if (!(new File(args[0]).exists()))
       System.exit(0);      {
   
         System.exit(0);
       }
     System.out.println("Finished!");      System.out.println("Finished!");
     // convert("jdbc:fmpro:http://141.14.237.74:8050","jdbc:postgresql://erebos/test",null,null);      // convert("jdbc:fmpro:http://141.14.237.74:8050","jdbc:postgresql://erebos/test",null,null);
   }    }
Line 238  class Convert Line 272  class Convert
           String layout = (layouts.isEmpty()) ? "" : layouts.get(tbIndex).toString();            String layout = (layouts.isEmpty()) ? "" : layouts.get(tbIndex).toString();
           query = (selects != null) ? selects.get(tbIndex).toString() : query;            query = (selects != null) ? selects.get(tbIndex).toString() : query;
           // if vectors[1].get(i) != null)            // if vectors[1].get(i) != null)
           if (layout != "")            if (!layout.equals(""))
           {            {
   
             query = addLayoutToQuery(names, query, tbIndex, layout);              query = addLayoutToQuery(names, query, tbIndex, layout);
   
           }            }
Line 417  class Convert Line 452  class Convert
   public static void convert(String source, String destination, Vector names, Vector layouts,    public static void convert(String source, String destination, Vector names, Vector layouts,
       Vector selects, Vector creates, Vector ids, int mode, String delimiter) throws Exception        Vector selects, Vector creates, Vector ids, int mode, String delimiter) throws Exception
   {    {
       // TODO implement convert_temp mode!!! 
     FM2SQL.ProgressDialog dialog = null;      FM2SQL.ProgressDialog dialog = null;
   
     if (isGUI)      if (isGUI)
Line 462  class Convert Line 497  class Convert
           String layout = (layouts.isEmpty()) ? "" : layouts.get(tbIndex).toString();            String layout = (layouts.isEmpty()) ? "" : layouts.get(tbIndex).toString();
           query = (selects != null) ? selects.get(tbIndex).toString() : "select * from "            query = (selects != null) ? selects.get(tbIndex).toString() : "select * from "
               + bean.getQC() + names.get(tbIndex).toString() + bean.getQC();                + bean.getQC() + names.get(tbIndex).toString() + bean.getQC();
           if (layout != "")            if (layout.intern() != "")
           {            {
             query = addLayoutToQuery(names, query, tbIndex, layout);              query = addLayoutToQuery(names, query, tbIndex, layout);
   
Line 502  class Convert Line 537  class Convert
         ConversionProperties prop = getFieldNamesAndDestTableName(creates.get(tbIndex).toString(),          ConversionProperties prop = getFieldNamesAndDestTableName(creates.get(tbIndex).toString(),
             query, names.get(tbIndex).toString());              query, names.get(tbIndex).toString());
         destTableName = prop.destTableName;          destTableName = prop.destTableName;
           if (mode == Convert.DataBase.CONVERT_TEMP_MODE)
           {
             destTableName += _TEMP;
           }
         fieldNames = prop.fieldNames;          fieldNames = prop.fieldNames;
         if (mode == Convert.DataBase.CONVERT_MODE)          if (mode == Convert.DataBase.CONVERT_MODE || mode == Convert.DataBase.CONVERT_TEMP_MODE)
         {          {
   
           if (tables.indexOf(destTableName) >= 0)            if (tables.indexOf(destTableName) >= 0)
Line 511  class Convert Line 550  class Convert
             stm.executeUpdate("drop table " + beanDest.getQC() + destTableName + beanDest.getQC());              stm.executeUpdate("drop table " + beanDest.getQC() + destTableName + beanDest.getQC());
             tables.remove(destTableName);              tables.remove(destTableName);
             System.out.println("dropped table" + destTableName);              System.out.println("dropped table" + destTableName);
   
           }            }
           if ((tables.indexOf(destTableName) < 0))            if ((tables.indexOf(destTableName) < 0))
           {            {
Line 525  class Convert Line 563  class Convert
               command = new StringBuffer(50);                command = new StringBuffer(50);
               command.append("CREATE TABLE ");                command.append("CREATE TABLE ");
               command.append(beanDest.getQC());                command.append(beanDest.getQC());
               command.append(convertText((String) names.get(tbIndex)));                command.append(destTableName);//convertText((String) names.get(tbIndex)));
               command.append(beanDest.getQC());                command.append(beanDest.getQC());
               command.append("(");                command.append("(");
               String type = null;                String type = null;
Line 577  class Convert Line 615  class Convert
         command.append(") ");          command.append(") ");
   
         command.append(" values ( ");          command.append(" values ( ");
   
         // add a question marks for every field          // add a question marks for every field
         for (int i = 0; i < bean.getColumnNames().size() - 1; ++i)          for (int i = 0; i < bean.getColumnNames().size() - 1; ++i)
           command.append("?,");            command.append("?,");
Line 674  class Convert Line 711  class Convert
           long startTime = System.currentTimeMillis();            long startTime = System.currentTimeMillis();
   
           bean.makeQuery(query, 0);            bean.makeQuery(query, 0);
             System.err.println("query for whole table done");
           command = writeDatainDestTable(dialog, command, j, pstm, rowCount, delimiter);            command = writeDatainDestTable(dialog, command, j, pstm, rowCount, delimiter);
           long endTime = System.currentTimeMillis();            long endTime = System.currentTimeMillis();
           System.out.println("Time for old convert elapsed " + (endTime - startTime));            System.out.println("Time for old convert elapsed " + (endTime - startTime));
Line 681  class Convert Line 719  class Convert
         }          }
         if (isGUI)          if (isGUI)
           resetGUI(dialog);            resetGUI(dialog);
           noError = true;
           if (mode == Convert.DataBase.CONVERT_TEMP_MODE)
           {
             String originalName = destTableName.split(_TEMP)[0];
             // TODO 
             if (beanDest.getTableNames().contains(originalName))
             {
               DateFormat d = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
               d.setTimeZone(java.util.TimeZone.getTimeZone("CET"));
   
               String date = d.format(new Date());
               date = date.replace(':', '_');
               renameTable(beanDest, addQuotes(beanDest, originalName), addQuotes(beanDest,
                   convertText(originalName + "_" + date)));
             }
             renameTable(beanDest, addQuotes(beanDest, destTableName), addQuotes(beanDest,
                 originalName));
           }
       }        }
     } catch (Exception e)      } catch (Exception e)
     {      {
       System.out.println("Error while connecting to database " + e);        System.out.println("Error while connecting to database " + e.getMessage());
         noError = false;
       if (isGUI)        if (isGUI)
       {        {
         showExceptionDialog(dialog, command, e);          showExceptionDialog(dialog, command, e);
Line 694  class Convert Line 751  class Convert
         e.printStackTrace();          e.printStackTrace();
   
       }        }
       } catch (Error e)
       {
         noError = false;
   
         System.out.println(e);
         e.printStackTrace();
       }
   
     }      }
   
     /**
      *
      * @param beanDest2
      * @param originalName
      * @return
      */
     private static String addQuotes(DBBean bean, String originalName)
     {
       return bean.getQC() + originalName + bean.getQC();
   }    }
   
   /**    /**
Line 982  class Convert Line 1056  class Convert
     {      {
       databases = getXMLConfig(sb);        databases = getXMLConfig(sb);
               
         // destination DataBase object
         DataBase dbDest = ((DataBase) databases.lastElement());
   
       DBBean database = ((DataBase) databases.lastElement()).bean;        DBBean database = ((DataBase) databases.lastElement()).bean;
       databases.remove(databases.size() - 1);        databases.remove(databases.size() - 1);
   
         for (Iterator iterator = dbDest.preCommands.iterator(); iterator.hasNext();)
         {
           SQLCommand sqlCommand = (SQLCommand) iterator.next();
           sqlCommand.executeCommand();
         }
   
       // databases.add(database);        // databases.add(database);
       for (Iterator iter = databases.iterator(); iter.hasNext();)        for (Iterator iter = databases.iterator(); iter.hasNext();)
       {        {
Line 994  class Convert Line 1078  class Convert
           sqlCommand.executeCommand();            sqlCommand.executeCommand();
         }          }
         int mode = db.mode;          int mode = db.mode;
           if (mode == DataBase.CONVERT_TEMP_MODE)
           {
             convertBatch(db.bean, database, db.tables, db.layouts, db.selects, db.creates, db.ids,
                 mode, db.delimiter);
             if (noError)
             {
               System.out.println("no Error occured ");
               //                db.bean.setURL(database.url);
               //                db.bean.setUserAndPasswd(database.user,database.passwd);
               //
               //                Convert.user = db.bean.user;
               //                Convert.passwd = db.bean.passwd;
               //                userDest = database.user;
               //                passwdDest = database.passwd;
               //                synchronize(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates,
               //                    db.ids, mode, db.delimiter, new Vector(db.htIndex.values()));
             }
           }
         if (mode == DataBase.CONVERT_MODE || mode == DataBase.APPEND_MODE)          if (mode == DataBase.CONVERT_MODE || mode == DataBase.APPEND_MODE)
           convertBatch(db.bean, database, db.tables, db.layouts, db.selects, db.creates, db.ids,            convertBatch(db.bean, database, db.tables, db.layouts, db.selects, db.creates, db.ids,
               mode, db.delimiter);                mode, db.delimiter);
Line 1024  class Convert Line 1126  class Convert
         }          }
   
       }        }
         for (Iterator iterator = dbDest.postCommands.iterator(); iterator.hasNext();)
         {
           SQLCommand sqlCommand = (SQLCommand) iterator.next();
           sqlCommand.executeCommand();
         }
   
     } catch (Exception e)      } catch (Exception e)
     {      {
Line 1037  class Convert Line 1144  class Convert
     }      }
   }    }
   
     /**
      *
      * @param database
      * @param db 
      * @throws Exception 
      * @throws SQLException 
      */
     private static void renameTable(DBBean database, String sourceTable, String destTable)
         throws SQLException, Exception
     {
       String command = "alter table " + sourceTable + " rename " + " to " + destTable;
       SQLCommand sqlCommand = new SQLCommand(database, command);
       sqlCommand.executeCommand();
     }
   
   public static Vector getXMLConfig(StringBuffer sb)    public static Vector getXMLConfig(StringBuffer sb)
   {    {
   
Line 1143  class Convert Line 1265  class Convert
   
         else if (modeString.equals("synchronize"))          else if (modeString.equals("synchronize"))
           mode = DataBase.SYNCHRONIZE_MODE;            mode = DataBase.SYNCHRONIZE_MODE;
           else if (modeString.equals("convert_temp"))
             mode = DataBase.CONVERT_TEMP_MODE;
   
         // if(node3!=null)          // if(node3!=null)
         // System.out.println(node3.name);          // System.out.println(node3.name);
   
Line 1184  class Convert Line 1309  class Convert
             id = "";              id = "";
           if (name.equals(""))            if (name.equals(""))
             throw new Error("parse error table tag attribute must not be empty");              throw new Error("parse error table tag attribute must not be empty");
           tables.add(name);            tables.add(name.intern());
           layouts.add(layout);            layouts.add(layout.intern());
           ids.add(id);            ids.add(id.intern());
           String query = (node5 == null) ? "" : node5.getCharacters();            String query = (node5 == null) ? "" : node5.getCharacters();
           if (query.equals(""))            if (query.equals(""))
             System.err.println("Warning empty select tag or  select tag missing !!");              System.err.println("Warning empty select tag or  select tag missing !!");
Line 1430  class Convert Line 1555  class Convert
   
     final static int SYNCHRONIZE_MODE = 5;      final static int SYNCHRONIZE_MODE = 5;
   
       final static int CONVERT_TEMP_MODE = 6;
   
     int mode = -1;      int mode = -1;
   
     public DataBase(DBBean bean, Vector tables, Vector layouts, Vector selects, Vector creates,      public DataBase(DBBean bean, Vector tables, Vector layouts, Vector selects, Vector creates,
Line 1496  class Convert Line 1623  class Convert
           while (count < preCommands.size())            while (count < preCommands.size())
           {            {
             SQLCommand sqlcommand=(SQLCommand)preCommands.get(count);              SQLCommand sqlcommand=(SQLCommand)preCommands.get(count);
             buffr.write("        <sqlcommand execute=\"before\">" + sqlcommand.command + "</sqlcommand>\n");              buffr.write("        <sqlcommand execute=\"before\">" + sqlcommand.command
                   + "</sqlcommand>\n");
             count++;              count++;
           }            }
         }          }
Line 1507  class Convert Line 1635  class Convert
           {            {
             SQLCommand sqlcommand=(SQLCommand)postCommands.get(count);              SQLCommand sqlcommand=(SQLCommand)postCommands.get(count);
                           
             buffr.write("        <sqlcommand execute=\"after\">" + sqlcommand.command + "</sqlcommand>\n");              buffr.write("        <sqlcommand execute=\"after\">" + sqlcommand.command
                   + "</sqlcommand>\n");
             count++;              count++;
           }            }
         }          }
Line 3638  class Convert Line 3767  class Convert
       // retrieve field_names from select statement        // retrieve field_names from select statement
       // TODO problem with different fieldNames in create statement will        // TODO problem with different fieldNames in create statement will
       // overwrite them        // overwrite them
       if (query.indexOf("*") < 0)        if (query.indexOf("*") < 0 && create.equals(""))// quick hack for hartmut
       {        {
         int selectEndIndex = query.indexOf("from");          int selectEndIndex = query.indexOf("from");
         StringTokenizer tokenizer = new StringTokenizer(query.substring(6, selectEndIndex), ",");          StringTokenizer tokenizer = new StringTokenizer(query.substring(6, selectEndIndex), ",");
Line 3677  class Convert Line 3806  class Convert
       // retrieve field_names from select statement        // retrieve field_names from select statement
       if (query.indexOf("*") < 0)        if (query.indexOf("*") < 0)
       {        {
         int selectEndIndex = query.indexOf("from");          int selectEndIndex = query.lastIndexOf("from");
         StringTokenizer tokenizer = new StringTokenizer(query.substring(6, selectEndIndex), ",");          StringTokenizer tokenizer = new StringTokenizer(query.substring(6, selectEndIndex), ",");
         int numFields = tokenizer.countTokens();          int numFields = tokenizer.countTokens();
         fieldNames = new String[numFields];          fieldNames = new String[numFields];
Line 3685  class Convert Line 3814  class Convert
         while (tokenizer.hasMoreTokens())          while (tokenizer.hasMoreTokens())
         {          {
           String fieldName = tokenizer.nextToken().trim();            String fieldName = tokenizer.nextToken().trim();
             String text = convertText(fieldName);
             if (text.indexOf("\"") >= 0)
               fieldNames[fieldIndex] = convertText(fieldName);
             else
           fieldNames[fieldIndex] = beanDest.getQC() + convertText(fieldName) + beanDest.getQC();            fieldNames[fieldIndex] = beanDest.getQC() + convertText(fieldName) + beanDest.getQC();
           // System.out.println("field "+ fieldNames[fieldIndex]);            // System.out.println("field "+ fieldNames[fieldIndex]);
           fieldIndex++;            fieldIndex++;
Line 3830  class Convert Line 3963  class Convert
     // ****** end Test ******      // ****** end Test ******
   
   }    }
   
     public final static String generateSuffix(final int step)
     {
       String fileString = null;
       if (step < 10)
         fileString = "00" + step;
       else if (step < 100)
         fileString = "0" + step;
       else
         fileString = step + "";
       return fileString;
     }
   
 }  }
   

Removed from v.1.5  
changed lines
  Added in v.1.11


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>