Diff for /FM2SQL/src/Convert.java between versions 1.10 and 1.16

version 1.10, 2005/04/19 10:49:05 version 1.16, 2006/09/30 10:58:58
Line 29  import java.sql.ResultSet; Line 29  import java.sql.ResultSet;
 import java.sql.SQLException;  import java.sql.SQLException;
 import java.sql.Statement;  import java.sql.Statement;
 import java.sql.Types;  import java.sql.Types;
   import java.text.DateFormat;
 import java.text.ParseException;  import java.text.ParseException;
 import java.util.ArrayList;  import java.util.ArrayList;
   import java.util.Date;
 import java.util.Hashtable;  import java.util.Hashtable;
 import java.util.Iterator;  import java.util.Iterator;
 import java.util.List;  import java.util.List;
Line 47  import com.exploringxml.xml.Xparse; Line 49  import com.exploringxml.xml.Xparse;
   
 class Convert  class Convert
 {  {
     private static final String _TEMP = "_temp";
   
   /**    /**
    * Helper class for index creation     * Helper class for index creation
    *      * 
Line 119  class Convert Line 123  class Convert
   
   final static int numIntervalls = 4;    final static int numIntervalls = 4;
   
   static boolean debug = !false;    static boolean debug = false;
   
   static boolean isGUI = true;    static boolean isGUI = true;
   
Line 133  class Convert Line 137  class Convert
   
   static Vector postSQLCommands = new Vector();    static Vector postSQLCommands = new Vector();
   
   static final String versionID = new String("FM2SQL Version 0.9.1b\n");    static final String versionID = new String("FM2SQL Version 0.9.10b\n");
   
   private static boolean noError = false;    private static boolean noError = false;
   
   public static void main(String args[]) throws IOException    public static void main(String args[]) throws IOException
   {    {
       //    DateFormat d = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT,
       //        Locale.GERMANY);
       //    System.out.println(convertText("rogoistSuper" + "_" + d.format(new Date()).replace(':', '_')));
   
     /*      /*
      * try { //byte[] b = "�".getBytes("UTF-8"); //       * try { //byte[] b = "�".getBytes("UTF-8"); //
      * System.out.println("QueryString " +b[0]+" "+b[1]+(new       * System.out.println("QueryString " +b[0]+" "+b[1]+(new
Line 531  class Convert Line 539  class Convert
         destTableName = prop.destTableName;          destTableName = prop.destTableName;
         if (mode == Convert.DataBase.CONVERT_TEMP_MODE)          if (mode == Convert.DataBase.CONVERT_TEMP_MODE)
         {          {
           destTableName += "_temp";            String tableNameSave=destTableName;
             destTableName += _TEMP;
             if(creates.get(tbIndex)!="")
             {
              System.out.println("Changed tablename of create statement to "+destTableName);
               StringBuffer buffer=new StringBuffer(creates.get(tbIndex).toString());
              int startIndex = buffer.indexOf(tableNameSave);
              buffer.replace(startIndex,startIndex+tableNameSave.length(),destTableName);
               creates.set(tbIndex,buffer.toString());
             }
         }          }
           System.out.println("destTableName is now "+destTableName);
           
         fieldNames = prop.fieldNames;          fieldNames = prop.fieldNames;
         if (mode == Convert.DataBase.CONVERT_MODE || mode == Convert.DataBase.CONVERT_TEMP_MODE)          if (mode == Convert.DataBase.CONVERT_MODE || mode == Convert.DataBase.CONVERT_TEMP_MODE)
         {          {
   
           if (tables.indexOf(destTableName) >= 0)            if (tables.indexOf(destTableName) >= 0)
           {            {
             stm.executeUpdate("drop table " + beanDest.getQC() + destTableName + beanDest.getQC());              stm.executeUpdate("drop table " + beanDest.getQC() + destTableName + beanDest.getQC());
Line 580  class Convert Line 598  class Convert
               command.append(" )");                command.append(" )");
   
             } else              } else
               command = new StringBuffer().append(creates.get(tbIndex).toString().toLowerCase());              {
                 command = new StringBuffer().append(creates.get(tbIndex).toString());
               }
             stm.executeUpdate(command.toString());              stm.executeUpdate(command.toString());
   
           }            }
Line 648  class Convert Line 668  class Convert
             for (int k = 0; k < vec.size() - deltaID; k = k + deltaID)              for (int k = 0; k < vec.size() - deltaID; k = k + deltaID)
             {              {
               System.out.println(vec.get(k) + " " + vec.get(k + deltaID) + " " + vec.lastElement());                System.out.println(vec.get(k) + " " + vec.get(k + deltaID) + " " + vec.lastElement());
               if (query.indexOf("where") > 0)                if (query.toLowerCase().indexOf("where") > 0)
                 tempQuery = query + " and " + tempID + ">='" + vec.get(k) + "' and " + tempID                  tempQuery = query + " and " + tempID + ">='" + vec.get(k) + "' and " + tempID
                     + "<='" + vec.get(k + deltaID) + "'";                      + "<='" + vec.get(k + deltaID) + "'";
               else                else
Line 674  class Convert Line 694  class Convert
               System.out.println(" last intervall from " + vec.get(endIndex) + " "                System.out.println(" last intervall from " + vec.get(endIndex) + " "
                   + vec.lastElement());                    + vec.lastElement());
   
               if (query.indexOf("where") > 0)                if (query.toLowerCase().indexOf("where") > 0)
                 tempQuery = query + " and " + tempID + ">='" + vec.get(endIndex) + "' and "                  tempQuery = query + " and " + tempID + ">='" + vec.get(endIndex) + "' and "
                     + tempID + "<='" + vec.lastElement() + "'";                      + tempID + "<='" + vec.lastElement() + "'";
               else                else
Line 689  class Convert Line 709  class Convert
               command = writeDatainDestTable(dialog, command, endIndex, pstm, rowCount, delimiter);                command = writeDatainDestTable(dialog, command, endIndex, pstm, rowCount, delimiter);
             }              }
             // prepare new query for next chunk              // prepare new query for next chunk
             if (query.indexOf("where") > 0)              if (query.toLowerCase().indexOf("where") > 0)
               tempQuery = query + " and " + tempID + ">'" + vec.lastElement() + "'";                tempQuery = query + " and " + tempID + ">'" + vec.lastElement() + "'";
             else              else
               tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'";                tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'";
Line 712  class Convert Line 732  class Convert
         if (isGUI)          if (isGUI)
           resetGUI(dialog);            resetGUI(dialog);
         noError = true;          noError = true;
           if (mode == Convert.DataBase.CONVERT_TEMP_MODE)
           {
             String originalName = destTableName.split(_TEMP)[0];
             // TODO 
             if (beanDest.getTableNames().contains(originalName))
             {
               DateFormat d = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM);
               d.setTimeZone(java.util.TimeZone.getTimeZone("CET"));
             
               String date = d.format(new Date());
               date = date.replace(':', '_');
               String newName = addQuotes(beanDest, convertText(originalName + "_" + date));
               // rename table to newName
               renameTable(beanDest, addQuotes(beanDest, originalName), newName);
             }
             // rename Table_temp to originalName
             renameTable(beanDest, addQuotes(beanDest, destTableName), addQuotes(beanDest,
                 originalName));
           }
       }        }
     } catch (Exception e)      } catch (Exception e)
     {      {
Line 728  class Convert Line 767  class Convert
       }        }
     } catch (Error e)      } catch (Error e)
     {      {
         noError = false;
   
       System.out.println(e);        System.out.println(e);
       e.printStackTrace();        e.printStackTrace();
     }      }
Line 735  class Convert Line 776  class Convert
   }    }
   
   /**    /**
      *
      * @param beanDest2
      * @param originalName
      * @return
      */
     private static String addQuotes(DBBean bean, String originalName)
     {
       return bean.getQC() + originalName + bean.getQC();
     }
   
     /**
    * @param names     * @param names
    * @param dialog     * @param dialog
    * @param tbIndex     * @param tbIndex
Line 786  class Convert Line 838  class Convert
       throws Exception, SQLException        throws Exception, SQLException
   {    {
     Vector row;      Vector row;
     while ((row = bean.getNextRow()) != null)      while ((row = bean.getNextRow()) != null) {
     {  
       j++;        j++;
       Object obj = null;        Object obj = 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);
   
         if (obj instanceof ArrayList)          if (obj instanceof ArrayList)
           obj = formatFileMakerArray((List) obj, delimiter);            obj = formatFileMakerArray((List) obj, delimiter);
   
         String str = (obj == null) ? "NULL" : obj.toString();          String str = (obj == null) ? "NULL" : obj.toString();
         if (obj instanceof Double)                  if (obj instanceof Double) {
         {  
           pstm.setDouble(k + 1, ((Double) obj).doubleValue());            pstm.setDouble(k + 1, ((Double) obj).doubleValue());
         } else if (!str.equals("NULL"))          } else if (!str.equals("NULL"))
           pstm.setString(k + 1, str);            pstm.setString(k + 1, str);
Line 808  class Convert Line 857  class Convert
       }        }
       pstm.execute();        pstm.execute();
       if (isGUI)        if (isGUI)
         dialog.progress.setValue((int) (((double) (j + 1) / (double) rowCount) * 100.0));                  dialog.progress
                           .setValue((int) (((double) (j + 1) / (double) rowCount) * 100.0));
       command = null;        command = null;
     } // to while loop      } // to while loop
     return command;      return command;
Line 1079  class Convert Line 1129  class Convert
           passwdDest = database.passwd;            passwdDest = database.passwd;
   
           synchronize(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates,            synchronize(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates,
               db.ids, mode, db.delimiter, new Vector(db.htIndex.values()));                db.ids, mode, db.delimiter, new Vector(db.htIndex.values()), db.destIDs);
         }          }
         for (Iterator iterator = db.postCommands.iterator(); iterator.hasNext();)          for (Iterator iterator = db.postCommands.iterator(); iterator.hasNext();)
         {          {
Line 1106  class Convert Line 1156  class Convert
     }      }
   }    }
   
     /**
      *
      * @param database
      * @param db 
      * @throws Exception 
      * @throws SQLException 
      */
     private static void renameTable(DBBean database, String sourceTable, String destTable)
         throws SQLException, Exception
     {
       String command = "alter table " + sourceTable + " rename " + " to " + destTable;
       SQLCommand sqlCommand = new SQLCommand(database, command);
       sqlCommand.executeCommand();
     }
   
   public static Vector getXMLConfig(StringBuffer sb)    public static Vector getXMLConfig(StringBuffer sb)
   {    {
   
Line 1121  class Convert Line 1186  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();
       Vector destIDs = new Vector();
   
     Vector preSQLCommands = new Vector();      Vector preSQLCommands = new Vector();
     Vector postSQLCommands = new Vector();      Vector postSQLCommands = new Vector();
   
Line 1143  class Convert Line 1210  class Convert
         selects = new Vector();          selects = new Vector();
         creates = new Vector();          creates = new Vector();
         ids = new Vector();          ids = new Vector();
           destIDs = new Vector();
   
         preSQLCommands = new Vector();          preSQLCommands = new Vector();
         postSQLCommands = new Vector();          postSQLCommands = new Vector();
   
Line 1215  class Convert Line 1284  class Convert
         else if (modeString.equals("convert_temp"))          else if (modeString.equals("convert_temp"))
           mode = DataBase.CONVERT_TEMP_MODE;            mode = DataBase.CONVERT_TEMP_MODE;
   
           System.out.println("mode ist "+mode);
         // if(node3!=null)          // if(node3!=null)
         // System.out.println(node3.name);          // System.out.println(node3.name);
   
Line 1246  class Convert Line 1316  class Convert
           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");
             String destID = (String) node4.attributes.get("targetID");
           System.out.println("id was " + id);            System.out.println("id was " + id);
             System.out.println("targetID was " + destID);
   
           if (name == null)            if (name == null)
             throw new Error("parse error required table tag attribute name missing");              throw new Error("parse error required table tag attribute name missing");
Line 1254  class Convert Line 1326  class Convert
             layout = "";              layout = "";
           if (id == null)            if (id == null)
             id = "";              id = "";
             if (destID == null)
               destID = id ;
   
           if (name.equals(""))            if (name.equals(""))
             throw new Error("parse error table tag attribute must not be empty");              throw new Error("parse error table tag attribute must not be empty");
           tables.add(name.intern());            tables.add(name.intern());
           layouts.add(layout.intern());            layouts.add(layout.intern());
           ids.add(id.intern());            ids.add(id.intern());
             destIDs.add(destID.intern());
           String query = (node5 == null) ? "" : node5.getCharacters();            String query = (node5 == null) ? "" : node5.getCharacters();
           if (query.equals(""))            if (query.equals(""))
             System.err.println("Warning empty select tag or  select tag missing !!");              System.err.println("Warning empty select tag or  select tag missing !!");
Line 1275  class Convert Line 1351  class Convert
         dataBase.delimiter = delimiter;          dataBase.delimiter = delimiter;
         dataBase.preCommands = new Vector(preSQLCommands);          dataBase.preCommands = new Vector(preSQLCommands);
         dataBase.postCommands = new Vector(postSQLCommands);          dataBase.postCommands = new Vector(postSQLCommands);
           dataBase.destIDs = destIDs;
         databases.add(dataBase);          databases.add(dataBase);
       }        }
       DBBean database = new DBBean();        DBBean database = new DBBean();
Line 1468  class Convert Line 1545  class Convert
    */     */
   public static class DataBase    public static class DataBase
   {    {
   
     DBBean bean;      DBBean bean;
   
     Vector creates;      Vector creates;
Line 1479  class Convert Line 1557  class Convert
     Vector tables = new Vector();      Vector tables = new Vector();
   
     Vector ids;      Vector ids;
       Vector destIDs;
   
     String delimiter = "//";      String delimiter = "//";
   
Line 1545  class Convert Line 1624  class Convert
       buffr.write("      <password>" + bean.passwd + "</password>\n");        buffr.write("      <password>" + bean.passwd + "</password>\n");
       buffr.write("      <delimiter>" + delimiter + "</delimiter>\n");        buffr.write("      <delimiter>" + delimiter + "</delimiter>\n");
       String modeString = "";        String modeString = "";
       if (mode == CONVERT_MODE)        if (mode == CONVERT_TEMP_MODE)
           modeString = "convert_temp";
         else if (mode == CONVERT_MODE)
         modeString = "convert";          modeString = "convert";
       else if (mode == APPEND_MODE)        else if (mode == APPEND_MODE)
         modeString = "append";          modeString = "append";
Line 1823  class Convert Line 1904  class Convert
               command = null;                command = null;
             }              }
             // prepare new query for next chunk              // prepare new query for next chunk
             if (query.indexOf("where") > 0)              if (query.toLowerCase().indexOf("where") > 0)
               tempQuery = query + " and " + tempID + ">'" + vec.lastElement() + "'";                tempQuery = query + " and " + tempID + ">'" + vec.lastElement() + "'";
             else              else
               tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'";                tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'";
Line 1848  class Convert Line 1929  class Convert
   
   /**    /**
    * synchronize method based on delete method code     * synchronize method based on delete method code
    *   
    * @param source     * @param source
    * @param destination     * @param destination
    * @param names     * @param names
Line 1857  class Convert Line 1937  class Convert
    * @param creates     * @param creates
    * @param ids     * @param ids
    * @param mode     * @param mode
      * @param destIDs TODO
      * 
    * @throws Exception     * @throws Exception
    */     */
   // TODO implement append,update and delete in one method    // TODO implement append,update and delete in one method
   // TODO using id based algorithm    // TODO using id based algorithm
   public static void synchronize(String source, String destination, Vector names, Vector layouts,    public static void synchronize(String source, String destination, Vector names, Vector layouts,
       Vector selects, Vector creates, Vector ids, int mode, String delimiter, Vector indexList)        Vector selects, Vector creates, Vector ids, int mode, String delimiter, Vector indexList, java.util.Vector destIDs)
       throws Exception        throws Exception
   {    {
     System.out.println(" bin in synchronize!!!");      System.out.println(" bin in synchronize!!!");
Line 1893  class Convert Line 1975  class Convert
         java.util.TreeSet myIdsDest = new TreeSet();          java.util.TreeSet myIdsDest = new TreeSet();
         int deltaID = 1;          int deltaID = 1;
         String idField = "";          String idField = "";
           String destIDField = "";
         String destTableName = "";          String destTableName = "";
   
         try          try
Line 1913  class Convert Line 1996  class Convert
           bean.getConnection();            bean.getConnection();
           bean.makeQuery(query, 50);            bean.makeQuery(query, 50);
           idField = ids.get(tbIndex).toString();            idField = ids.get(tbIndex).toString();
             destIDField = (destIDs!=null) ? destIDs.get(tbIndex).toString():convertText(idField); 
         } catch (Exception e)          } catch (Exception e)
         {          {
           System.out.println("Warning exception occured \n " + e);            System.out.println("Warning exception occured \n " + e);
Line 1953  class Convert Line 2036  class Convert
         // remove extra query parts          // remove extra query parts
         // destQuery.substring(0,destQuery.lastIndexOf(destTableName)+destTableName.length()+1);          // destQuery.substring(0,destQuery.lastIndexOf(destTableName)+destTableName.length()+1);
         System.out.println("new Query " + tempQueryDest);          System.out.println("new Query " + tempQueryDest);
         System.out.println("idfield " + idField + " " + ids.get(tbIndex).toString());          System.out.println("idfield " + idField + " " + ids.get(tbIndex).toString()+" targetID is "+destIDField);
         if (!idField.equals(""))          if (!idField.equals(""))
         {          {
           long startTime = System.currentTimeMillis();            long startTime = System.currentTimeMillis();
Line 1970  class Convert Line 2053  class Convert
   
             myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex),              myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex),
                 tempQuery, 0);                  tempQuery, 0);
             myIdsDest = beanDest.getIDVector(convertText(idField), destTableName, tempQueryDest, 0);              myIdsDest = beanDest.getIDVector(destIDField, destTableName, tempQueryDest, 0);
             // System.out.println("status of remove              // System.out.println("status of remove
             // "+myIds.remove("b015892"));              // "+myIds.remove("b015892"));
             System.out.println("ids found for " + idField + " " + !myIds.isEmpty());              System.out.println("ids found for " + idField + " " + !myIds.isEmpty());
Line 1983  class Convert Line 2066  class Convert
             Vector deleted = new Vector(vec);              Vector deleted = new Vector(vec);
   
             TreeSet linesToAppend = new TreeSet(vec);              TreeSet linesToAppend = new TreeSet(vec);
             linesToAppend.addAll(vec);   //           linesToAppend.addAll(vec);
             linesToDelete = new TreeSet(vecDest);              linesToDelete = new TreeSet(vecDest);
             // remove all lines that are already in dest database              // remove all lines that are already in dest database
             linesToAppend.removeAll(vecDest);              linesToAppend.removeAll(vecDest);
Line 2017  class Convert Line 2100  class Convert
             for (int k = 0; k < vec.size() - deltaID; k = k + deltaID)              for (int k = 0; k < vec.size() - deltaID; k = k + deltaID)
             {              {
               System.out.println(vec.get(k) + " " + vec.get(k + deltaID) + " " + vec.lastElement());                System.out.println(vec.get(k) + " " + vec.get(k + deltaID) + " " + vec.lastElement());
               if (query.indexOf("where") > 0)                if (query.toLowerCase().indexOf("where") > 0)
                 tempQuery = query + " and " + tempID + ">='" + vec.get(k) + "' and " + tempID                  tempQuery = query + " and " + tempID + ">='" + vec.get(k) + "' and " + tempID
                     + "<='" + vec.get(k + deltaID) + "'";                      + "<='" + vec.get(k + deltaID) + "'";
               else                else
Line 2047  class Convert Line 2130  class Convert
               System.out.println(" last intervall from " + vec.get(endIndex) + " "                System.out.println(" last intervall from " + vec.get(endIndex) + " "
                   + vec.lastElement());                    + vec.lastElement());
   
               if (query.indexOf("where") > 0)                if (query.toLowerCase().indexOf("where") > 0)
                 tempQuery = query + " and " + tempID + ">='" + vec.get(endIndex) + "' and "                  tempQuery = query + " and " + tempID + ">='" + vec.get(endIndex) + "' and "
                     + tempID + "<='" + vec.lastElement() + "'";                      + tempID + "<='" + vec.lastElement() + "'";
               else                else
Line 2066  class Convert Line 2149  class Convert
               // numIntervalls) + " " + myIdsDest.size());                // numIntervalls) + " " + myIdsDest.size());
             }              }
             // prepare new query for next chunk              // prepare new query for next chunk
             if (query.indexOf("where") > 0)              if (query.toLowerCase().indexOf("where") > 0)
               tempQuery = query + " and " + tempID + ">'" + vec.lastElement() + "'";                tempQuery = query + " and " + tempID + ">'" + vec.lastElement() + "'";
             else              else
               tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'";                tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'";
Line 2132  class Convert Line 2215  class Convert
           // CREATE UNIQUE INDEX title_idx ON films (title);            // CREATE UNIQUE INDEX title_idx ON films (title);
           for (Iterator iter = linesToDelete.iterator(); iter.hasNext();)            for (Iterator iter = linesToDelete.iterator(); iter.hasNext();)
           {            {
             String id = (String) iter.next();              String id = iter.next().toString();
             delPSt.setString(1, id);              delPSt.setString(1, id);
             delPSt.execute();              delPSt.execute();
   
Line 2180  class Convert Line 2263  class Convert
       dialog.title.setText("Retrieving new data");        dialog.title.setText("Retrieving new data");
     }      }
   
     Vector[] vectors = bean.getQueryData(tempQuery, deltaID);      Vector[] vectors = bean.getQueryData(tempQuery, 0);
     int count = 0, size = vectors[0].size();      int count = 0, size = vectors[0].size();
     int idIndex = vectors[1].indexOf(idField);      int idIndex = vectors[1].indexOf(idField);
     // System.out.println(idIndex + " " + vectors[1] + " " + idField);      // System.out.println(idIndex + " " + vectors[1] + " " + idField);
Line 2193  class Convert Line 2276  class Convert
       Vector line = (Vector) iter.next();        Vector line = (Vector) iter.next();
       Object lineIDIndex = line.get(idIndex);        Object lineIDIndex = line.get(idIndex);
       if (linesToAppend.contains(lineIDIndex))        if (linesToAppend.contains(lineIDIndex))
         System.out.println("line " + linesToAppend.contains(line.get(idIndex)) + " " + lineIDIndex);          System.out.println("line " + linesToAppend.contains(lineIDIndex) + " " + lineIDIndex);
       if (linesToAppend.contains(lineIDIndex))        if (linesToAppend.contains(lineIDIndex))
       {        {
         for (int l = 0; l < line.size(); ++l)          for (int l = 0; l < line.size(); ++l)
Line 2223  class Convert Line 2306  class Convert
         }          }
         updPst.setString(line.size() + 1, line.get(idIndex).toString());          updPst.setString(line.size() + 1, line.get(idIndex).toString());
         // updPst.addBatch();          // updPst.addBatch();
         // updPst.execute();         // System.out.println("updating "+line.get(idIndex).toString()+" "+line);
           updPst.execute();
       }        }
       if (dialog != null)        if (dialog != null)
       {        {

Removed from v.1.10  
changed lines
  Added in v.1.16


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