Diff for /FM2SQL/src/Convert.java between versions 1.2 and 1.13

version 1.2, 2005/02/07 13:01:58 version 1.13, 2005/05/02 12:45:36
Line 23  import java.io.InputStream; Line 23  import java.io.InputStream;
 import java.io.InputStreamReader;  import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;  import java.io.OutputStreamWriter;
 import java.io.PrintStream;  import java.io.PrintStream;
 import java.io.UnsupportedEncodingException;  
 import java.net.URL;  import java.net.URL;
 import java.sql.PreparedStatement;  import java.sql.PreparedStatement;
 import java.sql.ResultSet;  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;
Line 48  import com.exploringxml.xml.Xparse; Line 49  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 67  class Convert Line 70  class Convert
                 {                  {
                     buff.append(element).append(", ");                      buff.append(element).append(", ");
                     count++;                      count++;
                 }          } else
                 else  
                     buff.append(element);                      buff.append(element);
   
             }              }
Line 77  class Convert Line 79  class Convert
         }          }
     }      }
   
     /**
      * Helper class for pre/or post execution of SQLCommands
      * @author rogo
      *
      */
     public static class SQLCommand
     {
       private DBBean bean;
       private String command;
   
       public SQLCommand(DBBean bean, String command)
       {
         this.bean = bean;
         this.command = command;
       }
   
       public void executeCommand() throws SQLException, Exception
       {
         System.out.println("Executing command: \n");
         System.out.println(command);
   
         java.sql.Connection con = bean.getConnection();
         Statement stm = con.createStatement();
         stm.execute(command);
         stm.close();
       }
     }
   
     static DBBean bean = new DBBean();      static DBBean bean = new DBBean();
   
     static DBBean beanDest = new DBBean();      static DBBean beanDest = new DBBean();
Line 96  class Convert Line 126  class Convert
     static boolean debug = false;      static boolean debug = false;
   
     static boolean isGUI = true;      static boolean isGUI = true;
   
     /**
      * Vector for all SQLCommands to executed before any conversion action is performed
      */
     static Vector preSQLCommands = new Vector();
     /**
      * Vector for all SQLCommands to executed after any conversion action has been performed
      */
   
     static Vector postSQLCommands = new Vector();
   
     static final String versionID = new String("FM2SQL Version 0.9.6b\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
          * String(b).getBytes()[0])+" "+new String(b).getBytes()[1]);           * String(b).getBytes()[0])+" "+new String(b).getBytes()[1]);
          * //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");
             file = new FileOutputStream(temp);        int count = 1;
         while (temp.exists())
         {
           temp = new File(tmpPath, "fm2sql" + generateSuffix(count++) + ".txt");
         }          }
         catch (FileNotFoundException e1)        file = new FileOutputStream(temp);
       } 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);
         }          }
         readXMLFile(args[0]);      System.out.println(versionID);
       System.out.println("Using config file : " + args[0] + "....");
   
       StringBuffer sb = readXMLFile(args[0]);
       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);
     }      }
   
     public static void convertBatch(DBBean source, DBBean destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode, String delimiter) throws Exception    public static void convertBatch(DBBean source, DBBean destination, Vector names, Vector layouts,
         Vector selects, Vector creates, Vector ids, int mode, String delimiter) throws Exception
     {      {
         bean = source;          bean = source;
         beanDest = destination;          beanDest = destination;
Line 167  class Convert Line 235  class Convert
      * @param mode       * @param mode
      * @throws Exception       * @throws Exception
      */       */
     public static void update(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode) throws Exception    public static void update(String source, String destination, Vector names, Vector layouts,
         Vector selects, Vector creates, Vector ids, int mode) throws Exception
     {      {
   
         FM2SQL.ProgressDialog dialog = null;          FM2SQL.ProgressDialog dialog = null;
Line 203  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 215  class Convert Line 285  class Convert
                     bean.getConnection();                      bean.getConnection();
                     bean.makeQuery(query, 0);                      bean.makeQuery(query, 0);
   
                 }          } catch (Exception e)
                 catch (Exception e)  
                 {                  {
                     System.out.println("Warning exception occured \n " + e);                      System.out.println("Warning exception occured \n " + e);
   
Line 229  class Convert Line 298  class Convert
                     String create = creates.get(tbIndex).toString().toLowerCase();                      String create = creates.get(tbIndex).toString().toLowerCase();
                     int fromIndex = create.indexOf("table") + 5;                      int fromIndex = create.indexOf("table") + 5;
                     int toIndex = create.indexOf("(");                      int toIndex = create.indexOf("(");
                     destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "").trim();            destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "")
                 .trim();
                     System.out.println("destTable " + destTableName);                      System.out.println("destTable " + destTableName);
   
                 }          } else
                 else  
                     destTableName = convertText(names.get(tbIndex).toString());                      destTableName = convertText(names.get(tbIndex).toString());
   
                 beanDest.setConnection(destination);                  beanDest.setConnection(destination);
Line 242  class Convert Line 311  class Convert
   
                 Vector tables = beanDest.getTableNames();                  Vector tables = beanDest.getTableNames();
   
                 System.out.println(names.get(tbIndex) + " " + tables.indexOf(convertText((String) names.get(tbIndex)))); // "//beanDest.getTypeNames());          System.out.println(names.get(tbIndex) + " "
               + tables.indexOf(convertText((String) names.get(tbIndex)))); // "//beanDest.getTypeNames());
                 tables = beanDest.getTableNames();                  tables = beanDest.getTableNames();
                 stm = beanDest.getConnection().createStatement();                  stm = beanDest.getConnection().createStatement();
   
Line 264  class Convert Line 334  class Convert
   
                 int size = bean.getColumnNames().size();                  int size = bean.getColumnNames().size();
                 for (int i = 0; i < size - 1; ++i)                  for (int i = 0; i < size - 1; ++i)
                     command.append(beanDest.getQC() + convertText((String) bean.getColumnNames().get(i)) + beanDest.getQC() + " = ? ,");            command.append(beanDest.getQC() + convertText((String) bean.getColumnNames().get(i))
                 + beanDest.getQC() + " = ? ,");
                 command.append(convertText((String) bean.getColumnNames().get(size - 1)) + " = ? ");                  command.append(convertText((String) bean.getColumnNames().get(size - 1)) + " = ? ");
                 command.append("WHERE " + convertText(ids.get(tbIndex).toString()) + " =  ?");                  command.append("WHERE " + convertText(ids.get(tbIndex).toString()) + " =  ?");
                 PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString());                  PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString());
Line 295  class Convert Line 366  class Convert
                 } // to for loop                  } // to for loop
   
             }              }
         }      } catch (Exception e)
         catch (Exception e)  
         {          {
             System.out.println("Error while connecting to database " + e);              System.out.println("Error while connecting to database " + e);
             if (isGUI)              if (isGUI)
             {              {
                 showExceptionDialog(dialog, command, e);                  showExceptionDialog(dialog, command, e);
             }        } else
             else  
             {              {
                 e.printStackTrace();                  e.printStackTrace();
   
Line 332  class Convert Line 401  class Convert
      * @param command       * @param command
      * @param e       * @param e
      */       */
     private static void showExceptionDialog(FM2SQL.ProgressDialog dialog, StringBuffer command, Exception e)    private static void showExceptionDialog(FM2SQL.ProgressDialog dialog, StringBuffer command,
         Exception e)
     {      {
         dialog.setVisible(false);          dialog.setVisible(false);
         dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));          dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
Line 353  class Convert Line 423  class Convert
         dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean);          dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean);
         dialog.setTitle("Conversion running ...");          dialog.setTitle("Conversion running ...");
         dialog.title.setText("Getting table data ...");          dialog.title.setText("Getting table data ...");
         dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x + (FM2SQL.fmInstance.getWidth() - 400) / 2, FM2SQL.fmInstance.getLocationOnScreen().y + (FM2SQL.fmInstance.getHeight() - 250) / 2);      dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x
           + (FM2SQL.fmInstance.getWidth() - 400) / 2, FM2SQL.fmInstance.getLocationOnScreen().y
           + (FM2SQL.fmInstance.getHeight() - 250) / 2);
         dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));          dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
         FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));          FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
         dialog.thread = Thread.currentThread();          dialog.thread = Thread.currentThread();
