Diff for /FM2SQL/Attic/Convert.java between versions 1.65 and 1.68

version 1.65, 2004/08/02 11:39:23 version 1.68, 2004/08/05 11:17:10
Line 29  import java.sql.PreparedStatement; Line 29  import java.sql.PreparedStatement;
 import java.sql.SQLException;  import java.sql.SQLException;
 import java.sql.Statement;  import java.sql.Statement;
 import java.sql.Types;  import java.sql.Types;
   import java.text.ParseException;
 import java.util.ArrayList;  import java.util.ArrayList;
 import java.util.Iterator;  import java.util.Iterator;
 import java.util.List;  import java.util.List;
Line 1272  class Convert Line 1273  class Convert
           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);            synchronize(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates, db.ids, mode, db.delimiter);
         }          }
       }        }
       // printContents(node3);        // printContents(node3);
Line 1896  class Convert Line 1897  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) throws Exception    public static void synchronize(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode, String delimiter) throws Exception
   {    {
     System.out.println(" bin in synchronize!!!");      System.out.println(" bin in synchronize!!!");
     FM2SQL.ProgressDialog dialog = null;      FM2SQL.ProgressDialog dialog = null;
Line 2000  class Convert Line 2001  class Convert
         {          {
           long startTime = System.currentTimeMillis();            long startTime = System.currentTimeMillis();
           int counter = -1;            int counter = -1;
             TreeSet linesToDelete = null;
             PreparedStatement delPSt = null;
           while (true)            while (true)
           {            {
             ++counter;              ++counter;
Line 2007  class Convert Line 2010  class Convert
               dialog.title.setText("Check if data  is available");                dialog.title.setText("Check if data  is available");
             else if (dialog != null)              else if (dialog != null)
               dialog.title.setText("Check if more  data  is available");                dialog.title.setText("Check if more  data  is available");
             myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex), tempQuery, numHits);              myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex), tempQuery, 0);
             myIdsDest = beanDest.getIDVector(convertText(idField), destTableName, tempQueryDest, numHits);              myIdsDest = beanDest.getIDVector(convertText(idField), destTableName, tempQueryDest, 0);
             //System.out.println("status of remove  "+myIds.remove("b015892"));
             if (myIds.isEmpty())              if (myIds.isEmpty())
               break;                break;
             vec = new Vector(myIds);              vec = new Vector(myIds);
Line 2016  class Convert Line 2020  class Convert
             rowCount = vec.size();              rowCount = vec.size();
             // Deletion will work this way              // Deletion will work this way
             Vector deleted = new Vector(vec);              Vector deleted = new Vector(vec);
             TreeSet linesToDelete = new TreeSet(vecDest);  
   
             TreeSet linesToAppend = new TreeSet(vec);              TreeSet linesToAppend = new TreeSet(vec);
               linesToAppend.addAll(vec);
               linesToDelete = new TreeSet(vecDest);
             // remove all lines that are already in dest database              // remove all lines that are already in dest database
             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 + " " + vecDest + " " + destTableName);              System.out.println("linesToAppend " + linesToAppend + " " + destTableName);
             System.out.println("linesToDelete " + linesToDelete + " " + vecDest + " " + destTableName);              System.out.println("linesToDelete " + linesToDelete + " " + destTableName);
             // prepare new query for next chunk              System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIds.size());
             if (query.indexOf("where") > 0)              deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls);
               tempQuery = query + " and " + tempID + ">='" + vec.firstElement() + "' and " + tempID + "<='" + vec.lastElement() + "' order by " + tempID;  
             else  
               tempQuery = query + " where " + tempID + ">='" + vec.firstElement() + "' and " + tempID + "<='" + vec.lastElement() + "'"; // order by "+tempID;  
             System.out.println("tempQuery is now " + tempQuery + " order by " + tempID);  
             //  bean.makeQuery(tempQuery,vec.size());  
   
             ConversionProperties prop = getFieldNamesAndDestTableName(creates.get(tbIndex).toString(), query, names.get(tbIndex).toString());              ConversionProperties prop = getFieldNamesAndDestTableName(creates.get(tbIndex).toString(), query, names.get(tbIndex).toString());
             StringBuffer insCommand = createInsertCommand(prop.destTableName, prop.fieldNames);              StringBuffer insCommand = createInsertCommand(prop.destTableName, prop.fieldNames);
             StringBuffer updCommand  = createUpdateCommand(prop.destTableName, prop.fieldNames, tempID);              StringBuffer updCommand = createUpdateCommand(prop.destTableName, prop.fieldNames, tempIDdest);
             StringBuffer delCommand  = createDeleteCommand(destTableName,tempID);              StringBuffer delCommand = createDeleteCommand(destTableName, tempIDdest);
             PreparedStatement insPst = beanDest.getConnection().prepareStatement(insCommand.toString());              PreparedStatement insPst = beanDest.getConnection().prepareStatement(insCommand.toString());
             PreparedStatement updPst = beanDest.getConnection().prepareStatement(updCommand.toString());              PreparedStatement updPst = beanDest.getConnection().prepareStatement(updCommand.toString());
             PreparedStatement delPSt = beanDest.getConnection().prepareStatement(delCommand.toString());               delPSt = beanDest.getConnection().prepareStatement(delCommand.toString());
             Vector[] vectors = bean.getQueryData(tempQuery, vec.size());          //    delPSt.setString(1,"b015892");
             int idIndex = vectors[1].indexOf(idField);          //   delPSt.execute();
             // todo arraylist code has to be added            //  if (true)
             for (Iterator iter = vectors[0].iterator(); iter.hasNext();)              //  return;
             {              if (vec.size() <= numIntervalls)
               Vector line = (Vector) iter.next();  
               Object lineIDIndex = line.get(idIndex);  
               System.out.println("line " + linesToDelete.contains(line.get(idIndex))+" "+lineIDIndex);  
               if (linesToAppend.contains(lineIDIndex))  
               {  
                 for (int l = 0; l < line.size(); ++l)  
                 {                  {
                   Object obj = line.get(l);                endIndex = 0;
                   if (obj != null)                deltaID = vec.size();
                     insPst.setString(l + 1, obj.toString());  
                   else  
                     insPst.setNull(l + 1, Types.NULL);  
                 }  
                 insPst.execute();  
                 
               }                   }   
                             for (int k = 0; k < vec.size() - deltaID; k = k + deltaID)
               else // update  
                 {  
                   for (int l = 0; l < line.size(); ++l)  
                         {                          {
                           Object obj = line.get(l);                System.out.println(vec.get(k) + " " + vec.get(k + deltaID) + " " + vec.lastElement());
                           if (obj != null)                if (query.indexOf("where") > 0)
                             updPst.setString(l + 1, obj.toString());                  tempQuery = query + " and " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID) + "'";
                           else                            else
                             updPst.setNull(l + 1, Types.NULL);                  tempQuery = query + " where " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID) + "'";
                         }                System.out.println(tempQuery);
                         updPst.setString(line.size()+1,line.get(idIndex).toString());  
                         updPst.execute();  
         
                 }  
             }  
              
           //  delPSt.setString(1,"6");  
           //  delPSt.setString(1,"7");  
           //  delPSt.setString(1,"8");  
             
             //delPSt.execute();  
             System.out.println();  
             // 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);  
             System.out.println("deltaID " + deltaID);  
             //System.out.println();  
             
             if (true)  
               return;  
   
             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)              if (dialog != null)
               dialog.title.setText(" Deleting table data ...");                  dialog.title.setText("Reading table data ...");
   
             int j = -1;  
   
             Vector row = null;                // bean.makeQuery(tempQuery, deltaID);
             command = new StringBuffer();                if (dialog != null)
                   dialog.title.setText("Writing table data ...");
   
             command.append("DELETE FROM");                performSynchronize(idField, vec, tempQuery, linesToDelete, linesToAppend, insPst, updPst, delPSt, deltaID, delimiter);
             command.append(beanDest.getQC());                // System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIdsDest.size());
             command.append(destTableName);                endIndex = k + deltaID;
             //command.append(convertText((String) names.get(tbIndex)));              }
             command.append(beanDest.getQC());              System.out.println(endIndex);
             int size = bean.getColumnNames().size();              //all data written ? if not write last chunk of data
             command.append("WHERE " + convertText(ids.get(tbIndex).toString()) + " =  ?");              if (endIndex == vec.size() - 1)
             PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString());                System.out.println("fits");
             System.out.println(command + " " + tbIndex);              else
             //int rowCount = bean.getRowCount(query);  
             //        int idIndex = bean.getColumnNames().indexOf(ids.get(tbIndex));  
 /*            while (true)  
             {              {
                 System.out.println(" last intervall from " + vec.get(endIndex) + " " + vec.lastElement());
   
               ++j;                if (query.indexOf("where") > 0)
               if (j == linesToDelete.size())                  tempQuery = query + " and " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement() + "'";
                 break;                else
               //print rows                  tempQuery = query + " where " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement() + "'";
               pstm.setString(1, linesToDelete.get(j).toString());                System.out.println(tempQuery);
               System.out.println(pstm.toString());  
               pstm.execute();  
               if (dialog != null)                if (dialog != null)
                 dialog.progress.setValue((int) (((double) (j + 1) / (double) rowCount) * 100.0));                  dialog.title.setText("Reading table data ...");
               command = null;            //    bean.makeQuery(tempQuery, 0);
                 if (dialog != null)
                   dialog.title.setText("Writing table data ...");
                 performSynchronize(idField, vec, tempQuery, linesToDelete, linesToAppend, insPst, updPst, delPSt, deltaID, delimiter);
                 // 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)
               tempQuery = query + " and " + tempID + ">'" + vec.lastElement() + "'";                tempQuery = query + " and " + tempID + ">'" + vec.lastElement() + "'";
             else              else
               tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'";                tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'";
 */  
           } //to outer while            }
             
             for (Iterator iter = linesToDelete.iterator(); iter.hasNext();)
             {
               String id = (String) iter.next();
               delPSt.setString(1, id);
               delPSt.execute();
   
             }
   
             long endTime = System.currentTimeMillis();
             System.out.println("Time for incremental synchronize  elapsed " + (endTime - startTime));
         } // 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();
       if (dialog != null)        if (dialog != null)
       {        {
         dialog.setVisible(false);          dialog.setVisible(false);
Line 2171  class Convert Line 2133  class Convert
   
       dialog.setVisible(false);        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);
       int idIndex = vectors[1].indexOf(idField);
       // todo arraylist code has to be added
       for (Iterator iter = vectors[0].iterator(); iter.hasNext();)
       {
         Vector line = (Vector) iter.next();
         Object lineIDIndex = line.get(idIndex);
         if (linesToAppend.contains(lineIDIndex))
           System.out.println("line " + linesToAppend.contains(line.get(idIndex)) + " " + lineIDIndex);
         if (linesToAppend.contains(lineIDIndex))
         {
           for (int l = 0; l < line.size(); ++l)
           {
             Object obj = line.get(l);
             if (obj instanceof ArrayList)
               obj = formatFileMakerArray((List) obj, delimiter);
             if (obj != null)
               insPst.setString(l + 1, obj.toString());
             else
               insPst.setNull(l + 1, Types.NULL);
           }
           insPst.execute();
   
         } else // update
           {
           for (int l = 0; l < line.size(); ++l)
           {
             Object obj = line.get(l);
             if (obj instanceof ArrayList)
               obj = formatFileMakerArray((List) obj, delimiter);
             if (obj != null)
               updPst.setString(l + 1, obj.toString());
             else
               updPst.setNull(l + 1, Types.NULL);
           }
           updPst.setString(line.size() + 1, line.get(idIndex).toString());
           updPst.execute();
   
         }
       }
   
   } // to method    } // to method
   
   /**    /**

Removed from v.1.65  
changed lines
  Added in v.1.68


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