Diff for /FM2SQL/Attic/Convert.java between versions 1.69 and 1.87

version 1.69, 2004/08/06 11:15:41 version 1.87, 2004/11/23 13:00:51
Line 1 Line 1
 /*  /*
  * Convert.java -- Converter class -  Filemaker to SQL Converter    * Convert.java -- Converter class - Filemaker to SQL Converter Copyright (C)
  * Copyright (C) 2003 Robert Gordesch (rogo@mpiwg-berlin.mpg.de   * 2003 Robert Gordesch (rogo@mpiwg-berlin.mpg.de) This program is free
  * This program is free software; you can redistribute it and/or modify it   * software; you can redistribute it and/or modify it under the terms of the GNU
  * under the terms of the GNU General Public License as published by the Free   * General Public License as published by the Free Software Foundation; either
  * Software Foundation; either version 2 of the License, or (at your option)   * version 2 of the License, or (at your option) any later version. Please read
  * any later version.  Please read license.txt for the full details. A copy of   * license.txt for the full details. A copy of the GPL may be found at
  * the GPL may be found at http://www.gnu.org/copyleft/lgpl.html  You should   * http://www.gnu.org/copyleft/lgpl.html You should have received a copy of the
  * have received a copy of the GNU General Public License along with this   * GNU General Public License along with this program; if not, write to the Free
  * program; if not, write to the Free Software Foundation, Inc., 59 Temple   * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  * Place, Suite 330, Boston, MA 02111-1307 USA  Created on 15.09.2003 by   * USA Created on 15.09.2003 by rogo
  * rogo    
  */   */
   
 import java.awt.Cursor;  import java.awt.Cursor;
Line 19  import java.io.File; Line 18  import java.io.File;
 import java.io.FileInputStream;  import java.io.FileInputStream;
 import java.io.FileNotFoundException;  import java.io.FileNotFoundException;
 import java.io.FileOutputStream;  import java.io.FileOutputStream;
   import java.io.IOException;
 import java.io.InputStream;  import java.io.InputStream;
 import java.io.InputStreamReader;  import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;  import java.io.OutputStreamWriter;
Line 26  import java.io.PrintStream; Line 26  import java.io.PrintStream;
 import java.io.UnsupportedEncodingException;  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.SQLException;  import java.sql.SQLException;
 import java.sql.Statement;  import java.sql.Statement;
 import java.sql.Types;  import java.sql.Types;
Line 38  import java.util.StringTokenizer; Line 39  import java.util.StringTokenizer;
 import java.util.TreeSet;  import java.util.TreeSet;
 import java.util.Vector;  import java.util.Vector;
   
   import javax.swing.JDialog;
   import javax.swing.JLabel;
   import javax.swing.JPanel;
   
 import com.exploringxml.xml.Node;  import com.exploringxml.xml.Node;
 import com.exploringxml.xml.Xparse;  import com.exploringxml.xml.Xparse;
   
   
 class Convert  class Convert
 {  {
   /**Helper class for index creation      /**
        * Helper class for index creation
        * 
    * @author rogo     * @author rogo
    *     *
    */     */
Line 61  class Convert Line 67  class Convert
         {          {
           buff.append(element).append(", ");            buff.append(element).append(", ");
           count++;            count++;
         } else                  }
                   else
           buff.append(element);            buff.append(element);
   
       }        }