Line 377  class Convert Line 449  class Convert
      * @throws Exception       * @throws Exception
      */       */
   
     public static void convert(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode, String delimiter) throws Exception    public static void convert(String source, String destination, Vector names, Vector layouts,
         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 422  class Convert Line 495  class Convert
                 try                  try
                 {                  {
                     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 " + bean.getQC() + names.get(tbIndex).toString() + bean.getQC();            query = (selects != null) ? selects.get(tbIndex).toString() : "select * from "
                     if (layout != "")                + bean.getQC() + names.get(tbIndex).toString() + bean.getQC();
             if (layout.intern() != "")
                     {                      {
                         query = addLayoutToQuery(names, query, tbIndex, layout);                          query = addLayoutToQuery(names, query, tbIndex, layout);
   
Line 437  class Convert Line 511  class Convert
                     bean.makeQuery(query, 50);                      bean.makeQuery(query, 50);
                     idField = ids.get(tbIndex).toString();                      idField = ids.get(tbIndex).toString();
   
                 }          } catch (Exception e)
                 catch (Exception e)  
                 {                  {
                     System.out.println("Warning exception occured \n " + e);                      System.out.println("Warning exception occured \n " + e);
   
Line 452  class Convert Line 525  class Convert
   
                 Vector tables = beanDest.getTableNames();                  Vector tables = beanDest.getTableNames();
                 // Collections.sort(tables);                  // Collections.sort(tables);
                 System.out.println(names.get(tbIndex) + " " + tables.indexOf(convertText((String) names.get(tbIndex)))); // "//beanDest.getTypeNames());          System.out.println(names.get(tbIndex) + " "
               + tables.indexOf(convertText((String) names.get(tbIndex)))); // "//beanDest.getTypeNames());
                 tables = beanDest.getTableNames();                  tables = beanDest.getTableNames();
                 // System.out.println(beanDest.getTableNames(beanDest.getCatalogs().get(2).toString()));                  // System.out.println(beanDest.getTableNames(beanDest.getCatalogs().get(2).toString()));
                 stm = beanDest.getConnection().createStatement();                  stm = beanDest.getConnection().createStatement();
Line 460  class Convert Line 534  class Convert
   
                 // determine destTableName from createStatement or from source                  // determine destTableName from createStatement or from source
                 // table name                  // table name
                 ConversionProperties prop = getFieldNamesAndDestTableName(creates.get(tbIndex).toString(), query, names.get(tbIndex).toString());          ConversionProperties prop = getFieldNamesAndDestTableName(creates.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 471  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))
                     {                      {
   
                         if (creates.get(tbIndex).equals("") || creates.get(tbIndex).toString().toLowerCase().indexOf("create") < 0)              if (creates.get(tbIndex).equals("")
                   || creates.get(tbIndex).toString().toLowerCase().indexOf("create") < 0)
                         {                          {
                             System.out.println("Warning empty or invalid create statement - creating one for you\n");                System.out
                     .println("Warning empty or invalid create statement - creating one for you\n");
   
                             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 496  class Convert Line 576  class Convert
                                 type = (type.equals("NUMBER")) ? "INT4" : type;                                  type = (type.equals("NUMBER")) ? "INT4" : type;
                                 type = (type.equals("CONTAINER")) ? "TEXT" : type;                                  type = (type.equals("CONTAINER")) ? "TEXT" : type;
   
                                 command.append(beanDest.getQC() + convertText((String) columnNames.get(i)) + beanDest.getQC() + " " + type + ", ");                  command.append(beanDest.getQC() + convertText((String) columnNames.get(i))
                       + beanDest.getQC() + " " + type + ", ");
                             }                              }
                             type = bean.metaData.getColumnTypeName(columnNames.size());                              type = bean.metaData.getColumnTypeName(columnNames.size());
                             type = (type.equals("NUMBER")) ? "INT4" : type;                              type = (type.equals("NUMBER")) ? "INT4" : type;
                             type = (type.equals("CONTAINER")) ? "TEXT" : type;                              type = (type.equals("CONTAINER")) ? "TEXT" : type;
                             command.append(beanDest.getQC() + convertText((String) columnNames.get(columnNames.size() - 1)) + beanDest.getQC() + " " + type);                command.append(beanDest.getQC()
                     + convertText((String) columnNames.get(columnNames.size() - 1))
                     + beanDest.getQC() + " " + type);
                             command.append(" )");                              command.append(" )");
   
                         }              } else
                         else  
                             command = new StringBuffer().append(creates.get(tbIndex).toString().toLowerCase());                              command = new StringBuffer().append(creates.get(tbIndex).toString().toLowerCase());
                         stm.executeUpdate(command.toString());                          stm.executeUpdate(command.toString());
   
Line 533  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 558  class Convert Line 639  class Convert
                             dialog.title.setText("Check if data  is available");                              dialog.title.setText("Check if data  is available");
                         else if (dialog != null)                          else if (dialog != null)
                             dialog.title.setText("Check if more  data  is available");                              dialog.title.setText("Check if more  data  is available");
                         myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex), tempQuery, numHits);              myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex),
                   tempQuery, numHits);
                         if (myIds.isEmpty())                          if (myIds.isEmpty())
                             break;                              break;
                         vec = new Vector(myIds);                          vec = new Vector(myIds);
                         rowCount = vec.size();                          rowCount = vec.size();
                         System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIds.size());              System.out.println("ID LIST SIZE "
                   + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIds.size());
                         deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls);                          deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls);
                         if (vec.size() <= numIntervalls)                          if (vec.size() <= numIntervalls)
                         {                          {
Line 574  class Convert Line 657  class Convert
                         {                          {
                             System.out.println(vec.get(k) + " " + vec.get(k + deltaID) + " " + vec.lastElement());                              System.out.println(vec.get(k) + " " + vec.get(k + deltaID) + " " + vec.lastElement());
                             if (query.indexOf("where") > 0)                              if (query.indexOf("where") > 0)
                                 tempQuery = query + " and " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID) + "'";                  tempQuery = query + " and " + tempID + ">='" + vec.get(k) + "' and " + tempID
                       + "<='" + vec.get(k + deltaID) + "'";
                             else                              else
                                 tempQuery = query + " where " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID) + "'";                  tempQuery = query + " where " + tempID + ">='" + vec.get(k) + "' and " + tempID
                       + "<='" + vec.get(k + deltaID) + "'";
                             System.out.println(tempQuery);                              System.out.println(tempQuery);
                             if (dialog != null)                              if (dialog != null)
                                 dialog.title.setText("Reading table data ...");                                  dialog.title.setText("Reading table data ...");
Line 594  class Convert Line 679  class Convert
                             System.out.println("fits");                              System.out.println("fits");
                         else                          else
                         {                          {
                             System.out.println(" last intervall from " + vec.get(endIndex) + " " + vec.lastElement());                System.out.println(" last intervall from " + vec.get(endIndex) + " "
                     + vec.lastElement());
   
                             if (query.indexOf("where") > 0)                              if (query.indexOf("where") > 0)
                                 tempQuery = query + " and " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement() + "'";                  tempQuery = query + " and " + tempID + ">='" + vec.get(endIndex) + "' and "
                       + tempID + "<='" + vec.lastElement() + "'";
                             else                              else
                                 tempQuery = query + " where " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement() + "'";                  tempQuery = query + " where " + tempID + ">='" + vec.get(endIndex) + "' and "
                       + tempID + "<='" + vec.lastElement() + "'";
                             System.out.println(tempQuery);                              System.out.println(tempQuery);
                             if (dialog != null)                              if (dialog != null)
                                 dialog.title.setText("Reading table data ...");                                  dialog.title.setText("Reading table data ...");
Line 617  class Convert Line 705  class Convert
                     }                      }
                     long endTime = System.currentTimeMillis();                      long endTime = System.currentTimeMillis();
                     System.out.println("Time for incremental convert elapsed " + (endTime - startTime));                      System.out.println("Time for incremental convert elapsed " + (endTime - startTime));
                 }          } else
                 else  
                 {                  {
                     // read and write all in one big chunk                      // read and write all in one big chunk
                     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 631  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.MEDIUM);
               d.setTimeZone(java.util.TimeZone.getTimeZone("CET"));
             
               String date = d.format(new Date());
               date = date.replace(':', '_');
               String newName = addQuotes(beanDest, convertText(originalName + "_" + date));
               // rename table to newName
               renameTable(beanDest, addQuotes(beanDest, originalName), newName);
             }              }
             // rename Table_temp to originalName
             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);
                 resetGUI(dialog);                  resetGUI(dialog);
             }        } else
             else  
             {              {
                 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 697  class Convert Line 821  class Convert
      * @throws Exception       * @throws Exception
      * @throws SQLException       * @throws SQLException
      */       */
     private static StringBuffer writeDatainDestTable(FM2SQL.ProgressDialog dialog, StringBuffer command, int j, PreparedStatement pstm, int rowCount, String delimiter) throws Exception, SQLException    private static StringBuffer writeDatainDestTable(FM2SQL.ProgressDialog dialog,
         StringBuffer command, int j, PreparedStatement pstm, int rowCount, String delimiter)
         throws Exception, SQLException
     {      {
         Vector row;          Vector row;
         while ((row = bean.getNextRow()) != null)          while ((row = bean.getNextRow()) != null)
Line 715  class Convert Line 841  class Convert
                 if (obj instanceof Double)                  if (obj instanceof Double)
                 {                  {
                     pstm.setDouble(k + 1, ((Double) obj).doubleValue());                      pstm.setDouble(k + 1, ((Double) obj).doubleValue());
                 }          } else if (!str.equals("NULL"))
                 else if (!str.equals("NULL"))  
                     pstm.setString(k + 1, str);                      pstm.setString(k + 1, str);
                 else                  else
                     pstm.setNull(k + 1, Types.NULL);                      pstm.setNull(k + 1, Types.NULL);
Line 754  class Convert Line 879  class Convert
             {              {
                 alterMe.setCharAt(j, '_');                  alterMe.setCharAt(j, '_');
                 //    if(j<length-1) j=j+1;                  //    if(j<length-1) j=j+1;
             }        } else if (alterMe.charAt(j) == '_')
             else if (alterMe.charAt(j) == '_')  
             {              {
   
                 if (alterMe.charAt(j + 1) == '_')                  if (alterMe.charAt(j + 1) == '_')
                     alterMe.deleteCharAt(j);                      alterMe.deleteCharAt(j);
                 length = length - 1;                  length = length - 1;
                 //  if(j<length-1) j=j+1;                  //  if(j<length-1) j=j+1;
             }        } else if (alterMe.charAt(j) == 'ä')
             else if (alterMe.charAt(j) == 'ä')  
             {              {
                 alterMe.setCharAt(j, 'a');                  alterMe.setCharAt(j, 'a');
                 alterMe.insert(j + 1, "e");                  alterMe.insert(j + 1, "e");
                 length = length + 1;                  length = length + 1;
                 if (j < length - 1)                  if (j < length - 1)
                     j = j + 1;                      j = j + 1;
             }        } else if (alterMe.charAt(j) == 'ö')
             else if (alterMe.charAt(j) == 'ö')  
             {              {
                 alterMe.setCharAt(j, 'o');                  alterMe.setCharAt(j, 'o');
                 alterMe.insert(j + 1, "e");                  alterMe.insert(j + 1, "e");
                 length = length + 1;                  length = length + 1;
                 if (j < length - 1)                  if (j < length - 1)
                     j = j + 1;                      j = j + 1;
             }        } else if (alterMe.charAt(j) == 'ü')
             else if (alterMe.charAt(j) == 'ü')  
             {              {
                 alterMe.setCharAt(j, 'u');                  alterMe.setCharAt(j, 'u');
                 alterMe.insert(j + 1, "e");                  alterMe.insert(j + 1, "e");
                 length = length + 1;                  length = length + 1;
                 if (j < length - 1)                  if (j < length - 1)
                     j = j + 1;                      j = j + 1;
             }        } else if (alterMe.charAt(j) == 'ß')
             else if (alterMe.charAt(j) == 'ß')  
             {              {
                 alterMe.setCharAt(j, 's');                  alterMe.setCharAt(j, 's');
                 alterMe.insert(j + 1, "s");                  alterMe.insert(j + 1, "s");
                 length = length + 1;                  length = length + 1;
                 if (j < length - 1)                  if (j < length - 1)
                     j = j + 1;                      j = j + 1;
             }        } else if (alterMe.charAt(j) == ':')
             else if (alterMe.charAt(j) == ':')  
             {              {
                 if (j < length - 1)                  if (j < length - 1)
                 {                  {
Line 810  class Convert Line 929  class Convert
                     if (j < length - 1)                      if (j < length - 1)
                         j = j + 1;                          j = j + 1;
                 }                  }
             }        } else if (alterMe.charAt(j) == '-')
             else if (alterMe.charAt(j) == '-')  
             {              {
                 alterMe.setCharAt(j, '_');                  alterMe.setCharAt(j, '_');
   
             }        } else if (alterMe.charAt(j) == '?')
             else if (alterMe.charAt(j) == '?')  
             {              {
                 // changed ? to _ because of update statement                  // changed ? to _ because of update statement
                 alterMe.setCharAt(j, '_');                  alterMe.setCharAt(j, '_');
                 // length = length + 1;                  // length = length + 1;
                 // j=j+1;                  // j=j+1;
                 System.out.println(alterMe);                  System.out.println(alterMe);
             }        } else if (alterMe.charAt(j) == '.')
             else if (alterMe.charAt(j) == '.')  
             {              {
                 if (j == length - 1)                  if (j == length - 1)
                 {                  {
                     alterMe.delete(j, j);                      alterMe.delete(j, j);
                     length--;                      length--;
                 }          } else
                 else  
                     alterMe.setCharAt(j, '_');                      alterMe.setCharAt(j, '_');
             }              }
   
Line 863  class Convert Line 978  class Convert
                 if (j < length - 1)                  if (j < length - 1)
                     j = j + 1;                      j = j + 1;
   
             }        } else if (alterMe.charAt(j) == '<')
             else if (alterMe.charAt(j) == '<')  
             {              {
                 alterMe.setCharAt(j, '&');                  alterMe.setCharAt(j, '&');
                 alterMe.insert(j + 1, "lt;");                  alterMe.insert(j + 1, "lt;");
Line 938  class Convert Line 1052  class Convert
      */       */
     public static void parseXMLConfig(StringBuffer sb)      public static void parseXMLConfig(StringBuffer sb)
     {      {
         boolean finished = false;      // boolean finished = false;
         // parse string and build document tree  
         Xparse parser = new Xparse();  
         parser.changeEntities = true;  
         Node root = parser.parse(sb.toString());  
         // printContents(root);  
         Vector databases = new Vector();          Vector databases = new Vector();
         Vector tables = new Vector();  
         Vector layouts = new Vector();  
         Vector selects = new Vector();  
         Vector creates = new Vector();  
         Vector ids = new Vector();  
         Vector indexListVec = new Vector();  
         String delimiter = "|";  
         int mode = -1;  
   
         try          try
         {          {
             Node tempNode = root.find("convert/source", new int[]        databases = getXMLConfig(sb);
             {1, 1});  
             if (tempNode == null)  
                 throw new Error("parse error source tag missing");  
             System.out.println(tempNode.name);  
             int length = countNodes(tempNode);  
             for (int i = 1; i <= length; i++)  
             {  
   
                 DBBean database = new DBBean();        // destination DataBase object
                 tables = new Vector();        DataBase dbDest = ((DataBase) databases.lastElement());
                 layouts = new Vector();  
                 selects = new Vector();  
                 creates = new Vector();  
                 ids = new Vector();  
                 indexListVec = new Vector();  
                 // parse dataBase  
                 Node node = root.find("convert/source/database/url", new int[]  
                 {1, 1, i, 1});  
                 Node node1 = root.find("convert/source/database/user", new int[]  
                 {1, 1, i, 1, 1});  
                 Node node2 = root.find("convert/source/database/password", new int[]  
                 {1, 1, i, 1, 1});  
                 Node node3 = root.find("convert/source/database", new int[]  
                 {1, 1, i});  
                 Node nodeMode = root.find("convert/source/database/mode", new int[]  
                 {1, 1, i, 1, 1});  
                 Node delimiterNode = root.find("convert/source/database/delimiter", new int[]  
                 {1, 1, i, 1, 1});  
                 Node useNormanToUnicodeMapper = root.find("convert/source/database/usenormantounicodemapper", new int[]  
                 {1, 1, i, 1, 1});  
   
                 if (node3 == null)        DBBean database = ((DataBase) databases.lastElement()).bean;
                     throw new Error("parse error database tag missing");        databases.remove(databases.size() - 1);
                 if (node == null)  
                     throw new Error("parse error url tag missing");  
                 if (node1 == null)  
                     throw new Error("parse error user tag missing");  
                 if (node2 == null)  
                     throw new Error("parse error password tag missing");  
                 if (delimiterNode != null)  
                     delimiter = delimiterNode.getCharacters();  
                 if (useNormanToUnicodeMapper != null)  
                 {  
                     database.setUseNormanToUnicodeMapper(Boolean.valueOf(useNormanToUnicodeMapper.getCharacters()).booleanValue());  
                     System.out.println("useMapper " + Boolean.valueOf(useNormanToUnicodeMapper.getCharacters().trim()).booleanValue());  
                 }  
   
                 String url = node.getCharacters();        for (Iterator iterator = dbDest.preCommands.iterator(); iterator.hasNext();)
                 String user = node1.getCharacters();  
                 String password = node2.getCharacters();  
                 database.setURL(url.trim());  
                 database.setUserAndPasswd(user.trim(), password.trim());  
                 System.out.println(node.name + " " + node.getCharacters());  
                 System.out.println(node1.name + " " + node1.getCharacters());  
                 System.out.println(node2.name + " " + node2.getCharacters());  
                 String modeString = "";  
                 if (nodeMode == null)  
                     modeString = "convert";  
                 else  
                     modeString = nodeMode.getCharacters();  
                 if (modeString.equals("convert"))  
                     mode = DataBase.CONVERT_MODE;  
                 else if (modeString.equals("append"))  
                     mode = DataBase.APPEND_MODE;  
                 else if (modeString.equals("update"))  
                     mode = DataBase.UPDATE_MODE;  
                 else if (modeString.equals("delete"))  
                     mode = DataBase.DELETE_MODE;  
                 else if (modeString.equals("synchronize"))  
                     mode = DataBase.SYNCHRONIZE_MODE;  
   
                 //   if(node3!=null)  
                 // System.out.println(node3.name);  
   
                 int length2 = countNodes(node3);  
   
                 System.out.println("number of tables " + length2);  
   
                 for (int j = 1; j <= length2; ++j)  
                 {                  {
                     Node node4 = root.find("convert/source/database/table", new int[]          SQLCommand sqlCommand = (SQLCommand) iterator.next();
                     {1, 1, i, j});          sqlCommand.executeCommand();
                     Node node5 = root.find("convert/source/database/table/select", new int[]  
                     {1, 1, i, j, 1});  
                     Node node6 = root.find("convert/source/database/table/create", new int[]  
                     {1, 1, i, j, 1});  
                     if (node4 != null)  
                         System.out.println(node4.name + " " + node4.attributes.get("layout").equals(""));  
                     if (node5 != null)  
                         System.out.println(node5.name + " " + node5.getCharacters());  
                     if (node6 != null)  
                         System.out.println(node6.name + " " + node6.getCharacters());  
                     if (node4 == null)  
                         throw new Error("parse error table tag missing");  
                     // if(node5==null) throw new Error("parse error select tag  
                     // missing");  
                     // if(node6==null) throw new Error("parse error create tag  
                     // missing");  
                     String name = (String) node4.attributes.get("name");  
                     String layout = (String) node4.attributes.get("layout");  
                     String id = (String) node4.attributes.get("id");  
                     String indexList = (String) node4.attributes.get("indexList");  
   
                     System.out.println("id was " + id);  
                     if (name == null)  
                         throw new Error("parse error required table tag attribute name missing");  
                     if (layout == null)  
                         layout = "";  
                     if (id == null)  
                         id = "";  
                     if (indexList == null)  
                         indexList = "";  
                     if (name.equals(""))  
                         throw new Error("parse error table tag attribute must not be empty");  
                     tables.add(name);  
                     layouts.add(layout);  
   
                     ids.add(id);  
                     indexListVec.add(indexList);  
                     String query = (node5 == null) ? "" : node5.getCharacters();  
                     if (query.equals(""))  
                         System.err.println("Warning empty select tag or  select tag missing !!");  
                     query = (query.equals("")) ? "select * from " + database.getQC() + name + database.getQC() : query;  
                     selects.add(query);  
                     if (node6 != null)  
                         creates.add(node6.getCharacters().trim());  
                     else  
                         creates.add("");  
   
                 }  
                 DataBase dataBase = new DataBase(database, tables, layouts, selects, creates, ids, mode);  
                 dataBase.delimiter = delimiter;  
                 dataBase.buildIndexTable(indexListVec);  
                 databases.add(dataBase);  
             }              }
             DBBean database = new DBBean();  
             // parse dataBase  
             Node node = root.find("convert/destination/database/url", new int[]  
             {1, 1, 1, 1});  
             Node node1 = root.find("convert/destination/database/user", new int[]  
             {1, 1, 1, 1, 1});  
             Node node2 = root.find("convert/destination/database/password", new int[]  
             {1, 1, 1, 1, 1});  
             String url = node.getCharacters();  
             String user = node1.getCharacters();  
             String password = node2.getCharacters();  
             System.out.println(" The url is " + url);  
             database.setURL(url.trim());  
             database.setUserAndPasswd(user.trim(), password.trim());  
             //databases.add(database);              //databases.add(database);
             for (Iterator iter = databases.iterator(); iter.hasNext();)              for (Iterator iter = databases.iterator(); iter.hasNext();)
             {              {
                 DataBase db = (DataBase) iter.next();                  DataBase db = (DataBase) iter.next();
           for (Iterator iterator = db.preCommands.iterator(); iterator.hasNext();)
           {
             SQLCommand sqlCommand = (SQLCommand) iterator.next();
             sqlCommand.executeCommand();
           }
           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, mode, db.delimiter);            convertBatch(db.bean, database, db.tables, db.layouts, db.selects, db.creates, db.ids,
                 mode, db.delimiter);
                 else if (mode == DataBase.UPDATE_MODE)                  else if (mode == DataBase.UPDATE_MODE)
                 {                  {
   
Line 1120  class Convert Line 1109  class Convert
                     userDest = database.user;                      userDest = database.user;
                     passwdDest = database.passwd;                      passwdDest = database.passwd;
   
                     update(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates, db.ids, mode);            update(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates, db.ids,
                 }                mode);
                 else if (mode == DataBase.SYNCHRONIZE_MODE)          } else if (mode == DataBase.SYNCHRONIZE_MODE)
                 {                  {
                     Convert.user = db.bean.user;                      Convert.user = db.bean.user;
                     Convert.passwd = db.bean.passwd;                      Convert.passwd = db.bean.passwd;
                     userDest = database.user;                      userDest = database.user;
                     passwdDest = database.passwd;                      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()));            synchronize(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates,
                 db.ids, mode, db.delimiter, new Vector(db.htIndex.values()));
                 }                  }
           for (Iterator iterator = db.postCommands.iterator(); iterator.hasNext();)
           {
             SQLCommand sqlCommand = (SQLCommand) iterator.next();
             sqlCommand.executeCommand();
             }              }
   
         }          }
         catch (Exception e)        for (Iterator iterator = dbDest.postCommands.iterator(); iterator.hasNext();)
         {
           SQLCommand sqlCommand = (SQLCommand) iterator.next();
           sqlCommand.executeCommand();
         }
   
       } catch (Exception e)
         {          {
   
             e.printStackTrace();              e.printStackTrace();
Line 1146  class Convert Line 1146  class Convert
         }          }
     }      }
   
     public static Vector getXMLConfig(String xmlFile)    /**
     {     *
         StringBuffer sb = null;     * @param database
         try     * @param db 
         {     * @throws Exception 
             // read XML Metadata from a file     * @throws SQLException 
             FileInputStream fi = new FileInputStream(xmlFile);     */
             InputStreamReader isr = new InputStreamReader(fi, "UTF-8");    private static void renameTable(DBBean database, String sourceTable, String destTable)
             BufferedReader buffr = new BufferedReader(isr);        throws SQLException, Exception
             sb = new StringBuffer();  
             int c = 0;  
             while ((c = buffr.read()) != -1)  
             {              {
                 char ch = (char) c;      String command = "alter table " + sourceTable + " rename " + " to " + destTable;
                 sb.append(ch);      SQLCommand sqlCommand = new SQLCommand(database, command);
                 // System.out.print((char)c);      sqlCommand.executeCommand();
             }              }
   
         }    public static Vector getXMLConfig(StringBuffer sb)
         catch (Exception e)  
         {          {
             e.printStackTrace();  
         }  
   
         boolean finished = false;          boolean finished = false;
         // parse string and build document tree          // parse string and build document tree
Line 1182  class Convert Line 1176  class Convert
         Vector selects = new Vector();          Vector selects = new Vector();
         Vector creates = new Vector();          Vector creates = new Vector();
         Vector ids = new Vector();          Vector ids = new Vector();
       Vector preSQLCommands = new Vector();
       Vector postSQLCommands = new Vector();
   
         String delimiter = "|";          String delimiter = "|";
         int mode = -1;          int mode = -1;
         try          try
Line 1201  class Convert Line 1198  class Convert
                 selects = new Vector();                  selects = new Vector();
                 creates = new Vector();                  creates = new Vector();
                 ids = new Vector();                  ids = new Vector();
           preSQLCommands = new Vector();
           postSQLCommands = new Vector();
   
                 // parse dataBase                  // parse dataBase
                 Node node = root.find("convert/source/database/url", new int[]                  Node node = root.find("convert/source/database/url", new int[]
                 {1, 1, i, 1});                  {1, 1, i, 1});
Line 1214  class Convert Line 1214  class Convert
                 {1, 1, i, 1, 1});                  {1, 1, i, 1, 1});
                 Node delimiterNode = root.find("convert/source/database/delimiter", new int[]                  Node delimiterNode = root.find("convert/source/database/delimiter", new int[]
                 {1, 1, i, 1, 1});                  {1, 1, i, 1, 1});
                 Node useNormanToUnicodeMapper = root.find("convert/source/database/usenormantounicodemapper", new int[]  
           Node commandNodes = root.find("convert/source/database/sqlcommands", new int[]
           { 1, 1, i, 1, 1 });
           if (commandNodes != null)
           {
             parseCommandNode(commandNodes, database, preSQLCommands, postSQLCommands);
           }
           Node useNormanToUnicodeMapper = root.find(
               "convert/source/database/usenormantounicodemapper", new int[]
                 {1, 1, i, 1, 1});                  {1, 1, i, 1, 1});
   
                 if (delimiterNode != null)                  if (delimiterNode != null)
                     delimiter = delimiterNode.getCharacters();                      delimiter = delimiterNode.getCharacters();
                 if (useNormanToUnicodeMapper != null)                  if (useNormanToUnicodeMapper != null)
                 {                  {
                     database.setUseNormanToUnicodeMapper(Boolean.valueOf(useNormanToUnicodeMapper.getCharacters()).booleanValue());            database.setUseNormanToUnicodeMapper(Boolean.valueOf(
                     System.out.println("useMapper " + Boolean.valueOf(useNormanToUnicodeMapper.getCharacters().trim()).booleanValue());                useNormanToUnicodeMapper.getCharacters()).booleanValue());
             System.out.println("useMapper "
                 + Boolean.valueOf(useNormanToUnicodeMapper.getCharacters().trim()).booleanValue());
                 }                  }
   
                 if (node3 == null)                  if (node3 == null)
