Diff for /FM2SQL/Attic/Convert.java between versions 1.40 and 1.55

version 1.40, 2004/02/27 11:34:53 version 1.55, 2004/06/01 10:29:48
Line 1 Line 1
   /*
    * Convert.java -- Converter class -  Filemaker to SQL Converter 
    * Copyright (C) 2003 Robert Gordesch (rogo@mpiwg-berlin.mpg.de
    * This program is free software; you can redistribute it and/or modify it
    * under the terms of the GNU General Public License as published by the Free
    * Software Foundation; either version 2 of the License, or (at your option)
    * any later version.  Please read license.txt for the full details. A copy of
    * the GPL may be found at http://www.gnu.org/copyleft/lgpl.html  You should
    * have received a copy of the GNU General Public License along with this
    * program; if not, write to the Free Software Foundation, Inc., 59 Temple
    * Place, Suite 330, Boston, MA 02111-1307 USA  Created on 15.09.2003 by
    * rogo  
    */
   
 import java.util.*;  import java.util.*;
 import java.sql.*;  import java.sql.*;
 import java.awt.Cursor;  import java.awt.Cursor;
Line 59  class Convert Line 73  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) 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);      convert(null, null, names, layouts, selects, creates, ids, mode, delimiter);
     if(true) return;      if (true)
         return;
     StringBuffer command = null;      StringBuffer command = null;
     try      try
     {      {
Line 190  class Convert Line 205  class Convert
           {            {
             obj = row.get(k);              obj = row.get(k);
             if (obj instanceof ArrayList)              if (obj instanceof ArrayList)
               obj = ((List) obj).get(0);                obj = formatFileMakerArray((List) obj, "\n");
             String str = (obj == null) ? "NULL" : obj.toString();              String str = (obj == null) ? "NULL" : obj.toString();
             if (!str.equals("NULL"))              if (!str.equals("NULL"))
               pstm.setString(k + 1, str);                pstm.setString(k + 1, str);
Line 221  class Convert Line 236  class Convert
   
     //  dialog.setVisible(false);       //  dialog.setVisible(false); 
   }    }
     public static String formatFileMakerArray(List list, String delimiter)
     {
       StringBuffer formattedString = new StringBuffer();
       for (int i = 0; i < list.size(); ++i)
       {
         formattedString.append(list.get(i).toString());
         if (i < list.size() - 1)
           formattedString.append(delimiter);
       }
       return formattedString.toString();
     }
   /**    /**
    * Method for SQL UPDATE     * Method for SQL UPDATE
    * @param source     * @param source
Line 239  class Convert Line 264  class Convert
     FM2SQL.ProgressDialog dialog = null;      FM2SQL.ProgressDialog dialog = null;
     if (FM2SQL.fmInstance != null)      if (FM2SQL.fmInstance != null)
     {      {
       dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance);        dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean);
       dialog.setTitle("Conversion running ...");        dialog.setTitle("Conversion running ...");
       dialog.title.setText("Getting table data ...");        dialog.title.setText("Getting table data ...");
       dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x + (FM2SQL.fmInstance.getWidth() - 400) / 2, FM2SQL.fmInstance.getLocationOnScreen().y + (FM2SQL.fmInstance.getHeight() - 250) / 2);        dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x + (FM2SQL.fmInstance.getWidth() - 400) / 2, FM2SQL.fmInstance.getLocationOnScreen().y + (FM2SQL.fmInstance.getHeight() - 250) / 2);
Line 269  class Convert Line 294  class Convert
       for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)        for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)
       {        {
         Vector[] result = null;          Vector[] result = null;
           String destTableName = "";
         try          try
         {          {
           query = "select * from " + bean.getQC() + names.get(tbIndex).toString() + bean.getQC();            query = "select * from " + bean.getQC() + names.get(tbIndex).toString() + bean.getQC();
Line 295  class Convert Line 321  class Convert
         {          {
           continue;            continue;
         }          }
           // determine destTableName from createStatement or from source table name
           if (!creates.get(tbIndex).equals(""))
           {
             String create = creates.get(tbIndex).toString().toLowerCase();
             int fromIndex = create.indexOf("table") + 5;
             int toIndex = create.indexOf("(");
             destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "").trim();
             System.out.println("destTable " + destTableName);
   
           } else
             destTableName = convertText(names.get(tbIndex).toString());
   
         //beanDest.setConnection("jdbc:postgresql://erebos/test3");          //beanDest.setConnection("jdbc:postgresql://erebos/test3");
         beanDest.setConnection(destination);          beanDest.setConnection(destination);
   
Line 318  class Convert Line 356  class Convert
   
         command.append("UPDATE ");          command.append("UPDATE ");
         command.append(beanDest.getQC());          command.append(beanDest.getQC());
         command.append(convertText((String) names.get(tbIndex)));          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 424  class Convert Line 463  class Convert
    * @throws Exception     * @throws Exception
    */      */ 
       
          public static void convert(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode, String delimiter) throws Exception
   public static void convert(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode) throws Exception  
   {    {
   
     FM2SQL.ProgressDialog dialog = null;      FM2SQL.ProgressDialog dialog = null;
   
     if (FM2SQL.fmInstance != null)      if (FM2SQL.fmInstance != null)
     {      {
       dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance);        dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean);
       dialog.setTitle("Conversion running ...");        dialog.setTitle("Conversion running ...");
       dialog.title.setText("Getting table data ...");        dialog.title.setText("Getting table data ...");
       dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x + (FM2SQL.fmInstance.getWidth() - 400) / 2, FM2SQL.fmInstance.getLocationOnScreen().y + (FM2SQL.fmInstance.getHeight() - 250) / 2);        dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x + (FM2SQL.fmInstance.getWidth() - 400) / 2, FM2SQL.fmInstance.getLocationOnScreen().y + (FM2SQL.fmInstance.getHeight() - 250) / 2);
Line 445  class Convert Line 483  class Convert
     int deltaID = 1;      int deltaID = 1;
     String idField = "";      String idField = "";
     String destTableName = "";      String destTableName = "";
       String[] fieldNames = null;
     if (source != null && destination != null)      if (source != null && destination != null)
     {      {
       // setting user and passwd         // setting user and passwd 
Line 518  class Convert Line 557  class Convert
         // System.out.println(beanDest.getTableNames(beanDest.getCatalogs().get(2).toString()));          // System.out.println(beanDest.getTableNames(beanDest.getCatalogs().get(2).toString()));
         stm = beanDest.getConnection().createStatement();          stm = beanDest.getConnection().createStatement();
         // System.exit(0);          // System.exit(0);
         if (mode == Convert.DataBase.CONVERT_MODE)  
         {          // 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();
             int fromIndex = create.indexOf("table")+5;              int fromIndex = create.indexOf("table")+5;
             int toIndex   = create.indexOf("(");              int toIndex   = create.indexOf("(");
             int endIndex = create.indexOf(")", toIndex);
   
             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
             if (query.indexOf("*") < 0)
             {
               int selectEndIndex = query.indexOf("from");
               StringTokenizer tokenizer = new StringTokenizer(query.substring(6, selectEndIndex), ",");
               int numFields = tokenizer.countTokens();
               fieldNames = new String[numFields];
               int fieldIndex = 0;
               while (tokenizer.hasMoreTokens())
               {
                 String fieldName = tokenizer.nextToken().trim();
                 fieldNames[fieldIndex] = convertText(fieldName);
                 System.out.println(fieldNames[fieldIndex]);
                 fieldIndex++;
               }
                           
           } else            } else
             {
               // use create statement for field names
               StringTokenizer tokenizer = new StringTokenizer(create.substring(toIndex + 1, endIndex), ",");
               int numFields = tokenizer.countTokens();
               fieldNames = new String[numFields];
               int fieldIndex = 0;
               while (tokenizer.hasMoreTokens())
               {
                 String fieldName = tokenizer.nextToken().trim();
                 int index = fieldName.lastIndexOf(" ");
                 fieldNames[fieldIndex] = fieldName.substring(0, index);
                 System.out.println(fieldNames[fieldIndex]);
                 fieldIndex++;
               }
             }
           } else
           {
             destTableName = convertText(names.get(tbIndex).toString());              destTableName = convertText(names.get(tbIndex).toString());
   
             // retrieve field_names from select statement
             if (query.indexOf("*") < 0)
             {
               int selectEndIndex = query.indexOf("from");
               StringTokenizer tokenizer = new StringTokenizer(query.substring(6, selectEndIndex), ",");
               int numFields = tokenizer.countTokens();
               fieldNames = new String[numFields];
               int fieldIndex = 0;
               while (tokenizer.hasMoreTokens())
               {
                 String fieldName = tokenizer.nextToken().trim();
                 fieldNames[fieldIndex] = convertText(fieldName);
                // System.out.println("field "+ fieldNames[fieldIndex]);
                 fieldIndex++;
               }
   
             } else
             {
               Vector fieldNamesVec = bean.getColumnNames();
               fieldNames = new String[fieldNamesVec.size()];
               int fieldIndex = -1;
               for (Iterator iter = fieldNamesVec.iterator(); iter.hasNext();)
               {
                 String element = (String) iter.next();
                 fieldNames[++fieldIndex] = bean.getQC() + convertText(element) + bean.getQC();
                // System.out.println("field " + fieldNames[fieldIndex]);
               }
             }
           }
           if (mode == Convert.DataBase.CONVERT_MODE)
           {
   
           if (tables.indexOf(destTableName) >= 0)            if (tables.indexOf(destTableName) >= 0)
           {            {
             stm.executeUpdate("drop table " + beanDest.getQC() + destTableName + beanDest.getQC());              stm.executeUpdate("drop table " + beanDest.getQC() + destTableName + beanDest.getQC());
Line 603  class Convert Line 708  class Convert
         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(" (");
           for (int i = 0; i < fieldNames.length; i++)
           {
             command.append(fieldNames[i]);
             if (i < fieldNames.length - 1)
               command.append(",");
           }
           command.append(") ");
                   
         command.append(" values ( ");          command.append(" values ( ");
   
Line 627  class Convert Line 740  class Convert
             ++counter;              ++counter;
             if (counter == 0&&dialog!=null)              if (counter == 0&&dialog!=null)
               dialog.title.setText("Check if data  is available");                dialog.title.setText("Check if data  is available");
             else              else if (dialog != null)
               if(dialog!=null)  
               dialog.title.setText("Check if more  data  is available");                dialog.title.setText("Check if more  data  is available");
             myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex), tempQuery, numHits);              myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex), tempQuery, numHits);
             if (myIds.isEmpty())              if (myIds.isEmpty())
Line 657  class Convert Line 769  class Convert
               if(dialog!=null)                if(dialog!=null)
               dialog.title.setText("Writing table data ...");                dialog.title.setText("Writing table data ...");
   
               command = writeDatainDestTable(dialog, command, k, pstm, rowCount);                command = writeDatainDestTable(dialog, command, k, pstm, rowCount, delimiter);
               endIndex = k + deltaID;                endIndex = k + deltaID;
             }              }
             System.out.println(endIndex);              System.out.println(endIndex);