Line 69  class Convert Line 76  class Convert
       return buff.toString();        return buff.toString();
     }      }
   }    }
   
   static DBBean bean = new DBBean();    static DBBean bean = new DBBean();
   
   static DBBean beanDest = new DBBean();    static DBBean beanDest = new DBBean();
   
   static String user = "", passwd = "e1nste1n";    static String user = "", passwd = "e1nste1n";
   
   static String userDest = "postgres", passwdDest = "rogo";    static String userDest = "postgres", passwdDest = "rogo";
   
   static boolean batchRun = false;    static boolean batchRun = false;
   
   static Vector databases = new Vector();    static Vector databases = new Vector();
   
   final static int numHits = 5000;    final static int numHits = 5000;
   final static int numIntervalls = 2;  
   public static void main(String args[])      final static int numIntervalls = 4;
   {  
     /*    try      static boolean debug = false;
         {  
           //byte[] b = "ö".getBytes("UTF-8");      static boolean isGUI = true;
         //  System.out.println("QueryString " +b[0]+" "+b[1]+(new String(b).getBytes()[0])+" "+new String(b).getBytes()[1]);      public static void main(String args[]) throws IOException
         //System.out.println(new String(b,"UTF-8"));  
         } catch (UnsupportedEncodingException e)  
         {          {
           e.printStackTrace();          /*
         }*/           * try { //byte[] b = "ö".getBytes("UTF-8"); //
            * System.out.println("QueryString " +b[0]+" "+b[1]+(new
            * String(b).getBytes()[0])+" "+new String(b).getBytes()[1]);
            * //System.out.println(new String(b,"UTF-8")); } catch
            * (UnsupportedEncodingException e) { e.printStackTrace(); }
            */
           isGUI = false;
     FileOutputStream file = null;      FileOutputStream file = null;
     if (args.length != 1)      if (args.length != 1)
     {      {
Line 97  class Convert Line 114  class Convert
     }      }
     try      try
     {      {
       file = new FileOutputStream("./log.txt");              File temp = File.createTempFile("fm2sql", ".txt");
     } catch (FileNotFoundException e1)              file = new FileOutputStream(temp);
           }
           catch (FileNotFoundException e1)
     {      {
       e1.printStackTrace();        e1.printStackTrace();
     }      }
     PrintStream stream = new PrintStream(file);          PrintStream stream = new PrintStream(file, true);
     // System.setOut(stream);          if (!debug)
     //System.setErr(stream);          {
               System.setOut(stream);
               System.setErr(stream);
           }
     readXMLFile(args[0]);      readXMLFile(args[0]);
     if (!(new File(args[0]).exists()))      if (!(new File(args[0]).exists()))
       System.exit(0);        System.exit(0);
Line 113  class Convert Line 134  class Convert
     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;
     convert(null, null, names, layouts, selects, creates, ids, mode, delimiter);      convert(null, null, names, layouts, selects, creates, ids, mode, delimiter);
     if (true)  
       return;  
     StringBuffer command = null;  
     try  
     {  
       bean.setConnection(source.url);  
       if (names == null)  
         names = bean.getTableNames();  
       //Collections.sort(names);  
       int tbIndex = 1;  
   
       for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)  
       {  
         Vector[] result = null;  
         try  
         {  
           String query = "select * from " + bean.getQC() + names.get(tbIndex).toString() + bean.getQC();  
           String layout = (layouts.isEmpty()) ? "" : layouts.get(tbIndex).toString();  
           query = (selects != null) ? selects.get(tbIndex).toString() : query;  
           //if  vectors[1].get(i) != null)  
           if (!layout.equals(""))  
           {  
             System.out.println("before " + query + " table" + names.get(tbIndex));  
             layout = " layout " + bean.getQC() + layout + bean.getQC();  
             String name = names.get(tbIndex).toString();  
             StringBuffer queryLayout = new StringBuffer(query);  
             queryLayout.insert(queryLayout.indexOf(name) + name.length() + 1, " " + layout);  
             query = queryLayout.toString();  
             System.out.println("added layout " + query);  
   
           }  
           System.out.println(" performing query " + query);  
           //result = bean.getQueryData(query, null, 0);  
           bean.getConnection();  
           bean.makeQuery(query, 0);  
         } catch (Exception e)  
         {  
           System.out.println(e.getMessage());  
           e.printStackTrace();  
           continue;  
         }  
         //beanDest.setConnection("jdbc:postgresql://erebos/test3");  
         beanDest.setConnection(destination.url);  
   
         Statement stm = beanDest.getConnection().createStatement();  
   
         Vector tables = beanDest.getTableNames();  
         //   Collections.sort(tables);  
         System.out.println("converting table " + names.get(tbIndex) + " " + tables.indexOf(convertText((String) names.get(tbIndex)))); // "//beanDest.getTypeNames());   
         tables = beanDest.getTableNames();  
         // System.out.println(beanDest.getTableNames(beanDest.getCatalogs().get(2).toString()));  
         stm = beanDest.getConnection().createStatement();  
         // System.exit(0);  
         if (mode == Convert.DataBase.CONVERT_MODE)  
         {  
           if (tables.indexOf(names.get(tbIndex)) >= 0)  
           {  
             stm.executeUpdate("drop table " + beanDest.getQC() + names.get(tbIndex) + beanDest.getQC());  
             tables.remove((String) names.get(tbIndex));  
             System.out.println("dropped table " + names.get(tbIndex));  
           } else if (tables.indexOf(convertText(names.get(tbIndex).toString())) >= 0)  
           {  
             stm.executeUpdate("drop table " + beanDest.getQC() + convertText((String) names.get(tbIndex)) + beanDest.getQC());  
             tables.remove(convertText((String) names.get(tbIndex)));  
             System.out.println("dropped table " + names.get(tbIndex));  
           }  
   
           if (tables.indexOf(names.get(tbIndex)) < 0 && tables.indexOf(convertText(names.get(tbIndex).toString())) < 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");  
   
               command = new StringBuffer(50);  
               command.append("CREATE TABLE ");  
               command.append(beanDest.getQC());  
               command.append(convertText((String) names.get(tbIndex)));  
               command.append(beanDest.getQC());  
               command.append("(");  
               String type = null;  
               Vector columnNames = bean.getColumnNames();  
               for (int i = 0; i < columnNames.size() - 1; ++i)  
               {  
                 type = bean.metaData.getColumnTypeName(i + 1);  
                 //   System.out.println(i+" "+result[1].get(i)+" "+type);  
                 type = (type.equals("NUMBER")) ? "INT4" : type;  
                 type = (type.equals("CONTAINER")) ? "TEXT" : type;  
   
                 command.append(beanDest.getQC() + convertText((String) columnNames.get(i)) + beanDest.getQC() + " " + type + ", ");  
               }  
               type = bean.metaData.getColumnTypeName(columnNames.size());  
               type = (type.equals("NUMBER")) ? "INT4" : type;  
               type = (type.equals("CONTAINER")) ? "TEXT" : type;  
               command.append(beanDest.getQC() + convertText((String) columnNames.get(columnNames.size() - 1)) + beanDest.getQC() + " " + type);  
               command.append(" )");  
             } else  
               command = new StringBuffer().append(creates.get(tbIndex).toString());  
   
             System.out.println(command);  
             //  System.exit(0);  
             //command.append(DBBean.getQC());     
             stm.executeUpdate(command.toString());  
   
           }  
         }  
         Vector row = null;  
         command = new StringBuffer();  
   
         command.append("INSERT  INTO ");  
         command.append(beanDest.getQC());  
         command.append(convertText((String) names.get(tbIndex)));  
         command.append(beanDest.getQC());  
         command.append(" values ( ");  
   
         for (int i = 0; i < bean.getColumnNames().size() - 1; ++i)  
           command.append("?,");  
         command.append("?)");  
         PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString());  
         System.out.println(command);  
         while ((row = bean.getNextRow()) != null)  
         {  
           //print rows  
           Object obj = null;  
           for (int k = 0; k < row.size(); ++k)  
           {  
             obj = row.get(k);  
             if (obj instanceof ArrayList)  
               obj = formatFileMakerArray((List) obj, "\n");  
             String str = (obj == null) ? "NULL" : obj.toString();  
             if (!str.equals("NULL"))  
               pstm.setString(k + 1, str);  
             else  
               pstm.setNull(k + 1, Types.NULL);  
           }  
           pstm.execute();  
   
         } // to for loop      
   
       }        }
     } catch (Exception e)  
     {  
       System.out.println("Error while connecting to database " + e);  
       //dialog.setVisible(false);  
       //dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));  
       //FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));  
       java.io.ByteArrayOutputStream b = new java.io.ByteArrayOutputStream();  
       java.io.PrintStream stream = new java.io.PrintStream(b);  
       stream.print(command + "\n\n");  
       e.printStackTrace(stream);  
       System.err.println(b);  
       //FM2SQL.showErrorDialog(b.toString(), "Error occured !");  
   
     }  
     //  dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));  
     //FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));  
   
     //  dialog.setVisible(false);   
   }  
   public static String formatFileMakerArray(List list, String delimiter)    public static String formatFileMakerArray(List list, String delimiter)
   {    {
     StringBuffer formattedString = new StringBuffer();      StringBuffer formattedString = new StringBuffer();
Line 287  class Convert Line 153  class Convert
     }      }
     return formattedString.toString();      return formattedString.toString();
   }    }
   
   /**    /**
    * Method for SQL UPDATE     * Method for SQL UPDATE
        * 
    * @param source     * @param source
    * @param destination     * @param destination
    * @param names     * @param names
Line 301  class Convert Line 169  class Convert
    */     */
   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;
     if (FM2SQL.fmInstance != null)          if (isGUI)
     {      {
       dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean);              dialog = initDialog();
       dialog.setTitle("Conversion running ...");  
       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.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));  
       FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));  
       dialog.thread = Thread.currentThread();  
     }      }
     // setting user and passwd       // setting user and passwd 
     bean.setUserAndPasswd(user, passwd);      bean.setUserAndPasswd(user, passwd);
     // setting user and passwd       // setting user and passwd 
     beanDest.setUserAndPasswd(userDest, passwdDest);      beanDest.setUserAndPasswd(userDest, passwdDest);
     if (dialog != null)  
       dialog.setSize(400, 250);  
     StringBuffer command = null;      StringBuffer command = null;
     String query = null;      String query = null;
     try      try
     {      {
       //bean.setConnection("jdbc:fmpro:http://141.14.237.74:8050");      
       //bean.setConnection("jdbc:postgresql://erebos/test","postgres","rogo");  
       bean.setConnection(source);        bean.setConnection(source);
   
       if (names == null)        if (names == null)
         names = bean.getTableNames();          names = bean.getTableNames();
       // Collections.sort(names);        // Collections.sort(names);
       int tbIndex = 1;        int tbIndex = 1;
   
       // System.out.println("Start at "+names.indexOf("archimedes_facsimiles"));              System.out.println("Start at table " + names.firstElement());
       for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)        for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)
       {        {
         Vector[] result = null;          Vector[] result = null;
Line 343  class Convert Line 205  class Convert
           //if  vectors[1].get(i) != null)            //if  vectors[1].get(i) != null)
           if (layout != "")            if (layout != "")
           {            {
             layout = " layout " + bean.getQC() + layout + bean.getQC();                          query = addLayoutToQuery(names, query, tbIndex, layout);
             String name = names.get(tbIndex).toString();  
             StringBuffer queryLayout = new StringBuffer(query);  
             queryLayout.insert(queryLayout.indexOf(name) + name.length() + 1, " " + layout);  
             query = queryLayout.toString();  
             System.out.println("added layout  " + query);  
   
           }            }
           dialog.title.setText("Getting table data ...");                      if (dialog != null)
           dialog.table.setText(names.get(tbIndex).toString());                      {
           dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size());                          prepareDialogforUse(names, dialog, tbIndex);
           dialog.show();                      }
           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);
   
           continue;            continue;
         }          }
         // determine destTableName from createStatement or from source table name                  // determine destTableName from createStatement or from source
                   // table name
         if (!creates.get(tbIndex).equals(""))          if (!creates.get(tbIndex).equals(""))
         {          {
           String create = creates.get(tbIndex).toString().toLowerCase();            String create = creates.get(tbIndex).toString().toLowerCase();
Line 370  class Convert Line 232  class Convert
           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("jdbc:postgresql://erebos/test3");  
         beanDest.setConnection(destination);          beanDest.setConnection(destination);
   
         Statement stm = beanDest.getConnection().createStatement();          Statement stm = beanDest.getConnection().createStatement();
   
         Vector tables = beanDest.getTableNames();          Vector tables = beanDest.getTableNames();
         // 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()));  
         stm = beanDest.getConnection().createStatement();          stm = beanDest.getConnection().createStatement();
         // System.exit(0);  
   
         if (dialog != null)          if (dialog != null)
           dialog.title.setText("Updating table data ...");            dialog.title.setText("Updating table data ...");
                   else
                       System.out.println("Updating table data ...");
         int j = -1;          int j = -1;
   
         Vector row = null;          Vector row = null;
Line 415  class Convert Line 276  class Convert
           j++;            j++;
           //print rows            //print rows
           Object obj = null;            Object obj = null;
           /* for(int k=0;k<row.size()-1;++k)  
            {  
                 obj = row.get(k);  
                 //System.out.println("row "+obj+" "+k);  
              if(obj!=null&&!(obj instanceof ArrayList))  
              command.append("'"+convertUml(obj.toString())+"',");   
              else if(obj!=null&&   obj instanceof ArrayList)  
              command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"',");   
              else command.append("NULL,");  
            }  
            obj = row.get(row.size() - 1);  
            if (obj != null && !(obj instanceof ArrayList))  
            command.append("'"+convertUml(obj.toString())+"')");   
             else  
             if(obj!=null&&   obj instanceof ArrayList)  
              command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"')");         //command.append(obj.toString()+")");  
              else command.append("NULL)");  
             */  
           //command.append("'"+row.get(row.size()-1)+"')");   
           //command.append(" )");  
           //  for(int k=0;k<row.size();++k)  
   
           // System.out.println();  
           //   System.out.println(command+" "+j+" "+row.size()+" "+  ((Vector)result2[0].get(j)).size());  
           // System.out.println(command);  
           for (int k = 0; k < row.size(); ++k)            for (int k = 0; k < row.size(); ++k)
           {            {
             obj = row.get(k);              obj = row.get(k);
Line 452  class Convert Line 288  class Convert
               pstm.setNull(k + 1, Types.NULL);                pstm.setNull(k + 1, Types.NULL);
           }            }
           pstm.setString(row.size() + 1, row.get(idIndex).toString());            pstm.setString(row.size() + 1, row.get(idIndex).toString());
           //System.out.println(pstm.toString());  
           // System.exit(0);  
           pstm.execute();            pstm.execute();
           //stm.executeUpdate(command.toString());  
           if (dialog != null)            if (dialog != null)
             dialog.progress.setValue((int) (((double) (j + 1) / (double) rowCount) * 100.0));              dialog.progress.setValue((int) (((double) (j + 1) / (double) rowCount) * 100.0));
           // System.out.println( (int)(((double)(j+1)/(double)result[0].size())*100.0)+" "+result[0].size()+" "+j);  
           command = null;            command = null;
         } // 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 (dialog != null)              if (isGUI)
               {
                   showExceptionDialog(dialog, command, e);
               }
               else
               {
                   e.printStackTrace();
   
               }
           } finally
           {
               if (isGUI)
               {
                   resetGUI(dialog);
               }
           }
       }
   
       /**
        * @param dialog
        */
       private static void resetGUI(FM2SQL.ProgressDialog dialog)
       {        {
         dialog.setVisible(false);  
         dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));          dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
         FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));          FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
           dialog.setVisible(false);
       }        }
   
       /**
        * @param dialog
        * @param command
        * @param e
        */
       private static void showExceptionDialog(FM2SQL.ProgressDialog dialog, StringBuffer command, Exception e)
       {
           dialog.setVisible(false);
           dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
           FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
       java.io.ByteArrayOutputStream b = new java.io.ByteArrayOutputStream();        java.io.ByteArrayOutputStream b = new java.io.ByteArrayOutputStream();
       java.io.PrintStream stream = new java.io.PrintStream(b);        java.io.PrintStream stream = new java.io.PrintStream(b);
       stream.print(command + "\n\n");        stream.print(command + "\n\n");
       e.printStackTrace(stream);        e.printStackTrace(stream);
       FM2SQL.showErrorDialog(b.toString(), "Error occured !");        FM2SQL.showErrorDialog(b.toString(), "Error occured !");
   
     }      }
     if (dialog != null)  
     {  
       dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));  
       FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));  
   
       dialog.setVisible(false);      /**
        * @return
        */
       private static FM2SQL.ProgressDialog initDialog()
       {
           FM2SQL.ProgressDialog dialog;
           dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean);
           dialog.setTitle("Conversion running ...");
           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.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
           FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
           dialog.thread = Thread.currentThread();
           dialog.setSize(420, 250);
           return dialog;
     }      }
   
   }  
   /**    /**
    *   transfers the specified array of tables  to the destination database       * transfers the specified array of tables to the destination database and
       and creates the table if it does not exist if it exists and mode is not append the table is dropped       * creates the table if it does not exist if it exists and mode is not append
          * the table is dropped
        * 
    * @param source     * @param source
    * @param destination     * @param destination
    * @param names     * @param names
Line 508  class Convert Line 382  class Convert
   
     FM2SQL.ProgressDialog dialog = null;      FM2SQL.ProgressDialog dialog = null;
   
     if (FM2SQL.fmInstance != null)          if (isGUI)
     {      {
       dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean);              dialog = initDialog();
       dialog.setTitle("Conversion running ...");  
       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.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));  
       FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));  
       dialog.thread = Thread.currentThread();  
       dialog.setSize(400, 250);  
     }      }
   
           System.out.println("connection established " + source + " " + bean.url);
   
     java.util.TreeSet myIds = new TreeSet();      java.util.TreeSet myIds = new TreeSet();
     int deltaID = 1;      int deltaID = 1;
     String idField = "";      String idField = "";
     String destTableName = "";      String destTableName = "";
     String[] fieldNames = null;      String[] fieldNames = null;
   
     if (source != null && destination != null)      if (source != null && destination != null)
     {      {
       // setting user and passwd         // setting user and passwd 
Line 531  class Convert Line 402  class Convert
       // setting user and passwd         // setting user and passwd 
       beanDest.setUserAndPasswd(userDest, passwdDest);        beanDest.setUserAndPasswd(userDest, passwdDest);
     }      }
   
     StringBuffer command = null;      StringBuffer command = null;
     String query = null;      String query = null;
     try      try
     {      {
   
       if (source != null)        if (source != null)
         bean.setConnection(source);          bean.setConnection(source);
       else        else
         bean.setConnection(bean.url);          bean.setConnection(bean.url);
   
       if (names == null)        if (names == null)
         names = bean.getTableNames();          names = bean.getTableNames();
       // Collections.sort(names);  
       int tbIndex = 1;        int tbIndex = 1;
   
       // System.out.println("Start at "+names.indexOf("archimedes_facsimiles"));  
       for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)        for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)
       {        {
         Vector[] result = null;          Vector[] result = null;
         try          try
         {          {
           query = "select * from " + bean.getQC() + names.get(tbIndex).toString() + bean.getQC();  
           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() : "select * from " + bean.getQC() + names.get(tbIndex).toString() + bean.getQC();
           //if  vectors[1].get(i) != null)  
           if (layout != "")            if (layout != "")
           {            {
             layout = " layout " + bean.getQC() + layout + bean.getQC();                          query = addLayoutToQuery(names, query, tbIndex, layout);
             String name = names.get(tbIndex).toString();  
             StringBuffer queryLayout = new StringBuffer(query);  
             queryLayout.insert(queryLayout.indexOf(name) + name.length() + 1, " " + layout);  
             query = queryLayout.toString();  
             System.out.println("added layout  " + query);  
   
           }            }
           //  if ( layout!= "")  
           //     query += " layout " + bean.getQC() + layout + bean.getQC();  
           if (dialog != null)            if (dialog != null)
           {            {
             dialog.title.setText("Reading table data ...");                          prepareDialogforUse(names, dialog, tbIndex);
             dialog.table.setText(names.get(tbIndex).toString());  
             dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size());  
             dialog.show();  
           }            }
           //result = bean.getQueryData(query, dialog, 0);  
           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)
         {          {
           System.out.println(e);                      System.out.println("Warning exception occured \n " + e);
   
           continue;            continue;
         }          }
         if (destination != null)          if (destination != null)
Line 598  class Convert Line 458  class Convert
         stm = beanDest.getConnection().createStatement();          stm = beanDest.getConnection().createStatement();
         // System.exit(0);          // System.exit(0);
   
         // determine destTableName from createStatement or from source table name                  // determine destTableName from createStatement or from source
                   // 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;
Line 612  class Convert Line 473  class Convert
             System.out.println("dropped table" + destTableName);              System.out.println("dropped table" + destTableName);
   
           }            }
           /*                      if ((tables.indexOf(destTableName) < 0))
           if(destTableName.equals(""))  
           if (tables.indexOf(names.get(tbIndex)) >= 0)  
           {  
             stm.executeUpdate("drop table " + beanDest.getQC() + names.get(tbIndex) + beanDest.getQC());  
             tables.remove((String) names.get(tbIndex));  
             System.out.println("dropped table" + names.get(tbIndex));  
           } else if (tables.indexOf(convertText(names.get(tbIndex).toString())) >= 0)  
           {  
             stm.executeUpdate("drop table " + beanDest.getQC() + convertText((String) names.get(tbIndex)) + beanDest.getQC());  
             tables.remove(convertText((String) names.get(tbIndex)));  
             System.out.println("dropped table" + names.get(tbIndex));  
           }  
           */  
           if ((tables.indexOf(destTableName) < 0)) //&& tables.indexOf(names.get(tbIndex)) < 0 && tables.indexOf(convertText(names.get(tbIndex).toString())) < 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)