Line 1257  class Convert Line 1267  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 1272  class Convert Line 1285  class Convert
                     {1, 1, i, j, 1});                      {1, 1, i, j, 1});
                     Node node6 = root.find("convert/source/database/table/create", new int[]                      Node node6 = root.find("convert/source/database/table/create", new int[]
                     {1, 1, i, j, 1});                      {1, 1, i, j, 1});
   
                     if (node4 != null)                      if (node4 != null)
                         System.out.println(node4.name + " " + node4.attributes.get("layout").equals(""));                          System.out.println(node4.name + " " + node4.attributes.get("layout").equals(""));
                     if (node5 != null)                      if (node5 != null)
Line 1297  class Convert Line 1311  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 !!");
                     query = (query.equals("")) ? "select * from " + database.getQC() + name + database.getQC() : query;            query = (query.equals("")) ? "select * from " + database.getQC() + name
                 + database.getQC() : query;
                     selects.add(query);                      selects.add(query);
                     if (node6 != null)                      if (node6 != null)
                         creates.add(node6.getCharacters().trim());                          creates.add(node6.getCharacters().trim());
Line 1313  class Convert Line 1328  class Convert
                 }                  }
                 DataBase dataBase = new DataBase(database, tables, layouts, selects, creates, ids, mode);                  DataBase dataBase = new DataBase(database, tables, layouts, selects, creates, ids, mode);
                 dataBase.delimiter = delimiter;                  dataBase.delimiter = delimiter;
           dataBase.preCommands = new Vector(preSQLCommands);
           dataBase.postCommands = new Vector(postSQLCommands);
                 databases.add(dataBase);                  databases.add(dataBase);
             }              }
             DBBean database = new DBBean();              DBBean database = new DBBean();
   
         preSQLCommands.clear();
         postSQLCommands.clear();
   
             // parse dataBase              // parse dataBase
             Node node = root.find("convert/destination/database/url", new int[]              Node node = root.find("convert/destination/database/url", new int[]
             {1, 1, 1, 1});              {1, 1, 1, 1});
