Diff for /FM2SQL/Attic/Convert.java between versions 1.64 and 1.83

version 1.64, 2004/07/28 11:21:01 version 1.83, 2004/10/26 08:37:10
Line 1 Line 1
 /*  /*
  * Convert.java -- Converter class -  Filemaker to SQL Converter    * Convert.java -- Converter class - Filemaker to SQL Converter Copyright (C)
  * Copyright (C) 2003 Robert Gordesch (rogo@mpiwg-berlin.mpg.de   * 2003 Robert Gordesch (rogo@mpiwg-berlin.mpg.de) This program is free
  * This program is free software; you can redistribute it and/or modify it   * software; you can redistribute it and/or modify it under the terms of the GNU
  * under the terms of the GNU General Public License as published by the Free   * General Public License as published by the Free Software Foundation; either
  * Software Foundation; either version 2 of the License, or (at your option)   * version 2 of the License, or (at your option) any later version. Please read
  * any later version.  Please read license.txt for the full details. A copy of   * license.txt for the full details. A copy of the GPL may be found at
  * the GPL may be found at http://www.gnu.org/copyleft/lgpl.html  You should   * http://www.gnu.org/copyleft/lgpl.html You should have received a copy of the
  * have received a copy of the GNU General Public License along with this   * GNU General Public License along with this program; if not, write to the Free
  * program; if not, write to the Free Software Foundation, Inc., 59 Temple   * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  * Place, Suite 330, Boston, MA 02111-1307 USA  Created on 15.09.2003 by   * USA Created on 15.09.2003 by rogo
  * rogo    
  */   */
   
 import java.awt.Cursor;  import java.awt.Cursor;
Line 19  import java.io.File; Line 18  import java.io.File;
 import java.io.FileInputStream;  import java.io.FileInputStream;
 import java.io.FileNotFoundException;  import java.io.FileNotFoundException;
 import java.io.FileOutputStream;  import java.io.FileOutputStream;
   import java.io.IOException;
 import java.io.InputStream;  import java.io.InputStream;
 import java.io.InputStreamReader;  import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;  import java.io.OutputStreamWriter;
Line 26  import java.io.PrintStream; Line 26  import java.io.PrintStream;
 import java.io.UnsupportedEncodingException;  import java.io.UnsupportedEncodingException;
 import java.net.URL;  import java.net.URL;
 import java.sql.PreparedStatement;  import java.sql.PreparedStatement;
   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.ParseException;
 import java.util.ArrayList;  import java.util.ArrayList;
   import java.util.Hashtable;
 import java.util.Iterator;  import java.util.Iterator;
 import java.util.List;  import java.util.List;
 import java.util.StringTokenizer;  import java.util.StringTokenizer;
 import java.util.TreeSet;  import java.util.TreeSet;
 import java.util.Vector;  import java.util.Vector;
   
   import javax.swing.JDialog;
   import javax.swing.JLabel;
   import javax.swing.JPanel;
   
 import com.exploringxml.xml.Node;  import com.exploringxml.xml.Node;
 import com.exploringxml.xml.Xparse;  import com.exploringxml.xml.Xparse;
   
 class Convert  class Convert
 {  {
       /**
        * Helper class for index creation
        * 
        * @author rogo
        *  
        */
       public static class IndexList extends Vector
       {
           public String toString()
           {
               StringBuffer buff = new StringBuffer(1000);
               int count = 0;
               for (Iterator iter = this.iterator(); iter.hasNext();)
               {
                   String element = (String) iter.next();
                   if (count < elementCount - 1)
                   {
                       buff.append(element).append(", ");
                       count++;
                   }
                   else
                       buff.append(element);
   
               }
   
               return buff.toString();
           }
       }
   
   static DBBean bean = new DBBean();    static DBBean bean = new DBBean();
   
   static DBBean beanDest = new DBBean();    static DBBean beanDest = new DBBean();
   
   static String user = "", passwd = "e1nste1n";    static String user = "", passwd = "e1nste1n";
   
   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 numHits = 5000;
   final static int numIntervalls = 2;  
   public static void main(String args[])      final static int numIntervalls = 4;
   {  
     /*    try      static boolean debug = false;
         {      
           //byte[] b = "ö".getBytes("UTF-8");      static boolean isGUI = true;
         //  System.out.println("QueryString " +b[0]+" "+b[1]+(new String(b).getBytes()[0])+" "+new String(b).getBytes()[1]);      public static void main(String args[]) throws IOException
         //System.out.println(new String(b,"UTF-8"));  
         } catch (UnsupportedEncodingException e)  
         {          {
           e.printStackTrace();          /*
         }*/           * try { //byte[] b = "ö".getBytes("UTF-8"); //
            * System.out.println("QueryString " +b[0]+" "+b[1]+(new
            * String(b).getBytes()[0])+" "+new String(b).getBytes()[1]);
            * //System.out.println(new String(b,"UTF-8")); } catch
            * (UnsupportedEncodingException e) { e.printStackTrace(); }
            */
           isGUI = false;
     FileOutputStream file = null;      FileOutputStream file = null;
     if (args.length != 1)      if (args.length != 1)
     {      {
Line 68  class Convert Line 113  class Convert
       System.exit(-1);        System.exit(-1);
     }      }
     try      try
     {          {   File temp=File.createTempFile("fm2sql",".txt");
       file = new FileOutputStream("./log.txt");              file = new FileOutputStream(temp);
     } catch (FileNotFoundException e1)          }
           catch (FileNotFoundException e1)
     {      {
       e1.printStackTrace();        e1.printStackTrace();
     }      }
     PrintStream stream = new PrintStream(file);          PrintStream stream = new PrintStream(file, true);
    // System.setOut(stream);          if (!debug)
     //System.setErr(stream);          {
               System.setOut(stream);
               System.setErr(stream);
           }
     readXMLFile(args[0]);      readXMLFile(args[0]);
     if (!(new File(args[0]).exists()))      if (!(new File(args[0]).exists()))
       System.exit(0);        System.exit(0);
Line 85  class Convert Line 133  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, String delimiter) 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;
Line 125  class Convert Line 174  class Convert
           //result = bean.getQueryData(query, null, 0);            //result = bean.getQueryData(query, null, 0);
           bean.getConnection();            bean.getConnection();
           bean.makeQuery(query, 0);            bean.makeQuery(query, 0);
         } catch (Exception e)                  }
                   catch (Exception e)
         {          {
           System.out.println(e.getMessage());            System.out.println(e.getMessage());
           e.printStackTrace();            e.printStackTrace();
Line 150  class Convert Line 200  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 174  class Convert Line 225  class Convert
               for (int i = 0; i < columnNames.size() - 1; ++i)                for (int i = 0; i < columnNames.size() - 1; ++i)
               {                {
                 type = bean.metaData.getColumnTypeName(i + 1);                  type = bean.metaData.getColumnTypeName(i + 1);
                 //   System.out.println(i+" "+result[1].get(i)+" "+type);                                  //   System.out.println(i+" "+result[1].get(i)+"
                                   // "+type);
                 type = (type.equals("NUMBER")) ? "INT4" : type;                  type = (type.equals("NUMBER")) ? "INT4" : type;
                 type = (type.equals("CONTAINER")) ? "TEXT" : type;                  type = (type.equals("CONTAINER")) ? "TEXT" : type;
   
Line 185  class Convert Line 237  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 229  class Convert Line 282  class Convert
         } // 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);        //dialog.setVisible(false);
Line 248  class Convert Line 302  class Convert
   
     //  dialog.setVisible(false);       //  dialog.setVisible(false); 
   }    }
   
   public static String formatFileMakerArray(List list, String delimiter)    public static String formatFileMakerArray(List list, String delimiter)
   {    {
     StringBuffer formattedString = new StringBuffer();      StringBuffer formattedString = new StringBuffer();
Line 259  class Convert Line 314  class Convert
     }      }
     return formattedString.toString();      return formattedString.toString();
   }    }
   
   /**    /**
    * Method for SQL UPDATE     * Method for SQL UPDATE
        * 
    * @param source     * @param source
    * @param destination     * @param destination
    * @param names     * @param names
Line 273  class Convert Line 330  class Convert
    */     */
   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;
     if (FM2SQL.fmInstance != null)          if (isGUI)
     {      {
       dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean);        dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean);
       dialog.setTitle("Conversion running ...");        dialog.setTitle("Conversion running ...");
Line 296  class Convert Line 354  class Convert
     {      {
       //bean.setConnection("jdbc:fmpro:http://141.14.237.74:8050");            //bean.setConnection("jdbc:fmpro:http://141.14.237.74:8050");    
       //bean.setConnection("jdbc:postgresql://erebos/test","postgres","rogo");        //bean.setConnection("jdbc:postgresql://erebos/test","postgres","rogo");
                  System.out.println("before getConnection");
                   
       bean.setConnection(source);        bean.setConnection(source);
                  System.out.println("after getConnection");
                   
       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"));               System.out.println("Start at table "+names.firstElement());
       for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)        for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)
       {        {
         Vector[] result = null;          Vector[] result = null;
Line 323  class Convert Line 385  class Convert
             System.out.println("added layout  " + query);              System.out.println("added layout  " + query);
   
           }            }
                       if (dialog != null)
                       {
           dialog.title.setText("Getting table data ...");            dialog.title.setText("Getting 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();
                       }
           bean.getConnection();            bean.getConnection();
           bean.makeQuery(query, 0);            bean.makeQuery(query, 0);
         } catch (Exception e)  
                   }
                   catch (Exception e)
         {          {
           continue;            continue;
         }          }
         // determine destTableName from createStatement or from source table name                  // determine destTableName from createStatement or from source
                   // table name
         if (!creates.get(tbIndex).equals(""))          if (!creates.get(tbIndex).equals(""))
         {          {
           String create = creates.get(tbIndex).toString().toLowerCase();            String create = creates.get(tbIndex).toString().toLowerCase();
Line 342  class Convert Line 410  class Convert
           destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "").trim();            destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "").trim();
           System.out.println("destTable " + destTableName);            System.out.println("destTable " + destTableName);
   
         } else                  }
                   else
           destTableName = convertText(names.get(tbIndex).toString());            destTableName = convertText(names.get(tbIndex).toString());
   
         //beanDest.setConnection("jdbc:postgresql://erebos/test3");          //beanDest.setConnection("jdbc:postgresql://erebos/test3");
Line 360  class Convert Line 429  class Convert
   
         if (dialog != null)          if (dialog != null)
           dialog.title.setText("Updating table data ...");            dialog.title.setText("Updating table data ...");
                     else System.out.println("Updating table data ...");
         int j = -1;          int j = -1;
   
         Vector row = null;          Vector row = null;
Line 387  class Convert Line 456  class Convert
           j++;            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); if(obj!=null&&!(obj
                 //System.out.println("row "+obj+" "+k);                       * instanceof ArrayList))
              if(obj!=null&&!(obj instanceof ArrayList))                       * command.append("'"+convertUml(obj.toString())+"',"); else
              command.append("'"+convertUml(obj.toString())+"',");                        * 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,"); } obj = row.get(row.size() - 1); if
              else command.append("NULL,");                       * (obj != null && !(obj instanceof ArrayList))
            }                       * command.append("'"+convertUml(obj.toString())+"')"); else
            obj = row.get(row.size() - 1);                       * if(obj!=null&& obj instanceof ArrayList)
            if (obj != null && !(obj instanceof ArrayList))                       * command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"')");
            command.append("'"+convertUml(obj.toString())+"')");                        * //command.append(obj.toString()+")"); else command.append("NULL)");
             else  
             if(obj!=null&&   obj instanceof ArrayList)  
              command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"')");         //command.append(obj.toString()+")");  
              else command.append("NULL)");  
             */              */
           //command.append("'"+row.get(row.size()-1)+"')");             //command.append("'"+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)
   
           // 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);
           for (int k = 0; k < row.size(); ++k)            for (int k = 0; k < row.size(); ++k)
           {            {
Line 430  class Convert Line 495  class Convert
           //stm.executeUpdate(command.toString());            //stm.executeUpdate(command.toString());
           if (dialog != null)            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 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);
       if (dialog != null)        if (dialog != null)
Line 448  class Convert Line 516  class Convert
       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);
               if(dialog!=null)
       FM2SQL.showErrorDialog(b.toString(), "Error occured !");        FM2SQL.showErrorDialog(b.toString(), "Error occured !");
   
     }      }
Line 460  class Convert Line 529  class Convert
     }      }
   
   }    }
   /**  
    *   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  
       
       /**
        * 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 source
    * @param destination     * @param destination
    * @param names     * @param names
Line 480  class Convert Line 551  class Convert
   
     FM2SQL.ProgressDialog dialog = null;      FM2SQL.ProgressDialog dialog = null;
   
     if (FM2SQL.fmInstance != null)          if (isGUI)
     {      {
       dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean);        dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean);
       dialog.setTitle("Conversion running ...");        dialog.setTitle("Conversion running ...");
Line 491  class Convert Line 562  class Convert
       dialog.thread = Thread.currentThread();        dialog.thread = Thread.currentThread();
       dialog.setSize(400, 250);        dialog.setSize(400, 250);
     }      }
       
                  System.out.println("connection established "+source+" "+bean.url);
   
     java.util.TreeSet myIds = new TreeSet();      java.util.TreeSet myIds = new TreeSet();
     int deltaID = 1;      int deltaID = 1;
     String idField = "";      String idField = "";
     String destTableName = "";      String destTableName = "";
     String[] fieldNames = null;      String[] fieldNames = null;
   
     if (source != null && destination != null)      if (source != null && destination != null)
     {      {
       // setting user and passwd         // setting user and passwd 
Line 503  class Convert Line 578  class Convert
       // setting user and passwd         // setting user and passwd 
       beanDest.setUserAndPasswd(userDest, passwdDest);        beanDest.setUserAndPasswd(userDest, passwdDest);
     }      }
   
     StringBuffer command = null;      StringBuffer command = null;
     String query = null;      String query = null;
     try      try
     {      {
   
       if (source != null)        if (source != null)
         bean.setConnection(source);          bean.setConnection(source);
       else        else
         bean.setConnection(bean.url);          bean.setConnection(bean.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"));              // 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;
Line 538  class Convert Line 615  class Convert
   
           }            }
           //  if ( layout!= "")            //  if ( layout!= "")
           //     query += " layout " + bean.getQC() + layout + bean.getQC();                      //   query += " layout " + bean.getQC() + layout +
                       // bean.getQC();
           if (dialog != null)            if (dialog != null)
           {            {
             dialog.title.setText("Reading table data ...");              dialog.title.setText("Reading table data ...");
Line 551  class Convert Line 629  class Convert
           bean.makeQuery(query, 50);            bean.makeQuery(query, 50);
           idField = ids.get(tbIndex).toString();            idField = ids.get(tbIndex).toString();
   
         } catch (Exception e)                  }
                   catch (Exception e)
         {          {
           System.out.println(e);            System.out.println(e);
           continue;            continue;
Line 570  class Convert Line 649  class Convert
         stm = beanDest.getConnection().createStatement();          stm = beanDest.getConnection().createStatement();
         // System.exit(0);          // System.exit(0);
   
         // determine destTableName from createStatement or from source table name                  // determine destTableName from createStatement or from source
                   // table name
         ConversionProperties prop= getFieldNamesAndDestTableName(creates.get(tbIndex).toString(),query,names.get(tbIndex).toString());          ConversionProperties prop= getFieldNamesAndDestTableName(creates.get(tbIndex).toString(),query,names.get(tbIndex).toString());
          destTableName = prop.destTableName;           destTableName = prop.destTableName;
          fieldNames = prop.fieldNames;           fieldNames = prop.fieldNames;
Line 585  class Convert Line 665  class Convert
   
           }            }
           /*            /*
           if(destTableName.equals(""))                       * if(destTableName.equals("")) if (tables.indexOf(names.get(tbIndex)) >=
           if (tables.indexOf(names.get(tbIndex)) >= 0)                       * 0) { stm.executeUpdate("drop table " + beanDest.getQC() +
           {                       * names.get(tbIndex) + beanDest.getQC()); tables.remove((String)
             stm.executeUpdate("drop table " + beanDest.getQC() + names.get(tbIndex) + beanDest.getQC());                       * names.get(tbIndex)); System.out.println("dropped table" +
             tables.remove((String) names.get(tbIndex));                       * names.get(tbIndex)); } else if
             System.out.println("dropped table" + names.get(tbIndex));                       * (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(destTableName) < 0)) //&& 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)
Line 616  class Convert Line 698  class Convert
               for (int i = 0; i < columnNames.size() - 1; ++i)                for (int i = 0; i < columnNames.size() - 1; ++i)
               {                {
                 type = bean.metaData.getColumnTypeName(i + 1);                  type = bean.metaData.getColumnTypeName(i + 1);
                 //   System.out.println(i+" "+result[1].get(i)+" "+type);                                  //   System.out.println(i+" "+result[1].get(i)+"
                                   // "+type);
                 type = (type.equals("NUMBER")) ? "INT4" : type;                  type = (type.equals("NUMBER")) ? "INT4" : type;
                 type = (type.equals("CONTAINER")) ? "TEXT" : type;                  type = (type.equals("CONTAINER")) ? "TEXT" : type;
   
Line 631  class Convert Line 714  class Convert
               // System.out.println(command);                // System.out.println(command);
               //  System.exit(0);                //  System.exit(0);
               //command.append(DBBean.getQC());                   //command.append(DBBean.getQC());   
             } else                          }
                           else
               command = new StringBuffer().append(creates.get(tbIndex).toString().toLowerCase());                command = new StringBuffer().append(creates.get(tbIndex).toString().toLowerCase());
             stm.executeUpdate(command.toString());              stm.executeUpdate(command.toString());
   
Line 647  class Convert Line 731  class Convert
   
         command.append("INSERT  INTO ");          command.append("INSERT  INTO ");
         command.append(beanDest.getQC());          command.append(beanDest.getQC());
         command.append(destTableName); //convertText((String) names.get(tbIndex)));                  command.append(destTableName); //convertText((String)
                   // names.get(tbIndex)));
         command.append(beanDest.getQC());          command.append(beanDest.getQC());
         command.append(" (");          command.append(" (");
         for (int i = 0; i < fieldNames.length; i++)          for (int i = 0; i < fieldNames.length; i++)
Line 671  class Convert Line 756  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 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 742  class Convert Line 828  class Convert
           }            }
           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            // read and write all in one big chunk
           long startTime = System.currentTimeMillis();            long startTime = System.currentTimeMillis();
Line 754  class Convert Line 841  class Convert
   
         }          }
       }        }
     } catch (Exception e)          }
           catch (Exception e)
     {      {
       System.out.println("Error while connecting to database " + e);        System.out.println("Error while connecting to database " + e);
       if (dialog != null)        if (dialog != null)
Line 767  class Convert Line 855  class Convert
         stream.print(command + "\n\n");          stream.print(command + "\n\n");
         e.printStackTrace(stream);          e.printStackTrace(stream);
         FM2SQL.showErrorDialog(b.toString(), "Error occured !");          FM2SQL.showErrorDialog(b.toString(), "Error occured !");
       } else              }
               else
       {        {
         e.printStackTrace();          e.printStackTrace();
   
Line 780  class Convert Line 869  class Convert
       dialog.setVisible(false);        dialog.setVisible(false);
     }      }
   }    }
   
   /**    /**
    * Writes data to the destination table      * Writes data to the destination table 
    * @param dialog  progress dialog       * 
        * @param dialog
        *          progress dialog
    * @param command      * @param command 
    * @param j       data index for progress bar       * @param j
    * @param pstm    prepared statement       *          data index for progress bar
    * @param rowCount number of datasets       * @param pstm
        *          prepared statement
        * @param rowCount
        *          number of datasets
    * @return   command     * @return   command
    * @throws Exception     * @throws Exception
    * @throws SQLException     * @throws SQLException
Line 798  class Convert Line 893  class Convert
     {      {
       j++;        j++;
       // row = (Vector) result[0].get(j);        // row = (Vector) result[0].get(j);
       /*   command = new StringBuffer();              /*
                      * command = new StringBuffer();
            command.append("INSERT  INTO ");               * 
            command.append(beanDest.getQC());               * command.append("INSERT INTO "); command.append(beanDest.getQC());
            command.append(convertText((String) names.get(tbIndex)));               * command.append(convertText((String) names.get(tbIndex)));
            command.append(beanDest.getQC());               * command.append(beanDest.getQC()); command.append(" values ( ");
            command.append(" values ( ");  
         */          */
       //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); if(obj!=null&&!(obj instanceof
           //System.out.println("row "+obj+" "+k);               * ArrayList)) command.append("'"+convertUml(obj.toString())+"',"); else
          if(obj!=null&&!(obj instanceof ArrayList))               * if(obj!=null&& obj instanceof ArrayList)
          command.append("'"+convertUml(obj.toString())+"',");                * command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"',");
          else if(obj!=null&&   obj instanceof ArrayList)               * else command.append("NULL,"); } obj = row.get(row.size() - 1); if (obj !=
          command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"',");                * null && !(obj instanceof ArrayList))
          else command.append("NULL,");               * command.append("'"+convertUml(obj.toString())+"')"); else
        }               * if(obj!=null&& obj instanceof ArrayList)
        obj = row.get(row.size() - 1);               * command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"')");
        if (obj != null && !(obj instanceof ArrayList))               * //command.append(obj.toString()+")"); else command.append("NULL)");
        command.append("'"+convertUml(obj.toString())+"')");   
         else  
         if(obj!=null&&   obj instanceof ArrayList)  
          command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"')");         //command.append(obj.toString()+")");  
          else command.append("NULL)");  
         */          */
       //command.append("'"+row.get(row.size()-1)+"')");         //command.append("'"+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)
   
       // 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);
       for (int k = 0; k < row.size(); ++k)        for (int k = 0; k < row.size(); ++k)
       {        {
Line 844  class Convert Line 933  class Convert
         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);
         else          else
           pstm.setNull(k + 1, Types.NULL);            pstm.setNull(k + 1, Types.NULL);
Line 853  class Convert Line 943  class Convert
       //stm.executeUpdate(command.toString());        //stm.executeUpdate(command.toString());
       if (dialog != null)        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 while loop          } // to while loop    
     return command;      return command;