Line 678  class Convert Line 790  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 ...");
               command = writeDatainDestTable(dialog, command, endIndex, pstm, rowCount);                command = writeDatainDestTable(dialog, command, endIndex, pstm, rowCount, delimiter);
             }              }
             // prepare new query for next chunk              // prepare new query for next chunk
             if (query.indexOf("where") > 0)              if (query.indexOf("where") > 0)
Line 695  class Convert Line 807  class Convert
           long startTime = System.currentTimeMillis();            long startTime = System.currentTimeMillis();
                       
           bean.makeQuery(query, 0);            bean.makeQuery(query, 0);
           command = writeDatainDestTable(dialog, command, j, pstm, rowCount);            command = writeDatainDestTable(dialog, command, j, pstm, rowCount, delimiter);
           long endTime = System.currentTimeMillis();            long endTime = System.currentTimeMillis();
           System.out.println("Time for old convert elapsed " + (endTime - startTime));            System.out.println("Time for old convert elapsed " + (endTime - startTime));
   
Line 738  class Convert Line 850  class Convert
    * @throws Exception     * @throws Exception
    * @throws SQLException     * @throws SQLException
    */     */
   private static StringBuffer writeDatainDestTable(FM2SQL.ProgressDialog dialog, StringBuffer command, int j, PreparedStatement pstm, int rowCount) throws Exception, SQLException    private static StringBuffer writeDatainDestTable(FM2SQL.ProgressDialog dialog, StringBuffer command, int j, PreparedStatement pstm, int rowCount, String delimiter) throws Exception, SQLException
   {    {
     Vector row;      Vector row;
     while ((row = bean.getNextRow()) != null)      while ((row = bean.getNextRow()) != null)
Line 783  class Convert Line 895  class Convert
       for (int k = 0; k < row.size(); ++k)        for (int k = 0; k < row.size(); ++k)
       {        {
         obj = row.get(k);          obj = row.get(k);
   
         if (obj instanceof ArrayList)          if (obj instanceof ArrayList)
           obj = ((List) obj).get(0);            obj = formatFileMakerArray((List) obj, delimiter);
   
         String str = (obj == null) ? "NULL" : obj.toString();          String str = (obj == null) ? "NULL" : obj.toString();
         if (!str.equals("NULL"))          if (obj instanceof Double)
           {
             pstm.setDouble(k + 1, ((Double) obj).doubleValue());
           } else if (!str.equals("NULL"))
           pstm.setString(k + 1, str);            pstm.setString(k + 1, str);
         else          else
           pstm.setNull(k + 1, Types.NULL);            pstm.setNull(k + 1, Types.NULL);
Line 1067  class Convert Line 1184  class Convert
     Vector selects = new Vector();      Vector selects = new Vector();
     Vector creates = new Vector();      Vector creates = new Vector();
     Vector ids = new Vector();      Vector ids = new Vector();
       String delimiter = "|";
     int mode = -1;      int mode = -1;
   
     try      try
Line 1091  class Convert Line 1209  class Convert
         Node node2 = root.find("convert/source/database/password", new int[] { 1, 1, i, 1, 1 });          Node node2 = root.find("convert/source/database/password", new int[] { 1, 1, i, 1, 1 });
         Node node3 = root.find("convert/source/database", new int[] { 1, 1, i });          Node 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 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 });
         if (node3 == null)          if (node3 == null)
           throw new Error("parse error database tag missing");            throw new Error("parse error database tag missing");
         if (node == null)          if (node == null)
Line 1100  class Convert Line 1218  class Convert
           throw new Error("parse error user tag missing");            throw new Error("parse error user tag missing");
         if (node2 == null)          if (node2 == null)
           throw new Error("parse error password tag missing");            throw new Error("parse error password tag missing");
           if (delimiterNode != null)
             delimiter = delimiterNode.getCharacters();
         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 1119  class Convert Line 1239  class Convert
           mode = DataBase.APPEND_MODE;            mode = DataBase.APPEND_MODE;
         else if (modeString.equals("update"))          else if (modeString.equals("update"))
           mode = DataBase.UPDATE_MODE;            mode = DataBase.UPDATE_MODE;
           else if (modeString.equals("delete"))
             mode = DataBase.DELETE_MODE;
   
         //   if(node3!=null)          //   if(node3!=null)
         // System.out.println(node3.name);          // System.out.println(node3.name);
   
Line 1167  class Convert Line 1290  class Convert
             creates.add("");              creates.add("");
   
         }          }
         databases.add(new DataBase(database, tables, layouts, selects, creates, ids, mode));          DataBase dataBase = new DataBase(database, tables, layouts, selects, creates, ids, mode);
           dataBase.delimiter = delimiter;
           databases.add(dataBase);
       }        }
       DBBean database = new DBBean();        DBBean database = new DBBean();
       // parse dataBase        // parse dataBase