Line 1323  class Convert Line 1344  class Convert
             {1, 1, 1, 1, 1});              {1, 1, 1, 1, 1});
             Node node2 = root.find("convert/destination/database/password", new int[]              Node node2 = root.find("convert/destination/database/password", new int[]
             {1, 1, 1, 1, 1});              {1, 1, 1, 1, 1});
         Node commandNodes = root.find("convert/destination/database/sqlcommands", new int[]
         { 1, 1, 1, 1, 1 });
         if (commandNodes != null)
         {
           parseCommandNode(commandNodes, database, preSQLCommands, postSQLCommands);
         }
   
             String url = node.getCharacters();              String url = node.getCharacters();
             String user = node1.getCharacters();              String user = node1.getCharacters();
             String password = node2.getCharacters();              String password = node2.getCharacters();
             System.out.println(url);              System.out.println(url);
             database.setURL(url.trim());              database.setURL(url.trim());
             database.setUserAndPasswd(user.trim(), password.trim());              database.setUserAndPasswd(user.trim(), password.trim());
             databases.add(new DataBase(database, null, null, null, null, null, 0));        DataBase db = new DataBase(database, new Vector(), null, null, null, null, 0);
         }        databases.add(db);
         catch (Exception e)        db.preCommands = new Vector(preSQLCommands);
         db.postCommands = new Vector(postSQLCommands);
   
       } catch (Exception e)
         {          {
             // TODO Auto-generated catch block  
             e.printStackTrace();              e.printStackTrace();
         }          }
         return databases;          return databases;
     }      }
   
     /**
      *
      * @param commandNode
      * @param database
      * @param preSQLCommands 
      * @param postSQLCommand 
      */
     private static void parseCommandNode(Node commandNode, DBBean database,
         java.util.Vector preSQLCommands, java.util.Vector postSQLCommands)
     {
       // System.out.println(commandNode.name + " " + countNodes(commandNode));
       int numCommands = commandNode.contents.length();
       for (int j = 0; j < numCommands; ++j)
       {
         Node node = (Node) commandNode.contents.v.elementAt(j);
         if (node.type.equals("element"))
         {
           // System.out.println(node.name + " " + node.getCharacters() + database);
           String execute = node.attributes.get("execute").toString();
           if (execute.equals("before"))
           {
             preSQLCommands.add(new SQLCommand(database, node.getCharacters()));
           }
           if (execute.equals("after"))
           {
             postSQLCommands.add(new SQLCommand(database, node.getCharacters()));
           }
   
         }
   
       }
     }
   
     private static int countNodes(Node tempNode)      private static int countNodes(Node tempNode)
     {      {
         int length = 0;          int length = 0;
Line 1351  class Convert Line 1414  class Convert
                     length++;                      length++;
                 if (node.name.equals("table"))                  if (node.name.equals("table"))
                     length++;                      length++;
           if (node.name.equals("sqlcommand"))
             length++;
   
             }              }
   
             // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+"              // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+"
