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

version 1.1, 2005/01/21 11:27:03 version 1.5, 2005/03/21 10:32:03
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;
Line 67  class Convert Line 66  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 75  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
       {
         java.sql.Connection con = bean.getConnection();
         Statement stm = con.createStatement();
         stm.execute(command);
       }
     }
   
     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 118  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();
   
     public static void main(String args[]) throws IOException      public static void main(String args[]) throws IOException
     {      {
         /*          /*
          * 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
Line 116  class Convert Line 149  class Convert
         {          {
             File temp = File.createTempFile("fm2sql", ".txt");              File temp = File.createTempFile("fm2sql", ".txt");
             file = new FileOutputStream(temp);              file = new FileOutputStream(temp);
         }      } catch (FileNotFoundException e1)
         catch (FileNotFoundException e1)  
         {          {
             e1.printStackTrace();              e1.printStackTrace();
         }          }
Line 127  class Convert Line 159  class Convert
             System.setOut(stream);              System.setOut(stream);
             System.setErr(stream);              System.setErr(stream);
         }          }
         readXMLFile(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);
   
Line 135  class Convert Line 168  class Convert
         //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 201  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 215  class Convert Line 250  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 263  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 276  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 299  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 331  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 366  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 388  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 414  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
     {      {
   
         FM2SQL.ProgressDialog dialog = null;          FM2SQL.ProgressDialog dialog = null;
Line 422  class Convert Line 460  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 "
                 + bean.getQC() + names.get(tbIndex).toString() + bean.getQC();
                     if (layout != "")                      if (layout != "")
                     {                      {
                         query = addLayoutToQuery(names, query, tbIndex, layout);                          query = addLayoutToQuery(names, query, tbIndex, layout);
Line 437  class Convert Line 476  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 490  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 499  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;
                 fieldNames = prop.fieldNames;                  fieldNames = prop.fieldNames;
                 if (mode == Convert.DataBase.CONVERT_MODE)                  if (mode == Convert.DataBase.CONVERT_MODE)
Line 476  class Convert Line 516  class Convert
                     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 ");
Line 496  class Convert Line 538  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 558  class Convert Line 602  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 620  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 642  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 668  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();
Line 632  class Convert Line 682  class Convert
                 if (isGUI)                  if (isGUI)
                     resetGUI(dialog);                      resetGUI(dialog);
             }              }
         }      } 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 660  class Convert Line 708  class Convert
         dialog.title.setText("Reading table data ...");          dialog.title.setText("Reading table data ...");
         dialog.table.setText(names.get(tbIndex).toString());          dialog.table.setText(names.get(tbIndex).toString());
         dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size());          dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size());
         dialog.show();      dialog.setVisible(true);
     }      }
   
     /**      /**
Line 697  class Convert Line 745  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 765  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 803  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 853  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 902  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 976  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();        DBBean database = ((DataBase) databases.lastElement()).bean;
                 tables = new Vector();        databases.remove(databases.size() - 1);
                 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)  
                     throw new Error("parse error database tag missing");  
                 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();  
                 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[]  
                     {1, 1, i, j});  
                     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_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 1005  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)  
       } catch (Exception e)
         {          {
   
             e.printStackTrace();              e.printStackTrace();
Line 1146  class Convert Line 1037  class Convert
         }          }
     }      }
   
     public static Vector getXMLConfig(String xmlFile)    public static Vector getXMLConfig(StringBuffer sb)
     {  
         StringBuffer sb = null;  
         try  
         {          {
             // read XML Metadata from a file  
             FileInputStream fi = new FileInputStream(xmlFile);  
             InputStreamReader isr = new InputStreamReader(fi, "UTF-8");  
             BufferedReader buffr = new BufferedReader(isr);  
             sb = new StringBuffer();  
             int c = 0;  
             while ((c = buffr.read()) != -1)  
             {  
                 char ch = (char) c;  
                 sb.append(ch);  
                 // System.out.print((char)c);  
             }  
   
         }  
         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 1052  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 1074  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 1090  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 1272  class Convert Line 1158  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 1303  class Convert Line 1190  class Convert
                     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 1201  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 1217  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 1287  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 1320  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 1344  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;
     }
   
     /**      /**
      * Helper class for Conversion etc Holds the some data     * Helper class for Conversion etc. Contains data needed for the conversion
      *        * 
      * @author rogo       * @author rogo
      *         *  
Line 1455  class Convert Line 1404  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 1480  class Convert Line 1432  class Convert
   
         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 1530  class Convert Line 1483  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 1525  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 1556  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 1579  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 1663  class Convert Line 1633  class Convert
                     dialog.title.setText("Getting table data ...");                      dialog.title.setText("Getting table data ...");
                     dialog.table.setText(names.get(tbIndex).toString());                      dialog.table.setText(names.get(tbIndex).toString());
                     dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size());                      dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size());
                     dialog.show();            dialog.setVisible(true);
                     bean.getConnection();                      bean.getConnection();
                     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 1649  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 1683  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 1710  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 1756  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 1785  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 1838  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 1851  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 1892  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 1915  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 1942  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 1955  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 1968  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 2023  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 2032  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 2067  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 2093  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 2132  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 3620  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 3667  class Convert Line 3653  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 3670  class Convert
                     fieldIndex++;                      fieldIndex++;
                 }                  }
             }              }
         }      } else
         else  
         {          {
             destTableName = convertText(tableName);              destTableName = convertText(tableName);
   
Line 3705  class Convert Line 3690  class Convert
                     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 3739  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 3780  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 3803  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);

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


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