Line 644  class Convert Line 491  class Convert
               for (int i = 0; i < columnNames.size() - 1; ++i)                for (int i = 0; i < columnNames.size() - 1; ++i)
               {                {
                 type = bean.metaData.getColumnTypeName(i + 1);                  type = bean.metaData.getColumnTypeName(i + 1);
                 //   System.out.println(i+" "+result[1].get(i)+" "+type);                                  //   System.out.println(i+" "+result[1].get(i)+"
                                   // "+type);
                 type = (type.equals("NUMBER")) ? "INT4" : type;                  type = (type.equals("NUMBER")) ? "INT4" : type;
                 type = (type.equals("CONTAINER")) ? "TEXT" : type;                  type = (type.equals("CONTAINER")) ? "TEXT" : type;
   
Line 656  class Convert Line 504  class Convert
               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(" )");
   
               // System.out.println(command);                          }
               //  System.exit(0);                          else
               //command.append(DBBean.getQC());     
             } 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 675  class Convert Line 521  class Convert
   
         command.append("INSERT  INTO ");          command.append("INSERT  INTO ");
         command.append(beanDest.getQC());          command.append(beanDest.getQC());
         command.append(destTableName); //convertText((String) names.get(tbIndex)));                  command.append(destTableName);
         command.append(beanDest.getQC());          command.append(beanDest.getQC());
         command.append(" (");          command.append(" (");
         for (int i = 0; i < fieldNames.length; i++)          for (int i = 0; i < fieldNames.length; i++)
Line 699  class Convert Line 545  class Convert
         int endIndex = -1;          int endIndex = -1;
         String tempQuery = query;          String tempQuery = query;
         String tempID = bean.getQC() + idField + bean.getQC();          String tempID = bean.getQC() + idField + bean.getQC();
         // if id_field not do incremental conversion else do it all at once                  // if id_field not do incremental conversion else do it all at
                   // once
         if (!idField.equals(""))          if (!idField.equals(""))
         {          {
           long startTime = System.currentTimeMillis();            long startTime = System.currentTimeMillis();
Line 770  class Convert Line 617  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 781  class Convert Line 629  class Convert
           System.out.println("Time for old convert elapsed " + (endTime - startTime));            System.out.println("Time for old convert elapsed " + (endTime - startTime));
   
         }          }
                   if (isGUI)
                       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 (dialog != null)              if (isGUI)
       {        {
         dialog.setVisible(false);                  showExceptionDialog(dialog, command, e);
         dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));                  resetGUI(dialog);
         FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));              }
         java.io.ByteArrayOutputStream b = new java.io.ByteArrayOutputStream();              else
         java.io.PrintStream stream = new java.io.PrintStream(b);  
         stream.print(command + "\n\n");  
         e.printStackTrace(stream);  
         FM2SQL.showErrorDialog(b.toString(), "Error occured !");  
       } else  
       {        {
         e.printStackTrace();          e.printStackTrace();
   
       }        }
     }      }
     if (dialog != null)  
       }
   
       /**
        * @param names
        * @param dialog
        * @param tbIndex
        */
       private static void prepareDialogforUse(Vector names, FM2SQL.ProgressDialog dialog, int tbIndex)
     {      {
       dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));          dialog.title.setText("Reading table data ...");
       FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));          dialog.table.setText(names.get(tbIndex).toString());
       dialog.setVisible(false);          dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size());
           dialog.show();
     }      }
   
       /**
        * @param names
        * @param query
        * @param tbIndex
        * @param layout
        * @return
        */
       private static String addLayoutToQuery(Vector names, String query, int tbIndex, String layout)
       {
           layout = " layout " + bean.getQC() + layout + bean.getQC();
           String name = names.get(tbIndex).toString();
           StringBuffer queryLayout = new StringBuffer(query);
           queryLayout.insert(queryLayout.indexOf(name) + name.length() + 1, " " + layout);
           query = queryLayout.toString();
           System.out.println("added layout  " + query);
           return query;
   }    }
   
   /**    /**
    * Writes data to the destination table      * Writes data to the destination table 
    * @param dialog  progress dialog       * 
        * @param dialog
        *          progress dialog
    * @param command      * @param command 
    * @param j       data index for progress bar       * @param j
    * @param pstm    prepared statement       *          data index for progress bar
    * @param rowCount number of datasets       * @param pstm
        *          prepared statement
        * @param rowCount
        *          number of datasets
    * @return   command     * @return   command
    * @throws Exception     * @throws Exception
    * @throws SQLException     * @throws SQLException
Line 825  class Convert Line 703  class Convert
     while ((row = bean.getNextRow()) != null)      while ((row = bean.getNextRow()) != null)
     {      {
       j++;        j++;
       // row = (Vector) result[0].get(j);  
       /*   command = new StringBuffer();  
         
            command.append("INSERT  INTO ");  
            command.append(beanDest.getQC());  
            command.append(convertText((String) names.get(tbIndex)));  
            command.append(beanDest.getQC());  
            command.append(" values ( ");  
         */  
       //print rows  
       Object obj = null;        Object obj = null;
       /* for(int k=0;k<row.size()-1;++k)  
        {  
           obj = row.get(k);  
           //System.out.println("row "+obj+" "+k);  
          if(obj!=null&&!(obj instanceof ArrayList))  
          command.append("'"+convertUml(obj.toString())+"',");   
          else if(obj!=null&&   obj instanceof ArrayList)  
          command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"',");   
          else command.append("NULL,");  
        }  
        obj = row.get(row.size() - 1);  
        if (obj != null && !(obj instanceof ArrayList))  
        command.append("'"+convertUml(obj.toString())+"')");   
         else  
         if(obj!=null&&   obj instanceof ArrayList)  
          command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"')");         //command.append(obj.toString()+")");  
          else command.append("NULL)");  
         */  
       //command.append("'"+row.get(row.size()-1)+"')");   
       //command.append(" )");  
       //  for(int k=0;k<row.size();++k)  
   
       // System.out.println();  
       //   System.out.println(command+" "+j+" "+row.size()+" "+  ((Vector)result2[0].get(j)).size());  
       // System.out.println(command);  
       for (int k = 0; k < row.size(); ++k)        for (int k = 0; k < row.size(); ++k)
       {        {
         obj = row.get(k);          obj = row.get(k);
Line 872  class Convert Line 715  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);
       }        }
       pstm.execute();        pstm.execute();
       //stm.executeUpdate(command.toString());              if (isGUI)
       if (dialog != null)  
         dialog.progress.setValue((int) (((double) (j + 1) / (double) rowCount) * 100.0));          dialog.progress.setValue((int) (((double) (j + 1) / (double) rowCount) * 100.0));
       // System.out.println( (int)(((double)(j+1)/(double)result[0].size())*100.0)+" "+result[0].size()+" "+j);  
       command = null;        command = null;
     } // to while loop          } // to while loop    
     return command;      return command;