Line 1381  class Convert Line 1447  class Convert
      *        * 
      * @param xmlFile       * @param xmlFile
      */       */
     public static void readXMLFile(String xmlFile)    public static StringBuffer readXMLFile(String xmlFile)
     {      {
       InputStream stream = null;
       StringBuffer sb = new StringBuffer();
   
         try          try
         {          {
             InputStream stream = null;  
   
             if (xmlFile.indexOf("file://") >= 0 || xmlFile.indexOf("http://") >= 0)              if (xmlFile.indexOf("file://") >= 0 || xmlFile.indexOf("http://") >= 0)
             {              {
                 URL url = new URL(xmlFile);                  URL url = new URL(xmlFile);
                 stream = url.openStream();                  stream = url.openStream();
             }        } else
             else  
                 // read XML Metadata from a file                  // read XML Metadata from a file
                 stream = new FileInputStream(xmlFile);                  stream = new FileInputStream(xmlFile);
             InputStreamReader isr = new InputStreamReader(stream, "UTF-8");              InputStreamReader isr = new InputStreamReader(stream, "UTF-8");
             BufferedReader buffr = new BufferedReader(isr);              BufferedReader buffr = new BufferedReader(isr);
             StringBuffer sb = new StringBuffer();  
             int c = 0;              int c = 0;
             while ((c = buffr.read()) != -1)              while ((c = buffr.read()) != -1)
             {              {
Line 1405  class Convert Line 1471  class Convert
                 sb.append(ch);                  sb.append(ch);
                 // System.out.print((char)c);                  // System.out.print((char)c);
             }              }
             parseXMLConfig(sb);      } catch (Exception e)
         }  
         catch (Exception e)  
         {          {
             e.printStackTrace();              e.printStackTrace();
       } finally
       {
   
         try
         {
           stream.close();
         } catch (IOException e1)
         {
           // TODO Auto-generated catch block
           e1.printStackTrace();
         }
         }          }
       return sb;
     }      }
   
     /**      /**
Line 1455  class Convert Line 1531  class Convert
   
         Vector layouts;          Vector layouts;
   
         Vector tables;      Vector tables = new Vector();
   
         Vector ids;          Vector ids;
   
         String delimiter = "//";          String delimiter = "//";
   
       Vector preCommands;
       Vector postCommands;
   
         /**          /**
          * maps table name to index fields           * maps table name to index fields
          */           */