Line 1185  class Convert Line 1310  class Convert
       {        {
         DataBase db = (DataBase) iter.next();          DataBase db = (DataBase) iter.next();
         if (mode != DataBase.UPDATE_MODE)          if (mode != DataBase.UPDATE_MODE)
           convertBatch(db.bean, database, db.tables, db.layouts, db.selects, db.creates, db.ids,mode);            convertBatch(db.bean, database, db.tables, db.layouts, db.selects, db.creates, db.ids, mode, db.delimiter);
         else          else
           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);
   
Line 1233  class Convert Line 1358  class Convert
     Vector selects = new Vector();      Vector selects = new Vector();
     Vector creates = new Vector();      Vector creates = new Vector();
     Vector ids = new Vector();      Vector ids = new Vector();
       String delimiter = "|";
     int mode = -1;      int mode = -1;
     try      try
     {      {
Line 1257  class Convert Line 1382  class Convert
         Node node2 = root.find("convert/source/database/password", new int[] { 1, 1, i, 1, 1 });          Node node2 = root.find("convert/source/database/password", new int[] { 1, 1, i, 1, 1 });
         Node node3 = root.find("convert/source/database", new int[] { 1, 1, i });          Node 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 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 });
   
           if (delimiterNode != null)
             delimiter = delimiterNode.getCharacters();
         if (node3 == null)          if (node3 == null)
           throw new Error("parse error database tag missing");            throw new Error("parse error database tag missing");
         if (node == null)          if (node == null)
Line 1285  class Convert Line 1413  class Convert
           mode = DataBase.APPEND_MODE;            mode = DataBase.APPEND_MODE;
         else if (modeString.equals("update"))          else if (modeString.equals("update"))
           mode = DataBase.UPDATE_MODE;            mode = DataBase.UPDATE_MODE;
           else if (modeString.equals("delete"))
             mode = DataBase.DELETE_MODE;
   
         //   if(node3!=null)          //   if(node3!=null)
         // System.out.println(node3.name);          // System.out.println(node3.name);
Line 1335  class Convert Line 1465  class Convert
             creates.add("");              creates.add("");
   
         }          }
         databases.add(new DataBase(database, tables, layouts, selects, creates, ids, mode));          DataBase dataBase = new DataBase(database, tables, layouts, selects, creates, ids, mode);
           dataBase.delimiter = delimiter;
           databases.add(dataBase);
       }        }
       DBBean database = new DBBean();        DBBean database = new DBBean();
       // parse dataBase        // parse dataBase
