Diff for /FM2SQL/Attic/Convert.java between versions 1.36 and 1.43

version 1.36, 2004/02/19 10:35:06 version 1.43, 2004/03/03 12:10:33
Line 59  class Convert Line 59  class Convert
     System.out.println("Finished!");      System.out.println("Finished!");
     //convert("jdbc:fmpro:http://141.14.237.74:8050","jdbc:postgresql://erebos/test",null,null);      //convert("jdbc:fmpro:http://141.14.237.74:8050","jdbc:postgresql://erebos/test",null,null);
   }    }
   public static void convertBatch(DBBean source, DBBean destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids,int mode) throws Exception    public static void convertBatch(DBBean source, DBBean destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids,int mode,String delimiter) throws Exception
   {    {
     bean = source;      bean = source;
     beanDest = destination;      beanDest = destination;
     convert(null,null,names,layouts,selects,creates,ids,mode);      convert(null,null,names,layouts,selects,creates,ids,mode,delimiter);
     if(true) return;      if(true) return;
     StringBuffer command = null;      StringBuffer command = null;
     try      try
Line 190  class Convert Line 190  class Convert
           {            {
             obj = row.get(k);              obj = row.get(k);
             if (obj instanceof ArrayList)              if (obj instanceof ArrayList)
               obj = ((List) obj).get(0);                obj = formatFileMakerArray((List) obj,"\n");
             String str = (obj == null) ? "NULL" : obj.toString();              String str = (obj == null) ? "NULL" : obj.toString();
             if (!str.equals("NULL"))              if (!str.equals("NULL"))
               pstm.setString(k + 1, str);                pstm.setString(k + 1, str);
Line 221  class Convert Line 221  class Convert
   
     //  dialog.setVisible(false);       //  dialog.setVisible(false); 
   }    }
       public static String formatFileMakerArray(List list, String delimiter)
       { 
         StringBuffer formattedString = new StringBuffer();
         for(int i=0;i<list.size();++i)
         {
             formattedString.append(list.get(i).toString());
               if(i<list.size()-1)
                formattedString.append(delimiter);
         } 
         return formattedString.toString();
       }
     /**
      * Method for SQL UPDATE
      * @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    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;      FM2SQL.ProgressDialog dialog = null;
Line 398  class Convert Line 420  class Convert
   
   }    }
   /**    /**
    transfers the specified array of tables  to the destination database     *   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      and creates the table if it does not exist if it exists and mode is not append the table is dropped
         
    **/     * @param source
   public static void convert(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode) throws Exception     * @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;      FM2SQL.ProgressDialog dialog = null;
Line 421  class Convert Line 454  class Convert
     java.util.TreeSet myIds = new TreeSet();      java.util.TreeSet myIds = new TreeSet();
     int deltaID = 1;      int deltaID = 1;
     String idField = "";      String idField = "";
       String destTableName = "";
     if (source != null && destination != null)      if (source != null && destination != null)
     {      {
       // setting user and passwd         // setting user and passwd 
Line 496  class Convert Line 530  class Convert
         // System.exit(0);          // System.exit(0);
         if (mode == Convert.DataBase.CONVERT_MODE)          if (mode == Convert.DataBase.CONVERT_MODE)
         {          {
             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 (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());
Line 507  class Convert Line 561  class Convert
             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 541  class Convert Line 596  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());
   
           }            }
Line 556  class Convert Line 611  class Convert
   
         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 ( ");
   
           // add a question marks for every field 
         for (int i = 0; i < bean.getColumnNames().size() - 1; ++i)          for (int i = 0; i < bean.getColumnNames().size() - 1; ++i)
           command.append("?,");            command.append("?,");
         command.append("?)");          command.append("?)");
Line 570  class Convert Line 627  class Convert
         int endIndex = -1;          int endIndex = -1;
         String tempQuery = query;          String tempQuery = query;
         String tempID = bean.getQC() + idField + bean.getQC();          String tempID = bean.getQC() + idField + bean.getQC();
           // if id_field not do incremental conversion else do it all at once
         if (!idField.equals(""))          if (!idField.equals(""))
         {          {
           long startTime = System.currentTimeMillis();            long startTime = System.currentTimeMillis();
Line 598  class Convert Line 656  class Convert
             {              {
               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.indexOf("where") > 0)
                 tempQuery = query + " and " + tempID + ">=" + vec.get(k) + " and " + tempID + "<=" + vec.get(k + deltaID);                  tempQuery = query + " and " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID)+"'";
               else                else
                 tempQuery = query + "where " + tempID + ">=" + vec.get(k) + " and " + tempID + "<=" + vec.get(k + deltaID);                  tempQuery = query + " where " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID)+"'";
               System.out.println(tempQuery);                System.out.println(tempQuery);
               if(dialog!=null)                if(dialog!=null)
               dialog.title.setText("Reading table data ...");                dialog.title.setText("Reading table data ...");
Line 609  class Convert Line 667  class Convert
               if(dialog!=null)                if(dialog!=null)
               dialog.title.setText("Writing table data ...");                dialog.title.setText("Writing table data ...");
   
               command = writeDatainDestTable(dialog, command, k, pstm, rowCount);                command = writeDatainDestTable(dialog, command, k, pstm, rowCount,delimiter);
               endIndex = k + deltaID;                endIndex = k + deltaID;
             }              }
             System.out.println(endIndex);              System.out.println(endIndex);
               //all data written ? if not write last chunk of data
             if (endIndex == vec.size() - 1)              if (endIndex == vec.size() - 1)
               System.out.println("fits");                System.out.println("fits");
             else              else
Line 620  class Convert Line 679  class Convert
               System.out.println(" last intervall from " + vec.get(endIndex) + " " + vec.lastElement());                System.out.println(" last intervall from " + vec.get(endIndex) + " " + vec.lastElement());
   
               if (query.indexOf("where") > 0)                if (query.indexOf("where") > 0)
                 tempQuery = query + " and " + tempID + ">=" + vec.get(endIndex) + " and " + tempID + "<=" + vec.lastElement();                  tempQuery = query + " and " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement()+"'";
               else                else
                 tempQuery = query + "where " + tempID + ">=" + vec.get(endIndex) + " and " + tempID + "<=" + vec.lastElement();                  tempQuery = query + " where " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement()+"'";
               System.out.println(tempQuery);                System.out.println(tempQuery);
               if(dialog!=null)                if(dialog!=null)
               dialog.title.setText("Reading table data ...");                dialog.title.setText("Reading table data ...");
               bean.makeQuery(tempQuery, 0);                bean.makeQuery(tempQuery, 0);
               if(dialog!=null)                if(dialog!=null)
               dialog.title.setText("Writing table data ...");                dialog.title.setText("Writing table data ...");
               command = writeDatainDestTable(dialog, command, endIndex, pstm, rowCount);                command = writeDatainDestTable(dialog, command, endIndex, pstm, rowCount,delimiter);
             }              }
               // prepare new query for next chunk
             if (query.indexOf("where") > 0)              if (query.indexOf("where") > 0)
               tempQuery = query + " and " + tempID + ">" + vec.lastElement();                tempQuery = query + " and " + tempID + ">'" + vec.lastElement()+"'";
             else              else
               tempQuery = query + " where " + tempID + ">" + vec.lastElement();                tempQuery = query + " where " + tempID + ">'" + vec.lastElement()+"'";
   
           }            }
           long endTime = System.currentTimeMillis();            long endTime = System.currentTimeMillis();
           System.out.println("Time for incremental convert elapsed " + (endTime - startTime));            System.out.println("Time for incremental convert elapsed " + (endTime - startTime));
         } else          } else
         {          {
             // read and write all in one big chunk
           long startTime = System.currentTimeMillis();            long startTime = System.currentTimeMillis();
   
           bean.makeQuery(query, 0);            bean.makeQuery(query, 0);
           command = writeDatainDestTable(dialog, command, j, pstm, rowCount);            command = writeDatainDestTable(dialog, command, j, pstm, rowCount,delimiter);
           long endTime = System.currentTimeMillis();            long endTime = System.currentTimeMillis();
           System.out.println("Time for old convert elapsed " + (endTime - startTime));            System.out.println("Time for old convert elapsed " + (endTime - startTime));
   
Line 676  class Convert Line 737  class Convert
       dialog.setVisible(false);        dialog.setVisible(false);
     }      }
   }    }
   private static StringBuffer writeDatainDestTable(FM2SQL.ProgressDialog dialog, StringBuffer command, int j, PreparedStatement pstm, int rowCount) throws Exception, SQLException    /**
      * 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;      Vector row;
     while ((row = bean.getNextRow()) != null)      while ((row = bean.getNextRow()) != null)
Line 722  class Convert Line 794  class Convert
       {        {
         obj = row.get(k);          obj = row.get(k);
         if (obj instanceof ArrayList)          if (obj instanceof ArrayList)
           obj = ((List) obj).get(0);                  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);
Line 739  class Convert Line 813  class Convert
     return command;      return command;
   }    }
   
     /**
      *  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 832  class Convert Line 911  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 862  class Convert Line 946  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());
Line 971  class Convert Line 1060  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 986  class Convert Line 1079  class Convert
     Vector selects = new Vector();      Vector selects = new Vector();
     Vector creates = new Vector();      Vector creates = new Vector();
     Vector ids = new Vector();      Vector ids = new Vector();
       String delimiter = "|";
     int mode = -1;      int mode = -1;
   
     try      try
Line 1010  class Convert Line 1104  class Convert
         Node node2 = root.find("convert/source/database/password", new int[] { 1, 1, i, 1, 1 });          Node node2 = root.find("convert/source/database/password", new int[] { 1, 1, i, 1, 1 });
         Node node3 = root.find("convert/source/database", new int[] { 1, 1, i });          Node node3 = root.find("convert/source/database", new int[] { 1, 1, i });
         Node nodeMode = root.find("convert/source/database/mode", new int[] { 1, 1, i, 1, 1 });          Node nodeMode = root.find("convert/source/database/mode", new int[] { 1, 1, i, 1, 1 });
           Node delimiterNode =root.find("convert/source/database/delimiter", new int[] { 1, 1, i, 1, 1 });
         if (node3 == null)          if (node3 == null)
           throw new Error("parse error database tag missing");            throw new Error("parse error database tag missing");
         if (node == null)          if (node == null)
Line 1019  class Convert Line 1113  class Convert
           throw new Error("parse error user tag missing");            throw new Error("parse error user tag missing");
         if (node2 == null)          if (node2 == null)
           throw new Error("parse error password tag missing");            throw new Error("parse error password tag missing");
           if(delimiterNode!=null) delimiter = delimiterNode.getCharacters();
         String url = node.getCharacters();          String url = node.getCharacters();
         String user = node1.getCharacters();          String user = node1.getCharacters();
         String password = node2.getCharacters();          String password = node2.getCharacters();
Line 1086  class Convert Line 1181  class Convert
             creates.add("");              creates.add("");
   
         }          }
         databases.add(new DataBase(database, tables, layouts, selects, creates, ids, mode));          DataBase dataBase = new DataBase(database, tables, layouts, selects, creates, ids, mode);
           dataBase.delimiter = delimiter;
           databases.add(dataBase);
       }        }
       DBBean database = new DBBean();        DBBean database = new DBBean();
       // parse dataBase        // parse dataBase
Line 1104  class Convert Line 1201  class Convert
       {        {
         DataBase db = (DataBase) iter.next();          DataBase db = (DataBase) iter.next();
         if (mode != DataBase.UPDATE_MODE)          if (mode != DataBase.UPDATE_MODE)
           convertBatch(db.bean, database, db.tables, db.layouts, db.selects, db.creates, db.ids,mode);            convertBatch(db.bean, database, db.tables, db.layouts, db.selects, db.creates, db.ids,mode,db.delimiter);
         else          else
           update(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates, db.ids, mode);            update(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates, db.ids, mode);
   
Line 1152  class Convert Line 1249  class Convert
     Vector selects = new Vector();      Vector selects = new Vector();
     Vector creates = new Vector();      Vector creates = new Vector();
     Vector ids = new Vector();      Vector ids = new Vector();
           String delimiter = "|";
     int mode = -1;      int mode = -1;
     try      try
     {      {
Line 1176  class Convert Line 1273  class Convert
         Node node2 = root.find("convert/source/database/password", new int[] { 1, 1, i, 1, 1 });          Node node2 = root.find("convert/source/database/password", new int[] { 1, 1, i, 1, 1 });
         Node node3 = root.find("convert/source/database", new int[] { 1, 1, i });          Node node3 = root.find("convert/source/database", new int[] { 1, 1, i });
         Node nodeMode = root.find("convert/source/database/mode", new int[] { 1, 1, i, 1, 1 });          Node nodeMode = root.find("convert/source/database/mode", new int[] { 1, 1, i, 1, 1 });
                   Node delimiterNode =root.find("convert/source/database/delimiter", new int[] { 1, 1, i, 1, 1 });
   
                   if(delimiterNode!=null) delimiter = delimiterNode.getCharacters();
           System.out.println("delimiter "+delimiterNode.getCharacters());
         if (node3 == null)          if (node3 == null)
           throw new Error("parse error database tag missing");            throw new Error("parse error database tag missing");
         if (node == null)          if (node == null)
Line 1204  class Convert Line 1304  class Convert
           mode = DataBase.APPEND_MODE;            mode = DataBase.APPEND_MODE;
         else if (modeString.equals("update"))          else if (modeString.equals("update"))
           mode = DataBase.UPDATE_MODE;            mode = DataBase.UPDATE_MODE;
   
         //   if(node3!=null)          //   if(node3!=null)
         // System.out.println(node3.name);          // System.out.println(node3.name);
   
Line 1254  class Convert Line 1353  class Convert
             creates.add("");              creates.add("");
   
         }          }
         databases.add(new DataBase(database, tables, layouts, selects, creates, ids, mode));          DataBase dataBase=new DataBase(database, tables, layouts, selects, creates, ids, mode);
           dataBase.delimiter=delimiter;
           databases.add(dataBase);
       }        }
       DBBean database = new DBBean();        DBBean database = new DBBean();
       // parse dataBase        // parse dataBase
Line 1320  class Convert Line 1421  class Convert
   
     }      }
   }    }
     /**
      * reads the specified xml file
      * @param xmlFile
      */
   public static void readXMLFile(String xmlFile)    public static void readXMLFile(String xmlFile)
   {    {
     try      try
Line 1342  class Convert Line 1447  class Convert
       e.printStackTrace();        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 1350  class Convert Line 1462  class Convert
     Vector layouts;      Vector layouts;
     Vector tables;      Vector tables;
     Vector ids;      Vector ids;
       String delimiter = "//";
     final static int CONVERT_MODE = 1;      final static int CONVERT_MODE = 1;
     final static int APPEND_MODE = 2;      final static int APPEND_MODE = 2;
     final static int UPDATE_MODE = 3;      final static int UPDATE_MODE = 3;
       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 1366  class Convert Line 1481  class Convert
       this.mode = mode;        this.mode = mode;
       this.bean.setIDVector(ids);        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();        // ids=bean.getIDVector();
Line 1373  class Convert Line 1493  class Convert
       buffr.write("      <url>" + bean.url + "</url>\n");        buffr.write("      <url>" + bean.url + "</url>\n");
       buffr.write("      <user>" + bean.user + "</user>\n");        buffr.write("      <user>" + bean.user + "</user>\n");
       buffr.write("      <password>" + bean.passwd + "</password>\n");        buffr.write("      <password>" + bean.passwd + "</password>\n");
         buffr.write("      <delimiter>"+delimiter+"</delimiter>\n");
       String modeString = "";        String modeString = "";
       if (mode == CONVERT_MODE)        if (mode == CONVERT_MODE)
         modeString = "convert";          modeString = "convert";

Removed from v.1.36  
changed lines
  Added in v.1.43


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