Diff for /FM2SQL/Attic/Convert.java between versions 1.11 and 1.53

version 1.11, 2004/01/15 13:32:09 version 1.53, 2004/04/05 10:14:01
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.*;
Line 26  class Convert Line 38  class Convert
   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 numIntervalls = 2;
   public static void main(String args[])    public static void main(String args[])
   {    {
 /*    try  /*    try
Line 44  class Convert Line 57  class Convert
      System.out.println("Usage: java Convert <xml config file>");       System.out.println("Usage: java Convert <xml config file>");
      System.exit(-1);       System.exit(-1);
     }      }
     if(!(new File(args[0]).exists())) System.exit(0);      if (!(new File(args[0]).exists()))
         System.exit(0);
     try      try
     {      {
       file = new FileOutputStream("./log.txt");        file = new FileOutputStream("./log.txt");
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,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
   {    {
    /*FM2SQL.ProgressDialog dialog = new  FM2SQL.ProgressDialog(FM2SQL.fmInstance);  
    dialog.setTitle("Conversion running ...");  
    dialog.title.setText("Getting table data ...");  
    dialog.setLocation(500,500);   
    dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));  
   */  
   // FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));  
    //dialog.thread=Thread.currentThread();  
    bean=source;     bean=source;
    beanDest = destination;     beanDest = destination;
  /*  // setting user and passwd       convert(null,null,names,layouts,selects,creates,ids,mode,delimiter);
    bean.setUserAndPasswd(user,passwd);      if(true) return;
   // setting user and passwd   
   beanDest.setUserAndPasswd(userDest,passwdDest);  
   */  
   //dialog.setSize(400,250);  
    StringBuffer command= null;     StringBuffer command= null;
     try      try
     {      {
       //bean.setConnection("jdbc:fmpro:http://141.14.237.74:8050");      
     //bean.setConnection("jdbc:postgresql://erebos/test","postgres","rogo");  
       bean.setConnection(source.url);        bean.setConnection(source.url);
       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"));  
       for(tbIndex=0;tbIndex<names.size();++tbIndex)        for(tbIndex=0;tbIndex<names.size();++tbIndex)
       {        {
         Vector[] result = null;          Vector[] result = null;
        try {          try
           {
      String query = "select * from " + bean.getQC() +names.get(tbIndex).toString() + bean.getQC();       String 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():query;
Line 108  class Convert Line 108  class Convert
           System.out.println("added layout " + query);            System.out.println("added layout " + query);
                   
         }          }
         //  if ( layout!= "")  
         //   query += " layout " + bean.getQC() + layout + bean.getQC();  
      /*   dialog.title.setText("Getting table data ...");  
         dialog.table.setText(names.get(tbIndex).toString());  
         dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size());  
         dialog.show();  
       */  
           System.out.println(" performing query "+query);            System.out.println(" performing query "+query);
           //result = bean.getQueryData(query, null, 0);            //result = bean.getQueryData(query, null, 0);
         bean.getConnection();          bean.getConnection();
Line 144  class Convert Line 137  class Convert
          stm.executeUpdate("drop table "+beanDest.getQC()+names.get(tbIndex)+beanDest.getQC());           stm.executeUpdate("drop table "+beanDest.getQC()+names.get(tbIndex)+beanDest.getQC());
         tables.remove((String)names.get(tbIndex));          tables.remove((String)names.get(tbIndex));
         System.out.println("dropped table "+ names.get(tbIndex));          System.out.println("dropped table "+ names.get(tbIndex));
         }            } else if (tables.indexOf(convertText(names.get(tbIndex).toString())) >= 0)
         else  
         if(tables.indexOf(convertText(names.get(tbIndex).toString()))>=0)   
         {          {
          stm.executeUpdate("drop table "+beanDest.getQC()+convertText((String)names.get(tbIndex))+beanDest.getQC());           stm.executeUpdate("drop table "+beanDest.getQC()+convertText((String)names.get(tbIndex))+beanDest.getQC());
         tables.remove(convertText((String)names.get(tbIndex)));          tables.remove(convertText((String)names.get(tbIndex)));
Line 181  class Convert Line 172  class Convert
           type = (type.equals("CONTAINER")) ? "TEXT" : type;            type = (type.equals("CONTAINER")) ? "TEXT" : type;
           command.append(beanDest.getQC() + convertText((String) columnNames.get(columnNames.size() - 1)) + beanDest.getQC() + " " + type);            command.append(beanDest.getQC() + convertText((String) columnNames.get(columnNames.size() - 1)) + beanDest.getQC() + " " + type);
           command.append(" )");            command.append(" )");
         }              } else
          else  
          command=new StringBuffer().append(creates.get(tbIndex).toString());           command=new StringBuffer().append(creates.get(tbIndex).toString());
                     
            System.out.println(command);             System.out.println(command);
Line 192  class Convert Line 182  class Convert
                   
       }        }
     }      }
     // System.out.println(names);  
     /*      
     if (idVal == "")  
           stm.executeUpdate("INSERT  INTO " + DBBean.getQC() + box.getSelectedItem() + DBBean.getQC() + " (" + DBBean.getQC() + columnName + DBBean.getQC() + ")  VALUES ('" + value + "') ");  
         else  
           stm.executeUpdate("UPDATE   " + DBBean.getQC() + box.getSelectedItem() + DBBean.getQC() + " SET  " + DBBean.getQC() + columnName + DBBean.getQC() + "='" + value + "' WHERE ID='" + idVal + "' ");  
       */  
   
     // Vector[] result2=beanDest.getQueryData(names.get(tbIndex).toString());  
     // print results to screen  
   /*  for (int i = 0; i < result[1].size(); ++i)  
     {  
       //print Header  
       // System.out.println(" "+result[1].get(i)+" "+result2[1].get(i)+" "+i);  
     }*/  
     // System.out.println();  
     //dialog.title.setText("Writing table data ...");  
     Vector row = null;      Vector row = null;
     //for (int j = 0; j < result[0].size(); ++j)  
     command = new StringBuffer();      command = new StringBuffer();
   
     command.append("INSERT  INTO ");      command.append("INSERT  INTO ");