Line 889  class Convert Line 731  class Convert
   
   /**    /**
    *  removes special characters from the input string as well as .fp5      *  removes special characters from the input string as well as .fp5 
    * @param newName String to change       * 
        * @param newName
        *          String to change
    * @return     * @return
    */     */
   public static String convertText(String newName)    public static String convertText(String newName)
Line 910  class Convert Line 754  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 960  class Convert Line 810  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 985  class Convert Line 839  class Convert
     }      }
     return alterMe.toString();      return alterMe.toString();
   }    }
   
   /**    /**
    * Converts > and < in an entity (&gt; or &lt;)     * Converts > and < in an entity (&gt; or &lt;)
        * 
    * @param newName     * @param newName
    * @return     * @return
    */     */
Line 1007  class Convert Line 863  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 1020  class Convert Line 877  class Convert
     }      }
     return alterMe.toString();      return alterMe.toString();
   }    }
   
   /**    /**
    * Masks the single quote character '-->\'     * Masks the single quote character '-->\'
        * 
    * @param newName     * @param newName
    * @return     * @return
    */     */
Line 1042  class Convert Line 901  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.insert(j + 1, "\""); length = length + 1; if(j <length-1)
          alterMe.setCharAt(j, '\\');               * j=j+1; } else if (alterMe.charAt(j) == '>') { alterMe.setCharAt(j,
          alterMe.insert(j + 1, "\"");               * '\\'); alterMe.insert(j + 1, ">"); length = length + 1; if(j <length-1)
          length = length + 1;               * j=j+1; } else if (alterMe.charAt(j) == ' <') { alterMe.setCharAt(j,
          if(j<length-1) j=j+1;               * '\\'); alterMe.insert(j + 1, " <"); length = length + 1; if(j
          }               * <length-1) j=j+1; } else if (alterMe.charAt(j) == '?') {
         else               * alterMe.setCharAt(j, '\\'); alterMe.insert(j + 1, "?"); length = length +
         if (alterMe.charAt(j) == '>')               * 1; if(j <length-1) j=j+1; } else if (alterMe.charAt(j) == '&') {
          {               * alterMe.setCharAt(j, '\\'); alterMe.insert(j + 1, "&"); length = length +
          alterMe.setCharAt(j, '\\');               * 1; if(j <length-1) j=j+1; } else if (alterMe.charAt(j) == '=') {
          alterMe.insert(j + 1, ">");               * alterMe.setCharAt(j, '\\'); alterMe.insert(j + 1, "="); length = length +
          length = length + 1;               * 1; if(j <length-1) j=j+1; } else if (alterMe.charAt(j) == ',') {
          if(j<length-1) j=j+1;               * alterMe.setCharAt(j, '\\'); alterMe.insert(j + 1, ","); length = length +
          }               * 1; if(j <length-1) j=j+1; } else if (alterMe.charAt(j) == '.') {
         else               * alterMe.setCharAt(j, '\\'); alterMe.insert(j + 1, "."); length = length +
         if (alterMe.charAt(j) == '<')               * 1; if(j <length-1) j=j+1; } else if (alterMe.charAt(j) == '[') {
          {               * alterMe.setCharAt(j, '\\'); alterMe.insert(j + 1, "."); length = length +
          alterMe.setCharAt(j, '\\');               * 1; if(j <length-1) j=j+1; } else if (alterMe.charAt(j) == ']') {
          alterMe.insert(j + 1, "<");               * alterMe.setCharAt(j, '\\'); alterMe.insert(j + 1, "."); length = length +
          length = length + 1;               * 1; if(j <length-1) j=j+1; } else if (alterMe.charAt(j) == '%') {
          if(j<length-1) j=j+1;               * alterMe.setCharAt(j, '\\'); alterMe.insert(j + 1, "%"); length = length +
          }               * 1; if(j <length-1) j=j+1; }
        else               */
        if (alterMe.charAt(j) == '?')  
          {  
          alterMe.setCharAt(j, '\\');  
          alterMe.insert(j + 1, "?");  
          length = length + 1;  
          if(j<length-1) j=j+1;  
          }  
        else  
        if (alterMe.charAt(j) == '&')  
          {  
          alterMe.setCharAt(j, '\\');  
          alterMe.insert(j + 1, "&");  
          length = length + 1;  
          if(j<length-1) j=j+1;  
          }  
        else  
        if (alterMe.charAt(j) == '=')  
          {  
          alterMe.setCharAt(j, '\\');  
          alterMe.insert(j + 1, "=");  
          length = length + 1;  
          if(j<length-1) j=j+1;  
          }  
        else  
        if (alterMe.charAt(j) == ',')  
          {  
          alterMe.setCharAt(j, '\\');  
          alterMe.insert(j + 1, ",");  
          length = length + 1;  
          if(j<length-1) j=j+1;  
          }  
        else  
        if (alterMe.charAt(j) == '.')  
          {  
          alterMe.setCharAt(j, '\\');  
          alterMe.insert(j + 1, ".");  
          length = length + 1;  
          if(j<length-1) j=j+1;  
          }  
        else  
        if (alterMe.charAt(j) == '[')  
          {  
          alterMe.setCharAt(j, '\\');  
          alterMe.insert(j + 1, ".");  
          length = length + 1;  
          if(j<length-1) j=j+1;  
          }  
       else  
        if (alterMe.charAt(j) == ']')  
          {  
          alterMe.setCharAt(j, '\\');  
          alterMe.insert(j + 1, ".");  
          length = length + 1;  
          if(j<length-1) j=j+1;  
          }  
       else  
        if (alterMe.charAt(j) == '%')  
          {  
          alterMe.setCharAt(j, '\\');  
          alterMe.insert(j + 1, "%");  
          length = length + 1;  
          if(j<length-1) j=j+1;  
          }*/  
       ++j;        ++j;
     }      }
     return alterMe.toString();      return alterMe.toString();
   }    }
   
   /**    /**
    * parses the input xml file for batch conversion       * parses the input xml file for batch conversion called from readXMLFile *
    * called from readXMLFile       * 
    * * @param sb       * @param sb
    */     */
   public static void parseXMLConfig(StringBuffer sb)    public static void parseXMLConfig(StringBuffer sb)
   {    {
Line 1159  class Convert Line 956  class Convert
   
     try      try
     {      {
       Node tempNode = root.find("convert/source", new int[] { 1, 1 });              Node tempNode = root.find("convert/source", new int[]
               {1, 1});
       if (tempNode == null)        if (tempNode == null)
         throw new Error("parse error source tag missing");          throw new Error("parse error source tag missing");
       System.out.println(tempNode.name);        System.out.println(tempNode.name);
Line 1175  class Convert Line 973  class Convert
         ids = new Vector();          ids = new Vector();
         indexListVec= new Vector();          indexListVec= new Vector();
         // parse dataBase          // parse dataBase
         Node node = root.find("convert/source/database/url", new int[] { 1, 1, i, 1 });                  Node node = root.find("convert/source/database/url", new int[]
         Node node1 = root.find("convert/source/database/user", new int[] { 1, 1, i, 1, 1 });                  {1, 1, i, 1});
         Node node2 = root.find("convert/source/database/password", new int[] { 1, 1, i, 1, 1 });                  Node node1 = root.find("convert/source/database/user", new int[]
         Node node3 = root.find("convert/source/database", new int[] { 1, 1, i });                  {1, 1, i, 1, 1});
         Node nodeMode = root.find("convert/source/database/mode", new int[] { 1, 1, i, 1, 1 });                  Node node2 = root.find("convert/source/database/password", 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[] { 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)          if (node3 == null)
           throw new Error("parse error database tag missing");            throw new Error("parse error database tag missing");
Line 1232  class Convert Line 1037  class Convert
   
         for (int j = 1; j <= length2; ++j)          for (int j = 1; j <= length2; ++j)
         {          {
           Node node4 = root.find("convert/source/database/table", new int[] { 1, 1, i, j });                      Node node4 = root.find("convert/source/database/table", new int[]
           Node node5 = root.find("convert/source/database/table/select", new int[] { 1, 1, i, j, 1 });                      {1, 1, i, j});
           Node node6 = root.find("convert/source/database/table/create", new int[] { 1, 1, i, j, 1 });                      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)            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 1243  class Convert Line 1051  class Convert
             System.out.println(node6.name + " " + node6.getCharacters());              System.out.println(node6.name + " " + node6.getCharacters());
           if (node4 == null)            if (node4 == null)
             throw new Error("parse error table tag missing");              throw new Error("parse error table tag missing");
           // if(node5==null) throw new Error("parse error select tag missing");                      // if(node5==null) throw new Error("parse error select tag
           // if(node6==null) throw new Error("parse error create tag missing");                      // missing");
                       // if(node6==null) throw new Error("parse error create tag
                       // missing");
           String name = (String) node4.attributes.get("name");            String name = (String) node4.attributes.get("name");
           String layout = (String) node4.attributes.get("layout");            String layout = (String) node4.attributes.get("layout");
           String id = (String) node4.attributes.get("id");            String id = (String) node4.attributes.get("id");
Line 1284  class Convert Line 1094  class Convert
       }        }
       DBBean database = new DBBean();        DBBean database = new DBBean();
       // parse dataBase        // parse dataBase
       Node node = root.find("convert/destination/database/url", new int[] { 1, 1, 1, 1 });              Node node = root.find("convert/destination/database/url", new int[]
       Node node1 = root.find("convert/destination/database/user", new int[] { 1, 1, 1, 1, 1 });              {1, 1, 1, 1});
       Node node2 = root.find("convert/destination/database/password", new int[] { 1, 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 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(" The url is " + url);
       database.setURL(url.trim());        database.setURL(url.trim());
       database.setUserAndPasswd(user.trim(), password.trim());        database.setUserAndPasswd(user.trim(), password.trim());
       //databases.add(database);        //databases.add(database);
Line 1300  class Convert Line 1113  class Convert
         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)
                   {
   
                       Convert.user = db.bean.user;
                       Convert.passwd = db.bean.passwd;
                       userDest = database.user;
                       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)
         {          {
           user = bean.user;                      Convert.user = db.bean.user;
           passwd = 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);                      synchronize(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates, db.ids, mode, db.delimiter, new Vector(db.htIndex.values()));
         }          }
       }        }
       // printContents(node3);  
       //   FM2SQL.fmInstance=new FM2SQL();          }
     } catch (Exception e)          catch (Exception e)
     {      {
   
       e.printStackTrace();        e.printStackTrace();
Line 1324  class Convert Line 1145  class Convert
       beanDest.closeAllConnections();        beanDest.closeAllConnections();
     }      }
   }    }
   
   public static Vector getXMLConfig(String xmlFile)    public static Vector getXMLConfig(String xmlFile)
   {    {
     StringBuffer sb = null;      StringBuffer sb = null;
Line 1342  class Convert Line 1164  class Convert
         // System.out.print((char)c);          // System.out.print((char)c);
       }        }
   
     } catch (Exception e)          }
           catch (Exception e)
     {      {
       e.printStackTrace();        e.printStackTrace();
     }      }