Line 1478  class Convert Line 1557  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, Vector ids, int mode)      public DataBase(DBBean bean, Vector tables, Vector layouts, Vector selects, Vector creates,
           Vector ids, int mode)
         {          {
             this.bean = bean;              this.bean = bean;
             this.tables = tables;              this.tables = tables;
Line 1518  class Convert Line 1600  class Convert
             buffr.write("      <password>" + bean.passwd + "</password>\n");              buffr.write("      <password>" + bean.passwd + "</password>\n");
             buffr.write("      <delimiter>" + delimiter + "</delimiter>\n");              buffr.write("      <delimiter>" + delimiter + "</delimiter>\n");
             String modeString = "";              String modeString = "";
             if (mode == CONVERT_MODE)        if (mode == CONVERT_TEMP_MODE)
           modeString = "convert_temp";
         else if (mode == CONVERT_MODE)
                 modeString = "convert";                  modeString = "convert";
             else if (mode == APPEND_MODE)              else if (mode == APPEND_MODE)
                 modeString = "append";                  modeString = "append";
Line 1530  class Convert Line 1614  class Convert
                 modeString = "synchronize";                  modeString = "synchronize";
   
             buffr.write("      <mode>" + modeString + "</mode>\n");              buffr.write("      <mode>" + modeString + "</mode>\n");
             buffr.write("      <usenormantounicodemapper>" + useNormanToUnicodeMapper + "</usenormantounicodemapper>\n");        buffr.write("      <usenormantounicodemapper>" + useNormanToUnicodeMapper
             + "</usenormantounicodemapper>\n");
         if (preCommands != null || postCommands != null)
         {
           int count = 0;
   
           buffr.write("      <sqlcommands> \n");
   
           if (preCommands != null)
           {
             while (count < preCommands.size())
             {
               SQLCommand sqlcommand = (SQLCommand) preCommands.get(count);
               buffr.write("        <sqlcommand execute=\"before\">" + sqlcommand.command
                   + "</sqlcommand>\n");
               count++;
             }
           }
           if (postCommands != null)
           {
             count = 0;
             while (count < postCommands.size())
             {
               SQLCommand sqlcommand = (SQLCommand) postCommands.get(count);
   
               buffr.write("        <sqlcommand execute=\"after\">" + sqlcommand.command
                   + "</sqlcommand>\n");
               count++;
             }
           }
           buffr.write("      </sqlcommands> \n");
   
         }
             int index = 0;              int index = 0;
             while (index < tables.size())              while (index < tables.size())
             {              {
Line 1543  class Convert Line 1658  class Convert
                 IndexList indexList = (IndexList) htIndex.get(table);                  IndexList indexList = (IndexList) htIndex.get(table);
                 if (indexList == null)                  if (indexList == null)
                     indexList = new IndexList();                      indexList = new IndexList();
                 buffr.write("      <table name = \"" + table + "\" layout = \"" + layout + "\" id = \"" + id + "\" indexList =\"" + indexList + "\">\n");          buffr.write("      <table name = \"" + table + "\" layout = \"" + layout + "\" id = \""
               + id + "\" indexList =\"" + indexList + "\">\n");
                 buffr.write("         <select>" + convertToEntities(select) + "</select>\n");                  buffr.write("         <select>" + convertToEntities(select) + "</select>\n");
                 if (!create.equals(""))                  if (!create.equals(""))
                     buffr.write("         <create>" + create + "         </create>\n");                      buffr.write("         <create>" + create + "         </create>\n");
Line 1573  class Convert Line 1689  class Convert
   
     }      }
   
     public static String convertToUTF8(Object command)    public static void writeConfig(String file, DataBase source, DataBase destination)
     {        throws Exception
         String str = null;  
         try  
         {  
             str = new String(command.toString().getBytes("UTF-8"));  
         }  
         catch (UnsupportedEncodingException e)  
         {  
             // TODO Auto-generated catch block  
             e.printStackTrace();  
         }  
         return str;  
     }  
   
     public static void writeConfig(String file, DataBase source, DataBase destination) throws Exception  
     {      {
         if (!file.toLowerCase().endsWith(".xml"))          if (!file.toLowerCase().endsWith(".xml"))
             file += ".xml";              file += ".xml";
Line 1610  class Convert Line 1712  class Convert
         buffw.close();          buffw.close();
     }      }
   
     public static void delete(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode) throws Exception    public static void delete(String source, String destination, Vector names, Vector layouts,
         Vector selects, Vector creates, Vector ids, int mode) throws Exception
     {      {
         FM2SQL.ProgressDialog dialog = null;          FM2SQL.ProgressDialog dialog = null;
         if (isGUI)          if (isGUI)
Line 1668  class Convert Line 1771  class Convert
                     bean.makeQuery(query, 50);                      bean.makeQuery(query, 50);
                     idField = ids.get(tbIndex).toString();                      idField = ids.get(tbIndex).toString();
   
                 }          } catch (Exception e)
                 catch (Exception e)  
                 {                  {
                     continue;                      continue;
                 }                  }
Line 1680  class Convert Line 1782  class Convert
                     String create = creates.get(tbIndex).toString().toLowerCase();                      String create = creates.get(tbIndex).toString().toLowerCase();
                     int fromIndex = create.indexOf("table") + 5;                      int fromIndex = create.indexOf("table") + 5;
                     int toIndex = create.indexOf("(");                      int toIndex = create.indexOf("(");
                     destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "").trim();            destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "")
                 .trim();
                     System.out.println("destTable " + destTableName);                      System.out.println("destTable " + destTableName);
   
                 }          } else
                 else  
                     destTableName = convertText(names.get(tbIndex).toString());                      destTableName = convertText(names.get(tbIndex).toString());
   
                 // for id kram                  // for id kram
Line 1714  class Convert Line 1816  class Convert
                             dialog.title.setText("Check if data  is available");                              dialog.title.setText("Check if data  is available");
                         else if (dialog != null)                          else if (dialog != null)
                             dialog.title.setText("Check if more  data  is available");                              dialog.title.setText("Check if more  data  is available");
                         myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex), tempQuery, numHits);              myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex),
                         myIdsDest = beanDest.getIDVector(convertText(idField), destTableName, tempQueryDest, numHits);                  tempQuery, numHits);
               myIdsDest = beanDest.getIDVector(convertText(idField), destTableName, tempQueryDest,
                   numHits);
                         if (myIds.isEmpty())                          if (myIds.isEmpty())
                             break;                              break;
                         vec = new Vector(myIds);                          vec = new Vector(myIds);
Line 1739  class Convert Line 1843  class Convert
   
                         Vector tables = beanDest.getTableNames();                          Vector tables = beanDest.getTableNames();
                         // Collections.sort(tables);                          // Collections.sort(tables);
                         System.out.println(names.get(tbIndex) + " " + tables.indexOf(convertText((String) names.get(tbIndex)))); // "//beanDest.getTypeNames());              System.out.println(names.get(tbIndex) + " "
                   + tables.indexOf(convertText((String) names.get(tbIndex)))); // "//beanDest.getTypeNames());
                         tables = beanDest.getTableNames();                          tables = beanDest.getTableNames();
                         // System.out.println(beanDest.getTableNames(beanDest.getCatalogs().get(2).toString()));                          // System.out.println(beanDest.getTableNames(beanDest.getCatalogs().get(2).toString()));
                         stm = beanDest.getConnection().createStatement();                          stm = beanDest.getConnection().createStatement();