Line 226  class Convert Line 198  class Convert
     System.out.println(command);      System.out.println(command);
     while((row=bean.getNextRow())!=null)      while((row=bean.getNextRow())!=null)
     {      {
 /*      //Vector row = (Vector) result[0].get(j);            //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)
       { 
         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
      * @param source
      * @param destination
      * @param names
      * @param layouts
      * @param selects
      * @param creates
      * @param ids
      * @param 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;
       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;
           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, 0);
           } 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());
   
           //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 = new StringBuffer();
   
         command.append("INSERT  INTO ");          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(" values ( ");          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               //print rows
      Object obj = null;       Object obj = null;
      /*            /* for(int k=0;k<row.size()-1;++k)
      for(int k=0;k<row.size()-1;++k)  
      {       {
         obj = row.get(k);          obj = row.get(k);
         //System.out.println("row "+obj+" "+k);          //System.out.println("row "+obj+" "+k);
        if(obj!=null&&!(obj instanceof ArrayList))         if(obj!=null&&!(obj instanceof ArrayList))
        command.append("'"+convertUml(new String(obj.toString().getBytes("UTF-8"),"UTF-8"))+"',");                command.append("'"+convertUml(obj.toString())+"',"); 
        else if(obj!=null&&   obj instanceof ArrayList)         else if(obj!=null&&   obj instanceof ArrayList)
        command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"',");          command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"',"); 
        else command.append("NULL,");         else command.append("NULL,");
      }       }
      obj = row.get(row.size() - 1);       obj = row.get(row.size() - 1);
      if (obj != null && !(obj instanceof ArrayList))       if (obj != null && !(obj instanceof ArrayList))
      command.append("'"+convertUml(new String(obj.toString().getBytes("UTF-8"),"UTF-8"))+"')");              command.append("'"+convertUml(obj.toString())+"')"); 
       else        else
       if(obj!=null&&   obj instanceof ArrayList)        if(obj!=null&&   obj instanceof ArrayList)
        command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"')");         //command.append(obj.toString()+")");         command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"')");         //command.append(obj.toString()+")");
        else command.append("NULL)");         else command.append("NULL)");
               */
        //command.append("'"+row.get(row.size()-1)+"')");          //command.append("'"+row.get(row.size()-1)+"')"); 
      //command.append(" )");       //command.append(" )");
      //  for(int k=0;k<row.size();++k)       //  for(int k=0;k<row.size();++k)
Line 262  class Convert Line 399  class Convert
     // System.out.println();      // System.out.println();
        //   System.out.println(command+" "+j+" "+row.size()+" "+  ((Vector)result2[0].get(j)).size());         //   System.out.println(command+" "+j+" "+row.size()+" "+  ((Vector)result2[0].get(j)).size());
            // System.out.println(command);             // System.out.println(command);
             stm.executeUpdate(command.toString());  
   // dialog.progress.setValue((int)(((double)(j+1)/(double)result[0].size())*100.0));  
   // System.out.println( (int)(((double)(j+1)/(double)result[0].size())*100.0)+" "+result[0].size()+" "+j);  
    command = null;  
 */  
     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 278  class Convert Line 410  class Convert
       else        else
         pstm.setNull(k + 1, Types.NULL);          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();      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      }// 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);
      //dialog.setVisible(false);        if (dialog != null)
      //dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));        {
      //FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));          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);
      System.err.println(b);        FM2SQL.showErrorDialog(b.toString(), "Error occured !");
      //FM2SQL.showErrorDialog(b.toString(), "Error occured !");  
         
    }     }
  //  dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));      if (dialog != null)
    //FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));      {
         dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
         FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
   
         dialog.setVisible(false);
       }
   
  //  dialog.setVisible(false);   
   }    }
     /**
      *   transfers the specified array of tables  to the destination database
         and creates the table if it does not exist if it exists and mode is not append the table is dropped
    
      * @param source
      * @param destination
      * @param names
      * @param layouts
      * @param selects
      * @param creates
      * @param ids
      * @param mode
      * @throws Exception
      */ 
   
   
     public static void convert(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode,String delimiter) throws Exception
     {
   
       FM2SQL.ProgressDialog dialog = null;
   
   public static void  convert(String source,String destination,Vector names,Vector layouts,Vector selects,Vector creates,int mode) throws Exception      if (FM2SQL.fmInstance != null)
   {    {
    FM2SQL.ProgressDialog 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); 
      dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));       dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
      FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));       FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
    dialog.thread=Thread.currentThread();     dialog.thread=Thread.currentThread();
         dialog.setSize(400, 250);
       }
       java.util.TreeSet myIds = new TreeSet();
       int deltaID = 1;
       String idField = "";
       String destTableName = "";
       if (source != null && destination != null)
       {
    // 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);
   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");            if(source!=null)
       //bean.setConnection("jdbc:postgresql://erebos/test","postgres","rogo");  
       bean.setConnection(source);        bean.setConnection(source);
         else
         bean.setConnection(bean.url);
         
       if(names==null)        if(names==null)
        names=bean.getTableNames();         names=bean.getTableNames();
      // Collections.sort(names);       // Collections.sort(names);
Line 335  class Convert Line 508  class Convert
       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();          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():query;
Line 352  class Convert Line 526  class Convert
         }          }
         //  if ( layout!= "")          //  if ( layout!= "")
         //   query += " layout " + bean.getQC() + layout + bean.getQC();          //   query += " layout " + bean.getQC() + layout + bean.getQC();
         dialog.title.setText("Getting table data ...");            if (dialog != null)
             {
               dialog.title.setText("Reading table data ...");
         dialog.table.setText(names.get(tbIndex).toString());          dialog.table.setText(names.get(tbIndex).toString());
         dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size());          dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size());
         dialog.show();          dialog.show();
             }
         //result = bean.getQueryData(query, dialog, 0);          //result = bean.getQueryData(query, dialog, 0);
         bean.getConnection();          bean.getConnection();
         bean.makeQuery(query,0);            bean.makeQuery(query, 50);
             idField = ids.get(tbIndex).toString();
   
       } catch (Exception e)        } catch (Exception e)
         {          {
             System.out.println(e);
           continue;            continue;
         }          }
         //beanDest.setConnection("jdbc:postgresql://erebos/test3");          if(destination!=null)
         beanDest.setConnection(destination);          beanDest.setConnection(destination);
           else
           beanDest.setConnection(beanDest.url);
         Statement stm = beanDest.getConnection().createStatement();          Statement stm = beanDest.getConnection().createStatement();
   
         Vector tables = beanDest.getTableNames();          Vector tables = beanDest.getTableNames();