Line 1363  class Convert Line 1186  class Convert
     int mode = -1;      int mode = -1;
     try      try
     {      {
       Node tempNode = root.find("convert/source", new int[] { 1, 1 });              Node tempNode = root.find("convert/source", new int[]
               {1, 1});
       if (tempNode == null)        if (tempNode == null)
         throw new Error("parse error source tag missing");          throw new Error("parse error source tag missing");
       System.out.println(tempNode.name);        System.out.println(tempNode.name);
Line 1378  class Convert Line 1202  class Convert
         creates = new Vector();          creates = new Vector();
         ids = new Vector();          ids = new Vector();
         // parse dataBase          // parse dataBase
         Node node = root.find("convert/source/database/url", new int[] { 1, 1, i, 1 });                  Node node = root.find("convert/source/database/url", new int[]
         Node node1 = root.find("convert/source/database/user", new int[] { 1, 1, i, 1, 1 });                  {1, 1, i, 1});
         Node node2 = root.find("convert/source/database/password", new int[] { 1, 1, i, 1, 1 });                  Node node1 = root.find("convert/source/database/user", new int[]
         Node node3 = root.find("convert/source/database", new int[] { 1, 1, i });                  {1, 1, i, 1, 1});
         Node nodeMode = root.find("convert/source/database/mode", new int[] { 1, 1, i, 1, 1 });                  Node node2 = root.find("convert/source/database/password", 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[] { 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 (delimiterNode != null)          if (delimiterNode != null)
           delimiter = delimiterNode.getCharacters();            delimiter = delimiterNode.getCharacters();
Line 1424  class Convert Line 1255  class Convert
         else if (modeString.equals("delete"))          else if (modeString.equals("delete"))
           mode = DataBase.DELETE_MODE;            mode = DataBase.DELETE_MODE;
   
                   else if (modeString.equals("synchronize"))
                       mode = DataBase.SYNCHRONIZE_MODE;
         //   if(node3!=null)          //   if(node3!=null)
         // System.out.println(node3.name);          // System.out.println(node3.name);
   
Line 1433  class Convert Line 1266  class Convert
   
         for (int j = 1; j <= length2; ++j)          for (int j = 1; j <= length2; ++j)
         {          {
           Node node4 = root.find("convert/source/database/table", new int[] { 1, 1, i, j });                      Node node4 = root.find("convert/source/database/table", new int[]
           Node node5 = root.find("convert/source/database/table/select", new int[] { 1, 1, i, j, 1 });                      {1, 1, i, j});
           Node node6 = root.find("convert/source/database/table/create", new int[] { 1, 1, i, j, 1 });                      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)            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 1444  class Convert Line 1280  class Convert
             System.out.println(node6.name + " " + node6.getCharacters());              System.out.println(node6.name + " " + node6.getCharacters());
           if (node4 == null)            if (node4 == null)
             throw new Error("parse error table tag missing");              throw new Error("parse error table tag missing");
           // if(node5==null) throw new Error("parse error select tag missing");                      // if(node5==null) throw new Error("parse error select tag
           // if(node6==null) throw new Error("parse error create tag missing");                      // missing");
                       // if(node6==null) throw new Error("parse error create tag
                       // missing");
           String name = (String) node4.attributes.get("name");            String name = (String) node4.attributes.get("name");
           String layout = (String) node4.attributes.get("layout");            String layout = (String) node4.attributes.get("layout");
           String id = (String) node4.attributes.get("id");            String id = (String) node4.attributes.get("id");
Line 1479  class Convert Line 1317  class Convert
       }        }
       DBBean database = new DBBean();        DBBean database = new DBBean();
       // parse dataBase        // parse dataBase
       Node node = root.find("convert/destination/database/url", new int[] { 1, 1, 1, 1 });              Node node = root.find("convert/destination/database/url", new int[]
       Node node1 = root.find("convert/destination/database/user", new int[] { 1, 1, 1, 1, 1 });              {1, 1, 1, 1});
       Node node2 = root.find("convert/destination/database/password", new int[] { 1, 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 url = node.getCharacters();
       String user = node1.getCharacters();        String user = node1.getCharacters();
       String password = node2.getCharacters();        String password = node2.getCharacters();
Line 1489  class Convert Line 1330  class Convert
       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));        databases.add(new DataBase(database, null, null, null, null, null, 0));
       //databases.add(database);          }
       /*    for (Iterator iter = databases.iterator(); iter.hasNext();)          catch (Exception e)
          {  
            DataBase db = (DataBase) iter.next();  
            convertBatch(db.bean,database,db.tables,db.layouts,db.selects,db.creates);  
             
          }*/  
       // printContents(node3);  
       //   FM2SQL.fmInstance=new FM2SQL();  
     } catch (Exception e)  
     {      {
       // TODO Auto-generated catch block        // TODO Auto-generated catch block
       e.printStackTrace();        e.printStackTrace();
Line 1520  class Convert Line 1353  class Convert
           length++;            length++;
       }        }
   
       // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+" "+i);              // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+"
               // "+i);
     }      }
     return length;      return length;
   }    }
   
   private static void printContents(Node root)    private static void printContents(Node root)
   {    {
   
Line 1540  class Convert Line 1375  class Convert
       // System.out.println(n.type);        // System.out.println(n.type);
     }      }
   }    }
   
   /**    /**
    * reads the specified xml file     * reads the specified xml file
        * 
    * @param xmlFile     * @param xmlFile
    */     */
   public static void readXMLFile(String xmlFile)    public static void readXMLFile(String xmlFile)