Line 861  class Convert Line 953  class Convert
   
   /**    /**
    *  removes special characters from the input string as well as .fp5      *  removes special characters from the input string as well as .fp5 
    * @param newName String to change       * 
        * @param newName
        *          String to change
    * @return     * @return
    */     */
   public static String convertText(String newName)    public static String convertText(String newName)
Line 882  class Convert Line 976  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)          if (j < length - 1)
           j = j + 1;            j = j + 1;
       } else if (alterMe.charAt(j) == 'ö')              }
               else 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)          if (j < length - 1)
           j = j + 1;            j = j + 1;
       } else if (alterMe.charAt(j) == 'ü')              }
               else 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)          if (j < length - 1)
           j = j + 1;            j = j + 1;
       } else if (alterMe.charAt(j) == 'ß')              }
               else if (alterMe.charAt(j) == 'ß')
       {        {
         alterMe.setCharAt(j, 's');          alterMe.setCharAt(j, 's');
         alterMe.insert(j + 1, "s");          alterMe.insert(j + 1, "s");
         length = length + 1;          length = length + 1;
         if (j < length - 1)          if (j < length - 1)
           j = j + 1;            j = j + 1;
       } else if (alterMe.charAt(j) == ':')              }
               else if (alterMe.charAt(j) == ':')
       {        {
         if (j < length - 1)          if (j < length - 1)
         {          {
Line 932  class Convert Line 1032  class Convert
           if (j < length - 1)            if (j < length - 1)
             j = j + 1;              j = j + 1;
         }          }
       } else if (alterMe.charAt(j) == '-')              }
               else if (alterMe.charAt(j) == '-')
       {        {
         alterMe.setCharAt(j, '_');          alterMe.setCharAt(j, '_');
   
       } else if (alterMe.charAt(j) == '?')              }
               else if (alterMe.charAt(j) == '?')
       {        {
         // changed ? to _ because of update statement          // changed ? to _ because of update statement
         alterMe.setCharAt(j, '_');          alterMe.setCharAt(j, '_');
         // length = length + 1;          // length = length + 1;
         // j=j+1;          // j=j+1;
         System.out.println(alterMe);          System.out.println(alterMe);
       } else if (alterMe.charAt(j) == '.')              }
               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 957  class Convert Line 1061  class Convert
     }      }
     return alterMe.toString();      return alterMe.toString();
   }    }
   
   /**    /**
    * Converts > and < in an entity (&gt; or &lt;)     * Converts > and < in an entity (&gt; or &lt;)
        * 
    * @param newName     * @param newName
    * @return     * @return
    */     */
Line 979  class Convert Line 1085  class Convert
         if (j < length - 1)          if (j < length - 1)
           j = j + 1;            j = j + 1;
   
       } else if (alterMe.charAt(j) == '<')              }
               else if (alterMe.charAt(j) == '<')
       {        {
         alterMe.setCharAt(j, '&');          alterMe.setCharAt(j, '&');
         alterMe.insert(j + 1, "lt;");          alterMe.insert(j + 1, "lt;");
Line 992  class Convert Line 1099  class Convert
     }      }
     return alterMe.toString();      return alterMe.toString();
   }    }
   
   /**    /**
    * Masks the single quote character '-->\'     * Masks the single quote character '-->\'
        * 
    * @param newName     * @param newName
    * @return     * @return
    */     */
Line 1014  class Convert Line 1123  class Convert
         if (j < length - 1)          if (j < length - 1)
           j = j + 1;            j = j + 1;
       }        }
       /*   else              /*
          if (alterMe.charAt(j) == '"')               * else if (alterMe.charAt(j) == '"') { alterMe.setCharAt(j, '\\');
          {               * alterMe.insert(j + 1, "\""); length = length + 1; if(j <length-1)
          alterMe.setCharAt(j, '\\');               * j=j+1; } else if (alterMe.charAt(j) == '>') { alterMe.setCharAt(j,
          alterMe.insert(j + 1, "\"");               * '\\'); alterMe.insert(j + 1, ">"); length = length + 1; if(j <length-1)
          length = length + 1;               * j=j+1; } else if (alterMe.charAt(j) == ' <') { alterMe.setCharAt(j,
          if(j<length-1) j=j+1;               * '\\'); alterMe.insert(j + 1, " <"); length = length + 1; if(j
          }               * <length-1) j=j+1; } else if (alterMe.charAt(j) == '?') {
         else               * alterMe.setCharAt(j, '\\'); alterMe.insert(j + 1, "?"); length = length +
         if (alterMe.charAt(j) == '>')               * 1; if(j <length-1) j=j+1; } else if (alterMe.charAt(j) == '&') {
          {               * alterMe.setCharAt(j, '\\'); alterMe.insert(j + 1, "&"); length = length +
          alterMe.setCharAt(j, '\\');               * 1; if(j <length-1) j=j+1; } else if (alterMe.charAt(j) == '=') {
          alterMe.insert(j + 1, ">");               * alterMe.setCharAt(j, '\\'); alterMe.insert(j + 1, "="); length = length +
          length = length + 1;               * 1; if(j <length-1) j=j+1; } else if (alterMe.charAt(j) == ',') {
          if(j<length-1) j=j+1;               * alterMe.setCharAt(j, '\\'); alterMe.insert(j + 1, ","); length = length +
          }               * 1; if(j <length-1) j=j+1; } else if (alterMe.charAt(j) == '.') {
         else               * alterMe.setCharAt(j, '\\'); alterMe.insert(j + 1, "."); length = length +
         if (alterMe.charAt(j) == '<')               * 1; if(j <length-1) j=j+1; } else if (alterMe.charAt(j) == '[') {
          {               * alterMe.setCharAt(j, '\\'); alterMe.insert(j + 1, "."); length = length +
          alterMe.setCharAt(j, '\\');               * 1; if(j <length-1) j=j+1; } else if (alterMe.charAt(j) == ']') {
          alterMe.insert(j + 1, "<");               * alterMe.setCharAt(j, '\\'); alterMe.insert(j + 1, "."); length = length +
          length = length + 1;               * 1; if(j <length-1) j=j+1; } else if (alterMe.charAt(j) == '%') {
          if(j<length-1) j=j+1;               * alterMe.setCharAt(j, '\\'); alterMe.insert(j + 1, "%"); length = length +
          }               * 1; if(j <length-1) j=j+1; }
        else               */
        if (alterMe.charAt(j) == '?')  
          {  
          alterMe.setCharAt(j, '\\');  
          alterMe.insert(j + 1, "?");  
          length = length + 1;  
          if(j<length-1) j=j+1;  
          }  
        else  
        if (alterMe.charAt(j) == '&')  
          {  
          alterMe.setCharAt(j, '\\');  
          alterMe.insert(j + 1, "&");  
          length = length + 1;  
          if(j<length-1) j=j+1;  
          }  
        else  
        if (alterMe.charAt(j) == '=')  
          {  
          alterMe.setCharAt(j, '\\');  
          alterMe.insert(j + 1, "=");  
          length = length + 1;  
          if(j<length-1) j=j+1;  
          }  
        else  
        if (alterMe.charAt(j) == ',')  
          {  
          alterMe.setCharAt(j, '\\');  
          alterMe.insert(j + 1, ",");  
          length = length + 1;  
          if(j<length-1) j=j+1;  
          }  
        else  
        if (alterMe.charAt(j) == '.')  
          {  
          alterMe.setCharAt(j, '\\');  
          alterMe.insert(j + 1, ".");  
          length = length + 1;  
          if(j<length-1) j=j+1;  
          }  
        else  
        if (alterMe.charAt(j) == '[')  
          {  
          alterMe.setCharAt(j, '\\');  
          alterMe.insert(j + 1, ".");  
          length = length + 1;  
          if(j<length-1) j=j+1;  
          }  
       else  
        if (alterMe.charAt(j) == ']')  
          {  
          alterMe.setCharAt(j, '\\');  
          alterMe.insert(j + 1, ".");  
          length = length + 1;  
          if(j<length-1) j=j+1;  
          }  
       else  
        if (alterMe.charAt(j) == '%')  
          {  
          alterMe.setCharAt(j, '\\');  
          alterMe.insert(j + 1, "%");  
          length = length + 1;  
          if(j<length-1) j=j+1;  
          }*/  
       ++j;        ++j;
     }      }
     return alterMe.toString();      return alterMe.toString();
   }    }
   
   /**    /**
    * parses the input xml file for batch conversion       * parses the input xml file for batch conversion called from readXMLFile *
    * called from readXMLFile       * 
    * * @param sb       * @param sb
    */     */
   public static void parseXMLConfig(StringBuffer sb)    public static void parseXMLConfig(StringBuffer sb)
   {    {
Line 1125  class Convert Line 1172  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 indexListVec = new Vector();
     String delimiter = "|";      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)        if (tempNode == null)
         throw new Error("parse error source tag missing");          throw new Error("parse error source tag missing");
       System.out.println(tempNode.name);        System.out.println(tempNode.name);
Line 1144  class Convert Line 1193  class Convert
         selects = new Vector();          selects = new Vector();
         creates = new Vector();          creates = new Vector();
         ids = new Vector();          ids = new Vector();
                   indexListVec = new Vector();
         // parse dataBase          // parse dataBase
         Node node = root.find("convert/source/database/url", new int[] { 1, 1, i, 1 });                  Node node = root.find("convert/source/database/url", new int[]
         Node node1 = root.find("convert/source/database/user", new int[] { 1, 1, i, 1, 1 });                  {1, 1, i, 1});
         Node node2 = root.find("convert/source/database/password", new int[] { 1, 1, i, 1, 1 });                  Node node1 = root.find("convert/source/database/user", new int[]
         Node node3 = root.find("convert/source/database", new int[] { 1, 1, i });                  {1, 1, i, 1, 1});
         Node nodeMode = root.find("convert/source/database/mode", new int[] { 1, 1, i, 1, 1 });                  Node node2 = root.find("convert/source/database/password", new int[]
         Node delimiterNode = root.find("convert/source/database/delimiter", new int[] { 1, 1, i, 1, 1 });                  {1, 1, i, 1, 1});
         Node useNormanToUnicodeMapper = root.find("convert/source/database/usenormantounicodemapper", new int[] { 1, 1, i, 1, 1 });                  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 delimiterNode = root.find("convert/source/database/delimiter", new int[]
                   {1, 1, i, 1, 1});
                   Node useNormanToUnicodeMapper = root.find("convert/source/database/usenormantounicodemapper", 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");
Line 1202  class Convert Line 1259  class Convert
   
         for (int j = 1; j <= length2; ++j)          for (int j = 1; j <= length2; ++j)
         {          {
           Node node4 = root.find("convert/source/database/table", new int[] { 1, 1, i, j });                      Node node4 = root.find("convert/source/database/table", new int[]
           Node node5 = root.find("convert/source/database/table/select", new int[] { 1, 1, i, j, 1 });                      {1, 1, i, j});
           Node node6 = root.find("convert/source/database/table/create", new int[] { 1, 1, i, j, 1 });                      Node node5 = root.find("convert/source/database/table/select", new int[]
                       {1, 1, i, j, 1});
                       Node node6 = root.find("convert/source/database/table/create", new int[]
                       {1, 1, i, j, 1});
           if (node4 != null)            if (node4 != null)
             System.out.println(node4.name + " " + node4.attributes.get("layout").equals(""));              System.out.println(node4.name + " " + node4.attributes.get("layout").equals(""));
           if (node5 != null)            if (node5 != null)
Line 1213  class Convert Line 1273  class Convert
             System.out.println(node6.name + " " + node6.getCharacters());              System.out.println(node6.name + " " + node6.getCharacters());
           if (node4 == null)            if (node4 == null)
             throw new Error("parse error table tag missing");              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
           // if(node6==null) throw new Error("parse error create tag missing");                      // 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");
                       String indexList = (String) node4.attributes.get("indexList");
   
           System.out.println("id was " + id);            System.out.println("id was " + id);
           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 1225  class Convert Line 1289  class Convert
             layout = "";              layout = "";
           if (id == null)            if (id == null)
             id = "";              id = "";
                       if (indexList == null)
                           indexList = "";
           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);            tables.add(name);
           layouts.add(layout);            layouts.add(layout);
   
           ids.add(id);            ids.add(id);
                       indexListVec.add(indexList);
           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 1243  class Convert Line 1311  class Convert
         }          }
         DataBase dataBase = new DataBase(database, tables, layouts, selects, creates, ids, mode);          DataBase dataBase = new DataBase(database, tables, layouts, selects, creates, ids, mode);
         dataBase.delimiter = delimiter;          dataBase.delimiter = delimiter;
                   dataBase.buildIndexTable(indexListVec);
         databases.add(dataBase);          databases.add(dataBase);
       }        }
       DBBean database = new DBBean();        DBBean database = new DBBean();
       // parse dataBase        // parse dataBase
       Node node = root.find("convert/destination/database/url", new int[] { 1, 1, 1, 1 });              Node node = root.find("convert/destination/database/url", new int[]
       Node node1 = root.find("convert/destination/database/user", new int[] { 1, 1, 1, 1, 1 });              {1, 1, 1, 1});
       Node node2 = root.find("convert/destination/database/password", new int[] { 1, 1, 1, 1, 1 });              Node node1 = root.find("convert/destination/database/user", new int[]
               {1, 1, 1, 1, 1});
               Node node2 = root.find("convert/destination/database/password", new int[]
               {1, 1, 1, 1, 1});
       String url = node.getCharacters();        String url = node.getCharacters();
       String user = node1.getCharacters();        String user = node1.getCharacters();
       String password = node2.getCharacters();        String password = node2.getCharacters();
       System.out.println(url);              System.out.println(" The url is "+url);
       database.setURL(url.trim());        database.setURL(url.trim());
       database.setUserAndPasswd(user.trim(), password.trim());        database.setUserAndPasswd(user.trim(), password.trim());
               System.out.println("huhu");
       //databases.add(database);        //databases.add(database);
       for (Iterator iter = databases.iterator(); iter.hasNext();)        for (Iterator iter = databases.iterator(); iter.hasNext();)
       {        {
                   System.out.println("huhu argghhhh"+(mode == DataBase.CONVERT_MODE)+" mode is "+mode);
                   
         DataBase db = (DataBase) iter.next();          DataBase db = (DataBase) iter.next();
         if (mode == DataBase.CONVERT_MODE || mode == DataBase.APPEND_MODE)          if (mode == DataBase.CONVERT_MODE || mode == DataBase.APPEND_MODE)
           convertBatch(db.bean, database, db.tables, db.layouts, db.selects, db.creates, db.ids, mode, db.delimiter);            convertBatch(db.bean, database, db.tables, db.layouts, db.selects, db.creates, db.ids, mode, db.delimiter);
         else                  else if (mode == DataBase.UPDATE_MODE)
         if (mode == DataBase.UPDATE_MODE)                  {
                       System.out.println("huhu arghhh arghhh arghhh");
                       
                       Convert.user = db.bean.user;
                       Convert.passwd = db.bean.passwd;
                       userDest = database.user;
                       passwdDest = database.passwd;
   
             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);
                   }
         else if(mode==DataBase.SYNCHRONIZE_MODE)          else if(mode==DataBase.SYNCHRONIZE_MODE)
         {          {
           user =bean.user;                      Convert.user = db.bean.user;
           passwd =bean.passwd;                      Convert.passwd = db.bean.passwd;
           userDest =database.user;            userDest =database.user;
           passwdDest =database.passwd;            passwdDest =database.passwd;
                       
           synchronize(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates, db.ids, mode);                      synchronize(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates, db.ids, mode, db.delimiter, new Vector(db.htIndex.values()));
         }           } 
       }        }
       // printContents(node3);        // printContents(node3);
       //   FM2SQL.fmInstance=new FM2SQL();        //   FM2SQL.fmInstance=new FM2SQL();
     } catch (Exception e)          }
           catch (Exception e)
     {      {
   
       e.printStackTrace();        e.printStackTrace();
   
           } finally
           {
               bean.closeAllConnections();
               beanDest.closeAllConnections();
     }      }
   }    }
   
   public static Vector getXMLConfig(String xmlFile)    public static Vector getXMLConfig(String xmlFile)
   {    {
     StringBuffer sb = null;      StringBuffer sb = null;
Line 1301  class Convert Line 1391  class Convert
         // System.out.print((char)c);          // System.out.print((char)c);
       }        }
   
     } catch (Exception e)          }
           catch (Exception e)
     {      {
       e.printStackTrace();        e.printStackTrace();
     }      }
