Diff for /FM2SQL/Attic/Convert.java between versions 1.45 and 1.46

version 1.45, 2004/03/09 12:34:09 version 1.46, 2004/03/12 11:48:57
Line 1435  class Convert Line 1435  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 1578  class Convert Line 1577  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);
         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;
           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);
              deleted.remove(0);
             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);
               if (vec.size() <= numIntervalls)
               {
                 endIndex = 0;
                 deltaID = vec.size();
               }
               for (int k = 0; k < vec.size() - deltaID; k = k + deltaID)
               {
                 System.out.println(vec.get(k) + " " + vec.get(k + deltaID) + " " + vec.lastElement());
                 if (query.indexOf("where") > 0)
                   tempQuery = query + " and " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID) + "'";
                 else
                   tempQuery = query + " where " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID) + "'";
                 if (destQuery.indexOf("where") > 0)
                     tempQueryDest = destQuery + " and " + tempIDdest + ">='" + vec.get(k) + "' and " + tempIDdest + "<='" + vec.get(k + deltaID) + "'";
                          else
                            tempQueryDest = destQuery + " where " + tempIDdest + ">='" + vecDest.get(k) + "' and " + tempIDdest + "<='" + vecDest.get(k + deltaID) + "'";
            
                 System.out.println(tempQuery);
                 System.out.println(tempQueryDest);
   
                 if (dialog != null)
                   dialog.title.setText("Reading table data ...");
   
                 bean.makeQuery(tempQuery, deltaID);
                 beanDest.makeQuery(tempQueryDest, deltaID);
              
                 if (dialog != null)
                   dialog.title.setText("Writing table data ...");
   
                 //       command = writeDatainDestTable(dialog, command, k, pstm, rowCount,delimiter);
                 endIndex = k + deltaID;
               }
               System.out.println(endIndex);
               //all data written ? if not write last chunk of data
               if (endIndex == vec.size() - 1)
                 System.out.println("fits");
               else
               {
                 System.out.println(" last intervall from " + vec.get(endIndex) + " " + vec.lastElement());
   
                 if (query.indexOf("where") > 0)
                   tempQuery = query + " and " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement() + "'";
                 else
                   tempQuery = query + " where " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement() + "'";
                 if (destQuery.indexOf("where") > 0)
                    tempQueryDest = destQuery + " and " + tempIDdest + ">='" + vec.get(endIndex) + "' and " + tempIDdest + "<='" + vec.lastElement() + "'";
                  else
                    tempQueryDest = destQuery + " where " + tempIDdest + ">='" + vec.get(endIndex) + "' and " + tempIDdest + "<='" + vec.lastElement() + "'";
    
                 System.out.println(tempQuery);
                 if (dialog != null)
                   dialog.title.setText("Reading table data ...");
                 bean.makeQuery(tempQuery, 0);
                 beanDest.makeQuery(tempQueryDest, 0);
       
                 if (dialog != null)
                   dialog.title.setText("Writing table data ...");
                 //      command = writeDatainDestTable(dialog, command, endIndex, pstm, rowCount,delimiter);
               }
               // prepare new query for next chunk
               if (query.indexOf("where") > 0)
                 tempQuery = query + " and " + tempID + ">'" + vec.lastElement() + "'";
               else
                 tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'";
   
             }
             long endTime = System.currentTimeMillis();
             System.out.println("Time for incremental convert elapsed " + (endTime - startTime));
           } /*else
                    {
                      // read and write all in one big chunk
                      long startTime = System.currentTimeMillis();
                    
                      bean.makeQuery(query, 0);
                      command = writeDatainDestTable(dialog, command, j, pstm, rowCount,delimiter);
                      long endTime = System.currentTimeMillis();
                      System.out.println("Time for old convert elapsed " + (endTime - startTime));
           
                    }*/
   
           if (true)
             System.exit(0);
           //beanDest.setConnection("jdbc:postgresql://erebos/test3");
           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();
           // System.exit(0);
   
           if (dialog != null)
             dialog.title.setText("Updating table data ...");
   
           int j = -1;
   
           Vector row = null;
           command = new StringBuffer();
   
           command.append("UPDATE ");
           command.append(beanDest.getQC());
           command.append(destTableName);
           //command.append(convertText((String) names.get(tbIndex)));
           command.append(beanDest.getQC());
           command.append(" SET  ");
   
           int size = bean.getColumnNames().size();
           for (int i = 0; i < size - 1; ++i)
             command.append(beanDest.getQC() + convertText((String) bean.getColumnNames().get(i)) + beanDest.getQC() + " = ? ,");
           command.append(convertText((String) bean.getColumnNames().get(size - 1)) + " = ? ");
           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 ((row = bean.getNextRow()) != null)
           {
             j++;
             //print rows
             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)
             {
               obj = row.get(k);
               if (obj instanceof ArrayList)
                 obj = ((List) obj).get(0);
               String str = (obj == null) ? "NULL" : obj.toString();
               if (!str.equals("NULL"))
                 pstm.setString(k + 1, str);
               else
                 pstm.setNull(k + 1, Types.NULL);
             }
             pstm.setString(row.size() + 1, row.get(idIndex).toString());
             //System.out.println(pstm.toString());
             // System.exit(0);
             pstm.execute();
             //stm.executeUpdate(command.toString());
             if (dialog != null)
               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;
           } // to for 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.45  
changed lines
  Added in v.1.46


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