Line 1554  class Convert Line 1391  class Convert
       {        {
         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");
Line 1568  class Convert Line 1406  class Convert
         // System.out.print((char)c);          // System.out.print((char)c);
       }        }
       parseXMLConfig(sb);        parseXMLConfig(sb);
     } catch (Exception e)          }
           catch (Exception e)
     {      {
       e.printStackTrace();        e.printStackTrace();
     }      }
   }    }
   
   /**    /**
      * Helper class for Conversion etc       * Helper class for Conversion etc Holds the some data
      * Holds the some data       * 
      * @author rogo       * @author rogo
      *       *
      */       */
Line 1583  class Convert Line 1423  class Convert
   public static class ConversionProperties    public static class ConversionProperties
   {    {
     String destTableName;      String destTableName;
   
     String[] fieldNames;      String[] fieldNames;
   
     public ConversionProperties()      public ConversionProperties()
     {      {
     }      }
   
     public ConversionProperties(String destTableName, String[] fieldNames)      public ConversionProperties(String destTableName, String[] fieldNames)
     {      {
       this.destTableName = destTableName;        this.destTableName = destTableName;
Line 1595  class Convert Line 1438  class Convert
     }      }
   
   }    }
   
   /**    /**
    * Helper class for XML-File parsing       * Helper class for XML-File parsing Holds the parsed data
    * Holds the parsed data       * 
    * @author rogo     * @author rogo
    *     *
    */     */
   public static class DataBase    public static class DataBase
   {    {
     DBBean bean;      DBBean bean;
   
     Vector creates;      Vector creates;
   
     Vector selects;      Vector selects;
   
     Vector layouts;      Vector layouts;
   
     Vector tables;      Vector tables;
   
     Vector ids;      Vector ids;
   
     String delimiter = "//";      String delimiter = "//";
   
     /**      /**
      * maps table name to index fields       * maps table name to index fields
      */       */
     Hashtable htIndex = new Hashtable();      Hashtable htIndex = new Hashtable();
   
     boolean useNormanToUnicodeMapper = false;      boolean useNormanToUnicodeMapper = false;
   
     final static int CONVERT_MODE = 1;      final static int CONVERT_MODE = 1;
   
     final static int APPEND_MODE = 2;      final static int APPEND_MODE = 2;
   
     final static int UPDATE_MODE = 3;      final static int UPDATE_MODE = 3;
   
     final static int DELETE_MODE = 4;      final static int DELETE_MODE = 4;
   
     final static int SYNCHRONIZE_MODE = 5;      final static int SYNCHRONIZE_MODE = 5;
   
     int mode = -1;      int mode = -1;
Line 1635  class Convert Line 1491  class Convert
       this.mode = mode;        this.mode = mode;
       this.bean.setIDVector(ids);        this.bean.setIDVector(ids);
     }      }
   
     /**      /**
      * @param indexListVec       * @param indexListVec
      */       */
Line 1645  class Convert Line 1502  class Convert
         fillIndexList((String)tables.get(i),(String)indexListVec.get(i));          fillIndexList((String)tables.get(i),(String)indexListVec.get(i));
       }            }    
     }      }
   
     /**      /**
      * writes the data contained in this object to the buffered writer           * writes the data contained in this object to the buffered writer *
      * * @param buffr           * 
            * @param buffr
      * @throws Exception       * @throws Exception
      */       */
     public void exportToXML(BufferedWriter buffr) throws Exception      public void exportToXML(BufferedWriter buffr) throws Exception
Line 1667  class Convert Line 1526  class Convert
         modeString = "update";          modeString = "update";
       else if (mode == DELETE_MODE)        else if (mode == DELETE_MODE)
         modeString = "delete";          modeString = "delete";
               else if (mode == SYNCHRONIZE_MODE)
                   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");
Line 1704  class Convert Line 1565  class Convert
       
     htIndex.put(table, indexList);      htIndex.put(table, indexList);
     }      }
   
     public String toString()      public String toString()
     {      {
       return bean.url + " " + tables;        return bean.url + " " + tables;
     }      }
   
   }    }
   
   public static String convertToUTF8(Object command)    public static String convertToUTF8(Object command)
   {    {
     String str = null;      String str = null;
     try      try
     {      {
       str = new String(command.toString().getBytes("UTF-8"));        str = new String(command.toString().getBytes("UTF-8"));
     } catch (UnsupportedEncodingException e)          }
           catch (UnsupportedEncodingException e)
     {      {
       // TODO Auto-generated catch block        // TODO Auto-generated catch block
       e.printStackTrace();        e.printStackTrace();
     }      }
     return str;      return str;
   }    }
   
   public static void writeConfig(String file, DataBase source, DataBase destination) throws Exception    public static void writeConfig(String file, DataBase source, DataBase destination) throws Exception
   {    {
     if (!file.toLowerCase().endsWith(".xml"))      if (!file.toLowerCase().endsWith(".xml"))
Line 1744  class Convert Line 1609  class Convert
     buffw.write("</convert>\n");      buffw.write("</convert>\n");
     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 (FM2SQL.fmInstance != null)          if (isGUI)
     {      {
       dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean);              dialog = initDialog();
       dialog.setTitle("Conversion running ...");  
       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.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));  
       FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));  
       dialog.thread = Thread.currentThread();  
     }      }
     // setting user and passwd       // setting user and passwd 
     bean.setUserAndPasswd(user, passwd);      bean.setUserAndPasswd(user, passwd);
     // setting user and passwd       // setting user and passwd 
     beanDest.setUserAndPasswd(userDest, passwdDest);      beanDest.setUserAndPasswd(userDest, passwdDest);
     if (dialog != null)  
       dialog.setSize(400, 250);  
     StringBuffer command = null;      StringBuffer command = null;
     String query = null;      String query = null;
     try      try
Line 1775  class Convert Line 1633  class Convert
       // Collections.sort(names);        // Collections.sort(names);
       int tbIndex = 1;        int tbIndex = 1;
   
       // System.out.println("Start at "+names.indexOf("archimedes_facsimiles"));              // System.out.println("Start at
               // "+names.indexOf("archimedes_facsimiles"));
       for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)        for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)
       {        {
         Vector[] result = null;          Vector[] result = null;
Line 1809  class Convert Line 1668  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;
         }          }
         // determine destTableName from createStatement or from source table name                  // determine destTableName from createStatement or from source
                   // table name
         if (!creates.get(tbIndex).equals(""))          if (!creates.get(tbIndex).equals(""))
         {          {
           String create = creates.get(tbIndex).toString().toLowerCase();            String create = creates.get(tbIndex).toString().toLowerCase();
Line 1822  class Convert Line 1683  class Convert
           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 1838  class Convert Line 1700  class Convert
         String tempQuery = query;          String tempQuery = query;
         String destQuery = query.replaceAll(names.get(tbIndex).toString(), destTableName);          String destQuery = query.replaceAll(names.get(tbIndex).toString(), destTableName);
         String tempQueryDest = destQuery;          String tempQueryDest = destQuery;
         // remove extra query parts destQuery.substring(0,destQuery.lastIndexOf(destTableName)+destTableName.length()+1);                  // remove extra query parts
                   // destQuery.substring(0,destQuery.lastIndexOf(destTableName)+destTableName.length()+1);
         System.out.println("new Query " + tempQueryDest);          System.out.println("new Query " + tempQueryDest);
         if (!idField.equals(""))          if (!idField.equals(""))
         {          {
Line 1863  class Convert Line 1726  class Convert
             Vector linesToDelete = new Vector(vecDest);              Vector linesToDelete = new Vector(vecDest);
             // remove all lines that should not be deleted              // remove all lines that should not be deleted
             linesToDelete.removeAll(deleted);              linesToDelete.removeAll(deleted);
             // System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIdsDest.size());                          // System.out.println("ID LIST SIZE " +
             /// @TODO complete delete task remove query show lines to be deleted let user choose if he wants that                          // Math.round((double) myIds.size() / (double)
                           // numIntervalls) + " " + myIdsDest.size());
                           /// @TODO complete delete task remove query show lines
                           // to be deleted let user choose if he wants that
             System.out.println("number of lines to  be deleted " + linesToDelete.size());              System.out.println("number of lines to  be deleted " + linesToDelete.size());
             deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls);              deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls);
             beanDest.setConnection(destination);              beanDest.setConnection(destination);
Line 1889  class Convert Line 1755  class Convert
             command.append("DELETE FROM");              command.append("DELETE FROM");
             command.append(beanDest.getQC());              command.append(beanDest.getQC());
             command.append(destTableName);              command.append(destTableName);
             //command.append(convertText((String) names.get(tbIndex)));  
             command.append(beanDest.getQC());              command.append(beanDest.getQC());
             int size = bean.getColumnNames().size();              int size = bean.getColumnNames().size();
             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());
             System.out.println(command + " " + tbIndex);              System.out.println(command + " " + tbIndex);
             //int rowCount = bean.getRowCount(query);  
             //        int idIndex = bean.getColumnNames().indexOf(ids.get(tbIndex));  
             while (true)              while (true)
             {              {
   
Line 1907  class Convert Line 1770  class Convert
               pstm.setString(1, linesToDelete.get(j).toString());                pstm.setString(1, linesToDelete.get(j).toString());
               System.out.println(pstm.toString());                System.out.println(pstm.toString());
               pstm.execute();                pstm.execute();
               if (dialog != null)                              if (isGUI)
                 dialog.progress.setValue((int) (((double) (j + 1) / (double) rowCount) * 100.0));                  dialog.progress.setValue((int) (((double) (j + 1) / (double) rowCount) * 100.0));
               command = null;                command = null;
             }              }
Line 1921  class Convert Line 1784  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 (dialog != null)              if (isGUI)
       {        {
         dialog.setVisible(false);                  showExceptionDialog(dialog, command, e);
         dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));                  resetGUI(dialog);
         FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));  
       }        }
       java.io.ByteArrayOutputStream b = new java.io.ByteArrayOutputStream();              else
       java.io.PrintStream stream = new java.io.PrintStream(b);  
       stream.print(command + "\n\n");  
       e.printStackTrace(stream);  
       FM2SQL.showErrorDialog(b.toString(), "Error occured !");  
   
     }  
     if (dialog != null)  
     {      {
       dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));                  e.printStackTrace();
       FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));              }
   
       dialog.setVisible(false);  
     }      }
   } // to method    } // to method
   