Line 1322  class Convert Line 1413  class Convert
     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)        if (tempNode == null)
         throw new Error("parse error source tag missing");          throw new Error("parse error source tag missing");
       System.out.println(tempNode.name);        System.out.println(tempNode.name);
Line 1337  class Convert Line 1429  class Convert
         creates = new Vector();          creates = new Vector();
         ids = new Vector();          ids = new Vector();
         // parse dataBase          // parse dataBase
         Node node = root.find("convert/source/database/url", new int[] { 1, 1, i, 1 });                  Node node = root.find("convert/source/database/url", new int[]
         Node node1 = root.find("convert/source/database/user", new int[] { 1, 1, i, 1, 1 });                  {1, 1, i, 1});
         Node node2 = root.find("convert/source/database/password", new int[] { 1, 1, i, 1, 1 });                  Node node1 = root.find("convert/source/database/user", new int[]
         Node node3 = root.find("convert/source/database", new int[] { 1, 1, i });                  {1, 1, i, 1, 1});
         Node nodeMode = root.find("convert/source/database/mode", new int[] { 1, 1, i, 1, 1 });                  Node node2 = root.find("convert/source/database/password", new int[]
         Node delimiterNode = root.find("convert/source/database/delimiter", new int[] { 1, 1, i, 1, 1 });                  {1, 1, i, 1, 1});
         Node useNormanToUnicodeMapper = root.find("convert/source/database/usenormantounicodemapper", new int[] { 1, 1, i, 1, 1 });                  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 delimiterNode = root.find("convert/source/database/delimiter", new int[]
                   {1, 1, i, 1, 1});
                   Node useNormanToUnicodeMapper = root.find("convert/source/database/usenormantounicodemapper", new int[]
                   {1, 1, i, 1, 1});
   
         if (delimiterNode != null)          if (delimiterNode != null)
           delimiter = delimiterNode.getCharacters();            delimiter = delimiterNode.getCharacters();
Line 1383  class Convert Line 1482  class Convert
         else if (modeString.equals("delete"))          else if (modeString.equals("delete"))
           mode = DataBase.DELETE_MODE;            mode = DataBase.DELETE_MODE;
   
                   else if (modeString.equals("synchronize"))
                       mode = DataBase.SYNCHRONIZE_MODE;
         //   if(node3!=null)          //   if(node3!=null)
         // System.out.println(node3.name);          // System.out.println(node3.name);
   
Line 1392  class Convert Line 1493  class Convert
   
         for (int j = 1; j <= length2; ++j)          for (int j = 1; j <= length2; ++j)
         {          {
           Node node4 = root.find("convert/source/database/table", new int[] { 1, 1, i, j });                      Node node4 = root.find("convert/source/database/table", new int[]
           Node node5 = root.find("convert/source/database/table/select", new int[] { 1, 1, i, j, 1 });                      {1, 1, i, j});
           Node node6 = root.find("convert/source/database/table/create", new int[] { 1, 1, i, j, 1 });                      Node node5 = root.find("convert/source/database/table/select", new int[]
                       {1, 1, i, j, 1});
                       Node node6 = root.find("convert/source/database/table/create", new int[]
                       {1, 1, i, j, 1});
           if (node4 != null)            if (node4 != null)
             System.out.println(node4.name + " " + node4.attributes.get("layout").equals(""));              System.out.println(node4.name + " " + node4.attributes.get("layout").equals(""));
           if (node5 != null)            if (node5 != null)
Line 1403  class Convert Line 1507  class Convert
             System.out.println(node6.name + " " + node6.getCharacters());              System.out.println(node6.name + " " + node6.getCharacters());
           if (node4 == null)            if (node4 == null)
             throw new Error("parse error table tag missing");              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
           // if(node6==null) throw new Error("parse error create tag missing");                      // 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");
Line 1438  class Convert Line 1544  class Convert
       }        }
       DBBean database = new DBBean();        DBBean database = new DBBean();
       // parse dataBase        // parse dataBase
       Node node = root.find("convert/destination/database/url", new int[] { 1, 1, 1, 1 });              Node node = root.find("convert/destination/database/url", new int[]
       Node node1 = root.find("convert/destination/database/user", new int[] { 1, 1, 1, 1, 1 });              {1, 1, 1, 1});
       Node node2 = root.find("convert/destination/database/password", new int[] { 1, 1, 1, 1, 1 });              Node node1 = root.find("convert/destination/database/user", new int[]
               {1, 1, 1, 1, 1});
               Node node2 = root.find("convert/destination/database/password", new int[]
               {1, 1, 1, 1, 1});
       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 1449  class Convert Line 1558  class Convert
       database.setUserAndPasswd(user.trim(), password.trim());        database.setUserAndPasswd(user.trim(), password.trim());
       databases.add(new DataBase(database, null, null, null, null, null, 0));        databases.add(new DataBase(database, null, null, null, null, null, 0));
       //databases.add(database);        //databases.add(database);
       /*    for (Iterator iter = databases.iterator(); iter.hasNext();)              /*
          {               * for (Iterator iter = databases.iterator(); iter.hasNext();) { DataBase
            DataBase db = (DataBase) iter.next();               * db = (DataBase) iter.next();
            convertBatch(db.bean,database,db.tables,db.layouts,db.selects,db.creates);               * convertBatch(db.bean,database,db.tables,db.layouts,db.selects,db.creates); }
                          */
          }*/  
       // printContents(node3);        // printContents(node3);
       //   FM2SQL.fmInstance=new FM2SQL();        //   FM2SQL.fmInstance=new FM2SQL();
     } catch (Exception e)          }
           catch (Exception e)
     {      {
       // TODO Auto-generated catch block        // TODO Auto-generated catch block
       e.printStackTrace();        e.printStackTrace();
Line 1479  class Convert Line 1588  class Convert
           length++;            length++;
       }        }
   
       // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+" "+i);              // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+"
               // "+i);
     }      }
     return length;      return length;
   }    }
   
   private static void printContents(Node root)    private static void printContents(Node root)
   {    {
   
Line 1499  class Convert Line 1610  class Convert
       // System.out.println(n.type);        // System.out.println(n.type);
     }      }
   }    }
   
   /**    /**
    * reads the specified xml file     * reads the specified xml file
        * 
    * @param xmlFile     * @param xmlFile
    */     */
   public static void readXMLFile(String xmlFile)    public static void readXMLFile(String xmlFile)
Line 1528  class Convert Line 1641  class Convert
         // System.out.print((char)c);          // System.out.print((char)c);
       }        }
       parseXMLConfig(sb);        parseXMLConfig(sb);
     } catch (Exception e)          }
           catch (Exception e)
     {      {
       e.printStackTrace();        e.printStackTrace();
     }      }
   }    }
   
   /**    /**
      * Helper class for Conversion etc       * Helper class for Conversion etc Holds the some data
      * Holds the some data       * 
      * @author rogo       * @author rogo
      *       *
      */       */
Line 1543  class Convert Line 1658  class Convert
   public static class ConversionProperties     public static class ConversionProperties 
   {    {
     String destTableName;      String destTableName;
   
     String[] fieldNames ;      String[] fieldNames ;
   
     public ConversionProperties()       public ConversionProperties() 
     {      {
     }      }
   
     public ConversionProperties(String destTableName, String[] fieldNames)       public ConversionProperties(String destTableName, String[] fieldNames) 
     {      {
       this.destTableName = destTableName;        this.destTableName = destTableName;
Line 1555  class Convert Line 1673  class Convert
     }      }
       
   }    }
   
   /**    /**
    * Helper class for XML-File parsing       * Helper class for XML-File parsing Holds the parsed data
    * Holds the parsed data       * 
    * @author rogo     * @author rogo
    *     *
    */     */
   public static class DataBase    public static class DataBase
   {    {
     DBBean bean;      DBBean bean;
   
     Vector creates;      Vector creates;
   
     Vector selects;      Vector selects;
   
     Vector layouts;      Vector layouts;
   
     Vector tables;      Vector tables;
   
     Vector ids;      Vector ids;
   
     String delimiter = "//";      String delimiter = "//";
   
           /**
            * maps table name to index fields
            */
           Hashtable htIndex = new Hashtable();
   
     boolean useNormanToUnicodeMapper = false;      boolean useNormanToUnicodeMapper = false;
           
     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;      final static int DELETE_MODE = 4;
   
     final static int SYNCHRONIZE_MODE = 5;      final static int SYNCHRONIZE_MODE = 5;
     
     int mode = -1;      int mode = -1;
Line 1591  class Convert Line 1726  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 indexListVec
      * * @param buffr           */
           public void buildIndexTable(Vector indexListVec)
           {
               for (int i = 0; i < tables.size(); i++)
               {
                   fillIndexList((String) tables.get(i), (String) indexListVec.get(i));
               }
           }
   
           /**
            * writes the data contained in this object to the buffered writer *
            * 
            * @param buffr
      * @throws Exception       * @throws Exception
      */       */
     public void exportToXML(BufferedWriter buffr) throws Exception      public void exportToXML(BufferedWriter buffr) throws Exception
Line 1613  class Convert Line 1761  class Convert
         modeString = "update";          modeString = "update";
       else if (mode == DELETE_MODE)        else if (mode == DELETE_MODE)
         modeString = "delete";          modeString = "delete";
               else if (mode == SYNCHRONIZE_MODE)
                   modeString = "synchronize";
   
       buffr.write("      <mode>" + modeString + "</mode>\n");        buffr.write("      <mode>" + modeString + "</mode>\n");
       buffr.write("      <usenormantounicodemapper>" + useNormanToUnicodeMapper + "</usenormantounicodemapper>\n");        buffr.write("      <usenormantounicodemapper>" + useNormanToUnicodeMapper + "</usenormantounicodemapper>\n");
Line 1625  class Convert Line 1775  class Convert
         String select = (String) selects.get(index);          String select = (String) selects.get(index);
         String create = (String) creates.get(index);          String create = (String) creates.get(index);
         String id = (String) ids.get(index);          String id = (String) ids.get(index);
                   IndexList indexList = (IndexList) htIndex.get(table);
         buffr.write("      <table name = \"" + table + "\" layout = \"" + layout + "\" id = \"" + id + "\" >\n");                  if (indexList == null)
                       indexList = new IndexList();
                   buffr.write("      <table name = \"" + table + "\" layout = \"" + layout + "\" id = \"" + id + "\" indexList =\"" + indexList + "\">\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 1635  class Convert Line 1787  class Convert
       }        }
       buffr.write("    </database>\n");        buffr.write("    </database>\n");
     }      }
   
           public void fillIndexList(String table, String list)
           {
               IndexList indexList = new IndexList();
               StringTokenizer tokenizer = new StringTokenizer(list, ",");
               while (tokenizer.hasMoreTokens())
               {
                   indexList.add(tokenizer.nextToken());
               }
               System.out.println(indexList);
   
               htIndex.put(table, indexList);
           }
   
     public String toString()      public String toString()
     {      {
       return bean.url + " " + tables;        return bean.url + " " + tables;
     }      }
   
   }    }
   
   public static String convertToUTF8(Object command)    public static String convertToUTF8(Object command)
   {    {
     String str = null;      String str = null;
     try      try
     {      {
       str = new String(command.toString().getBytes("UTF-8"));        str = new String(command.toString().getBytes("UTF-8"));
     } catch (UnsupportedEncodingException e)          }
           catch (UnsupportedEncodingException e)
     {      {
       // TODO Auto-generated catch block        // TODO Auto-generated catch block
       e.printStackTrace();        e.printStackTrace();
     }      }
     return str;      return str;
   }    }
   
   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"))      if (!file.toLowerCase().endsWith(".xml"))
Line 1675  class Convert Line 1844  class Convert
     buffw.write("</convert>\n");      buffw.write("</convert>\n");
     buffw.close();      buffw.close();
   }    }
   
   public static void delete(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode) throws Exception    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;      FM2SQL.ProgressDialog dialog = null;
     if (FM2SQL.fmInstance != null)          if (isGUI)
     {      {
       dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean);        dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean);
       dialog.setTitle("Conversion running ...");        dialog.setTitle("Conversion running ...");
Line 1706  class Convert Line 1876  class Convert
       // Collections.sort(names);        // Collections.sort(names);
       int tbIndex = 1;        int tbIndex = 1;
   
       // System.out.println("Start at "+names.indexOf("archimedes_facsimiles"));              // 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;
Line 1740  class Convert Line 1911  class Convert
           bean.makeQuery(query, 50);            bean.makeQuery(query, 50);
           idField = ids.get(tbIndex).toString();            idField = ids.get(tbIndex).toString();
   
         } catch (Exception e)                  }
                   catch (Exception e)
         {          {
           continue;            continue;
         }          }
         // determine destTableName from createStatement or from source table name                  // determine destTableName from createStatement or from source
                   // table name
         if (!creates.get(tbIndex).equals(""))          if (!creates.get(tbIndex).equals(""))
         {          {
           String create = creates.get(tbIndex).toString().toLowerCase();            String create = creates.get(tbIndex).toString().toLowerCase();
Line 1753  class Convert Line 1926  class Convert
           destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "").trim();            destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "").trim();
           System.out.println("destTable " + destTableName);            System.out.println("destTable " + destTableName);
   
         } else                  }
                   else
           destTableName = convertText(names.get(tbIndex).toString());            destTableName = convertText(names.get(tbIndex).toString());
   
         // for id kram          // for id kram
Line 1769  class Convert Line 1943  class Convert
         String tempQuery = query;          String tempQuery = query;
         String destQuery = query.replaceAll(names.get(tbIndex).toString(), destTableName);          String destQuery = query.replaceAll(names.get(tbIndex).toString(), destTableName);
         String tempQueryDest = destQuery;          String tempQueryDest = destQuery;
         // remove extra query parts destQuery.substring(0,destQuery.lastIndexOf(destTableName)+destTableName.length()+1);                  // remove extra query parts
                   // destQuery.substring(0,destQuery.lastIndexOf(destTableName)+destTableName.length()+1);
         System.out.println("new Query " + tempQueryDest);          System.out.println("new Query " + tempQueryDest);
         if (!idField.equals(""))          if (!idField.equals(""))
         {          {
Line 1794  class Convert Line 1969  class Convert
             Vector linesToDelete = new Vector(vecDest);              Vector linesToDelete = new Vector(vecDest);
             // remove all lines that should not be deleted              // remove all lines that should not be deleted
             linesToDelete.removeAll(deleted);              linesToDelete.removeAll(deleted);
             // System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIdsDest.size());                          // System.out.println("ID LIST SIZE " +
             /// @TODO complete delete task remove query show lines to be deleted let user choose if he wants that                          // 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());              System.out.println("number of lines to  be deleted " + linesToDelete.size());
             deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls);              deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls);
             beanDest.setConnection(destination);              beanDest.setConnection(destination);