Line 1398  class Convert Line 1530  class Convert
         //contents=n.contents.v i=0;          //contents=n.contents.v i=0;
       }        }
       // System.out.println(n.type);        // System.out.println(n.type);
   
     }      }
   }    }
   /**    /**
Line 1442  class Convert Line 1573  class Convert
     Vector layouts;      Vector layouts;
     Vector tables;      Vector tables;
     Vector ids;      Vector ids;
       String delimiter = "//";
     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;
Line 1461  class Convert Line 1593  class Convert
       this.bean.setIDVector(ids);        this.bean.setIDVector(ids);
     }      }
     /**      /**
      * writes the data contained in this object  th the buffered writer       * writes the data contained in this object to the buffered writer
      * * @param buffr       * * @param buffr
      * @throws Exception       * @throws Exception
      */       */
Line 1472  class Convert Line 1604  class Convert
       buffr.write("      <url>" + bean.url + "</url>\n");        buffr.write("      <url>" + bean.url + "</url>\n");
       buffr.write("      <user>" + bean.user + "</user>\n");        buffr.write("      <user>" + bean.user + "</user>\n");
       buffr.write("      <password>" + bean.passwd + "</password>\n");        buffr.write("      <password>" + bean.passwd + "</password>\n");
         buffr.write("      <delimiter>" + delimiter + "</delimiter>\n");
       String modeString = "";        String modeString = "";
       if (mode == CONVERT_MODE)        if (mode == CONVERT_MODE)
         modeString = "convert";          modeString = "convert";