Line 1784  class Convert Line 1889  class Convert
                 } // to idfield if                  } // to idfield if
             } // table loop              } // table loop
   
         }      } catch (Exception e)
         catch (Exception e)  
         {          {
             System.out.println("Error while connecting to database " + e);              System.out.println("Error while connecting to database " + e);
             if (isGUI)              if (isGUI)
             {              {
                 showExceptionDialog(dialog, command, e);                  showExceptionDialog(dialog, command, e);
                 resetGUI(dialog);                  resetGUI(dialog);
             }        } else
             else  
             {              {
                 e.printStackTrace();                  e.printStackTrace();
             }              }
Line 1815  class Convert Line 1918  class Convert
      */       */
     // TODO implement append,update and delete in one method      // TODO implement append,update and delete in one method
     // TODO using id based algorithm      // TODO using id based algorithm
     public static void synchronize(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode, String delimiter, Vector indexList)    public static void synchronize(String source, String destination, Vector names, Vector layouts,
         Vector selects, Vector creates, Vector ids, int mode, String delimiter, Vector indexList)
             throws Exception              throws Exception
     {      {
         System.out.println(" bin in synchronize!!!");          System.out.println(" bin in synchronize!!!");
Line 1867  class Convert Line 1971  class Convert
                     bean.makeQuery(query, 50);                      bean.makeQuery(query, 50);
                     idField = ids.get(tbIndex).toString();                      idField = ids.get(tbIndex).toString();
   
                 }          } catch (Exception e)
                 catch (Exception e)  
                 {                  {
                     System.out.println("Warning exception occured \n " + e);                      System.out.println("Warning exception occured \n " + e);
   
Line 1881  class Convert Line 1984  class Convert
                     String create = creates.get(tbIndex).toString().toLowerCase();                      String create = creates.get(tbIndex).toString().toLowerCase();
                     int fromIndex = create.indexOf("table") + 5;                      int fromIndex = create.indexOf("table") + 5;
                     int toIndex = create.indexOf("(");                      int toIndex = create.indexOf("(");
                     destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "").trim();            destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "")
                 .trim();
                     System.out.println("destTable " + destTableName);                      System.out.println("destTable " + destTableName);
   
                 }          } else
                 else  
                     destTableName = convertText(names.get(tbIndex).toString());                      destTableName = convertText(names.get(tbIndex).toString());
   
                 // for id kram                  // for id kram
Line 1922  class Convert Line 2025  class Convert
                         else if (dialog != null)                          else if (dialog != null)
                             dialog.title.setText("Check if more  data  is available");                              dialog.title.setText("Check if more  data  is available");
   
                         myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex), tempQuery, 0);              myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex),
                   tempQuery, 0);
                         myIdsDest = beanDest.getIDVector(convertText(idField), destTableName, tempQueryDest, 0);                          myIdsDest = beanDest.getIDVector(convertText(idField), destTableName, tempQueryDest, 0);
                         //System.out.println("status of remove                          //System.out.println("status of remove
                         // "+myIds.remove("b015892"));                          // "+myIds.remove("b015892"));
Line 1944  class Convert Line 2048  class Convert
                         linesToDelete.removeAll(deleted);                          linesToDelete.removeAll(deleted);
                         System.out.println("linesToAppend " + linesToAppend.size() + " " + destTableName);                          System.out.println("linesToAppend " + linesToAppend.size() + " " + destTableName);
                         System.out.println("linesToDelete " + linesToDelete.size() + " " + destTableName);                          System.out.println("linesToDelete " + linesToDelete.size() + " " + destTableName);
                         System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIds.size());              System.out.println("ID LIST SIZE "
                   + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIds.size());
                         deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls);                          deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls);
                         ConversionProperties prop = getFieldNamesAndDestTableName(creates.get(tbIndex).toString(), query, names.get(tbIndex).toString());              ConversionProperties prop = getFieldNamesAndDestTableName(creates.get(tbIndex)
                   .toString(), query, names.get(tbIndex).toString());
                         StringBuffer insCommand = createInsertCommand(prop.destTableName, prop.fieldNames);                          StringBuffer insCommand = createInsertCommand(prop.destTableName, prop.fieldNames);
                         StringBuffer updCommand = createUpdateCommand(prop.destTableName, prop.fieldNames, tempIDdest);              StringBuffer updCommand = createUpdateCommand(prop.destTableName, prop.fieldNames,
                   tempIDdest);
                         StringBuffer delCommand = createDeleteCommand(destTableName, tempIDdest);                          StringBuffer delCommand = createDeleteCommand(destTableName, tempIDdest);
                         PreparedStatement insPst = beanDest.getConnection().prepareStatement(insCommand.toString());              PreparedStatement insPst = beanDest.getConnection().prepareStatement(
                         PreparedStatement updPst = beanDest.getConnection().prepareStatement(updCommand.toString());                  insCommand.toString());
               PreparedStatement updPst = beanDest.getConnection().prepareStatement(
                   updCommand.toString());
                         delPSt = beanDest.getConnection().prepareStatement(delCommand.toString());                          delPSt = beanDest.getConnection().prepareStatement(delCommand.toString());
                         //    delPSt.setString(1,"b015892");                          //    delPSt.setString(1,"b015892");
                         //   delPSt.execute();                          //   delPSt.execute();
Line 1966  class Convert Line 2075  class Convert
                         {                          {
                             System.out.println(vec.get(k) + " " + vec.get(k + deltaID) + " " + vec.lastElement());                              System.out.println(vec.get(k) + " " + vec.get(k + deltaID) + " " + vec.lastElement());
                             if (query.indexOf("where") > 0)                              if (query.indexOf("where") > 0)
                                 tempQuery = query + " and " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID) + "'";                  tempQuery = query + " and " + tempID + ">='" + vec.get(k) + "' and " + tempID
                       + "<='" + vec.get(k + deltaID) + "'";
                             else                              else
                                 tempQuery = query + " where " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID) + "'";                  tempQuery = query + " where " + tempID + ">='" + vec.get(k) + "' and " + tempID
                       + "<='" + vec.get(k + deltaID) + "'";
                             System.out.println(tempQuery);                              System.out.println(tempQuery);
                             if (dialog != null)                              if (dialog != null)
                                 dialog.title.setText("Reading table data ...");                                  dialog.title.setText("Reading table data ...");
Line 1977  class Convert Line 2088  class Convert
                             if (dialog != null)                              if (dialog != null)
                                 dialog.title.setText("Writing table data ...");                                  dialog.title.setText("Writing table data ...");
   
                             performSynchronize(idField, vec, tempQuery, linesToDelete, linesToAppend, insPst, updPst, delPSt, deltaID, delimiter, dialog);                performSynchronize(idField, vec, tempQuery, linesToDelete, linesToAppend, insPst,
                     updPst, delPSt, deltaID, delimiter, dialog);
                             // System.out.println("ID LIST SIZE " +                              // System.out.println("ID LIST SIZE " +
                             // Math.round((double) myIds.size() / (double)                              // Math.round((double) myIds.size() / (double)
                             // numIntervalls) + " " + myIdsDest.size());                              // numIntervalls) + " " + myIdsDest.size());