Line 375  class Convert Line 556  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);
         
         // 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());
   
       if(mode==Convert.DataBase.CONVERT_MODE)         if(mode==Convert.DataBase.CONVERT_MODE) 
       {        {
   
             if (tables.indexOf(destTableName) >= 0)
             {
               stm.executeUpdate("drop table " + beanDest.getQC() + destTableName + beanDest.getQC());
               tables.remove(destTableName);
               System.out.println("dropped table" + destTableName);
   
             }
             /*
             if(destTableName.equals(""))
         if(tables.indexOf(names.get(tbIndex))>=0)           if(tables.indexOf(names.get(tbIndex))>=0) 
         {          {
          stm.executeUpdate("drop table "+beanDest.getQC()+names.get(tbIndex)+beanDest.getQC());           stm.executeUpdate("drop table "+beanDest.getQC()+names.get(tbIndex)+beanDest.getQC());
         tables.remove((String)names.get(tbIndex));          tables.remove((String)names.get(tbIndex));
         System.out.println("dropped table"+ names.get(tbIndex));          System.out.println("dropped table"+ names.get(tbIndex));
         }            } else if (tables.indexOf(convertText(names.get(tbIndex).toString())) >= 0)
         else  
         if(tables.indexOf(convertText(names.get(tbIndex).toString()))>=0)   
         {          {
          stm.executeUpdate("drop table "+beanDest.getQC()+convertText((String)names.get(tbIndex))+beanDest.getQC());           stm.executeUpdate("drop table "+beanDest.getQC()+convertText((String)names.get(tbIndex))+beanDest.getQC());
         tables.remove(convertText((String)names.get(tbIndex)));          tables.remove(convertText((String)names.get(tbIndex)));
         System.out.println("dropped table"+ 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 ((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)
           {            {
             System.out.println("Warning empty or invalid create statement - creating one for you\n");              System.out.println("Warning empty or invalid create statement - creating one for you\n");
Line 424  class Convert Line 627  class Convert
           //  System.exit(0);            //  System.exit(0);
           //command.append(DBBean.getQC());               //command.append(DBBean.getQC());   
           } else            } else
           command=new StringBuffer().append(creates.get(tbIndex).toString());                command = new StringBuffer().append(creates.get(tbIndex).toString().toLowerCase());
           stm.executeUpdate(command.toString());            stm.executeUpdate(command.toString());
                   
       }        }
     }      }
     // System.out.println(names);          if(dialog!=null)
     /*      
     if (idVal == "")  
           stm.executeUpdate("INSERT  INTO " + DBBean.getQC() + box.getSelectedItem() + DBBean.getQC() + " (" + DBBean.getQC() + columnName + DBBean.getQC() + ")  VALUES ('" + value + "') ");  
         else  
           stm.executeUpdate("UPDATE   " + DBBean.getQC() + box.getSelectedItem() + DBBean.getQC() + " SET  " + DBBean.getQC() + columnName + DBBean.getQC() + "='" + value + "' WHERE ID='" + idVal + "' ");  
       */  
   
     // Vector[] result2=beanDest.getQueryData(names.get(tbIndex).toString());  
     // print results to screen  
    /* for (int i = 0; i < result[1].size(); ++i)  
     {  
       //print Header  
       // System.out.println(" "+result[1].get(i)+" "+result2[1].get(i)+" "+i);  
     }*/  
     // System.out.println();  
     dialog.title.setText("Writing table data ...");      dialog.title.setText("Writing table data ...");
           
     //for (int j = 0; j < result[0].size(); ++j)          // prepare the insert statement
     int j=-1;      int j=-1;
     Vector row = null;      Vector row = null;
     command = new StringBuffer();      command = new StringBuffer();
   
     command.append("INSERT  INTO ");      command.append("INSERT  INTO ");
     command.append(beanDest.getQC());      command.append(beanDest.getQC());
     command.append(convertText((String) names.get(tbIndex)));          command.append(destTableName); //convertText((String) names.get(tbIndex)));
     command.append(beanDest.getQC());      command.append(beanDest.getQC());
           
     command.append(" values ( ");      command.append(" values ( ");
           
     for(int i=0;i<bean.getColumnNames().size()-1;++i) command.append("?,");          // add a question marks for every field 
           for (int i = 0; i < bean.getColumnNames().size() - 1; ++i)
             command.append("?,");
     command.append("?)");      command.append("?)");
     PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString());      PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString());
     System.out.println(command);      System.out.println(command);
     int rowCount= bean.getRowCount(query);          int rowCount = (idField != "") ? myIds.size() : bean.getRowCount(query);
           Vector vec = new Vector(myIds);
           int endIndex = -1;
           String tempQuery = query;
           String tempID = bean.getQC() + idField + bean.getQC();
           // if id_field not do incremental conversion else do it all at once
           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);
               if (myIds.isEmpty())
                 break;
               vec = new Vector(myIds);
               rowCount = vec.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);
               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)+"'";
                 System.out.println(tempQuery);
                 if(dialog!=null)
                 dialog.title.setText("Reading table data ...");
   
                 bean.makeQuery(tempQuery, 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()+"'";
                 System.out.println(tempQuery);
                 if(dialog!=null)
                 dialog.title.setText("Reading table data ...");
                 bean.makeQuery(tempQuery, 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));
   
           }
         }
       } 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 !");
         } else
         {
           e.printStackTrace();
   
         }
       }
       if (dialog != null)
       {
         dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
         FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
         dialog.setVisible(false);
       }
     }
     /**
      * Writes data to the destination table 
      * @param dialog  progress dialog
      * @param command 
      * @param j       data index for progress bar
      * @param pstm    prepared statement
      * @param rowCount number of datasets
      * @return   command
      * @throws Exception
      * @throws SQLException
      */
     private static StringBuffer writeDatainDestTable(FM2SQL.ProgressDialog dialog, StringBuffer command, int j, PreparedStatement pstm, int rowCount,String delimiter) throws Exception, SQLException
     {
       Vector row;
     while((row=bean.getNextRow())!=null)      while((row=bean.getNextRow())!=null)
     {      {
       j++;        j++;
Line 505  class Convert Line 824  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) obj=((List)obj).get(0);          if (obj instanceof ArrayList)
                   if (obj instanceof ArrayList)
                obj = formatFileMakerArray((List) obj,delimiter);
         
         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); 
         else pstm.setNull(k+1,Types.NULL);          else
             pstm.setNull(k + 1, Types.NULL);
       }        }
       pstm.execute();        pstm.execute();
       //stm.executeUpdate(command.toString());        //stm.executeUpdate(command.toString());
         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);      // 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 while loop    
          return command;
     }  
  } 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);  
          FM2SQL.showErrorDialog(b.toString(), "Error occured !");  
        
    }  
      dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));  
      FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));  
   
      dialog.setVisible(false);   
   }    }
   
     /**
      *  removes special characters from the input string as well as .fp5 
      * @param newName String to change
      * @return
      */
  public static String convertText(String newName)   public static String convertText(String newName)
   {    {
     StringBuffer alterMe = new StringBuffer(newName.trim().toLowerCase());      StringBuffer alterMe = new StringBuffer(newName.trim().toLowerCase());
Line 556  class Convert Line 867  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) j=j+1;          if (j < length - 1)
           }            j = j + 1;
         else        } else if (alterMe.charAt(j) == 'ö')
          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) j=j+1;          if (j < length - 1)
               }            j = j + 1;
         else        } else if (alterMe.charAt(j) == 'ü')
          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) j=j+1;          if (j < length - 1)
               }            j = j + 1;
         else        } else if (alterMe.charAt(j) == 'ß')
     if (alterMe.charAt(j) == 'ß')  
     {      {
       alterMe.setCharAt(j, 's');        alterMe.setCharAt(j, 's');
       alterMe.insert(j + 1, "s");        alterMe.insert(j + 1, "s");
Line 617  class Convert Line 921  class Convert
     {      {
       alterMe.setCharAt(j, '_');        alterMe.setCharAt(j, '_');
   
     }        } else if (alterMe.charAt(j) == '?')
     else if (alterMe.charAt(j) == '.')        {
           // changed ? to _ because of update statement
           alterMe.setCharAt(j, '_');
           // length = length + 1;
           // j=j+1;
           System.out.println(alterMe);
         } 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 633  class Convert Line 942  class Convert
   }    }
     return alterMe.toString();      return alterMe.toString();
   }    }
     /**
      * Converts > and < in an entity (&gt; or &lt;)
      * @param newName
      * @return
      */
   public static String convertToEntities(String newName)    public static String convertToEntities(String newName)
   {    {
     StringBuffer alterMe = new StringBuffer(newName.trim());      StringBuffer alterMe = new StringBuffer(newName.trim());
Line 663  class Convert Line 977  class Convert
     }      }
     return alterMe.toString();      return alterMe.toString();
   }    }
     /**
      * Masks the single quote character '-->\'
      * @param newName
      * @return
      */
   public static String convertUml(String newName)    public static String convertUml(String newName)
    {     {
      StringBuffer alterMe = new StringBuffer(newName.trim());       StringBuffer alterMe = new StringBuffer(newName.trim());
      int length = alterMe.length();       int length = alterMe.length();
      int j = 0;       int j = 0;
           
       
      while (j < length)       while (j < length)
      {        { 
           
Line 678  class Convert Line 996  class Convert
          alterMe.setCharAt(j, '\\');           alterMe.setCharAt(j, '\\');
          alterMe.insert(j + 1, "'");           alterMe.insert(j + 1, "'");
          length = length + 1;           length = length + 1;
          if(j<length-1) j=j+1;          if (j < length - 1)
             j = j + 1;
        }         }
     /*   else      /*   else
        if (alterMe.charAt(j) == '"')         if (alterMe.charAt(j) == '"')
Line 772  class Convert Line 1091  class Convert
      }       }
      return alterMe.toString();       return alterMe.toString();
    }     }
      /**
    * parses the input xml file for batch conversion
    * called from readXMLFile
    * * @param sb
    */
    public static void parseXMLConfig(StringBuffer sb)     public static void parseXMLConfig(StringBuffer sb)
     {      {
       boolean finished = false;        boolean finished = false;
Line 787  class Convert Line 1110  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
       {        {
         Node tempNode = root.find("convert/source", new int[] { 1, 1 });          Node tempNode = root.find("convert/source", new int[] { 1, 1 });
         if(tempNode==null) throw new Error("parse error source tag missing");        if (tempNode == null)
           throw new Error("parse error source tag missing");
         System.out.println(tempNode.name);          System.out.println(tempNode.name);
         int length =countNodes(tempNode);          int length =countNodes(tempNode);
         for (int i = 1; i <= length; i++)          for (int i = 1; i <= length; i++)
Line 809  class Convert Line 1134  class Convert
           Node node1 = root.find("convert/source/database/user", new int[] { 1, 1, i, 1, 1 });            Node node1 = root.find("convert/source/database/user", new int[] { 1, 1, i, 1, 1 });
           Node node2 = root.find("convert/source/database/password", new int[] { 1, 1, i, 1, 1 });            Node 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) throw new Error("parse error database tag missing");          if (node3 == null)
           if(node==null) throw new Error("parse error url tag missing");            throw new Error("parse error database tag missing");
           if(node1==null) throw new Error("parse error user tag missing");          if (node == null)
           if(node2==null) throw new Error("parse error password tag missing");            throw new Error("parse error url tag missing");
           if (node1 == null)
             throw new Error("parse error user tag missing");
           if (node2 == null)
             throw new Error("parse error password tag missing");
           if(delimiterNode!=null) delimiter = delimiterNode.getCharacters();
           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 830  class Convert Line 1160  class Convert
             modeString = nodeMode.getCharacters();              modeString = nodeMode.getCharacters();
           if (modeString.equals("convert"))            if (modeString.equals("convert"))
             mode = DataBase.CONVERT_MODE;              mode = DataBase.CONVERT_MODE;
           else          else if (modeString.equals("append"))
             if (modeString.equals("append"))  
               mode = DataBase.APPEND_MODE;                mode = DataBase.APPEND_MODE;
             else          else if (modeString.equals("update"))
               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 854  class Convert Line 1185  class Convert
             System.out.println(node5.name + " " + node5.getCharacters());              System.out.println(node5.name + " " + node5.getCharacters());
             if(node6!=null)              if(node6!=null)
             System.out.println(node6.name + " " + node6.getCharacters());              System.out.println(node6.name + " " + node6.getCharacters());
             if(node4==null) throw new Error("parse error table tag missing");            if (node4 == null)
               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 missing");
             // if(node6==null) throw new Error("parse error create tag 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");
             System.out.println("id was "+id);              System.out.println("id was "+id);
             if(name==null) throw new Error("parse error required table tag attribute name missing");            if (name == null)
             if(layout==null) layout ="";              throw new Error("parse error required table tag attribute name missing");
             if(id==null)  id = "";            if (layout == null)
             if(name.equals("")) throw new Error("parse error table tag attribute must not be empty");              layout = "";
             if (id == null)
               id = "";
             if (name.equals(""))
               throw new Error("parse error table tag attribute must not be empty");
             tables.add(name);              tables.add(name);
             layouts.add(layout);              layouts.add(layout);
             ids.add(id);              ids.add(id);
             String query = (node5==null) ? "":node5.getCharacters();               String query = (node5==null) ? "":node5.getCharacters(); 
             if(query.equals("")) System.err.println("Warning empty select tag or  select tag missing !!");            if (query.equals(""))
               System.err.println("Warning empty select tag or  select tag missing !!");
             query = (query.equals("")) ? "select * from "+database.getQC()+name+database.getQC():query;              query = (query.equals("")) ? "select * from "+database.getQC()+name+database.getQC():query;
             selects.add(query);              selects.add(query);
             if(node6!=null) creates.add(node6.getCharacters().trim());            if (node6 != null)
               creates.add(node6.getCharacters().trim());
              else               else
               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 894  class Convert Line 1234  class Convert
        for (Iterator iter = databases.iterator(); iter.hasNext();)         for (Iterator iter = databases.iterator(); iter.hasNext();)
       {        {
         DataBase db = (DataBase) iter.next();          DataBase db = (DataBase) iter.next();
         convertBatch(db.bean,database,db.tables,db.layouts,db.selects,db.creates,mode);          if (mode != DataBase.UPDATE_MODE)
             convertBatch(db.bean, database, db.tables, db.layouts, db.selects, db.creates, db.ids,mode,db.delimiter);
           else
             update(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates, db.ids, mode);
                   
       }        }
         // printContents(node3);          // printContents(node3);
         //   FM2SQL.fmInstance=new FM2SQL();          //   FM2SQL.fmInstance=new FM2SQL();
       } catch (Exception e)        } catch (Exception e)
       {        {
         // TODO Auto-generated catch block      
         e.printStackTrace();          e.printStackTrace();
       }        }
       /*  
       Node tempNode=root.find(rootNode,new int[] {1});  
       if(tempNode==null) return rtTag;  
       int count=1;  
       /*   
       for(int i=0;i<tempNode.contents.v.size();++i)  
       {  
         // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+" "+i);  
       }*/  
    /*  
       if(tempNode.contents.v.size()==0) return rtTag;  
       Node notNull=null;  
       Node rtNode=root.find(rootNode+"/rt",new int[] {1,1});  
       rtTag=(rtNode==null) ? "finished":rtNode.getCharacters();  
       System.out.println("rt tag is "+ rtTag);  
       int length=0;//(tempNode.contents.length()-1)/2;  
       for(int i=0;i<tempNode.contents.v.size();++i)    {  
         Node node=(Node)tempNode.contents.v.elementAt(i);  
         if(node.type.equals("element"))  
         if(node.name.equals("doc"))length++;  
         // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+" "+i);  
       }  
      if(length==0) rtTag="finished";          
       while(count<=length)  
       {  
          //System.out.println(count+" "+length);  
         tempNode=root.find(rootNode+"/doc",new int[] {1,count});  
         if(tempNode==null)  
         {  
           rtTag="finished";  
           break;  
         }      
         Bundle.Document doc = new Bundle.Document();  
         Hashtable attributes=tempNode.attributes;  
         int docID=0;  
         int ver=0;  
          if(attributes != null)  
         {  
           docID=Integer.parseInt((String)attributes.get("id"));  
           ver=Integer.parseInt((String)attributes.get("ver"));  
           doc.addData("docID",(String)attributes.get("id"));  
           doc.addData("ver",(String)attributes.get("ver"));  
         }  
         bundle.docs.put(new Integer(docID),doc);  
         bundle.documents.addElement(doc);  
         // System.out.println("id " +docID+" ver "+ver);  
         Node fileNode=root.find(rootNode+"/doc/file",new int[] {1,count,1});  
         attributes=(fileNode==null)? null:fileNode.attributes;  
         int fileID=0;  
         int fileVer=0;  
         if(attributes != null)  
         {  
           fileID=Integer.parseInt((String)attributes.get("id"));  
           fileVer=Integer.parseInt((String)attributes.get("ver"));  
           doc.addData("fileID",(String)attributes.get("id"));  
           doc.addData("fileVer",(String)attributes.get("ver"));  
           // System.out.println("fileid " +fileID+" ver "+fileVer);  
         }  
      // add all Document tags to actual Document  
         for(int i=0;i<tempNode.contents.v.size();++i)  
         {     
           Node node=(Node)tempNode.contents.v.elementAt(i);  
           if(node.type.equals("element"))  
            {  
              //System.out.println(node.name+" "+node.getCharacters()+" "+node.contents.v.size());  
              if(node.contents.v.size()>1)   
              {  
                for(int j=0;j<node.contents.v.size();++j)  
                {    
                  Node node2=(Node)node.contents.v.elementAt(j);  
                  if(node2.type.equals("element"))  
                   {  
                     doc.addData(node2.name,node2.getCharacters());  
                     //System.out.println(node2.name+" "+node2.getCharacters()+" "+node2.contents.v.size());  
                   }  
                }  
              } else doc.addData(node.name,node.getCharacters());  
           }  
         }  
         bundle.docsLocator.put(doc.locator,doc);   
      
       bundle.documents.addElement(doc);  
         count++;  
       }      */  
     
       // System.out.println(bundle.docs.size());  
    // return rtTag;  
     }      }
     public static Vector getXMLConfig(String xmlFile)      public static Vector getXMLConfig(String xmlFile)
      {       {
Line 1010  class Convert Line 1266  class Convert
                   // System.out.print((char)c);                    // System.out.print((char)c);
                 }                  }
                                 
             } catch(Exception e) { e.printStackTrace();}       } catch (Exception e)
       {
         e.printStackTrace();
       }
       
        boolean finished = false;         boolean finished = false;
        // parse string and build document tree         // parse string and build document tree