Line 1479  class Convert Line 1612  class Convert
         modeString = "append";          modeString = "append";
       else if (mode == UPDATE_MODE)        else if (mode == UPDATE_MODE)
         modeString = "update";          modeString = "update";
         else if (mode == DELETE_MODE)
           modeString = "delete";
   
       buffr.write("      <mode>" + modeString + "</mode>\n");        buffr.write("      <mode>" + modeString + "</mode>\n");
       int index = 0;        int index = 0;
Line 1539  class Convert Line 1674  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
     {
       FM2SQL.ProgressDialog dialog = null;
       if (FM2SQL.fmInstance != null)
       {
         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();
       }
       // setting user and passwd 
       bean.setUserAndPasswd(user, passwd);
       // setting user and passwd 
       beanDest.setUserAndPasswd(userDest, passwdDest);
       if (dialog != null)
         dialog.setSize(400, 250);
       StringBuffer command = null;
       String query = null;
       try
       {
         //bean.setConnection("jdbc:fmpro:http://141.14.237.74:8050");    
         //bean.setConnection("jdbc:postgresql://erebos/test","postgres","rogo");
         bean.setConnection(source);
         if (names == null)
           names = bean.getTableNames();
         // Collections.sort(names);
         int tbIndex = 1;
   
         // System.out.println("Start at "+names.indexOf("archimedes_facsimiles"));
         for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)
         {
           Vector[] result = null;
           java.util.TreeSet myIds = new TreeSet();
           java.util.TreeSet myIdsDest = new TreeSet();
           int deltaID = 1;
           String idField = "";
           String destTableName = "";
   
           try
           {
             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 != "")
             {
               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);
   
             }
             dialog.title.setText("Getting table data ...");
             dialog.table.setText(names.get(tbIndex).toString());
             dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size());
             dialog.show();
             bean.getConnection();
             bean.makeQuery(query, 50);
             idField = ids.get(tbIndex).toString();
   
           } catch (Exception e)
           {
             continue;
           }
           // determine destTableName from createStatement or from source table name
           if (!creates.get(tbIndex).equals(""))
           {
             String create = creates.get(tbIndex).toString().toLowerCase();
             int fromIndex = create.indexOf("table") + 5;
             int toIndex = create.indexOf("(");
             destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "").trim();
             System.out.println("destTable " + destTableName);
   
           } else
             destTableName = convertText(names.get(tbIndex).toString());
   
           // for id kram
           Vector vec = null;
           Vector vecDest = null;
           //      tempo
           beanDest.setConnection(destination);
           int rowCount = (idField != "") ? myIds.size() : bean.getRowCount(query);
           String tempID = bean.getQC() + idField + bean.getQC();
           String tempIDdest = beanDest.getQC() + convertText(idField) + beanDest.getQC();
   
           int endIndex = -1;
           String tempQuery = query;
           String destQuery = query.replaceAll(names.get(tbIndex).toString(), destTableName);
           String tempQueryDest = destQuery;
           // remove extra query parts destQuery.substring(0,destQuery.lastIndexOf(destTableName)+destTableName.length()+1);
           System.out.println("new Query " + tempQueryDest);
           if (!idField.equals(""))
           {
             long startTime = System.currentTimeMillis();
             int counter = -1;
             while (true)
             {
               ++counter;
               if (counter == 0 && dialog != null)
                 dialog.title.setText("Check if data  is available");
               else if (dialog != null)
                 dialog.title.setText("Check if more  data  is available");
               myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex), tempQuery, numHits);
               myIdsDest = beanDest.getIDVector(convertText(idField), destTableName, tempQueryDest, numHits);
               if (myIds.isEmpty())
                 break;
               vec = new Vector(myIds);
               vecDest = new Vector(myIdsDest);
               rowCount = vec.size();
               // Deletion will work this way
               Vector deleted = new Vector(vec);
               Vector linesToDelete = new Vector(vecDest);
               // remove all lines that should not be deleted
               linesToDelete.removeAll(deleted);
               // System.out.println("ID LIST SIZE " + 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());
               deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls);
               beanDest.setConnection(destination);
   
               Statement stm = beanDest.getConnection().createStatement();
   
               Vector tables = beanDest.getTableNames();
               // Collections.sort(tables);
               System.out.println(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();
   
               if (dialog != null)
                 dialog.title.setText(" Deleting table data ...");
   
               int j = -1;
   
               Vector row = null;
               command = new StringBuffer();
   
               command.append("DELETE FROM");
               command.append(beanDest.getQC());
               command.append(destTableName);
               //command.append(convertText((String) names.get(tbIndex)));
               command.append(beanDest.getQC());
               int size = bean.getColumnNames().size();
               command.append("WHERE " + convertText(ids.get(tbIndex).toString()) + " =  ?");
               PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString());
               System.out.println(command + " " + tbIndex);
               //int rowCount = bean.getRowCount(query);
               //        int idIndex = bean.getColumnNames().indexOf(ids.get(tbIndex));
               while (true)
               {
   
                 ++j;
                 if (j == linesToDelete.size())
                   break;
                 //print rows
                 pstm.setString(1, linesToDelete.get(j).toString());
                 System.out.println(pstm.toString());
                 pstm.execute();
                 if (dialog != null)
                   dialog.progress.setValue((int) (((double) (j + 1) / (double) rowCount) * 100.0));
                 command = null;
               }
               // prepare new query for next chunk
               if (query.indexOf("where") > 0)
                 tempQuery = query + " and " + tempID + ">'" + vec.lastElement() + "'";
               else
                 tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'";
   
             } //to outer while
           } // to idfield if  
         } // table loop
   
       } catch (Exception e)
       {
         System.out.println("Error while connecting to database " + e);
         if (dialog != null)
         {
           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);
         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);
       }
     } // to method
   
 }  }
   

Removed from v.1.40  
changed lines
  Added in v.1.55


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