Line 1989  class Convert Line 2101  class Convert
                             System.out.println("fits");                              System.out.println("fits");
                         else                          else
                         {                          {
                             System.out.println(" last intervall from " + vec.get(endIndex) + " " + vec.lastElement());                System.out.println(" last intervall from " + vec.get(endIndex) + " "
                     + vec.lastElement());
   
                             if (query.indexOf("where") > 0)                              if (query.indexOf("where") > 0)
                                 tempQuery = query + " and " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement() + "'";                  tempQuery = query + " and " + tempID + ">='" + vec.get(endIndex) + "' and "
                       + tempID + "<='" + vec.lastElement() + "'";
                             else                              else
                                 tempQuery = query + " where " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement() + "'";                  tempQuery = query + " where " + tempID + ">='" + vec.get(endIndex) + "' and "
                       + tempID + "<='" + vec.lastElement() + "'";
                             System.out.println(tempQuery);                              System.out.println(tempQuery);
                             if (dialog != null)                              if (dialog != null)
                                 dialog.title.setText("Reading table data ...");                                  dialog.title.setText("Reading table data ...");
                             //    bean.makeQuery(tempQuery, 0);                              //    bean.makeQuery(tempQuery, 0);
                             if (dialog != null)                              if (dialog != null)
                                 dialog.title.setText("Writing table data ...");                                  dialog.title.setText("Writing table data ...");
                             performSynchronize(idField, vec, tempQuery, linesToDelete, linesToAppend, insPst, updPst, delPSt, deltaID, delimiter, dialog);                performSynchronize(idField, vec, tempQuery, linesToDelete, linesToAppend, insPst,
                     updPst, delPSt, deltaID, delimiter, dialog);
                             // System.out.println("ID LIST SIZE " +                              // System.out.println("ID LIST SIZE " +
                             // Math.round((double) myIds.size() / (double)                              // Math.round((double) myIds.size() / (double)
                             // numIntervalls) + " " + myIdsDest.size());                              // numIntervalls) + " " + myIdsDest.size());
Line 2040  class Convert Line 2156  class Convert
                             // "+(type.indexOf("text") >= 0 ||                              // "+(type.indexOf("text") >= 0 ||
                             // type.indexOf("varchar") >= 0 || type.indexOf("char")                              // type.indexOf("varchar") >= 0 || type.indexOf("char")
                             // >= 0));                              // >= 0));
                             if (type.indexOf("text") >= 0 || type.indexOf("varchar") >= 0 || type.indexOf("char") >= 0)                if (type.indexOf("text") >= 0 || type.indexOf("varchar") >= 0
                     || type.indexOf("char") >= 0)
                             {                              {
                                 if (beanDest.url.indexOf("mysql") >= 0)                                  if (beanDest.url.indexOf("mysql") >= 0)
                                 {                                  {
Line 2048  class Convert Line 2165  class Convert
                                     // indexName + " ON " + destTableName + " (" +                                      // indexName + " ON " + destTableName + " (" +
                                     // indexField + "(10))");                                      // indexField + "(10))");
                                     // TODO problem if index exist !!!                                      // TODO problem if index exist !!!
                                     stm.execute("CREATE  INDEX " + indexName + " ON " + destTableName + " (" + indexField + "(10))");                    stm.execute("CREATE  INDEX " + indexName + " ON " + destTableName + " ("
                                 }                        + indexField + "(10))");
                                 else                  } else
                                 {                                  {
                                     stm.execute("CREATE  INDEX " + indexName + " ON " + destTableName + " (lower( " + indexField + "))");                    stm.execute("CREATE  INDEX " + indexName + " ON " + destTableName + " (lower( "
                         + indexField + "))");
   
                                 }                                  }
   
                             }                } else
                             else  
                             {                              {
                                 stm.execute("CREATE  INDEX " + destTableName + "_" + indexField + " ON " + destTableName + "(" + indexField + ")");                  stm.execute("CREATE  INDEX " + destTableName + "_" + indexField + " ON "
                       + destTableName + "(" + indexField + ")");
   
                             }                              }
   
Line 2082  class Convert Line 2200  class Convert
                 } // to idfield if                  } // to idfield if
             } // table loop              } // table loop
   
         }      } catch (Exception e)
         catch (Exception e)  
         {          {
             System.out.println("Error while connecting to database " + e);              System.out.println("Error while connecting to database " + e);
             e.printStackTrace();              e.printStackTrace();
Line 2109  class Convert Line 2226  class Convert
         return destQuery;          return destQuery;
     }      }
   
     private static void performSynchronize(String idField, Vector vec, String tempQuery, TreeSet linesToDelete, TreeSet linesToAppend, PreparedStatement insPst, PreparedStatement updPst,    private static void performSynchronize(String idField, Vector vec, String tempQuery,
             PreparedStatement delPSt, int deltaID, String delimiter, FM2SQL.ProgressDialog dialog) throws SQLException, ParseException, Exception        TreeSet linesToDelete, TreeSet linesToAppend, PreparedStatement insPst,
         PreparedStatement updPst, PreparedStatement delPSt, int deltaID, String delimiter,
         FM2SQL.ProgressDialog dialog) throws SQLException, ParseException, Exception
     {      {
         if (dialog != null)          if (dialog != null)
         {          {
Line 2146  class Convert Line 2265  class Convert
                 }                  }
                 insPst.execute();                  insPst.execute();
   
             }        } else
             else  
             // update              // update
             {              {
                 for (int l = 0; l < line.size(); ++l)                  for (int l = 0; l < line.size(); ++l)
Line 3635  class Convert Line 3753  class Convert
         return buf.toString();          return buf.toString();
     }      }
   
     public static ConversionProperties getFieldNamesAndDestTableName(String create, String query, String tableName)    public static ConversionProperties getFieldNamesAndDestTableName(String create, String query,
         String tableName)
     {      {
         String[] fieldNames = null;          String[] fieldNames = null;
         String destTableName = null;          String destTableName = null;
Line 3652  class Convert Line 3771  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 3667  class Convert Line 3786  class Convert
                     fieldIndex++;                      fieldIndex++;
                 }                  }
   
             }        } else
             else  
             {              {
                 // use create statement for field names                  // use create statement for field names
                 StringTokenizer tokenizer = new StringTokenizer(create.substring(toIndex + 1, endIndex), ",");          StringTokenizer tokenizer = new StringTokenizer(create.substring(toIndex + 1, endIndex),
               ",");
                 int numFields = tokenizer.countTokens();                  int numFields = tokenizer.countTokens();
                 fieldNames = new String[numFields];                  fieldNames = new String[numFields];
                 int fieldIndex = 0;                  int fieldIndex = 0;
Line 3684  class Convert Line 3803  class Convert
                     fieldIndex++;                      fieldIndex++;
                 }                  }
             }              }
         }      } else
         else  
         {          {
             destTableName = convertText(tableName);              destTableName = convertText(tableName);
   
             // 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 3700  class Convert Line 3818  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++;
                 }                  }
   
             }        } else
             else  
             {              {
                 Vector fieldNamesVec = bean.getColumnNames();                  Vector fieldNamesVec = bean.getColumnNames();
                 fieldNames = new String[fieldNamesVec.size()];                  fieldNames = new String[fieldNamesVec.size()];
Line 3755  class Convert Line 3876  class Convert
         return command;          return command;
     }      }
   
     public static StringBuffer createUpdateCommand(String destTableName, String[] fieldNames, String id)    public static StringBuffer createUpdateCommand(String destTableName, String[] fieldNames,
         String id)
     {      {
         StringBuffer command = new StringBuffer();          StringBuffer command = new StringBuffer();
   
Line 3795  class Convert Line 3917  class Convert
         bean.getConnection();          bean.getConnection();
         ResultSet resultSet = null;          ResultSet resultSet = null;
         String lastResult = "P227634.11";//"P227625.79554";//"P227625.77391";//"P116034.970998";          String lastResult = "P227634.11";//"P227625.79554";//"P227625.77391";//"P116034.970998";
         String myQuery = "select " + bean.getQC() + idField + bean.getQC() + ",serial " + " from " + bean.getQC() + table + bean.getQC();      String myQuery = "select " + bean.getQC() + idField + bean.getQC() + ",serial " + " from "
           + bean.getQC() + table + bean.getQC();
         System.out.println("Query is now " + myQuery);          System.out.println("Query is now " + myQuery);
         JDialog statusDialog = new JDialog();          JDialog statusDialog = new JDialog();
         statusDialog.setTitle("Status Information");          statusDialog.setTitle("Status Information");
Line 3817  class Convert Line 3940  class Convert
         {          {
             if (!statusDialog.isVisible())              if (!statusDialog.isVisible())
                 statusDialog.setVisible(true);                  statusDialog.setVisible(true);
             tempQuery = myQuery + " where " + bean.getQC() + idField + bean.getQC() + ">'" + lastResult + "'";        tempQuery = myQuery + " where " + bean.getQC() + idField + bean.getQC() + ">'" + lastResult
             + "'";
             resultSet = bean.makeQuery(tempQuery, 1);              resultSet = bean.makeQuery(tempQuery, 1);
             if (resultSet == null)              if (resultSet == null)
             {              {
                 System.out.println("lastResult was " + lastResult + " counter was " + counter);                  System.out.println("lastResult was " + lastResult + " counter was " + counter);
                 break;                  break;
             }        } else
             else  
             {              {
                 resultSet.next();                  resultSet.next();
                 lastResult = resultSet.getString(1);                  lastResult = resultSet.getString(1);
Line 3844  class Convert Line 3967  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.2  
changed lines
  Added in v.1.13


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