Line 1820  class Convert Line 1998  class Convert
             command.append("DELETE FROM");              command.append("DELETE FROM");
             command.append(beanDest.getQC());              command.append(beanDest.getQC());
             command.append(destTableName);              command.append(destTableName);
             //command.append(convertText((String) names.get(tbIndex)));                          //command.append(convertText((String)
                           // names.get(tbIndex)));
             command.append(beanDest.getQC());              command.append(beanDest.getQC());
             int size = bean.getColumnNames().size();              int size = bean.getColumnNames().size();
             command.append("WHERE " + convertText(ids.get(tbIndex).toString()) + " =  ?");              command.append("WHERE " + convertText(ids.get(tbIndex).toString()) + " =  ?");
             PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString());              PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString());
             System.out.println(command + " " + tbIndex);              System.out.println(command + " " + tbIndex);
             //int rowCount = bean.getRowCount(query);              //int rowCount = bean.getRowCount(query);
             //        int idIndex = bean.getColumnNames().indexOf(ids.get(tbIndex));                          //        int idIndex =
                           // bean.getColumnNames().indexOf(ids.get(tbIndex));
             while (true)              while (true)
             {              {
   
Line 1852  class Convert Line 2032  class Convert
         } // to idfield if            } // to idfield if  
       } // table loop        } // table loop
   
     } catch (Exception e)          }
           catch (Exception e)
     {      {
       System.out.println("Error while connecting to database " + e);        System.out.println("Error while connecting to database " + e);
       if (dialog != null)        if (dialog != null)
Line 1877  class Convert Line 2058  class Convert
     }      }
   } // to method    } // to method
       
     
   /**    /**
    * synchronize method based on delete method code     * synchronize method based on delete method code
    *      * 
Line 1893  class Convert Line 2073  class Convert
    */     */
   // TODO implement append,update and delete in one method    // TODO implement append,update and delete in one method
   // TODO using id based algorithm    // TODO using id based algorithm
   public static void synchronize(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode) throws Exception      public static void synchronize(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode, String delimiter, Vector indexList)
               throws Exception
   {    {
     System.out.println(" bin in synchronize!!!");      System.out.println(" bin in synchronize!!!");
     FM2SQL.ProgressDialog dialog = null;      FM2SQL.ProgressDialog dialog = null;
     if (FM2SQL.fmInstance != null)          if (isGUI)
     {      {
       dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean);        dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean);
       dialog.setTitle("Synchronize running ...");        dialog.setTitle("Synchronize running ...");
Line 1925  class Convert Line 2106  class Convert
       // Collections.sort(names);        // Collections.sort(names);
       int tbIndex = 1;        int tbIndex = 1;
   
       // System.out.println("Start at "+names.indexOf("archimedes_facsimiles"));              // 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;
Line 1951  class Convert Line 2133  class Convert
             System.out.println("added layout  " + query);              System.out.println("added layout  " + query);
   
           }            }
           if(dialog!=null) {                      if (dialog != null)
                       {
           dialog.title.setText("Getting table data ...");            dialog.title.setText("Getting 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());
Line 1961  class Convert Line 2144  class Convert
           bean.makeQuery(query, 50);            bean.makeQuery(query, 50);
           idField = ids.get(tbIndex).toString();            idField = ids.get(tbIndex).toString();
   
         } catch (Exception e)                  }
                   catch (Exception e)
         {          {
           continue;            continue;
         }          }
         // determine destTableName from createStatement or from source table name                  // determine destTableName from createStatement or from source
                   // table name
         if (!creates.get(tbIndex).equals(""))          if (!creates.get(tbIndex).equals(""))
         {          {
           String create = creates.get(tbIndex).toString().toLowerCase();            String create = creates.get(tbIndex).toString().toLowerCase();
Line 1974  class Convert Line 2159  class Convert
           destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "").trim();            destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "").trim();
           System.out.println("destTable " + destTableName);            System.out.println("destTable " + destTableName);
   
         } else                  }
                   else
           destTableName = convertText(names.get(tbIndex).toString());            destTableName = convertText(names.get(tbIndex).toString());
   
         // for id kram          // for id kram
Line 1989  class Convert Line 2175  class Convert
         int endIndex = -1;          int endIndex = -1;
         String tempQuery = query;          String tempQuery = query;
         String destQuery = query.replaceAll(names.get(tbIndex).toString(), destTableName);          String destQuery = query.replaceAll(names.get(tbIndex).toString(), destTableName);
                   destQuery = destQuery.replaceAll(bean.getQC(), beanDest.getQC());
                   destQuery = removeLayoutPartFromQuery(destQuery, layouts.get(tbIndex).toString());
                   // TODO remove layout part for destQuery
         String tempQueryDest = destQuery;          String tempQueryDest = destQuery;
         // remove extra query parts destQuery.substring(0,destQuery.lastIndexOf(destTableName)+destTableName.length()+1);                  // remove extra query parts
                   // 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());
         if (!idField.equals(""))          if (!idField.equals(""))
         {          {
           long startTime = System.currentTimeMillis();            long startTime = System.currentTimeMillis();
           int counter = -1;            int counter = -1;
                       TreeSet linesToDelete = null;
                       PreparedStatement delPSt = null;
           while (true)            while (true)
           {            {
             ++counter;              ++counter;
Line 2003  class Convert Line 2196  class Convert
               dialog.title.setText("Check if data  is available");                dialog.title.setText("Check if data  is available");
             else if (dialog != null)              else if (dialog != null)
               dialog.title.setText("Check if more  data  is available");                dialog.title.setText("Check if more  data  is available");
             myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex), tempQuery, numHits);  
             myIdsDest = beanDest.getIDVector(convertText(idField), destTableName, tempQueryDest, numHits);                          myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex), tempQuery, 0);
                           myIdsDest = beanDest.getIDVector(convertText(idField), destTableName, tempQueryDest, 0);
                           //System.out.println("status of remove
                           // "+myIds.remove("b015892"));
                           System.out.println("ids found for " + idField + " " + !myIds.isEmpty());
             if (myIds.isEmpty())              if (myIds.isEmpty())
               break;                break;
             vec = new Vector(myIds);              vec = new Vector(myIds);
Line 2012  class Convert Line 2209  class Convert
             rowCount = vec.size();              rowCount = vec.size();
             // Deletion will work this way              // Deletion will work this way
             Vector deleted = new Vector(vec);              Vector deleted = new Vector(vec);
             Vector linesToDelete = new Vector(vecDest);  
                           
             TreeSet linesToAppend = new TreeSet(vec);              TreeSet linesToAppend = new TreeSet(vec);
                           linesToAppend.addAll(vec);
                           linesToDelete = new TreeSet(vecDest);
             // remove all lines that are already in dest database              // remove all lines that are already in dest database
             linesToAppend.removeAll(vecDest);              linesToAppend.removeAll(vecDest);
             // remove all lines that should not be deleted              // remove all lines that should not be deleted
             linesToDelete.removeAll(deleted);              linesToDelete.removeAll(deleted);
             System.out.println("linesToAppend "+linesToAppend+" "+vecDest+" "+destTableName);                          System.out.println("linesToAppend " + linesToAppend.size() + " " + destTableName);
             System.out.println("linesToDelete "+linesToDelete+" "+vecDest+" "+destTableName);                          System.out.println("linesToDelete " + linesToDelete.size() + " " + destTableName);
              // prepare new query for next chunk                          System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIds.size());
                 if (query.indexOf("where") > 0)                          deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls);
                   tempQuery = query + " and " + tempID + ">='" + vec.firstElement() + "' and "+tempID + "<='" + vec.lastElement() + "' order by "+tempID;                          ConversionProperties prop = getFieldNamesAndDestTableName(creates.get(tbIndex).toString(), query, names.get(tbIndex).toString());
                 else                          StringBuffer insCommand = createInsertCommand(prop.destTableName, prop.fieldNames);
                   tempQuery = query + " where " + tempID + ">='" + vec.firstElement() + "' and "+tempID + "<='" + vec.lastElement() + "'";// order by "+tempID;                          StringBuffer updCommand = createUpdateCommand(prop.destTableName, prop.fieldNames, tempIDdest);
                   System.out.println("tempQuery is now "+tempQuery+" order by "+tempID);                          StringBuffer delCommand = createDeleteCommand(destTableName, tempIDdest);
           //  bean.makeQuery(tempQuery,vec.size());                          PreparedStatement insPst = beanDest.getConnection().prepareStatement(insCommand.toString());
            Vector[] vectors=bean.getQueryData(tempQuery,vec.size());                          PreparedStatement updPst = beanDest.getConnection().prepareStatement(updCommand.toString());
            int idIndex = vectors[1].indexOf(idField);                          delPSt = beanDest.getConnection().prepareStatement(delCommand.toString());
            for (Iterator iter = vectors[0].iterator(); iter.hasNext();)                          //    delPSt.setString(1,"b015892");
                           //   delPSt.execute();
                           //  if (true)
                           //  return;
                           if (vec.size() <= numIntervalls)
           {            {
             Vector line = (Vector) iter.next();                              endIndex = 0;
             System.out.println("line "+linesToAppend.contains(line.get(idIndex)));                              deltaID = vec.size();
           }            }
            System.out.println( );                          for (int k = 0; k < vec.size() - deltaID; k = k + deltaID)
             // 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(vec.get(k) + " " + vec.get(k + deltaID) + " " + vec.lastElement());
             System.out.println("number of lines to  be deleted " + linesToDelete.size());                              if (query.indexOf("where") > 0)
             deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls);                                  tempQuery = query + " and " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID) + "'";
             System.out.println("deltaID "+deltaID);                              else
             System.exit(0);                                  tempQuery = query + " where " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID) + "'";
                                  System.out.println(tempQuery);
             beanDest.setConnection(destination);  
   
             Statement stm = beanDest.getConnection().createStatement();  
   
             Vector tables = beanDest.getTableNames();  
             // Collections.sort(tables);  
             System.out.println(names.get(tbIndex) + " " + tables.indexOf(convertText((String) names.get(tbIndex)))); // "//beanDest.getTypeNames());   
             tables = beanDest.getTableNames();  
             // System.out.println(beanDest.getTableNames(beanDest.getCatalogs().get(2).toString()));  
             stm = beanDest.getConnection().createStatement();  
   
             if (dialog != null)              if (dialog != null)
               dialog.title.setText(" Deleting table data ...");                                  dialog.title.setText("Reading table data ...");
   
             int j = -1;  
   
             Vector row = null;                              // bean.makeQuery(tempQuery, deltaID);
             command = new StringBuffer();                              if (dialog != null)
                                   dialog.title.setText("Writing table data ...");
   
             command.append("DELETE FROM");                              performSynchronize(idField, vec, tempQuery, linesToDelete, linesToAppend, insPst, updPst, delPSt, deltaID, delimiter, dialog);
             command.append(beanDest.getQC());                              // System.out.println("ID LIST SIZE " +
             command.append(destTableName);                              // Math.round((double) myIds.size() / (double)
             //command.append(convertText((String) names.get(tbIndex)));                              // numIntervalls) + " " + myIdsDest.size());
             command.append(beanDest.getQC());                              endIndex = k + deltaID;
             int size = bean.getColumnNames().size();                          }
             command.append("WHERE " + convertText(ids.get(tbIndex).toString()) + " =  ?");                          System.out.println(endIndex);
             PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString());                          //all data written ? if not write last chunk of data
             System.out.println(command + " " + tbIndex);                          if (endIndex == vec.size() - 1)
             //int rowCount = bean.getRowCount(query);                              System.out.println("fits");
             //        int idIndex = bean.getColumnNames().indexOf(ids.get(tbIndex));                          else
             while (true)  
             {              {
                               System.out.println(" last intervall from " + vec.get(endIndex) + " " + vec.lastElement());
   
               ++j;                              if (query.indexOf("where") > 0)
               if (j == linesToDelete.size())                                  tempQuery = query + " and " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement() + "'";
                 break;                              else
               //print rows                                  tempQuery = query + " where " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement() + "'";
               pstm.setString(1, linesToDelete.get(j).toString());                              System.out.println(tempQuery);
               System.out.println(pstm.toString());  
               pstm.execute();  
               if (dialog != null)                if (dialog != null)
                 dialog.progress.setValue((int) (((double) (j + 1) / (double) rowCount) * 100.0));                                  dialog.title.setText("Reading table data ...");
               command = null;                              //    bean.makeQuery(tempQuery, 0);
                               if (dialog != null)
                                   dialog.title.setText("Writing table data ...");
                               performSynchronize(idField, vec, tempQuery, linesToDelete, linesToAppend, insPst, updPst, delPSt, deltaID, delimiter, dialog);
                               // System.out.println("ID LIST SIZE " +
                               // Math.round((double) myIds.size() / (double)
                               // numIntervalls) + " " + myIdsDest.size());
             }              }
             // prepare new query for next chunk              // prepare new query for next chunk
             if (query.indexOf("where") > 0)              if (query.indexOf("where") > 0)