Line 1961  class Convert Line 1815  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) throws Exception      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
   {    {
     System.out.println(" bin in synchronize!!!");      System.out.println(" bin in synchronize!!!");
     FM2SQL.ProgressDialog dialog = null;      FM2SQL.ProgressDialog dialog = null;
     if (FM2SQL.fmInstance != null)          if (isGUI)
     {      {
       dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean);              dialog = initDialog();
       dialog.setTitle("Synchronize running ...");        dialog.setTitle("Synchronize running ...");
       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.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));  
       FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));  
       dialog.thread = Thread.currentThread();  
     }      }
     // setting user and passwd       // setting user and passwd 
     bean.setUserAndPasswd(user, passwd);      bean.setUserAndPasswd(user, passwd);
     // setting user and passwd       // setting user and passwd 
     beanDest.setUserAndPasswd(userDest, passwdDest);      beanDest.setUserAndPasswd(userDest, passwdDest);
     if (dialog != null)  
       dialog.setSize(400, 250);  
     StringBuffer command = null;      StringBuffer command = null;
     String query = null;      String query = null;
     try      try
     {      {
       //bean.setConnection("jdbc:fmpro:http://141.14.237.74:8050");      
       //bean.setConnection("jdbc:postgresql://erebos/test","postgres","rogo");  
       bean.setConnection(source);        bean.setConnection(source);
       if (names == null)        if (names == null)
         names = bean.getTableNames();          names = bean.getTableNames();
       // Collections.sort(names);  
       int tbIndex = 1;        int tbIndex = 1;
   
       // System.out.println("Start at "+names.indexOf("archimedes_facsimiles"));  
       for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)        for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)
       {        {
         Vector[] result = null;          Vector[] result = null;
Line 2011  class Convert Line 1856  class Convert
           //if  vectors[1].get(i) != null)            //if  vectors[1].get(i) != null)
           if (!layout.equals(""))            if (!layout.equals(""))
           {            {
             layout = " layout " + bean.getQC() + layout + bean.getQC();                          query = addLayoutToQuery(names, query, tbIndex, layout);
             String name = names.get(tbIndex).toString();  
             StringBuffer queryLayout = new StringBuffer(query);  
             queryLayout.insert(queryLayout.indexOf(name) + name.length() + 1, " " + layout);  
             query = queryLayout.toString();  
             System.out.println("added layout  " + query);  
   
           }            }
           if (dialog != null)            if (dialog != null)
           {            {
             dialog.title.setText("Getting table data ...");                          prepareDialogforUse(names, dialog, tbIndex);
             dialog.table.setText(names.get(tbIndex).toString());  
             dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size());  
             dialog.show();  
           }            }
           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)
         {          {
                       System.out.println("Warning exception occured \n " + e);
   
           continue;            continue;
         }          }
         // determine destTableName from createStatement or from source table name                  // determine destTableName from createStatement or from source
                   // table name
         if (!creates.get(tbIndex).equals(""))          if (!creates.get(tbIndex).equals(""))
         {          {
           String create = creates.get(tbIndex).toString().toLowerCase();            String create = creates.get(tbIndex).toString().toLowerCase();
Line 2043  class Convert Line 1884  class Convert
           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 2058  class Convert Line 1900  class Convert
         int endIndex = -1;          int endIndex = -1;
         String tempQuery = query;          String tempQuery = query;
         String destQuery = query.replaceAll(names.get(tbIndex).toString(), destTableName);          String destQuery = query.replaceAll(names.get(tbIndex).toString(), destTableName);
                   destQuery = destQuery.replaceAll(bean.getQC(), beanDest.getQC());
                   destQuery = removeLayoutPartFromQuery(destQuery, layouts.get(tbIndex).toString());
                   // TODO remove layout part for destQuery
         String tempQueryDest = destQuery;          String tempQueryDest = destQuery;
         // remove extra query parts destQuery.substring(0,destQuery.lastIndexOf(destTableName)+destTableName.length()+1);                  // remove extra query parts
                   // destQuery.substring(0,destQuery.lastIndexOf(destTableName)+destTableName.length()+1);
         System.out.println("new Query " + tempQueryDest);          System.out.println("new Query " + tempQueryDest);
                   System.out.println("idfield " + idField + " " + ids.get(tbIndex).toString());
         if (!idField.equals(""))          if (!idField.equals(""))
         {          {
           long startTime = System.currentTimeMillis();            long startTime = System.currentTimeMillis();
Line 2074  class Convert Line 1921  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, 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  "+myIds.remove("b015892"));                          //System.out.println("status of remove
                           // "+myIds.remove("b015892"));
                           System.out.println("ids found for " + idField + " " + !myIds.isEmpty());
             if (myIds.isEmpty())              if (myIds.isEmpty())
               break;                break;
             vec = new Vector(myIds);              vec = new Vector(myIds);
Line 2092  class Convert Line 1942  class Convert
             linesToAppend.removeAll(vecDest);              linesToAppend.removeAll(vecDest);
             // remove all lines that should not be deleted              // remove all lines that should not be deleted
             linesToDelete.removeAll(deleted);              linesToDelete.removeAll(deleted);
             System.out.println("linesToAppend " + linesToAppend + " " + destTableName);                          System.out.println("linesToAppend " + linesToAppend.size() + " " + destTableName);
             System.out.println("linesToDelete " + linesToDelete + " " + 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());
Line 2127  class Convert Line 1977  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);                              performSynchronize(idField, vec, tempQuery, linesToDelete, linesToAppend, insPst, updPst, delPSt, deltaID, delimiter, dialog);
               // System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIdsDest.size());                              // System.out.println("ID LIST SIZE " +
                               // Math.round((double) myIds.size() / (double)
                               // numIntervalls) + " " + myIdsDest.size());
               endIndex = k + deltaID;                endIndex = k + deltaID;
             }              }
             System.out.println(endIndex);              System.out.println(endIndex);
Line 2149  class Convert Line 2001  class Convert
               //    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);                              performSynchronize(idField, vec, tempQuery, linesToDelete, linesToAppend, insPst, updPst, delPSt, deltaID, delimiter, dialog);
               // System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIdsDest.size());                              // System.out.println("ID LIST SIZE " +
                               // Math.round((double) myIds.size() / (double)
                               // numIntervalls) + " " + myIdsDest.size());
             }              }
             // prepare new query for next chunk              // prepare new query for next chunk
             if (query.indexOf("where") > 0)              if (query.indexOf("where") > 0)