Line 1024  class Convert Line 1283  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
        {         {
          Node tempNode = root.find("convert/source", new int[] { 1, 1 });           Node tempNode = root.find("convert/source", new int[] { 1, 1 });
          if(tempNode==null) throw new Error("parse error source tag missing");        if (tempNode == null)
           throw new Error("parse error source tag missing");
          System.out.println(tempNode.name);           System.out.println(tempNode.name);
          int length =countNodes(tempNode);           int length =countNodes(tempNode);
          for (int i = 1; i <= length; i++)           for (int i = 1; i <= length; i++)
Line 1047  class Convert Line 1307  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) throw new Error("parse error database tag missing");          if (delimiterNode != null)
            if(node==null) throw new Error("parse error url tag missing");            delimiter = delimiterNode.getCharacters();
            if(node1==null) throw new Error("parse error user tag missing");          if (node3 == null)
            if(node2==null) throw new Error("parse error password tag missing");            throw new Error("parse error database tag missing");
           if (node == null)
             throw new Error("parse error url tag missing");
           if (node1 == null)
             throw new Error("parse error user tag missing");
           if (node2 == null)
             throw new Error("parse error password tag missing");
            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 1067  class Convert Line 1334  class Convert
             modeString = nodeMode.getCharacters();              modeString = nodeMode.getCharacters();
           if (modeString.equals("convert"))            if (modeString.equals("convert"))
             mode = DataBase.CONVERT_MODE;              mode = DataBase.CONVERT_MODE;
           else          else if (modeString.equals("append"))
             if (modeString.equals("append"))  
               mode = DataBase.APPEND_MODE;                mode = DataBase.APPEND_MODE;
             else          else if (modeString.equals("update"))
               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 1093  class Convert Line 1359  class Convert
              System.out.println(node5.name + " " + node5.getCharacters());               System.out.println(node5.name + " " + node5.getCharacters());
              if(node6!=null)               if(node6!=null)
              System.out.println(node6.name + " " + node6.getCharacters());               System.out.println(node6.name + " " + node6.getCharacters());
              if(node4==null) throw new Error("parse error table tag missing");            if (node4 == null)
               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 missing");
              // if(node6==null) throw new Error("parse error create tag 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");
Line 1101  class Convert Line 1368  class Convert
              String id = (String)node4.attributes.get("id");               String id = (String)node4.attributes.get("id");
              System.out.println("id was "+id);               System.out.println("id was "+id);
                     
              if(name==null) throw new Error("parse error required table tag attribute name missing");            if (name == null)
              if(layout==null) layout ="";              throw new Error("parse error required table tag attribute name missing");
              if(id == null)  id="";            if (layout == null)
              if(name.equals("")) throw new Error("parse error table tag attribute must not be empty");              layout = "";
             if (id == null)
               id = "";
             if (name.equals(""))
               throw new Error("parse error table tag attribute must not be empty");
              tables.add(name);               tables.add(name);
              layouts.add(layout);               layouts.add(layout);
              ids.add(id);               ids.add(id);
              String query = (node5==null) ? "":node5.getCharacters();                String query = (node5==null) ? "":node5.getCharacters(); 
              if(query.equals("")) System.err.println("Warning empty select tag or  select tag missing !!");            if (query.equals(""))
               System.err.println("Warning empty select tag or  select tag missing !!");
              query = (query.equals("")) ? "select * from "+database.getQC()+name+database.getQC():query;               query = (query.equals("")) ? "select * from "+database.getQC()+name+database.getQC():query;
              selects.add(query);               selects.add(query);
              if(node6!=null) creates.add(node6.getCharacters().trim());            if (node6 != null)
               creates.add(node6.getCharacters().trim());
               else                else
                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 1148  class Convert Line 1423  class Convert
        return databases;         return databases;
       }        }
   
   
     private static int countNodes(Node tempNode)      private static int countNodes(Node tempNode)
     {      {
       int length = 0;        int length = 0;
       for(int i=0;i<tempNode.contents.v.size();++i)    {      for (int i = 0; i < tempNode.contents.v.size(); ++i)
       {
       Node node=(Node)tempNode.contents.v.elementAt(i);        Node node=(Node)tempNode.contents.v.elementAt(i);
       if(node.type.equals("element"))        if(node.type.equals("element"))
       {        {
         if(node.name.equals("database"))length++;          if (node.name.equals("database"))
         if(node.name.equals("table"))length++;            length++;
           if (node.name.equals("table"))
             length++;
       }        }
               
             // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+" "+i);              // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+" "+i);
Line 1167  class Convert Line 1444  class Convert
     private static void printContents(Node root)      private static void printContents(Node root)
     {      {
                   
         
       Vector contents=(root.index==null)? root.contents.v:root.index.v;        Vector contents=(root.index==null)? root.contents.v:root.index.v;
       for (int i=0;i<contents.size();++i)        for (int i=0;i<contents.size();++i)
       {        {
Line 1179  class Convert Line 1455  class Convert
           //contents=n.contents.v i=0;            //contents=n.contents.v i=0;
         }          }
         // System.out.println(n.type);          // System.out.println(n.type);
         
           
         
       }        }
     }      }
     /**
      * reads the specified xml file
      * @param xmlFile
      */
     public static void readXMLFile(String xmlFile)      public static void readXMLFile(String xmlFile)
     {      {
     try       try 
Line 1201  class Convert Line 1478  class Convert
              // System.out.print((char)c);               // System.out.print((char)c);
            }             }
            parseXMLConfig(sb);             parseXMLConfig(sb);
        } catch(Exception e) { e.printStackTrace();}       } catch (Exception e)
       {
         e.printStackTrace();
       }
     }      }
     
     /**
      * Helper class for XML-File parsing
      * Holds the parsed data
      * @author rogo
      *
      */
 public static class DataBase   public static class DataBase 
 {  {
   DBBean bean;    DBBean bean;
Line 1211  public static class DataBase Line 1498  public static class DataBase
   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;
       final static int DELETE_MODE = 4;
   
   int mode = -1;    int mode = -1;
       
   public DataBase(DBBean bean,Vector tables,Vector layouts,Vector selects,Vector creates,Vector ids,int mode)    public DataBase(DBBean bean,Vector tables,Vector layouts,Vector selects,Vector creates,Vector ids,int mode)
Line 1225  public static class DataBase Line 1515  public static class DataBase
     this.creates = creates;      this.creates = creates;
     this.ids     = ids;      this.ids     = ids;
     this.mode = mode;      this.mode = mode;
         this.bean.setIDVector(ids);
   }    }
       /**
        * writes the data contained in this object to the buffered writer
        * * @param buffr
        * @throws Exception
        */
   public void exportToXML(BufferedWriter buffr) throws Exception    public void exportToXML(BufferedWriter buffr) throws Exception
    {     {
         // ids=bean.getIDVector();
      buffr.write("    <database>\n");       buffr.write("    <database>\n");
      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";
     else        else if (mode == APPEND_MODE)
       if (mode == APPEND_MODE)  
         modeString = "append";          modeString = "append";
       else        else if (mode == UPDATE_MODE)
         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 1252  public static class DataBase Line 1550  public static class DataBase
        String create=(String)creates.get(index);         String create=(String)creates.get(index);
        String id=(String)ids.get(index);         String id=(String)ids.get(index);
         
        buffr.write("      <table name = \""+table+"\" layout = \""+layout+"\" id = \""+id+"\" +>\n");          buffr.write("      <table name = \"" + table + "\" layout = \"" + layout + "\" id = \"" + id + "\" >\n");
        buffr.write("         <select>"+ convertToEntities(select)+"</select>\n");         buffr.write("         <select>"+ convertToEntities(select)+"</select>\n");
        if(!create.equals(""))         if(!create.equals(""))
        buffr.write("         <create>"+create+"         </create>\n");          buffr.write("         <create>"+create+"         </create>\n"); 
Line 1261  public static class DataBase Line 1559  public static class DataBase
      }       }
      buffr.write("    </database>\n");        buffr.write("    </database>\n"); 
    }     }
 public String toString() {return bean.url+" "+tables;}      public String toString()
       {
         return bean.url + " " + tables;
       }
   
 }  }
 public static String convertToUTF8(Object command)  public static String convertToUTF8(Object command)
Line 1279  public static String convertToUTF8(Objec Line 1580  public static String convertToUTF8(Objec
 }  }
   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")) file+=".xml";       if (!file.toLowerCase().endsWith(".xml"))
         file += ".xml";
     File f = new File(file);      File f = new File(file);
       
     FileOutputStream fout= new FileOutputStream(f);      FileOutputStream fout= new FileOutputStream(f);
Line 1297  public static String convertToUTF8(Objec Line 1599  public static String convertToUTF8(Objec
     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.11  
changed lines
  Added in v.1.53


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