Line 2093  class Convert Line 2287  class Convert
             else              else
               tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'";                tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'";
   
           } //to outer while                      }
                       String tableName = names.get(tbIndex).toString();
                       if (indexList.isEmpty())
                       {
                           IndexList idList = (IndexList) indexList.get(0);
                           System.out.println("found list " + idList);
                           Statement stm = beanDest.getConnection().createStatement();
                           Vector destTables = beanDest.getTableNames();
                           System.out.println("tempQueryDest" + tempQueryDest);
                           beanDest.makeQuery(tempQueryDest, 0);
                           for (Iterator iter = idList.iterator(); iter.hasNext();)
                           {
                               String indexField = (String) iter.next();
                               indexField = convertText(indexField);
                               String indexName = destTableName + "_" + indexField;
                               if (destTables.contains(indexName))
                               {
                                   stm.execute("DROP  INDEX " + destTableName + "_" + indexField);
                                   //  continue;
                               }
                               //    stm.execute("DROP INDEX
                               // "+destTableName+"_"+indexField);
   
                               String type = beanDest.getColumnType(indexField).toLowerCase();
                               // System.out.println(indexField+" "+type+"
                               // "+(type.indexOf("text") >= 0 ||
                               // type.indexOf("varchar") >= 0 || type.indexOf("char")
                               // >= 0));
                               if (type.indexOf("text") >= 0 || type.indexOf("varchar") >= 0 || type.indexOf("char") >= 0)
                               {
                                   if (beanDest.url.indexOf("mysql") >= 0)
                                   {
                                       //System.out.println("CREATE INDEX " +
                                       // indexName + " ON " + destTableName + " (" +
                                       // indexField + "(10))");
                                       // TODO problem if index exist !!!
                                       stm.execute("CREATE  INDEX " + indexName + " ON " + destTableName + " (" + indexField + "(10))");
                                   }
                                   else
                                   {
                                       stm.execute("CREATE  INDEX " + indexName + " ON " + destTableName + " (lower( " + indexField + "))");
   
                                   }
   
                               }
                               else
                               {
                                   stm.execute("CREATE  INDEX " + destTableName + "_" + indexField + " ON " + destTableName + "(" + indexField + ")");
   
                               }
   
                               // stm.execute("DROP INDEX
                               // "+destTableName+"_"+indexField);
   
                           }
                       }
                       //  CREATE UNIQUE INDEX title_idx ON films (title);
                       for (Iterator iter = linesToDelete.iterator(); iter.hasNext();)
                       {
                           String id = (String) iter.next();
                           delPSt.setString(1, id);
                           delPSt.execute();
   
                       }
   
                       long endTime = System.currentTimeMillis();
                       System.out.println("Time for incremental synchronize  elapsed " + (endTime - startTime));
         } // to idfield if            } // to idfield if  
       } // table loop        } // table loop
   
     } catch (Exception e)          }
           catch (Exception e)
     {      {
       System.out.println("Error while connecting to database " + e);        System.out.println("Error while connecting to database " + e);
               e.printStackTrace();
       if (dialog != null)        if (dialog != null)
       {        {
         dialog.setVisible(false);          dialog.setVisible(false);
Line 2110  class Convert Line 2372  class Convert
       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);
               if(dialog != null)
       FM2SQL.showErrorDialog(b.toString(), "Error occured !");        FM2SQL.showErrorDialog(b.toString(), "Error occured !");
   
     }      }
Line 2120  class Convert Line 2383  class Convert
   
       dialog.setVisible(false);        dialog.setVisible(false);
     }      }
   } // to method      }
       
       /**
        * @param destQuery
        * @param string
        * @return
        */
       private static String removeLayoutPartFromQuery(String destQuery, String layoutName)
       {
           String removeString = "layout " + beanDest.getQC() + layoutName + beanDest.getQC();
           destQuery = destQuery.replaceFirst(removeString, "");
           System.out.println("destQuery change to " + destQuery);
           return destQuery;
       }
   
       private static void performSynchronize(String idField, Vector vec, String tempQuery, TreeSet linesToDelete, TreeSet linesToAppend, PreparedStatement insPst, PreparedStatement updPst,
               PreparedStatement delPSt, int deltaID, String delimiter, FM2SQL.ProgressDialog dialog) throws SQLException, ParseException
       {
           if (dialog != null)
           {
               dialog.progress.setValue(0);
               dialog.title.setText("Retrieving new data");
           }
   
           Vector[] vectors = bean.getQueryData(tempQuery, deltaID);
           int count = 0, size = vectors[0].size();
           int idIndex = vectors[1].indexOf(idField);
           //System.out.println(idIndex + " " + vectors[1] + " " + idField);
           // todo arraylist code has to be added
           if (dialog != null)
               dialog.title.setText("Synchronize with new data");
   
           for (Iterator iter = vectors[0].iterator(); iter.hasNext();)
           {
               Vector line = (Vector) iter.next();
               Object lineIDIndex = line.get(idIndex);
               if (linesToAppend.contains(lineIDIndex))
                   System.out.println("line " + linesToAppend.contains(line.get(idIndex)) + " " + lineIDIndex);
               if (linesToAppend.contains(lineIDIndex))
               {
                   for (int l = 0; l < line.size(); ++l)
                   {
                       Object obj = line.get(l);
                       if (obj instanceof ArrayList)
                           obj = formatFileMakerArray((List) obj, delimiter);
                       if (obj != null)
                           insPst.setString(l + 1, obj.toString());
                       else
                           insPst.setNull(l + 1, Types.NULL);
                   }
                   insPst.execute();
   
               }
               else
               // update
               {
                   for (int l = 0; l < line.size(); ++l)
                   {
                       Object obj = line.get(l);
                       if (obj instanceof ArrayList)
                           obj = formatFileMakerArray((List) obj, delimiter);
                       if (obj != null)
                           updPst.setString(l + 1, obj.toString());
                       else
                           updPst.setNull(l + 1, Types.NULL);
                   }
                   updPst.setString(line.size() + 1, line.get(idIndex).toString());
                   //updPst.addBatch();
                   //updPst.execute();
               }
               if (dialog != null)
               {
                   int value = (int) Math.round(((double) count / (double) size) * 100.0);
                   dialog.progress.setValue(value);
                   count++;
               }
           }
           //updPst.executeBatch();
       } // to method
     
   /**    /**
    * Converts input String in norman encoding to unicode      * Converts input String in norman encoding to unicode 
        * 
    * @param inp     * @param inp
    * @return converted String     * @return converted String
    */     */
   static public String normanToUnicode(String inp) {      static public String normanToUnicode(String inp)
       {
     StringBuffer buf = new StringBuffer();      StringBuffer buf = new StringBuffer();
     for (int i = 0; i < inp.length(); i++) {          for (int i = 0; i < inp.length(); i++)
           {
       char c = inp.charAt(i);        char c = inp.charAt(i);
      // System.out.println("char "+c+" "+(int)c);       // System.out.println("char "+c+" "+(int)c);
       switch (c) {              switch (c)
       case 1: buf.append("\u00d0"); break; // Eth              {
       case 2: buf.append("\u00f0"); break; // eth                  case 1 :
       case 3: buf.append("\u0141"); break; // Lslash                      buf.append("\u00d0");
       case 4: buf.append("\u0142"); break; // lslash                      break; // Eth
       case 5: buf.append("\u0160"); break; // S caron                  case 2 :
       case 6: buf.append("\u0161"); break; // s caron                      buf.append("\u00f0");
       case 7: buf.append("\u00dd"); break; // Y acute                      break; // eth
       case 8: buf.append("\u00fd"); break; // y acute                  case 3 :
       case 11: buf.append("\u00de"); break; // Thorn                      buf.append("\u0141");
       case 12: buf.append("\u00fe"); break; // thorn                      break; // Lslash
       case 14: buf.append("\u017d"); break; // Z caron                  case 4 :
       case 15: buf.append("\u017e"); break; // z caron                      buf.append("\u0142");
       case 17: buf.append("\u0073"); break; // asciitilde                      break; // lslash
       case 18: buf.append("j\u0305"); break; // j macron [does a single char exist?]                  case 5 :
       case 19: buf.append("^"); break; // circumflex                      buf.append("\u0160");
       case 20: buf.append("\u0303"); break; // tilde                      break; // S caron
       case 21: buf.append("\u00bd"); break; // onehalf                  case 6 :
       case 22: buf.append("\u00bc"); break; // onequarter                      buf.append("\u0161");
       case 23: buf.append("\u00b9"); break; // onesuperior                      break; // s caron
       case 24: buf.append("\u00be"); break; // threequarters                  case 7 :
       case 25: buf.append("\u00b3"); break; // threesuperior                      buf.append("\u00dd");
       case 26: buf.append("\u00b2"); break; // twosuperior                      break; // Y acute
       case 27: buf.append("\u00a6"); break; // brokenbar                  case 8 :
       case 28: buf.append("-"); break; // minus                      buf.append("\u00fd");
       case 29: buf.append("\u00d7"); break; // multiply                      break; // y acute
       case 39: buf.append("'"); break; // quotesingle                  case 11 :
       case 94: buf.append("\u0302"); break; // circumflex                      buf.append("\u00de");
       case 96: buf.append("\u0300"); break; // grave                      break; // Thorn
       case 196: buf.append("\u00c4"); break; // A dieresis                  case 12 :
       case 197: buf.append("\u00c5"); break; // A ring                      buf.append("\u00fe");
       case 201: buf.append("\u00c9"); break; // E acute                      break; // thorn
       case 209: buf.append("\u00d1"); break; // N tilde                  case 14 :
       case 214: buf.append("\u00d6"); break; // O dieresis                      buf.append("\u017d");
       case 220: buf.append("\u00dc"); break; // U dieresis                      break; // Z caron
       case 225: buf.append("\u00e1"); break; // a acute                  case 15 :
       case 224: buf.append("\u00e0"); break; // a grave                      buf.append("\u017e");
       case 226: buf.append("\u00e2"); break; // a circumflex                      break; // z caron
       case 228: buf.append("\u00e4"); break; // a dieresis                  case 17 :
       case 227: buf.append("\u00e3"); break; // a tilde                      buf.append("\u0073");
       case 229: buf.append("\u0101"); break; // a macron                      break; // asciitilde
       case 231: buf.append("\u00e7"); break; // c cedilla                  case 18 :
       case 233: buf.append("\u00e9"); break; // e acute                      buf.append("j\u0305");
       case 232: buf.append("\u00e8"); break; // e grave                      break; // j macron [does a single char exist?]
       case 234: buf.append("\u00ea"); break; // e circumflex                  case 19 :
       case 235: buf.append("\u00eb"); break; // e dieresis                      buf.append("^");
       case 237: buf.append("\u00ed"); break; // i acute                      break; // circumflex
       case 236: buf.append("\u00ec"); break; // i grave                  case 20 :
       case 238: buf.append("\u00ee"); break; // i circumflex                      buf.append("\u0303");
       case 239: buf.append("\u00ef"); break; // i dieresis                      break; // tilde
       case 241: buf.append("\u00f1"); break; // n tilde                  case 21 :
       case 243: buf.append("\u00f3"); break; // o acute                      buf.append("\u00bd");
       case 242: buf.append("\u00f2"); break; // o grave                      break; // onehalf
       case 244: buf.append("\u00f4"); break; // o circumflex                  case 22 :
       case 246: buf.append("\u00f6"); break; // o dieresis                      buf.append("\u00bc");
       case 245: buf.append("\u00f5"); break; // o tilde                      break; // onequarter
       case 250: buf.append("\u00fa"); break; // u acute                  case 23 :
       case 249: buf.append("\u00f9"); break; // u grave                      buf.append("\u00b9");
       case 251: buf.append("\u00fb"); break; // u circumflex                      break; // onesuperior
       case 252: buf.append("\u00fc"); break; // u dieresis                  case 24 :
       case 8224: buf.append("\u1e6d"); break; // t underdot                      buf.append("\u00be");
       case 176: buf.append("\u00b0"); break; // degree                      break; // threequarters
       case 162: buf.append("\u1ebd"); break; // e tilde                  case 25 :
       case 163: buf.append("\u00a3"); break; // sterling                      buf.append("\u00b3");
       case 167: buf.append("\u00a7"); break; // section                      break; // threesuperior
       case 182: buf.append("\u00b6"); break; // paragraph                  case 26 :
       case 223: buf.append("\u015b"); break; // s acute                      buf.append("\u00b2");
       case 174: buf.append("\u1e5b"); break; // r underdot                      break; // twosuperior
       case 169: buf.append("\u1e45"); break; // n overdot                  case 27 :
       case 353: buf.append("\u1e45"); break; // n overdot                      buf.append("\u00a6");
       case 180: buf.append("\u0301"); break; // acute                      break; // brokenbar
       case 168: buf.append("\u0308"); break; // dieresis                  case 28 :
       case 8800: buf.append("\u1e6d"); break; // t underdot                      buf.append("-");
       case 198: buf.append("\u00c6"); break; // AE                      break; // minus
       case 216: buf.append("\u014d"); break; // o macron                  case 29 :
       case 8734: buf.append("\u0129"); break; // i tilde                      buf.append("\u00d7");
       case 177: buf.append("\u00b1"); break; // plusminus                      break; // multiply
       case 165: buf.append("\u012b"); break; // i macron                  case 39 :
       case 181: buf.append("\u1e43"); break; // m underdot                      buf.append("'");
       case 8706: buf.append("\u1e0d"); break; // d underdot                      break; // quotesingle
       case 240: buf.append("\u1e0d"); break; // d underdot                  case 94 :
                       buf.append("\u0302");
       case 8721: buf.append("\u1e63"); break; // s underdot                      break; // circumflex
       case 960: buf.append("\u017a"); break; // z acute                  case 96 :
       case 8747: buf.append("\u1e45"); break; // n overdot                      buf.append("\u0300");
       case 937: buf.append("\u0169"); break; // u tilde                      break; // grave
       case 230: buf.append("\u00e6"); break; // ae                  case 196 :
       case 248: buf.append("\u00f8"); break; // oslash                      buf.append("\u00c4");
       case 191: buf.append("\u0304\u0306"); break; // macron breve                      break; // A dieresis
       case 172: buf.append("\u1e37"); break; //                   case 197 :
       case 8730: buf.append("j\u0305"); break; // j macron [does a single char exist?]                      buf.append("\u00c5");
       case 402: buf.append("\u0103"); break; // a breve                      break; // A ring
       case 8776: buf.append("\u016d"); break; // u breve                  case 201 :
       case 187: buf.append("\u1e42"); break; // M underdot                      buf.append("\u00c9");
       case 8230: buf.append("\u2026"); break; // ellipsis                      break; // E acute
       case 192: buf.append("\u00c0"); break; // A grave                  case 209 :
       case 195: buf.append("\u00c3"); break; // A tilde                      buf.append("\u00d1");
       case 213: buf.append("\u00d5"); break; // O tilde                      break; // N tilde
       case 338: buf.append("m\u0306"); break; // m breve                  case 214 :
       case 339: buf.append("\u0153"); break; // oe                      buf.append("\u00d6");
       case 8211: buf.append("\u2013"); break; // endash                      break; // O dieresis
       case 8212: buf.append("\u2014"); break; // emdash                  case 220 :
       case 8220: buf.append("\u201c"); break; // quotedblleft                      buf.append("\u00dc");
       case 8221: buf.append("\u201d"); break; // quotedblright                      break; // U dieresis
       case 8216: buf.append("\u2018"); break; // quoteleft                  case 225 :
       case 8217: buf.append("\u2019"); break; // quoteright                      buf.append("\u00e1");
       case 247: buf.append("\u1e37"); break; // l underring [actually underdot]                      break; // a acute
       case 9674: buf.append("\u1e41"); break; // m overdot                  case 224 :
       case 255: buf.append("n\u0306"); break; // n breve                      buf.append("\u00e0");
       case 376: buf.append("\u00d7"); break; // multiply                      break; // a grave
       case 8364: buf.append("\u1e5b"); break; // r underring [actually underdot]                  case 226 :
       case 8249: buf.append("\u1e44"); break; // N overdot                      buf.append("\u00e2");
       case 8250: buf.append("\u1e62"); break; // S underdot                      break; // a circumflex
       case 64257: buf.append("\u1e24"); break; // H underdot                  case 228 :
       case 64258: buf.append("\u1e0c"); break; // D underdot                      buf.append("\u00e4");
       case 8225: buf.append("\u2021"); break; // daggerdbl                      break; // a dieresis
       case 8218: buf.append("\u1e36"); break; // L underdot                  case 227 :
       case 8222: buf.append("\u0113"); break; // e macron                      buf.append("\u00e3");
       case 194: buf.append("\u1e5f"); break; // r underbar                      break; // a tilde
       case 202: buf.append("r\u0324"); break; // r underdieresis                  case 229 :
       case 193: buf.append("\u012a"); break; // I macron                      buf.append("\u0101");
                       break; // a macron
                   case 231 :
                       buf.append("\u00e7");
                       break; // c cedilla
                   case 233 :
                       buf.append("\u00e9");
                       break; // e acute
                   case 232 :
                       buf.append("\u00e8");
                       break; // e grave
                   case 234 :
                       buf.append("\u00ea");
                       break; // e circumflex
                   case 235 :
                       buf.append("\u00eb");
                       break; // e dieresis
                   case 237 :
                       buf.append("\u00ed");
                       break; // i acute
                   case 236 :
                       buf.append("\u00ec");
                       break; // i grave
                   case 238 :
                       buf.append("\u00ee");
                       break; // i circumflex
                   case 239 :
                       buf.append("\u00ef");
                       break; // i dieresis
                   case 241 :
                       buf.append("\u00f1");
                       break; // n tilde
                   case 243 :
                       buf.append("\u00f3");
                       break; // o acute
                   case 242 :
                       buf.append("\u00f2");
                       break; // o grave
                   case 244 :
                       buf.append("\u00f4");
                       break; // o circumflex
                   case 246 :
                       buf.append("\u00f6");
                       break; // o dieresis
                   case 245 :
                       buf.append("\u00f5");
                       break; // o tilde
                   case 250 :
                       buf.append("\u00fa");
                       break; // u acute
                   case 249 :
                       buf.append("\u00f9");
                       break; // u grave
                   case 251 :
                       buf.append("\u00fb");
                       break; // u circumflex
                   case 252 :
                       buf.append("\u00fc");
                       break; // u dieresis
                   case 8224 :
                       buf.append("\u1e6d");
                       break; // t underdot
                   case 176 :
                       buf.append("\u00b0");
                       break; // degree
                   case 162 :
                       buf.append("\u1ebd");
                       break; // e tilde
                   case 163 :
                       buf.append("\u00a3");
                       break; // sterling
                   case 167 :
                       buf.append("\u00a7");
                       break; // section
                   case 182 :
                       buf.append("\u00b6");
                       break; // paragraph
                   case 223 :
                       buf.append("\u015b");
                       break; // s acute
                   case 174 :
                       buf.append("\u1e5b");
                       break; // r underdot
                   case 169 :
                       buf.append("\u1e45");
                       break; // n overdot
                   case 353 :
                       buf.append("\u1e45");
                       break; // n overdot
                   case 180 :
                       buf.append("\u0301");
                       break; // acute
                   case 168 :
                       buf.append("\u0308");
                       break; // dieresis
                   case 8800 :
                       buf.append("\u1e6d");
                       break; // t underdot
                   case 198 :
                       buf.append("\u00c6");
                       break; // AE
                   case 216 :
                       buf.append("\u014d");
                       break; // o macron
                   case 8734 :
                       buf.append("\u0129");
                       break; // i tilde
                   case 177 :
                       buf.append("\u00b1");
                       break; // plusminus
                   case 165 :
                       buf.append("\u012b");
                       break; // i macron
                   case 181 :
                       buf.append("\u1e43");
                       break; // m underdot
                   case 8706 :
                       buf.append("\u1e0d");
                       break; // d underdot
                   case 240 :
                       buf.append("\u1e0d");
                       break; // d underdot
   
                   case 8721 :
                       buf.append("\u1e63");
                       break; // s underdot
                   case 960 :
                       buf.append("\u017a");
                       break; // z acute
                   case 8747 :
                       buf.append("\u1e45");
                       break; // n overdot
                   case 937 :
                       buf.append("\u0169");
                       break; // u tilde
                   case 230 :
                       buf.append("\u00e6");
                       break; // ae
                   case 248 :
                       buf.append("\u00f8");
                       break; // oslash
                   case 191 :
                       buf.append("\u0304\u0306");
                       break; // macron breve
                   case 172 :
                       buf.append("\u1e37");
                       break; // 
                   case 8730 :
                       buf.append("j\u0305");
                       break; // j macron [does a single char exist?]
                   case 402 :
                       buf.append("\u0103");
                       break; // a breve
                   case 8776 :
                       buf.append("\u016d");
                       break; // u breve
                   case 187 :
                       buf.append("\u1e42");
                       break; // M underdot
                   case 8230 :
                       buf.append("\u2026");
                       break; // ellipsis
                   case 192 :
                       buf.append("\u00c0");
                       break; // A grave
                   case 195 :
                       buf.append("\u00c3");
                       break; // A tilde
                   case 213 :
                       buf.append("\u00d5");
                       break; // O tilde
                   case 338 :
                       buf.append("m\u0306");
                       break; // m breve
                   case 339 :
                       buf.append("\u0153");
                       break; // oe
                   case 8211 :
                       buf.append("\u2013");
                       break; // endash
                   case 8212 :
                       buf.append("\u2014");
                       break; // emdash
                   case 8220 :
                       buf.append("\u201c");
                       break; // quotedblleft
                   case 8221 :
                       buf.append("\u201d");
                       break; // quotedblright
                   case 8216 :
                       buf.append("\u2018");
                       break; // quoteleft
                   case 8217 :
                       buf.append("\u2019");
                       break; // quoteright
                   case 247 :
                       buf.append("\u1e37");
                       break; // l underring [actually underdot]
                   case 9674 :
                       buf.append("\u1e41");
                       break; // m overdot
                   case 255 :
                       buf.append("n\u0306");
                       break; // n breve
                   case 376 :
                       buf.append("\u00d7");
                       break; // multiply
                   case 8364 :
                       buf.append("\u1e5b");
                       break; // r underring [actually underdot]
                   case 8249 :
                       buf.append("\u1e44");
                       break; // N overdot
                   case 8250 :
                       buf.append("\u1e62");
                       break; // S underdot
                   case 64257 :
                       buf.append("\u1e24");
                       break; // H underdot
                   case 64258 :
                       buf.append("\u1e0c");
                       break; // D underdot
                   case 8225 :
                       buf.append("\u2021");
                       break; // daggerdbl
                   case 8218 :
                       buf.append("\u1e36");
                       break; // L underdot
                   case 8222 :
                       buf.append("\u0113");
                       break; // e macron
                   case 194 :
                       buf.append("\u1e5f");
                       break; // r underbar
                   case 202 :
                       buf.append("r\u0324");
                       break; // r underdieresis
                   case 193 :
                       buf.append("\u012a");
                       break; // I macron
       case 8486:        case 8486:
       case 203: buf.append("\u016b"); break; // u macron                  case 203 :
       case 200: buf.append("\u1e6c"); break; // T underdot                      buf.append("\u016b");
       case 205: buf.append("\u1e64"); break; // S acute                      break; // u macron
       case 206: buf.append("\u2020"); break; // dagger                  case 200 :
       case 207: buf.append("\u0115"); break; // e breve                      buf.append("\u1e6c");
       case 204: buf.append("\u014f"); break; // o breve                      break; // T underdot
       case 211: buf.append("\u0100"); break; // A macron                  case 205 :
       case 212: buf.append("\u1e46"); break; // N underdot                      buf.append("\u1e64");
       case 210: buf.append("\u1e3b"); break; // l underbar                      break; // S acute
       case 218: buf.append("\u016a"); break; // U macron                  case 206 :
       case 219: buf.append("\u0179"); break; // Z acute                      buf.append("\u2020");
       case 217: buf.append("\u1e5a"); break; // R underdot                      break; // dagger
       case 305: buf.append("\u0131"); break; // dotlessi                  case 207 :
       case 710: buf.append("\u1e47"); break; // n underdot                      buf.append("\u0115");
       case 732: buf.append("\u1e49"); break; // n underbar                      break; // e breve
       case 175: buf.append("\u0304"); break; // macron                  case 204 :
       case 728: buf.append("\u0306"); break; // breve                      buf.append("\u014f");
       case 729:case 215: buf.append("\u1e25"); break; // h underdot                      break; // o breve
       case 730: buf.append("\u012d"); break; // i breve                  case 211 :
       case 184: buf.append("\u0327"); break; // cedilla                      buf.append("\u0100");
       case 733: buf.append("\u030b"); break; // hungarumlaut                      break; // A macron
       case 731: buf.append("\u0328"); break; // ogonek                  case 212 :
       case 711: buf.append("\u030c"); break; // caron                      buf.append("\u1e46");
       case 199: buf.append("\u012b\u0303"); break; // imacron tilde                      break; // N underdot
       case 8226: buf.append("\u1e5d"); break; // runderdot macron                  case 210 :
       case 8482: buf.append("\u016b\0306"); break; // umacron breve                      buf.append("\u1e3b");
       case 8804: buf.append("\u0101\u0301"); break; // amacron acute                      break; // l underbar
       case 8805: buf.append("\u016b\u0301"); break; // umacron acute                  case 218 :
       case 8719: buf.append("\u0113\u0301"); break; // emacron acute                      buf.append("\u016a");
       case 170: buf.append("\u0113\u0300"); break; // emacron breve                      break; // U macron
       case 186: buf.append("\u014d\u0300"); break; // omacron breve                  case 219 :
       case 161: buf.append("\u0101\u0306"); break; // amacron breve                      buf.append("\u0179");
       case 8710: buf.append("\u0101\u0303"); break; // amacron tilde                      break; // Z acute
       case 171: buf.append("\u012b\u0301"); break; // imacron acute                  case 217 :
       case 8260: buf.append("\u1e00"); break; // runderdotmacron acute                      buf.append("\u1e5a");
       case 183: buf.append("\u1e5b\u0301"); break; // runderdot acute                      break; // R underdot
       case 8240: buf.append("\u012b\u0306"); break; // imacron breve                  case 305 :
       case 63743: buf.append("\u016b\u0303"); break; // umacron tilde                      buf.append("\u0131");
       default: buf.append(c);                          break; // dotlessi
                   case 710 :
                       buf.append("\u1e47");
                       break; // n underdot
                   case 732 :
                       buf.append("\u1e49");
                       break; // n underbar
                   case 175 :
                       buf.append("\u0304");
                       break; // macron
                   case 728 :
                       buf.append("\u0306");
                       break; // breve
                   case 729 :
                   case 215 :
                       buf.append("\u1e25");
                       break; // h underdot
                   case 730 :
                       buf.append("\u012d");
                       break; // i breve
                   case 184 :
                       buf.append("\u0327");
                       break; // cedilla
                   case 733 :
                       buf.append("\u030b");
                       break; // hungarumlaut
                   case 731 :
                       buf.append("\u0328");
                       break; // ogonek
                   case 711 :
                       buf.append("\u030c");
                       break; // caron
                   case 199 :
                       buf.append("\u012b\u0303");
                       break; // imacron tilde
                   case 8226 :
                       buf.append("\u1e5d");
                       break; // runderdot macron
                   case 8482 :
                       buf.append("\u016b\0306");
                       break; // umacron breve
                   case 8804 :
                       buf.append("\u0101\u0301");
                       break; // amacron acute
                   case 8805 :
                       buf.append("\u016b\u0301");
                       break; // umacron acute
                   case 8719 :
                       buf.append("\u0113\u0301");
                       break; // emacron acute
                   case 170 :
                       buf.append("\u0113\u0300");
                       break; // emacron breve
                   case 186 :
                       buf.append("\u014d\u0300");
                       break; // omacron breve
                   case 161 :
                       buf.append("\u0101\u0306");
                       break; // amacron breve
                   case 8710 :
                       buf.append("\u0101\u0303");
                       break; // amacron tilde
                   case 171 :
                       buf.append("\u012b\u0301");
                       break; // imacron acute
                   case 8260 :
                       buf.append("\u1e00");
                       break; // runderdotmacron acute
                   case 183 :
                       buf.append("\u1e5b\u0301");
                       break; // runderdot acute
                   case 8240 :
                       buf.append("\u012b\u0306");
                       break; // imacron breve
                   case 63743 :
                       buf.append("\u016b\u0303");
                       break; // umacron tilde
                   default :
                       buf.append(c);
        if((int)c>127)         if((int)c>127)
        System.out.println("char "+c+" "+(int)c);         System.out.println("char "+c+" "+(int)c);
        break;         break;
Line 2303  class Convert Line 2962  class Convert
     return buf.toString();      return buf.toString();
   }    }
   
   static public String normanToUnicodeOld(String inp) {      static public String normanToUnicodeOld(String inp)
       {
     StringBuffer buf = new StringBuffer();      StringBuffer buf = new StringBuffer();
     for (int i = 0; i < inp.length(); i++) {          for (int i = 0; i < inp.length(); i++)
           {
       char c = inp.charAt(i);        char c = inp.charAt(i);
       switch (c) {              switch (c)
       case 1: buf.append("\u00d0"); break; // Eth              {
       case 2: buf.append("\u00f0"); break; // eth                  case 1 :
       case 3: buf.append("\u0141"); break; // Lslash                      buf.append("\u00d0");
       case 4: buf.append("\u0142"); break; // lslash                      break; // Eth
       case 5: buf.append("\u0160"); break; // S caron                  case 2 :
       case 6: buf.append("\u0161"); break; // s caron                      buf.append("\u00f0");
       case 7: buf.append("\u00dd"); break; // Y acute                      break; // eth
       case 8: buf.append("\u00fd"); break; // y acute                  case 3 :
       case 11: buf.append("\u00de"); break; // Thorn                      buf.append("\u0141");
       case 12: buf.append("\u00fe"); break; // thorn                      break; // Lslash
       case 14: buf.append("\u017d"); break; // Z caron                  case 4 :
       case 15: buf.append("\u017e"); break; // z caron                      buf.append("\u0142");
       case 17: buf.append("\u0073"); break; // asciitilde                      break; // lslash
       case 18: buf.append("j\u0305"); break; // j macron [does a single char exist?]                  case 5 :
       case 19: buf.append("^"); break; // circumflex                      buf.append("\u0160");
       case 20: buf.append("\u0303"); break; // tilde                      break; // S caron
       case 21: buf.append("\u00bd"); break; // onehalf                  case 6 :
       case 22: buf.append("\u00bc"); break; // onequarter                      buf.append("\u0161");
       case 23: buf.append("\u00b9"); break; // onesuperior                      break; // s caron
       case 24: buf.append("\u00be"); break; // threequarters                  case 7 :
       case 25: buf.append("\u00b3"); break; // threesuperior                      buf.append("\u00dd");
       case 26: buf.append("\u00b2"); break; // twosuperior                      break; // Y acute
       case 27: buf.append("\u00a6"); break; // brokenbar                  case 8 :
       case 28: buf.append("-"); break; // minus                      buf.append("\u00fd");
       case 29: buf.append("\u00d7"); break; // multiply                      break; // y acute
       case 39: buf.append("'"); break; // quotesingle                  case 11 :
       case 94: buf.append("\u0302"); break; // circumflex                      buf.append("\u00de");
       case 96: buf.append("\u0300"); break; // grave                      break; // Thorn
       case 128: buf.append("\u00c4"); break; // A dieresis                  case 12 :
       case 129: buf.append("\u00c5"); break; // A ring                      buf.append("\u00fe");
       case 131: buf.append("\u00c9"); break; // E acute                      break; // thorn
       case 132: buf.append("\u00d1"); break; // N tilde                  case 14 :
       case 133: buf.append("\u00d6"); break; // O dieresis                      buf.append("\u017d");
       case 134: buf.append("\u00dc"); break; // U dieresis                      break; // Z caron
       case 135: buf.append("\u00e1"); break; // a acute                  case 15 :
       case 136: buf.append("\u00e0"); break; // a grave                      buf.append("\u017e");
       case 137: buf.append("\u00e2"); break; // a circumflex                      break; // z caron
       case 138: buf.append("\u00e4"); break; // a dieresis                  case 17 :
       case 139: buf.append("\u00e3"); break; // a tilde                      buf.append("\u0073");
       case 140: buf.append("\u0101"); break; // a macron                      break; // asciitilde
       case 141: buf.append("\u00e7"); break; // c cedilla                  case 18 :
       case 142: buf.append("\u00e9"); break; // e acute                      buf.append("j\u0305");
       case 143: buf.append("\u00e8"); break; // e grave                      break; // j macron [does a single char exist?]
       case 144: buf.append("\u00ea"); break; // e circumflex                  case 19 :
       case 145: buf.append("\u00eb"); break; // e dieresis                      buf.append("^");
       case 146: buf.append("\u00ed"); break; // i acute                      break; // circumflex
       case 147: buf.append("\u00ec"); break; // i grave                  case 20 :
       case 148: buf.append("\u00ee"); break; // i circumflex                      buf.append("\u0303");
       case 149: buf.append("\u00ef"); break; // i dieresis                      break; // tilde
       case 150: buf.append("\u00f1"); break; // n tilde                  case 21 :
       case 151: buf.append("\u00f3"); break; // o acute                      buf.append("\u00bd");
       case 152: buf.append("\u00f2"); break; // o grave                      break; // onehalf
       case 153: buf.append("\u00f4"); break; // o circumflex                  case 22 :
       case 154: buf.append("\u00f6"); break; // o dieresis                      buf.append("\u00bc");
       case 155: buf.append("\u00f5"); break; // o tilde                      break; // onequarter
       case 156: buf.append("\u00fa"); break; // u acute                  case 23 :
       case 157: buf.append("\u00f9"); break; // u grave                      buf.append("\u00b9");
       case 158: buf.append("\u00fb"); break; // u circumflex                      break; // onesuperior
       case 159: buf.append("\u00fc"); break; // u dieresis                  case 24 :
       case 160: buf.append("\u1e6d"); break; // t underdot                      buf.append("\u00be");
       case 161: buf.append("\u00b0"); break; // degree                      break; // threequarters
       case 162: buf.append("\u1ebd"); break; // e tilde                  case 25 :
       case 163: buf.append("\u00a3"); break; // sterling                      buf.append("\u00b3");
       case 164: buf.append("\u00a7"); break; // section                      break; // threesuperior
       case 166: buf.append("\u00b6"); break; // paragraph                  case 26 :
       case 167: buf.append("\u015b"); break; // s acute                      buf.append("\u00b2");
       case 168: buf.append("\u1e5b"); break; // r underdot                      break; // twosuperior
       case 169: buf.append("\u1e67"); break; // s caron                  case 27 :
       case 171: buf.append("\u0301"); break; // acute                      buf.append("\u00a6");
       case 172: buf.append("\u0308"); break; // dieresis                      break; // brokenbar
       case 173: buf.append("\u1e6d"); break; // t underdot                  case 28 :
       case 174: buf.append("\u00c6"); break; // AE                      buf.append("-");
       case 175: buf.append("\u014d"); break; // o macron                      break; // minus
       case 176: buf.append("\u0129"); break; // i tilde                  case 29 :
       case 177: buf.append("\u00b1"); break; // plusminus                      buf.append("\u00d7");
       case 180: buf.append("\u012b"); break; // i macron                      break; // multiply
       case 181: buf.append("\u1e43"); break; // m underdot                  case 39 :
       case 182: buf.append("\u1e0d"); break; // d underdot                      buf.append("'");
       case 183: buf.append("\u1e63"); break; // s underdot                      break; // quotesingle
       case 185: buf.append("\u017a"); break; // z acute                  case 94 :
       case 186: buf.append("\u1e45"); break; // n overdot                      buf.append("\u0302");
       case 189: buf.append("\u0169"); break; // u tilde                      break; // circumflex
       case 190: buf.append("\u00e6"); break; // ae                  case 96 :
       case 191: buf.append("\u00f8"); break; // oslash                      buf.append("\u0300");
       case 192: buf.append("\u0304\u0306"); break; // macron breve                      break; // grave
       case 194: buf.append("\u1e37"); break; //                   case 128 :
       case 195: buf.append("j\u0305"); break; // j macron [does a single char exist?]                      buf.append("\u00c4");
       case 196: buf.append("\u0103"); break; // a breve                      break; // A dieresis
       case 197: buf.append("\u016d"); break; // u breve                  case 129 :
       case 200: buf.append("\u1e42"); break; // M underdot                      buf.append("\u00c5");
       case 201: buf.append("\u2026"); break; // ellipsis                      break; // A ring
       case 203: buf.append("\u00c0"); break; // A grave                  case 131 :
       case 204: buf.append("\u00c3"); break; // A tilde                      buf.append("\u00c9");
       case 205: buf.append("\u00d5"); break; // O tilde                      break; // E acute
       case 206: buf.append("m\u0306"); break; // m breve                  case 132 :
       case 207: buf.append("\u0153"); break; // oe                      buf.append("\u00d1");
       case 208: buf.append("\u2013"); break; // endash                      break; // N tilde
       case 209: buf.append("\u2014"); break; // emdash                  case 133 :
       case 210: buf.append("\u201c"); break; // quotedblleft                      buf.append("\u00d6");
       case 211: buf.append("\u201d"); break; // quotedblright                      break; // O dieresis
       case 212: buf.append("\u2018"); break; // quoteleft                  case 134 :
       case 213: buf.append("\u2019"); break; // quoteright                      buf.append("\u00dc");
       case 214: buf.append("\u1e37"); break; // l underring [actually underdot]                      break; // U dieresis
       case 215: buf.append("\u1e41"); break; // m overdot                  case 135 :
       case 216: buf.append("n\u0306"); break; // n breve                      buf.append("\u00e1");
       case 217: buf.append("\u00d7"); break; // multiply                      break; // a acute
       case 219: buf.append("\u1e5b"); break; // r underring [actually underdot]                  case 136 :
       case 220: buf.append("\u1e44"); break; // N overdot                      buf.append("\u00e0");
       case 221: buf.append("\u1e62"); break; // S underdot                      break; // a grave
       case 222: buf.append("\u1e24"); break; // H underdot                  case 137 :
       case 223: buf.append("\u1e0c"); break; // D underdot                      buf.append("\u00e2");
       case 224: buf.append("\u2021"); break; // daggerdbl                      break; // a circumflex
       case 226: buf.append("\u1e36"); break; // L underdot                  case 138 :
       case 227: buf.append("\u0113"); break; // e macron                      buf.append("\u00e4");
       case 229: buf.append("\u1e5f"); break; // r underbar                      break; // a dieresis
       case 230: buf.append("r\u0324"); break; // r underdieresis                  case 139 :
       case 231: buf.append("\u012a"); break; // I macron                      buf.append("\u00e3");
       case 232: buf.append("\u016b"); break; // u macron                      break; // a tilde
       case 233: buf.append("\u01e6c"); break; // T underdot                  case 140 :
       case 234: buf.append("\u1e64"); break; // S acute                      buf.append("\u0101");
       case 235: buf.append("\u2020"); break; // dagger                      break; // a macron
       case 236: buf.append("\u0115"); break; // e breve                  case 141 :
       case 237: buf.append("\u014f"); break; // o breve                      buf.append("\u00e7");
       case 238: buf.append("\u0100"); break; // A macron                      break; // c cedilla
       case 239: buf.append("\u1e46"); break; // N underdot                  case 142 :
       case 241: buf.append("\u1e3b"); break; // l underbar                      buf.append("\u00e9");
       case 242: buf.append("\u016a"); break; // U macron                      break; // e acute
       case 243: buf.append("\u0179"); break; // Z acute                  case 143 :
       case 244: buf.append("\u1e5a"); break; // R underdot                      buf.append("\u00e8");
       case 245: buf.append("\u0131"); break; // dotlessi                      break; // e grave
       case 246: buf.append("\u1e47"); break; // n underdot                  case 144 :
       case 247: buf.append("\u1e49"); break; // n underbar                      buf.append("\u00ea");
       case 248: buf.append("\u0304"); break; // macron                      break; // e circumflex
       case 249: buf.append("\u0306"); break; // breve                  case 145 :
       case 250: buf.append("\u1e25"); break; // h underdot                      buf.append("\u00eb");
       case 251: buf.append("\u012d"); break; // i breve                      break; // e dieresis
       case 252: buf.append("\u0327"); break; // cedilla                  case 146 :
       case 253: buf.append("\u030b"); break; // hungarumlaut                      buf.append("\u00ed");
       case 254: buf.append("\u0328"); break; // ogonek                      break; // i acute
       case 255: buf.append("\u030c"); break; // caron                  case 147 :
       case 130: buf.append("\u012b\u0303"); break; // imacron tilde                      buf.append("\u00ec");
       case 165: buf.append("\u1e5d"); break; // runderdot macron                      break; // i grave
       case 170: buf.append("\u016b\0306"); break; // umacron breve                  case 148 :
       case 178: buf.append("\u0101\u0301"); break; // amacron acute                      buf.append("\u00ee");
       case 179: buf.append("\u016b\u0301"); break; // umacron acute                      break; // i circumflex
       case 184: buf.append("\u0113\u0301"); break; // emacron acute                  case 149 :
       case 187: buf.append("\u0113\u0300"); break; // emacron breve                      buf.append("\u00ef");
       case 188: buf.append("\u014d\u0300"); break; // omacron breve                      break; // i dieresis
       case 193: buf.append("\u0101\u0306"); break; // amacron breve                  case 150 :
       case 198: buf.append("\u0101\u0303"); break; // amacron tilde                      buf.append("\u00f1");
       case 199: buf.append("\u012b\u0301"); break; // imacron acute                      break; // n tilde
       case 218: buf.append("\u1e00"); break; // runderdotmacron acute                  case 151 :
       case 225: buf.append("\u1e5b\u0301"); break; // runderdot acute                      buf.append("\u00f3");
       case 228: buf.append("\u012b\u0306"); break; // imacron breve                      break; // o acute
       case 240: buf.append("\u016b\u0303"); break; // umacron tilde                  case 152 :
       default: buf.append(c); break;                      buf.append("\u00f2");
                       break; // o grave
                   case 153 :
                       buf.append("\u00f4");
                       break; // o circumflex
                   case 154 :
                       buf.append("\u00f6");
                       break; // o dieresis
                   case 155 :
                       buf.append("\u00f5");
                       break; // o tilde
                   case 156 :
                       buf.append("\u00fa");
                       break; // u acute
                   case 157 :
                       buf.append("\u00f9");
                       break; // u grave
                   case 158 :
                       buf.append("\u00fb");
                       break; // u circumflex
                   case 159 :
                       buf.append("\u00fc");
                       break; // u dieresis
                   case 160 :
                       buf.append("\u1e6d");
                       break; // t underdot
                   case 161 :
                       buf.append("\u00b0");
                       break; // degree
                   case 162 :
                       buf.append("\u1ebd");
                       break; // e tilde
                   case 163 :
                       buf.append("\u00a3");
                       break; // sterling
                   case 164 :
                       buf.append("\u00a7");
                       break; // section
                   case 166 :
                       buf.append("\u00b6");
                       break; // paragraph
                   case 167 :
                       buf.append("\u015b");
                       break; // s acute
                   case 168 :
                       buf.append("\u1e5b");
                       break; // r underdot
                   case 169 :
                       buf.append("\u1e67");
                       break; // s caron
                   case 171 :
                       buf.append("\u0301");
                       break; // acute
                   case 172 :
                       buf.append("\u0308");
                       break; // dieresis
                   case 173 :
                       buf.append("\u1e6d");
                       break; // t underdot
                   case 174 :
                       buf.append("\u00c6");
                       break; // AE
                   case 175 :
                       buf.append("\u014d");
                       break; // o macron
                   case 176 :
                       buf.append("\u0129");
                       break; // i tilde
                   case 177 :
                       buf.append("\u00b1");
                       break; // plusminus
                   case 180 :
                       buf.append("\u012b");
                       break; // i macron
                   case 181 :
                       buf.append("\u1e43");
                       break; // m underdot
                   case 182 :
                       buf.append("\u1e0d");
                       break; // d underdot
                   case 183 :
                       buf.append("\u1e63");
                       break; // s underdot
                   case 185 :
                       buf.append("\u017a");
                       break; // z acute
                   case 186 :
                       buf.append("\u1e45");
                       break; // n overdot
                   case 189 :
                       buf.append("\u0169");
                       break; // u tilde
                   case 190 :
                       buf.append("\u00e6");
                       break; // ae
                   case 191 :
                       buf.append("\u00f8");
                       break; // oslash
                   case 192 :
                       buf.append("\u0304\u0306");
                       break; // macron breve
                   case 194 :
                       buf.append("\u1e37");
                       break; // 
                   case 195 :
                       buf.append("j\u0305");
                       break; // j macron [does a single char exist?]
                   case 196 :
                       buf.append("\u0103");
                       break; // a breve
                   case 197 :
                       buf.append("\u016d");
                       break; // u breve
                   case 200 :
                       buf.append("\u1e42");
                       break; // M underdot
                   case 201 :
                       buf.append("\u2026");
                       break; // ellipsis
                   case 203 :
                       buf.append("\u00c0");
                       break; // A grave
                   case 204 :
                       buf.append("\u00c3");
                       break; // A tilde
                   case 205 :
                       buf.append("\u00d5");
                       break; // O tilde
                   case 206 :
                       buf.append("m\u0306");
                       break; // m breve
                   case 207 :
                       buf.append("\u0153");
                       break; // oe
                   case 208 :
                       buf.append("\u2013");
                       break; // endash
                   case 209 :
                       buf.append("\u2014");
                       break; // emdash
                   case 210 :
                       buf.append("\u201c");
                       break; // quotedblleft
                   case 211 :
                       buf.append("\u201d");
                       break; // quotedblright
                   case 212 :
                       buf.append("\u2018");
                       break; // quoteleft
                   case 213 :
                       buf.append("\u2019");
                       break; // quoteright
                   case 214 :
                       buf.append("\u1e37");
                       break; // l underring [actually underdot]
                   case 215 :
                       buf.append("\u1e41");
                       break; // m overdot
                   case 216 :
                       buf.append("n\u0306");
                       break; // n breve
                   case 217 :
                       buf.append("\u00d7");
                       break; // multiply
                   case 219 :
                       buf.append("\u1e5b");
                       break; // r underring [actually underdot]
                   case 220 :
                       buf.append("\u1e44");
                       break; // N overdot
                   case 221 :
                       buf.append("\u1e62");
                       break; // S underdot
                   case 222 :
                       buf.append("\u1e24");
                       break; // H underdot
                   case 223 :
                       buf.append("\u1e0c");
                       break; // D underdot
                   case 224 :
                       buf.append("\u2021");
                       break; // daggerdbl
                   case 226 :
                       buf.append("\u1e36");
                       break; // L underdot
                   case 227 :
                       buf.append("\u0113");
                       break; // e macron
                   case 229 :
                       buf.append("\u1e5f");
                       break; // r underbar
                   case 230 :
                       buf.append("r\u0324");
                       break; // r underdieresis
                   case 231 :
                       buf.append("\u012a");
                       break; // I macron
                   case 232 :
                       buf.append("\u016b");
                       break; // u macron
                   case 233 :
                       buf.append("\u01e6c");
                       break; // T underdot
                   case 234 :
                       buf.append("\u1e64");
                       break; // S acute
                   case 235 :
                       buf.append("\u2020");
                       break; // dagger
                   case 236 :
                       buf.append("\u0115");
                       break; // e breve
                   case 237 :
                       buf.append("\u014f");
                       break; // o breve
                   case 238 :
                       buf.append("\u0100");
                       break; // A macron
                   case 239 :
                       buf.append("\u1e46");
                       break; // N underdot
                   case 241 :
                       buf.append("\u1e3b");
                       break; // l underbar
                   case 242 :
                       buf.append("\u016a");
                       break; // U macron
                   case 243 :
                       buf.append("\u0179");
                       break; // Z acute
                   case 244 :
                       buf.append("\u1e5a");
                       break; // R underdot
                   case 245 :
                       buf.append("\u0131");
                       break; // dotlessi
                   case 246 :
                       buf.append("\u1e47");
                       break; // n underdot
                   case 247 :
                       buf.append("\u1e49");
                       break; // n underbar
                   case 248 :
                       buf.append("\u0304");
                       break; // macron
                   case 249 :
                       buf.append("\u0306");
                       break; // breve
                   case 250 :
                       buf.append("\u1e25");
                       break; // h underdot
                   case 251 :
                       buf.append("\u012d");
                       break; // i breve
                   case 252 :
                       buf.append("\u0327");
                       break; // cedilla
                   case 253 :
                       buf.append("\u030b");
                       break; // hungarumlaut
                   case 254 :
                       buf.append("\u0328");
                       break; // ogonek
                   case 255 :
                       buf.append("\u030c");
                       break; // caron
                   case 130 :
                       buf.append("\u012b\u0303");
                       break; // imacron tilde
                   case 165 :
                       buf.append("\u1e5d");
                       break; // runderdot macron
                   case 170 :
                       buf.append("\u016b\0306");
                       break; // umacron breve
                   case 178 :
                       buf.append("\u0101\u0301");
                       break; // amacron acute
                   case 179 :
                       buf.append("\u016b\u0301");
                       break; // umacron acute
                   case 184 :
                       buf.append("\u0113\u0301");
                       break; // emacron acute
                   case 187 :
                       buf.append("\u0113\u0300");
                       break; // emacron breve
                   case 188 :
                       buf.append("\u014d\u0300");
                       break; // omacron breve
                   case 193 :
                       buf.append("\u0101\u0306");
                       break; // amacron breve
                   case 198 :
                       buf.append("\u0101\u0303");
                       break; // amacron tilde
                   case 199 :
                       buf.append("\u012b\u0301");
                       break; // imacron acute
                   case 218 :
                       buf.append("\u1e00");
                       break; // runderdotmacron acute
                   case 225 :
                       buf.append("\u1e5b\u0301");
                       break; // runderdot acute
                   case 228 :
                       buf.append("\u012b\u0306");
                       break; // imacron breve
                   case 240 :
                       buf.append("\u016b\u0303");
                       break; // umacron tilde
                   default :
                       buf.append(c);
                       break;
       }        }
     }      }
     return buf.toString();      return buf.toString();
   }    }
   static public String normanToUnicodeNew(String inp) {  
       static public String normanToUnicodeNew(String inp)
       {
     StringBuffer buf = new StringBuffer();      StringBuffer buf = new StringBuffer();
     for (int i = 0; i < inp.length(); i++) {          for (int i = 0; i < inp.length(); i++)
           {
       char c = inp.charAt(i);        char c = inp.charAt(i);
       switch (c) {              switch (c)
         case 1: buf.append("\u00d0"); break; // Eth              {
         case 2: buf.append("\u00f0"); break; // eth                  case 1 :
         case 3: buf.append("\u0141"); break; // Lslash                      buf.append("\u00d0");
         case 4: buf.append("\u0142"); break; // lslash                      break; // Eth
         case 5: buf.append("\u0160"); break; // S caron                  case 2 :
         case 6: buf.append("\u0161"); break; // s caron                      buf.append("\u00f0");
         case 7: buf.append("\u00dd"); break; // Y acute                      break; // eth
         case 8: buf.append("\u00fd"); break; // y acute                  case 3 :
         case 11: buf.append("\u00de"); break; // Thorn                      buf.append("\u0141");
         case 12: buf.append("\u00fe"); break; // thorn                      break; // Lslash
         case 14: buf.append("\u017d"); break; // Z caron                  case 4 :
         case 15: buf.append("\u017e"); break; // z caron                      buf.append("\u0142");
         case 17: buf.append("\u0073"); break; // asciitilde                      break; // lslash
         case 18: buf.append("j\u0305"); break; // j macron [does a single char exist?]                  case 5 :
         case 19: buf.append("^"); break; // circumflex                      buf.append("\u0160");
         case 20: buf.append("\u0303"); break; // tilde                      break; // S caron
         case 21: buf.append("\u00bd"); break; // onehalf                  case 6 :
         case 22: buf.append("\u00bc"); break; // onequarter                      buf.append("\u0161");
         case 23: buf.append("\u00b9"); break; // onesuperior                      break; // s caron
         case 24: buf.append("\u00be"); break; // threequarters                  case 7 :
         case 25: buf.append("\u00b3"); break; // threesuperior                      buf.append("\u00dd");
         case 26: buf.append("\u00b2"); break; // twosuperior                      break; // Y acute
         case 27: buf.append("\u00a6"); break; // brokenbar                  case 8 :
         case 28: buf.append("-"); break; // minus                      buf.append("\u00fd");
         case 29: buf.append("\u00d7"); break; // multiply                      break; // y acute
         case 39: buf.append("'"); break; // quotesingle                  case 11 :
         case 94: buf.append("\u0302"); break; // circumflex                      buf.append("\u00de");
         case 96: buf.append("\u0300"); break; // grave                      break; // Thorn
         case 196: buf.append("\u00c4"); break; // A dieresis                  case 12 :
         case 197: buf.append("\u00c5"); break; // A ring                      buf.append("\u00fe");
         case 201: buf.append("\u00c9"); break; // E acute                      break; // thorn
         case 209: buf.append("\u00d1"); break; // N tilde                  case 14 :
         case 214: buf.append("\u00d6"); break; // O dieresis                      buf.append("\u017d");
         case 220: buf.append("\u00dc"); break; // U dieresis                      break; // Z caron
         case 225: buf.append("\u00e1"); break; // a acute                  case 15 :
         case 224: buf.append("\u00e0"); break; // a grave                      buf.append("\u017e");
         case 226: buf.append("\u00e2"); break; // a circumflex                      break; // z caron
         case 228: buf.append("\u00e4"); break; // a dieresis                  case 17 :
         case 227: buf.append("\u00e3"); break; // a tilde                      buf.append("\u0073");
         case 229: buf.append("\u0101"); break; // a macron                      break; // asciitilde
         case 231: buf.append("\u00e7"); break; // c cedilla                  case 18 :
         case 233: buf.append("\u00e9"); break; // e acute                      buf.append("j\u0305");
         case 232: buf.append("\u00e8"); break; // e grave                      break; // j macron [does a single char exist?]
         case 234: buf.append("\u00ea"); break; // e circumflex                  case 19 :
         case 235: buf.append("\u00eb"); break; // e dieresis                      buf.append("^");
         case 237: buf.append("\u00ed"); break; // i acute                      break; // circumflex
         case 236: buf.append("\u00ec"); break; // i grave                  case 20 :
         case 238: buf.append("\u00ee"); break; // i circumflex                      buf.append("\u0303");
         case 239: buf.append("\u00ef"); break; // i dieresis                      break; // tilde
         case 241: buf.append("\u00f1"); break; // n tilde                  case 21 :
         case 243: buf.append("\u00f3"); break; // o acute                      buf.append("\u00bd");
         case 242: buf.append("\u00f2"); break; // o grave                      break; // onehalf
         case 244: buf.append("\u00f4"); break; // o circumflex                  case 22 :
         case 246: buf.append("\u00f6"); break; // o dieresis                      buf.append("\u00bc");
         case 245: buf.append("\u00f5"); break; // o tilde                      break; // onequarter
         case 250: buf.append("\u00fa"); break; // u acute                  case 23 :
         case 249: buf.append("\u00f9"); break; // u grave                      buf.append("\u00b9");
         case 251: buf.append("\u00fb"); break; // u circumflex                      break; // onesuperior
         case 252: buf.append("\u00fc"); break; // u dieresis                  case 24 :
         case 8224: buf.append("\u1e6d"); break; // t underdot                      buf.append("\u00be");
         case 176: buf.append("\u00b0"); break; // degree                      break; // threequarters
         case 162: buf.append("\u1ebd"); break; // e tilde                  case 25 :
         case 163: buf.append("\u00a3"); break; // sterling                      buf.append("\u00b3");
         case 167: buf.append("\u00a7"); break; // section                      break; // threesuperior
         case 182: buf.append("\u00b6"); break; // paragraph                  case 26 :
         case 223: buf.append("\u015b"); break; // s acute                      buf.append("\u00b2");
         case 174: buf.append("\u1e5b"); break; // r underdot                      break; // twosuperior
         case 169: buf.append("\u1e45"); break; // n overdot                  case 27 :
         case 180: buf.append("\u0301"); break; // acute                      buf.append("\u00a6");
         case 168: buf.append("\u0308"); break; // dieresis                      break; // brokenbar
         case 8800: buf.append("\u1e6d"); break; // t underdot                  case 28 :
         case 198: buf.append("\u00c6"); break; // AE                      buf.append("-");
         case 216: buf.append("\u014d"); break; // o macron                      break; // minus
         case 8734: buf.append("\u0129"); break; // i tilde                  case 29 :
         case 177: buf.append("\u00b1"); break; // plusminus                      buf.append("\u00d7");
         case 165: buf.append("\u012b"); break; // i macron                      break; // multiply
         case 181: buf.append("\u1e43"); break; // m underdot                  case 39 :
         case 8706: buf.append("\u1e0d"); break; // d underdot                      buf.append("'");
         case 8721: buf.append("\u1e63"); break; // s underdot                      break; // quotesingle
         case 960: buf.append("\u017a"); break; // z acute                  case 94 :
         case 8747: buf.append("\u1e45"); break; // n overdot                      buf.append("\u0302");
         case 937: buf.append("\u0169"); break; // u tilde                      break; // circumflex
         case 230: buf.append("\u00e6"); break; // ae                  case 96 :
         case 248: buf.append("\u00f8"); break; // oslash                      buf.append("\u0300");
         case 191: buf.append("\u0304\u0306"); break; // macron breve                      break; // grave
         case 172: buf.append("\u1e37"); break; //                   case 196 :
         case 8730: buf.append("j\u0305"); break; // j macron [does a single char exist?]                      buf.append("\u00c4");
         case 402: buf.append("\u0103"); break; // a breve                      break; // A dieresis
         case 8776: buf.append("\u016d"); break; // u breve                  case 197 :
         case 187: buf.append("\u1e42"); break; // M underdot                      buf.append("\u00c5");
         case 8230: buf.append("\u2026"); break; // ellipsis                      break; // A ring
         case 192: buf.append("\u00c0"); break; // A grave                  case 201 :
         case 195: buf.append("\u00c3"); break; // A tilde                      buf.append("\u00c9");
         case 213: buf.append("\u00d5"); break; // O tilde                      break; // E acute
         case 338: buf.append("m\u0306"); break; // m breve                  case 209 :
         case 339: buf.append("\u0153"); break; // oe                      buf.append("\u00d1");
         case 8211: buf.append("\u2013"); break; // endash                      break; // N tilde
         case 8212: buf.append("\u2014"); break; // emdash                  case 214 :
         case 8220: buf.append("\u201c"); break; // quotedblleft                      buf.append("\u00d6");
         case 8221: buf.append("\u201d"); break; // quotedblright                      break; // O dieresis
         case 8216: buf.append("\u2018"); break; // quoteleft                  case 220 :
         case 8217: buf.append("\u2019"); break; // quoteright                      buf.append("\u00dc");
         case 247: buf.append("\u1e37"); break; // l underring [actually underdot]                      break; // U dieresis
         case 9674: buf.append("\u1e41"); break; // m overdot                  case 225 :
         case 255: buf.append("n\u0306"); break; // n breve                      buf.append("\u00e1");
         case 376: buf.append("\u00d7"); break; // multiply                      break; // a acute
         case 8364: buf.append("\u1e5b"); break; // r underring [actually underdot]                  case 224 :
         case 8249: buf.append("\u1e44"); break; // N overdot                      buf.append("\u00e0");
         case 8250: buf.append("\u1e62"); break; // S underdot                      break; // a grave
         case 64257: buf.append("\u1e24"); break; // H underdot                  case 226 :
         case 64258: buf.append("\u1e0c"); break; // D underdot                      buf.append("\u00e2");
         case 8225: buf.append("\u2021"); break; // daggerdbl                      break; // a circumflex
         case 8218: buf.append("\u1e36"); break; // L underdot                  case 228 :
         case 8222: buf.append("\u0113"); break; // e macron                      buf.append("\u00e4");
         case 194: buf.append("\u1e5f"); break; // r underbar                      break; // a dieresis
         case 202: buf.append("r\u0324"); break; // r underdieresis                  case 227 :
         case 193: buf.append("\u012a"); break; // I macron                      buf.append("\u00e3");
         case 203: buf.append("\u016b"); break; // u macron                      break; // a tilde
         case 200: buf.append("\u1e6c"); break; // T underdot                  case 229 :
         case 205: buf.append("\u1e64"); break; // S acute                      buf.append("\u0101");
         case 206: buf.append("\u2020"); break; // dagger                      break; // a macron
         case 207: buf.append("\u0115"); break; // e breve                  case 231 :
         case 204: buf.append("\u014f"); break; // o breve                      buf.append("\u00e7");
         case 211: buf.append("\u0100"); break; // A macron                      break; // c cedilla
         case 212: buf.append("\u1e46"); break; // N underdot                  case 233 :
         case 210: buf.append("\u1e3b"); break; // l underbar                      buf.append("\u00e9");
         case 218: buf.append("\u016a"); break; // U macron                      break; // e acute
         case 219: buf.append("\u0179"); break; // Z acute                  case 232 :
         case 217: buf.append("\u1e5a"); break; // R underdot                      buf.append("\u00e8");
         case 305: buf.append("\u0131"); break; // dotlessi                      break; // e grave
         case 710: buf.append("\u1e47"); break; // n underdot                  case 234 :
         case 732: buf.append("\u1e49"); break; // n underbar                      buf.append("\u00ea");
         case 175: buf.append("\u0304"); break; // macron                      break; // e circumflex
         case 728: buf.append("\u0306"); break; // breve                  case 235 :
         case 729: buf.append("\u1e25"); break; // h underdot                      buf.append("\u00eb");
         case 730: buf.append("\u012d"); break; // i breve                      break; // e dieresis
         case 184: buf.append("\u0327"); break; // cedilla                  case 237 :
         case 733: buf.append("\u030b"); break; // hungarumlaut                      buf.append("\u00ed");
         case 731: buf.append("\u0328"); break; // ogonek                      break; // i acute
         case 711: buf.append("\u030c"); break; // caron                  case 236 :
         case 199: buf.append("\u012b\u0303"); break; // imacron tilde                      buf.append("\u00ec");
         case 8226: buf.append("\u1e5d"); break; // runderdot macron                      break; // i grave
         case 8482: buf.append("\u016b\0306"); break; // umacron breve                  case 238 :
         case 8804: buf.append("\u0101\u0301"); break; // amacron acute                      buf.append("\u00ee");
         case 8805: buf.append("\u016b\u0301"); break; // umacron acute                      break; // i circumflex
         case 8719: buf.append("\u0113\u0301"); break; // emacron acute                  case 239 :
         case 170: buf.append("\u0113\u0300"); break; // emacron breve                      buf.append("\u00ef");
         case 186: buf.append("\u014d\u0300"); break; // omacron breve                      break; // i dieresis
         case 161: buf.append("\u0101\u0306"); break; // amacron breve                  case 241 :
         case 8710: buf.append("\u0101\u0303"); break; // amacron tilde                      buf.append("\u00f1");
         case 171: buf.append("\u012b\u0301"); break; // imacron acute                      break; // n tilde
         case 8260: buf.append("\u1e00"); break; // runderdotmacron acute                  case 243 :
         case 183: buf.append("\u1e5b\u0301"); break; // runderdot acute                      buf.append("\u00f3");
         case 8240: buf.append("\u012b\u0306"); break; // imacron breve                      break; // o acute
         case 63743: buf.append("\u016b\u0303"); break; // umacron tilde                  case 242 :
         default: buf.append(c); break;                      buf.append("\u00f2");
                       break; // o grave
                   case 244 :
                       buf.append("\u00f4");
                       break; // o circumflex
                   case 246 :
                       buf.append("\u00f6");
                       break; // o dieresis
                   case 245 :
                       buf.append("\u00f5");
                       break; // o tilde
                   case 250 :
                       buf.append("\u00fa");
                       break; // u acute
                   case 249 :
                       buf.append("\u00f9");
                       break; // u grave
                   case 251 :
                       buf.append("\u00fb");
                       break; // u circumflex
                   case 252 :
                       buf.append("\u00fc");
                       break; // u dieresis
                   case 8224 :
                       buf.append("\u1e6d");
                       break; // t underdot
                   case 176 :
                       buf.append("\u00b0");
                       break; // degree
                   case 162 :
                       buf.append("\u1ebd");
                       break; // e tilde
                   case 163 :
                       buf.append("\u00a3");
                       break; // sterling
                   case 167 :
                       buf.append("\u00a7");
                       break; // section
                   case 182 :
                       buf.append("\u00b6");
                       break; // paragraph
                   case 223 :
                       buf.append("\u015b");
                       break; // s acute
                   case 174 :
                       buf.append("\u1e5b");
                       break; // r underdot
                   case 169 :
                       buf.append("\u1e45");
                       break; // n overdot
                   case 180 :
                       buf.append("\u0301");
                       break; // acute
                   case 168 :
                       buf.append("\u0308");
                       break; // dieresis
                   case 8800 :
                       buf.append("\u1e6d");
                       break; // t underdot
                   case 198 :
                       buf.append("\u00c6");
                       break; // AE
                   case 216 :
                       buf.append("\u014d");
                       break; // o macron
                   case 8734 :
                       buf.append("\u0129");
                       break; // i tilde
                   case 177 :
                       buf.append("\u00b1");
                       break; // plusminus
                   case 165 :
                       buf.append("\u012b");
                       break; // i macron
                   case 181 :
                       buf.append("\u1e43");
                       break; // m underdot
                   case 8706 :
                       buf.append("\u1e0d");
                       break; // d underdot
                   case 8721 :
                       buf.append("\u1e63");
                       break; // s underdot
                   case 960 :
                       buf.append("\u017a");
                       break; // z acute
                   case 8747 :
                       buf.append("\u1e45");
                       break; // n overdot
                   case 937 :
                       buf.append("\u0169");
                       break; // u tilde
                   case 230 :
                       buf.append("\u00e6");
                       break; // ae
                   case 248 :
                       buf.append("\u00f8");
                       break; // oslash
                   case 191 :
                       buf.append("\u0304\u0306");
                       break; // macron breve
                   case 172 :
                       buf.append("\u1e37");
                       break; // 
                   case 8730 :
                       buf.append("j\u0305");
                       break; // j macron [does a single char exist?]
                   case 402 :
                       buf.append("\u0103");
                       break; // a breve
                   case 8776 :
                       buf.append("\u016d");
                       break; // u breve
                   case 187 :
                       buf.append("\u1e42");
                       break; // M underdot
                   case 8230 :
                       buf.append("\u2026");
                       break; // ellipsis
                   case 192 :
                       buf.append("\u00c0");
                       break; // A grave
                   case 195 :
                       buf.append("\u00c3");
                       break; // A tilde
                   case 213 :
                       buf.append("\u00d5");
                       break; // O tilde
                   case 338 :
                       buf.append("m\u0306");
                       break; // m breve
                   case 339 :
                       buf.append("\u0153");
                       break; // oe
                   case 8211 :
                       buf.append("\u2013");
                       break; // endash
                   case 8212 :
                       buf.append("\u2014");
                       break; // emdash
                   case 8220 :
                       buf.append("\u201c");
                       break; // quotedblleft
                   case 8221 :
                       buf.append("\u201d");
                       break; // quotedblright
                   case 8216 :
                       buf.append("\u2018");
                       break; // quoteleft
                   case 8217 :
                       buf.append("\u2019");
                       break; // quoteright
                   case 247 :
                       buf.append("\u1e37");
                       break; // l underring [actually underdot]
                   case 9674 :
                       buf.append("\u1e41");
                       break; // m overdot
                   case 255 :
                       buf.append("n\u0306");
                       break; // n breve
                   case 376 :
                       buf.append("\u00d7");
                       break; // multiply
                   case 8364 :
                       buf.append("\u1e5b");
                       break; // r underring [actually underdot]
                   case 8249 :
                       buf.append("\u1e44");
                       break; // N overdot
                   case 8250 :
                       buf.append("\u1e62");
                       break; // S underdot
                   case 64257 :
                       buf.append("\u1e24");
                       break; // H underdot
                   case 64258 :
                       buf.append("\u1e0c");
                       break; // D underdot
                   case 8225 :
                       buf.append("\u2021");
                       break; // daggerdbl
                   case 8218 :
                       buf.append("\u1e36");
                       break; // L underdot
                   case 8222 :
                       buf.append("\u0113");
                       break; // e macron
                   case 194 :
                       buf.append("\u1e5f");
                       break; // r underbar
                   case 202 :
                       buf.append("r\u0324");
                       break; // r underdieresis
                   case 193 :
                       buf.append("\u012a");
                       break; // I macron
                   case 203 :
                       buf.append("\u016b");
                       break; // u macron
                   case 200 :
                       buf.append("\u1e6c");
                       break; // T underdot
                   case 205 :
                       buf.append("\u1e64");
                       break; // S acute
                   case 206 :
                       buf.append("\u2020");
                       break; // dagger
                   case 207 :
                       buf.append("\u0115");
                       break; // e breve
                   case 204 :
                       buf.append("\u014f");
                       break; // o breve
                   case 211 :
                       buf.append("\u0100");
                       break; // A macron
                   case 212 :
                       buf.append("\u1e46");
                       break; // N underdot
                   case 210 :
                       buf.append("\u1e3b");
                       break; // l underbar
                   case 218 :
                       buf.append("\u016a");
                       break; // U macron
                   case 219 :
                       buf.append("\u0179");
                       break; // Z acute
                   case 217 :
                       buf.append("\u1e5a");
                       break; // R underdot
                   case 305 :
                       buf.append("\u0131");
                       break; // dotlessi
                   case 710 :
                       buf.append("\u1e47");
                       break; // n underdot
                   case 732 :
                       buf.append("\u1e49");
                       break; // n underbar
                   case 175 :
                       buf.append("\u0304");
                       break; // macron
                   case 728 :
                       buf.append("\u0306");
                       break; // breve
                   case 729 :
                       buf.append("\u1e25");
                       break; // h underdot
                   case 730 :
                       buf.append("\u012d");
                       break; // i breve
                   case 184 :
                       buf.append("\u0327");
                       break; // cedilla
                   case 733 :
                       buf.append("\u030b");
                       break; // hungarumlaut
                   case 731 :
                       buf.append("\u0328");
                       break; // ogonek
                   case 711 :
                       buf.append("\u030c");
                       break; // caron
                   case 199 :
                       buf.append("\u012b\u0303");
                       break; // imacron tilde
                   case 8226 :
                       buf.append("\u1e5d");
                       break; // runderdot macron
                   case 8482 :
                       buf.append("\u016b\0306");
                       break; // umacron breve
                   case 8804 :
                       buf.append("\u0101\u0301");
                       break; // amacron acute
                   case 8805 :
                       buf.append("\u016b\u0301");
                       break; // umacron acute
                   case 8719 :
                       buf.append("\u0113\u0301");
                       break; // emacron acute
                   case 170 :
                       buf.append("\u0113\u0300");
                       break; // emacron breve
                   case 186 :
                       buf.append("\u014d\u0300");
                       break; // omacron breve
                   case 161 :
                       buf.append("\u0101\u0306");
                       break; // amacron breve
                   case 8710 :
                       buf.append("\u0101\u0303");
                       break; // amacron tilde
                   case 171 :
                       buf.append("\u012b\u0301");
                       break; // imacron acute
                   case 8260 :
                       buf.append("\u1e00");
                       break; // runderdotmacron acute
                   case 183 :
                       buf.append("\u1e5b\u0301");
                       break; // runderdot acute
                   case 8240 :
                       buf.append("\u012b\u0306");
                       break; // imacron breve
                   case 63743 :
                       buf.append("\u016b\u0303");
                       break; // umacron tilde
                   default :
                       buf.append(c);
                       break;
       }        }
     }      }
     return buf.toString();      return buf.toString();
   }    }
   
   public static ConversionProperties getFieldNamesAndDestTableName(String create,String query,String tableName )     public static ConversionProperties getFieldNamesAndDestTableName(String create,String query,String tableName ) 
   {    {
     String[] fieldNames = null;      String[] fieldNames = null;
     String destTableName = null;      String destTableName = null;
     // determine destTableName from createStatement or from source table name          // determine destTableName from createStatement or from source table
           // name
     if (!create.equals(""))      if (!create.equals(""))
     {      {
       int fromIndex = create.toLowerCase().indexOf("table") + 5;        int fromIndex = create.toLowerCase().indexOf("table") + 5;
Line 2647  class Convert Line 3939  class Convert
       destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "").trim();        destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "").trim();
       System.out.println("destTable " + destTableName);        System.out.println("destTable " + destTableName);
       // retrieve field_names from select statement        // retrieve field_names from select statement
       // TODO problem with different fieldNames in create statement will overwrite them              // TODO problem with different fieldNames in create statement will
               // overwrite them
       if (query.indexOf("*") < 0)        if (query.indexOf("*") < 0)
       {        {
         int selectEndIndex = query.indexOf("from");          int selectEndIndex = query.indexOf("from");
Line 2663  class Convert Line 3956  class Convert
           fieldIndex++;            fieldIndex++;
         }          }
   
       } else              }
               else
       {        {
         // use create statement for field names          // use create statement for field names
         StringTokenizer tokenizer = new StringTokenizer(create.substring(toIndex + 1, endIndex), ",");          StringTokenizer tokenizer = new StringTokenizer(create.substring(toIndex + 1, endIndex), ",");
Line 2679  class Convert Line 3973  class Convert
           fieldIndex++;            fieldIndex++;
         }          }
       }        }
     } else          }
           else
     {      {
       destTableName = convertText(tableName);        destTableName = convertText(tableName);
   
Line 2694  class Convert Line 3989  class Convert
         while (tokenizer.hasMoreTokens())          while (tokenizer.hasMoreTokens())
         {          {
           String fieldName = tokenizer.nextToken().trim();            String fieldName = tokenizer.nextToken().trim();
           fieldNames[fieldIndex] = convertText(fieldName);                      fieldNames[fieldIndex] = beanDest.getQC() + convertText(fieldName) + beanDest.getQC();
          // System.out.println("field "+ fieldNames[fieldIndex]);           // System.out.println("field "+ fieldNames[fieldIndex]);
           fieldIndex++;            fieldIndex++;
         }          }
   
       } else              }
               else
       {        {
         Vector fieldNamesVec = bean.getColumnNames();          Vector fieldNamesVec = bean.getColumnNames();
         fieldNames = new String[fieldNamesVec.size()];          fieldNames = new String[fieldNamesVec.size()];
Line 2707  class Convert Line 4003  class Convert
         for (Iterator iter = fieldNamesVec.iterator(); iter.hasNext();)          for (Iterator iter = fieldNamesVec.iterator(); iter.hasNext();)
         {          {
           String element = (String) iter.next();            String element = (String) iter.next();
           fieldNames[++fieldIndex] = bean.getQC() + convertText(element) + bean.getQC();                      fieldNames[++fieldIndex] = beanDest.getQC() + convertText(element) + beanDest.getQC();
          // System.out.println("field " + fieldNames[fieldIndex]);           // System.out.println("field " + fieldNames[fieldIndex]);
         }          }
       }        }
     }      }
     return new ConversionProperties(destTableName,fieldNames);      return new ConversionProperties(destTableName,fieldNames);
   }    }
   
       /**
        * creates an insert into statement for the specified table and given field
        * names
        * 
        * @param destTableName
        * @param fieldNames
        * @return
        */
       public static StringBuffer createInsertCommand(String destTableName, String[] fieldNames)
       {
           StringBuffer command = new StringBuffer();
           command.append("INSERT  INTO ");
           command.append(beanDest.getQC());
           command.append(destTableName); //convertText((String)
           // names.get(tbIndex)));
           command.append(beanDest.getQC());
           command.append(" (");
           for (int i = 0; i < fieldNames.length; i++)
           {
               command.append(fieldNames[i]);
               if (i < fieldNames.length - 1)
                   command.append(",");
           }
           command.append(") ");
   
           command.append(" values ( ");
           // add a question marks for every field
           for (int i = 0; i < bean.getColumnNames().size() - 1; ++i)
               command.append("?,");
           command.append("?)");
           return command;
       }
   
       public static StringBuffer createUpdateCommand(String destTableName, String[] fieldNames, String id)
       {
           StringBuffer command = new StringBuffer();
   
           command.append("UPDATE ");
           command.append(beanDest.getQC());
           command.append(destTableName);
           //command.append(convertText((String) names.get(tbIndex)));
           command.append(beanDest.getQC());
           command.append(" SET  ");
   
           int size = bean.getColumnNames().size();
           for (int i = 0; i < size - 1; ++i)
               command.append(fieldNames[i] + " = ? ,");
           command.append(fieldNames[size - 1] + " = ? ");
           command.append("WHERE " + id + " =  ?");
           return command;
       }
   
       public static StringBuffer createDeleteCommand(String destTableName, String idField)
       {
           StringBuffer 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());
           command.append("WHERE " + idField + " =  ?");
           return command;
       }
   
       public void makeTest(String table, String idField, String tempQuery) throws Exception
       {
           int counter = 0;
   
           // ****** test code *****
   
           bean.getConnection();
           ResultSet resultSet = null;
           String lastResult = "P227634.11";//"P227625.79554";//"P227625.77391";//"P116034.970998";
           String myQuery = "select " + bean.getQC() + idField + bean.getQC() + ",serial " + " from " + bean.getQC() + table + bean.getQC();
           System.out.println("Query is now " + myQuery);
           JDialog statusDialog = new JDialog();
           statusDialog.setTitle("Status Information");
           JLabel status = new JLabel("actual DataSet : ");
           JLabel status2 = new JLabel(Integer.toString(++counter));
           JLabel status3 = new JLabel(lastResult);
   
           JPanel statusPanel = new JPanel();
           JPanel statusPanel2 = new JPanel();
           statusPanel.add(status);
           statusPanel.add(status2);
           statusPanel2.add(status3);
           statusDialog.getContentPane().add(statusPanel, "North");
           statusDialog.getContentPane().add(statusPanel2, "Center");
           statusDialog.setLocation(400, 500);
           statusDialog.setSize(300, 150);
           statusDialog.setVisible(true);
           while (true)
           {
               if (!statusDialog.isVisible())
                   statusDialog.setVisible(true);
               tempQuery = myQuery + " where " + bean.getQC() + idField + bean.getQC() + ">'" + lastResult + "'";
               resultSet = bean.makeQuery(tempQuery, 1);
               if (resultSet == null)
               {
                   System.out.println("lastResult was " + lastResult + " counter was " + counter);
                   break;
               }
               else
               {
                   resultSet.next();
                   lastResult = resultSet.getString(1);
                   counter++;
                   status2.setText(Integer.toString(counter));
                   status3.setText(lastResult + " " + resultSet.getString(2));
                   if (counter % 100 == 0)
                   {
                       System.out.println("actual Result was " + lastResult + " counter was " + counter);
                       // break;
                   }
               }
               resultSet = null;
           }
           System.exit(0);
   
           //****** end Test ******
   
       }
 }  }
   

Removed from v.1.64  
changed lines
  Added in v.1.83


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