Line 2159  class Convert Line 2013  class Convert
               tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'";                tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'";
   
           }            }
                       String tableName = names.get(tbIndex).toString();
                       if (!indexList.isEmpty())
                       {
                           IndexList idList = (IndexList) indexList.get(0);
                           System.out.println("found list " + idList);
                           Statement stm = beanDest.getConnection().createStatement();
                           Vector destTables = beanDest.getTableNames();
                           System.out.println("tempQueryDest" + tempQueryDest);
                           beanDest.makeQuery(tempQueryDest, 0);
                           for (Iterator iter = idList.iterator(); iter.hasNext();)
                           {
                               String indexField = (String) iter.next();
                               indexField = convertText(indexField);
                               String indexName = destTableName + "_" + indexField;
                               if (destTables.contains(indexName))
                               {
                                   stm.execute("DROP  INDEX " + destTableName + "_" + indexField);
                                   //  continue;
                               }
                               //    stm.execute("DROP INDEX
                               // "+destTableName+"_"+indexField);
   
                               String type = beanDest.getColumnType(indexField).toLowerCase();
                               // System.out.println(indexField+" "+type+"
                               // "+(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)
                                   {
                                       //System.out.println("CREATE INDEX " +
                                       // indexName + " ON " + destTableName + " (" +
                                       // indexField + "(10))");
                                       // TODO problem if index exist !!!
                                       stm.execute("CREATE  INDEX " + indexName + " ON " + destTableName + " (" + indexField + "(10))");
                                   }
                                   else
                                   {
                                       stm.execute("CREATE  INDEX " + indexName + " ON " + destTableName + " (lower( " + indexField + "))");
   
                                   }
   
                               }
                               else
                               {
                                   stm.execute("CREATE  INDEX " + destTableName + "_" + indexField + " ON " + destTableName + "(" + indexField + ")");
   
                               }
   
                               // stm.execute("DROP INDEX
                               // "+destTableName+"_"+indexField);
   
                           }
                       }
                       //  CREATE UNIQUE INDEX title_idx ON films (title);
           for (Iterator iter = linesToDelete.iterator(); iter.hasNext();)            for (Iterator iter = linesToDelete.iterator(); iter.hasNext();)
           {            {
             String id = (String) iter.next();              String id = (String) iter.next();
Line 2173  class Convert Line 2082  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();
       if (dialog != null)              if (isGUI)
                   showExceptionDialog(dialog, command, e);
           }
           if (isGUI)
       {        {
         dialog.setVisible(false);              resetGUI(dialog);
         dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));          }
         FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));  
       }        }
       java.io.ByteArrayOutputStream b = new java.io.ByteArrayOutputStream();  
       java.io.PrintStream stream = new java.io.PrintStream(b);  
       stream.print(command + "\n\n");  
       e.printStackTrace(stream);  
       FM2SQL.showErrorDialog(b.toString(), "Error occured !");  
   
       /**
        * @param destQuery
        * @param string
        * @return
        */
       private static String removeLayoutPartFromQuery(String destQuery, String layoutName)
       {
           String removeString = "layout " + beanDest.getQC() + layoutName + beanDest.getQC();
           destQuery = destQuery.replaceFirst(removeString, "");
           System.out.println("destQuery change to " + destQuery);
           return destQuery;
     }      }
   
       private static void performSynchronize(String idField, Vector vec, String tempQuery, 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)
     {      {
       dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));              dialog.progress.setValue(0);
       FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));              dialog.title.setText("Retrieving new data");
   
       dialog.setVisible(false);  
     }  
   }    }
   private static void performSynchronize(  
     String idField,  
     Vector vec,  
     String tempQuery,  
     TreeSet linesToDelete,  
     TreeSet linesToAppend,  
     PreparedStatement insPst,  
     PreparedStatement updPst,  
     PreparedStatement delPSt,  
     int deltaID,  
     String delimiter)  
     throws SQLException, ParseException  
   {  
     Vector[] vectors = bean.getQueryData(tempQuery, deltaID);      Vector[] vectors = bean.getQueryData(tempQuery, deltaID);
           int count = 0, size = vectors[0].size();
     int idIndex = vectors[1].indexOf(idField);      int idIndex = vectors[1].indexOf(idField);
           //System.out.println(idIndex + " " + vectors[1] + " " + idField);
     // todo arraylist code has to be added      // todo arraylist code has to be added
           if (dialog != null)
               dialog.title.setText("Synchronize with new data");
   
     for (Iterator iter = vectors[0].iterator(); iter.hasNext();)      for (Iterator iter = vectors[0].iterator(); iter.hasNext();)
     {      {
       Vector line = (Vector) iter.next();        Vector line = (Vector) iter.next();
Line 2234  class Convert Line 2146  class Convert
         }          }
         insPst.execute();          insPst.execute();
   
       } else // update              }
               else
               // update
         {          {
         for (int l = 0; l < line.size(); ++l)          for (int l = 0; l < line.size(); ++l)
         {          {
Line 2247  class Convert Line 2161  class Convert
             updPst.setNull(l + 1, Types.NULL);              updPst.setNull(l + 1, Types.NULL);
         }          }
         updPst.setString(line.size() + 1, line.get(idIndex).toString());          updPst.setString(line.size() + 1, line.get(idIndex).toString());
         updPst.execute();                  //updPst.addBatch();
                   //updPst.execute();
               }
               if (dialog != null)
               {
                   int value = (int) Math.round(((double) count / (double) size) * 100.0);
                   dialog.progress.setValue(value);
                   count++;
       }        }
     }      }
           //updPst.executeBatch();
   } // to method    } // to method
   
   /**    /**
    * Converts input String in norman encoding to unicode      * Converts input String in norman encoding to unicode 
        * 
    * @param inp     * @param inp
    * @return converted String     * @return converted String
    */     */
Line 3232  class Convert Line 3153  class Convert
     }      }
     return buf.toString();      return buf.toString();
   }    }
   
   static public String normanToUnicodeNew(String inp)    static public String normanToUnicodeNew(String inp)
   {    {
     StringBuffer buf = new StringBuffer();      StringBuffer buf = new StringBuffer();
Line 3712  class Convert Line 3634  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;
     // determine destTableName from createStatement or from source table name          // determine destTableName from createStatement or from source table
           // name
     if (!create.equals(""))      if (!create.equals(""))
     {      {
       int fromIndex = create.toLowerCase().indexOf("table") + 5;        int fromIndex = create.toLowerCase().indexOf("table") + 5;
Line 3726  class Convert Line 3650  class Convert
       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);
       // retrieve field_names from select statement        // retrieve field_names from select statement
       // TODO problem with different fieldNames in create statement will overwrite them              // TODO problem with different fieldNames in create statement will
               // overwrite them
       if (query.indexOf("*") < 0)        if (query.indexOf("*") < 0)
       {        {
         int selectEndIndex = query.indexOf("from");          int selectEndIndex = query.indexOf("from");
Line 3742  class Convert Line 3667  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), ",");
Line 3758  class Convert Line 3684  class Convert
           fieldIndex++;            fieldIndex++;
         }          }
       }        }
     } else          }
           else
     {      {
       destTableName = convertText(tableName);        destTableName = convertText(tableName);
   
Line 3773  class Convert Line 3700  class Convert
         while (tokenizer.hasMoreTokens())          while (tokenizer.hasMoreTokens())
         {          {
           String fieldName = tokenizer.nextToken().trim();            String fieldName = tokenizer.nextToken().trim();
           fieldNames[fieldIndex] = convertText(fieldName);                      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 3786  class Convert Line 3714  class Convert
         for (Iterator iter = fieldNamesVec.iterator(); iter.hasNext();)          for (Iterator iter = fieldNamesVec.iterator(); iter.hasNext();)
         {          {
           String element = (String) iter.next();            String element = (String) iter.next();
           fieldNames[++fieldIndex] = bean.getQC() + convertText(element) + bean.getQC();                      fieldNames[++fieldIndex] = beanDest.getQC() + convertText(element) + beanDest.getQC();
           // System.out.println("field " + fieldNames[fieldIndex]);            // System.out.println("field " + fieldNames[fieldIndex]);
         }          }
       }        }
     }      }
     return new ConversionProperties(destTableName, fieldNames);      return new ConversionProperties(destTableName, fieldNames);
   }    }
   
   /**    /**
    * creates an insert into statement for the specified table and given       * creates an insert into statement for the specified table and given field
    * field names        * names
        * 
    * @param destTableName     * @param destTableName
    * @param fieldNames     * @param fieldNames
    * @return     * @return
Line 3805  class Convert Line 3735  class Convert
     StringBuffer command = new StringBuffer();      StringBuffer command = new StringBuffer();
     command.append("INSERT  INTO ");      command.append("INSERT  INTO ");
     command.append(beanDest.getQC());      command.append(beanDest.getQC());
     command.append(destTableName); //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(" (");
     for (int i = 0; i < fieldNames.length; i++)      for (int i = 0; i < fieldNames.length; i++)
Line 3823  class Convert Line 3754  class Convert
     command.append("?)");      command.append("?)");
     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 3830  class Convert Line 3762  class Convert
     command.append("UPDATE ");      command.append("UPDATE ");
     command.append(beanDest.getQC());      command.append(beanDest.getQC());
     command.append(destTableName);      command.append(destTableName);
     //command.append(convertText((String) names.get(tbIndex)));  
     command.append(beanDest.getQC());      command.append(beanDest.getQC());
     command.append(" SET  ");      command.append(" SET  ");
   
Line 3841  class Convert Line 3772  class Convert
     command.append("WHERE " + id + " =  ?");      command.append("WHERE " + id + " =  ?");
     return command;      return command;
   }    }
   
   public static StringBuffer createDeleteCommand(String destTableName, String idField)    public static StringBuffer createDeleteCommand(String destTableName, String idField)
   {    {
     StringBuffer command = new StringBuffer();      StringBuffer command = new StringBuffer();
Line 3853  class Convert Line 3785  class Convert
     command.append("WHERE " + idField + " =  ?");      command.append("WHERE " + idField + " =  ?");
     return command;      return command;
   }    }
   
       public void makeTest(String table, String idField, String tempQuery) throws Exception
       {
           int counter = 0;
   
           // ****** test code *****
   
           bean.getConnection();
           ResultSet resultSet = null;
           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();
           System.out.println("Query is now " + myQuery);
           JDialog statusDialog = new JDialog();
           statusDialog.setTitle("Status Information");
           JLabel status = new JLabel("actual DataSet : ");
           JLabel status2 = new JLabel(Integer.toString(++counter));
           JLabel status3 = new JLabel(lastResult);
   
           JPanel statusPanel = new JPanel();
           JPanel statusPanel2 = new JPanel();
           statusPanel.add(status);
           statusPanel.add(status2);
           statusPanel2.add(status3);
           statusDialog.getContentPane().add(statusPanel, "North");
           statusDialog.getContentPane().add(statusPanel2, "Center");
           statusDialog.setLocation(400, 500);
           statusDialog.setSize(300, 150);
           statusDialog.setVisible(true);
           while (true)
           {
               if (!statusDialog.isVisible())
                   statusDialog.setVisible(true);
               tempQuery = myQuery + " where " + bean.getQC() + idField + bean.getQC() + ">'" + lastResult + "'";
               resultSet = bean.makeQuery(tempQuery, 1);
               if (resultSet == null)
               {
                   System.out.println("lastResult was " + lastResult + " counter was " + counter);
                   break;
               }
               else
               {
                   resultSet.next();
                   lastResult = resultSet.getString(1);
                   counter++;
                   status2.setText(Integer.toString(counter));
                   status3.setText(lastResult + " " + resultSet.getString(2));
                   if (counter % 100 == 0)
                   {
                       System.out.println("actual Result was " + lastResult + " counter was " + counter);
                       // break;
                   }
               }
               resultSet = null;
           }
           System.exit(0);
   
           //****** end Test ******
   
       }
 }  }
   

Removed from v.1.69  
changed lines
  Added in v.1.87


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