Diff for /FM2SQL/Attic/Convert.java between versions 1.58 and 1.71

version 1.58, 2004/06/21 11:31:35 version 1.71, 2004/08/09 11:36:18
Line 19  import java.io.File; Line 19  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.InputStream;
 import java.io.InputStreamReader;  import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;  import java.io.OutputStreamWriter;
 import java.io.PrintStream;  import java.io.PrintStream;
 import java.io.UnsupportedEncodingException;  import java.io.UnsupportedEncodingException;
   import java.net.URL;
 import java.sql.PreparedStatement;  import java.sql.PreparedStatement;
 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;
Line 39  import com.exploringxml.xml.Xparse; Line 43  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();
   
Line 65  class Convert Line 94  class Convert
       System.out.println("Usage: java Convert <xml config file>");        System.out.println("Usage: java Convert <xml config file>");
       System.exit(-1);        System.exit(-1);
     }      }
     if (!(new File(args[0]).exists()))  
       System.exit(0);  
     try      try
     {      {
       file = new FileOutputStream("./log.txt");        file = new FileOutputStream("./log.txt");
Line 75  class Convert Line 102  class Convert
       e1.printStackTrace();        e1.printStackTrace();
     }      }
     PrintStream stream = new PrintStream(file);      PrintStream stream = new PrintStream(file);
     System.setOut(stream);      // System.setOut(stream);
     System.setErr(stream);      //System.setErr(stream);
   
     readXMLFile(args[0]);      readXMLFile(args[0]);
       if (!(new File(args[0]).exists()))
         System.exit(0);
   
     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);
   }    }
Line 567  class Convert Line 598  class Convert
         // System.exit(0);          // System.exit(0);
   
         // determine destTableName from createStatement or from source table name          // determine destTableName from createStatement or from source table name
         if (!creates.get(tbIndex).equals(""))          ConversionProperties prop = getFieldNamesAndDestTableName(creates.get(tbIndex).toString(), query, names.get(tbIndex).toString());
         {          destTableName = prop.destTableName;
           String create = creates.get(tbIndex).toString().toLowerCase();          fieldNames = prop.fieldNames;
           int fromIndex = create.indexOf("table") + 5;  
           int toIndex = create.indexOf("(");  
           int endIndex = create.indexOf(")", toIndex);  
   
           destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "").trim();  
           System.out.println("destTable " + destTableName);  
           // retrieve field_names from select statement  
           if (query.indexOf("*") < 0)  
           {  
             int selectEndIndex = query.indexOf("from");  
             StringTokenizer tokenizer = new StringTokenizer(query.substring(6, selectEndIndex), ",");  
             int numFields = tokenizer.countTokens();  
             fieldNames = new String[numFields];  
             int fieldIndex = 0;  
             while (tokenizer.hasMoreTokens())  
             {  
               String fieldName = tokenizer.nextToken().trim();  
               fieldNames[fieldIndex] = convertText(fieldName);  
               System.out.println(fieldNames[fieldIndex]);  
               fieldIndex++;  
             }  
   
           } else  
           {  
             // use create statement for field names  
             StringTokenizer tokenizer = new StringTokenizer(create.substring(toIndex + 1, endIndex), ",");  
             int numFields = tokenizer.countTokens();  
             fieldNames = new String[numFields];  
             int fieldIndex = 0;  
             while (tokenizer.hasMoreTokens())  
             {  
               String fieldName = tokenizer.nextToken().trim();  
               int index = fieldName.lastIndexOf(" ");  
               fieldNames[fieldIndex] = fieldName.substring(0, index);  
               System.out.println(fieldNames[fieldIndex]);  
               fieldIndex++;  
             }  
           }  
         } else  
         {  
           destTableName = convertText(names.get(tbIndex).toString());  
   
           // retrieve field_names from select statement  
           if (query.indexOf("*") < 0)  
           {  
             int selectEndIndex = query.indexOf("from");  
             StringTokenizer tokenizer = new StringTokenizer(query.substring(6, selectEndIndex), ",");  
             int numFields = tokenizer.countTokens();  
             fieldNames = new String[numFields];  
             int fieldIndex = 0;  
             while (tokenizer.hasMoreTokens())  
             {  
               String fieldName = tokenizer.nextToken().trim();  
               fieldNames[fieldIndex] = convertText(fieldName);  
              // System.out.println("field "+ fieldNames[fieldIndex]);  
               fieldIndex++;  
             }  
   
           } else  
           {  
             Vector fieldNamesVec = bean.getColumnNames();  
             fieldNames = new String[fieldNamesVec.size()];  
             int fieldIndex = -1;  
             for (Iterator iter = fieldNamesVec.iterator(); iter.hasNext();)  
             {  
               String element = (String) iter.next();  
               fieldNames[++fieldIndex] = bean.getQC() + convertText(element) + bean.getQC();  
              // System.out.println("field " + fieldNames[fieldIndex]);  
             }  
           }  
         }  
         if (mode == Convert.DataBase.CONVERT_MODE)          if (mode == Convert.DataBase.CONVERT_MODE)
         {          {
   
Line 1192  class Convert Line 1152  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;
   
Line 1211  class Convert Line 1172  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[] { 1, 1, i, 1 });
         Node node1 = root.find("convert/source/database/user", new int[] { 1, 1, i, 1, 1 });          Node node1 = root.find("convert/source/database/user", new int[] { 1, 1, i, 1, 1 });
Line 1218  class Convert Line 1180  class Convert
         Node node3 = root.find("convert/source/database", new int[] { 1, 1, i });          Node node3 = root.find("convert/source/database", new int[] { 1, 1, i });
         Node nodeMode = root.find("convert/source/database/mode", new int[] { 1, 1, i, 1, 1 });          Node nodeMode = root.find("convert/source/database/mode", new int[] { 1, 1, i, 1, 1 });
         Node delimiterNode = root.find("convert/source/database/delimiter", new int[] { 1, 1, i, 1, 1 });          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");
         if (node == null)          if (node == null)
Line 1228  class Convert Line 1192  class Convert
           throw new Error("parse error password tag missing");            throw new Error("parse error password tag missing");
         if (delimiterNode != null)          if (delimiterNode != null)
           delimiter = delimiterNode.getCharacters();            delimiter = delimiterNode.getCharacters();
           if (useNormanToUnicodeMapper != null)
           {
             database.setUseNormanToUnicodeMapper(Boolean.valueOf(useNormanToUnicodeMapper.getCharacters()).booleanValue());
             System.out.println("useMapper " + Boolean.valueOf(useNormanToUnicodeMapper.getCharacters().trim()).booleanValue());
           }
   
         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 1249  class Convert Line 1219  class Convert
           mode = DataBase.UPDATE_MODE;            mode = DataBase.UPDATE_MODE;
         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 1275  class Convert Line 1247  class Convert
           String name = (String) node4.attributes.get("name");            String name = (String) node4.attributes.get("name");
           String layout = (String) node4.attributes.get("layout");            String layout = (String) node4.attributes.get("layout");
           String id = (String) node4.attributes.get("id");            String id = (String) node4.attributes.get("id");
             String 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 1282  class Convert Line 1256  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 1300  class Convert Line 1278  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();
Line 1317  class Convert Line 1296  class Convert
       for (Iterator iter = databases.iterator(); iter.hasNext();)        for (Iterator iter = databases.iterator(); iter.hasNext();)
       {        {
         DataBase db = (DataBase) iter.next();          DataBase db = (DataBase) iter.next();
         if (mode != DataBase.UPDATE_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)
           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)
           {
             user = bean.user;
             passwd = bean.passwd;
             userDest = database.user;
             passwdDest = database.passwd;
   
             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();
Line 1329  class Convert Line 1316  class Convert
     {      {
   
       e.printStackTrace();        e.printStackTrace();
   
       } finally
       {
         bean.closeAllConnections();
         beanDest.closeAllConnections();
     }      }
   }    }
   public static Vector getXMLConfig(String xmlFile)    public static Vector getXMLConfig(String xmlFile)
Line 1391  class Convert Line 1383  class Convert
         Node node3 = root.find("convert/source/database", new int[] { 1, 1, i });          Node node3 = root.find("convert/source/database", new int[] { 1, 1, i });
         Node nodeMode = root.find("convert/source/database/mode", new int[] { 1, 1, i, 1, 1 });          Node nodeMode = root.find("convert/source/database/mode", new int[] { 1, 1, i, 1, 1 });
         Node delimiterNode = root.find("convert/source/database/delimiter", new int[] { 1, 1, i, 1, 1 });          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();
           if (useNormanToUnicodeMapper != null)
           {
             database.setUseNormanToUnicodeMapper(Boolean.valueOf(useNormanToUnicodeMapper.getCharacters()).booleanValue());
             System.out.println("useMapper " + Boolean.valueOf(useNormanToUnicodeMapper.getCharacters().trim()).booleanValue());
           }
   
         if (node3 == null)          if (node3 == null)
           throw new Error("parse error database tag missing");            throw new Error("parse error database tag missing");
         if (node == null)          if (node == null)
Line 1548  class Convert Line 1547  class Convert
   {    {
     try      try
     {      {
         InputStream stream = null;
   
         if (xmlFile.indexOf("file://") >= 0 || xmlFile.indexOf("http://") >= 0)
         {
           URL url = new URL(xmlFile);
           stream = url.openStream();
         } else
       // read XML Metadata from a file        // read XML Metadata from a file
       FileInputStream fi = new FileInputStream(xmlFile);          stream = new FileInputStream(xmlFile);
       InputStreamReader isr = new InputStreamReader(fi, "UTF-8");        InputStreamReader isr = new InputStreamReader(stream, "UTF-8");
       BufferedReader buffr = new BufferedReader(isr);        BufferedReader buffr = new BufferedReader(isr);
       StringBuffer sb = new StringBuffer();        StringBuffer sb = new StringBuffer();
       int c = 0;        int c = 0;
Line 1566  class Convert Line 1572  class Convert
       e.printStackTrace();        e.printStackTrace();
     }      }
   }    }
     /**
        * Helper class for Conversion etc
        * Holds the some data
        * @author rogo
        *
        */
   
     public static class ConversionProperties
     {
       String destTableName;
       String[] fieldNames;
       public ConversionProperties()
       {
       }
       public ConversionProperties(String destTableName, String[] fieldNames)
       {
         this.destTableName = destTableName;
         this.fieldNames = fieldNames;
   
       }
   
     }
   /**    /**
    * Helper class for XML-File parsing     * Helper class for XML-File parsing
    * Holds the parsed data     * Holds the parsed data
Line 1582  class Convert Line 1609  class Convert
     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;
   
     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;
   
     int mode = -1;      int mode = -1;
   
Line 1601  class Convert Line 1635  class Convert
       this.bean.setIDVector(ids);        this.bean.setIDVector(ids);
     }      }
     /**      /**
        * @param indexListVec
        */
       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       * writes the data contained in this object to the buffered writer
      * * @param buffr       * * @param buffr
      * @throws Exception       * @throws Exception
Line 1624  class Convert Line 1668  class Convert
         modeString = "delete";          modeString = "delete";
   
       buffr.write("      <mode>" + modeString + "</mode>\n");        buffr.write("      <mode>" + modeString + "</mode>\n");
         buffr.write("      <usenormantounicodemapper>" + useNormanToUnicodeMapper + "</usenormantounicodemapper>\n");
   
       int index = 0;        int index = 0;
       while (index < tables.size())        while (index < tables.size())
       {        {
Line 1632  class Convert Line 1678  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 1642  class Convert Line 1690  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;
Line 1885  class Convert Line 1946  class Convert
   } // to method    } // to method
       
   /**    /**
      * synchronize method based on delete method code
      * 
      * @param source
      * @param destination
      * @param names
      * @param layouts
      * @param selects
      * @param creates
      * @param ids
      * @param mode
      * @throws Exception
      */
     // TODO implement append,update and delete in one method
     // 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, String delimiter, Vector indexList)
       throws Exception
     {
       System.out.println(" bin in synchronize!!!");
       FM2SQL.ProgressDialog dialog = null;
       if (FM2SQL.fmInstance != null)
       {
         dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean);
         dialog.setTitle("Synchronize running ...");
         dialog.title.setText("Getting table data ...");
         dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x + (FM2SQL.fmInstance.getWidth() - 400) / 2, FM2SQL.fmInstance.getLocationOnScreen().y + (FM2SQL.fmInstance.getHeight() - 250) / 2);
         dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
         FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
         dialog.thread = Thread.currentThread();
       }
       // setting user and passwd 
       bean.setUserAndPasswd(user, passwd);
       // setting user and passwd 
       beanDest.setUserAndPasswd(userDest, passwdDest);
       if (dialog != null)
         dialog.setSize(400, 250);
       StringBuffer command = null;
       String query = null;
       try
       {
         //bean.setConnection("jdbc:fmpro:http://141.14.237.74:8050");    
         //bean.setConnection("jdbc:postgresql://erebos/test","postgres","rogo");
         bean.setConnection(source);
         if (names == null)
           names = bean.getTableNames();
         // Collections.sort(names);
         int tbIndex = 1;
   
         // System.out.println("Start at "+names.indexOf("archimedes_facsimiles"));
         for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)
         {
           Vector[] result = null;
           java.util.TreeSet myIds = new TreeSet();
           java.util.TreeSet myIdsDest = new TreeSet();
           int deltaID = 1;
           String idField = "";
           String destTableName = "";
   
           try
           {
             query = "select * from " + bean.getQC() + names.get(tbIndex).toString() + bean.getQC();
             String layout = (layouts.isEmpty()) ? "" : layouts.get(tbIndex).toString();
             query = (selects != null) ? selects.get(tbIndex).toString() : query;
             //if  vectors[1].get(i) != null)
             if (!layout.equals(""))
             {
               layout = " layout " + bean.getQC() + layout + bean.getQC();
               String name = names.get(tbIndex).toString();
               StringBuffer queryLayout = new StringBuffer(query);
               queryLayout.insert(queryLayout.indexOf(name) + name.length() + 1, " " + layout);
               query = queryLayout.toString();
               System.out.println("added layout  " + query);
   
             }
             if (dialog != null)
             {
               dialog.title.setText("Getting table data ...");
               dialog.table.setText(names.get(tbIndex).toString());
               dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size());
               dialog.show();
             }
             bean.getConnection();
             bean.makeQuery(query, 50);
             idField = ids.get(tbIndex).toString();
   
           } catch (Exception e)
           {
             continue;
           }
           // determine destTableName from createStatement or from source table name
           if (!creates.get(tbIndex).equals(""))
           {
             String create = creates.get(tbIndex).toString().toLowerCase();
             int fromIndex = create.indexOf("table") + 5;
             int toIndex = create.indexOf("(");
             destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "").trim();
             System.out.println("destTable " + destTableName);
   
           } else
             destTableName = convertText(names.get(tbIndex).toString());
   
           // for id kram
           Vector vec = null;
           Vector vecDest = null;
           //      tempo
           beanDest.setConnection(destination);
           int rowCount = (idField != "") ? myIds.size() : bean.getRowCount(query);
           String tempID = bean.getQC() + idField + bean.getQC();
           String tempIDdest = beanDest.getQC() + convertText(idField) + beanDest.getQC();
   
           int endIndex = -1;
           String tempQuery = query;
           String destQuery = query.replaceAll(names.get(tbIndex).toString(), destTableName);
           String tempQueryDest = destQuery;
           // remove extra query parts destQuery.substring(0,destQuery.lastIndexOf(destTableName)+destTableName.length()+1);
           System.out.println("new Query " + tempQueryDest);
           if (!idField.equals(""))
           {
             long startTime = System.currentTimeMillis();
             int counter = -1;
             TreeSet linesToDelete = null;
             PreparedStatement delPSt = null;
             while (true)
             {
               ++counter;
               if (counter == 0 && dialog != null)
                 dialog.title.setText("Check if data  is available");
               else if (dialog != null)
                 dialog.title.setText("Check if more  data  is available");
               myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex), tempQuery, 0);
               myIdsDest = beanDest.getIDVector(convertText(idField), destTableName, tempQueryDest, 0);
               //System.out.println("status of remove  "+myIds.remove("b015892"));
               if (myIds.isEmpty())
                 break;
               vec = new Vector(myIds);
               vecDest = new Vector(myIdsDest);
               rowCount = vec.size();
               // Deletion will work this way
               Vector deleted = new Vector(vec);
   
               TreeSet linesToAppend = new TreeSet(vec);
               linesToAppend.addAll(vec);
               linesToDelete = new TreeSet(vecDest);
               // remove all lines that are already in dest database
               linesToAppend.removeAll(vecDest);
               // remove all lines that should not be deleted
               linesToDelete.removeAll(deleted);
               System.out.println("linesToAppend " + linesToAppend + " " + destTableName);
               System.out.println("linesToDelete " + linesToDelete + " " + destTableName);
               System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIds.size());
               deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls);
               ConversionProperties prop = getFieldNamesAndDestTableName(creates.get(tbIndex).toString(), query, names.get(tbIndex).toString());
               StringBuffer insCommand = createInsertCommand(prop.destTableName, prop.fieldNames);
               StringBuffer updCommand = createUpdateCommand(prop.destTableName, prop.fieldNames, tempIDdest);
               StringBuffer delCommand = createDeleteCommand(destTableName, tempIDdest);
               PreparedStatement insPst = beanDest.getConnection().prepareStatement(insCommand.toString());
               PreparedStatement updPst = beanDest.getConnection().prepareStatement(updCommand.toString());
               delPSt = beanDest.getConnection().prepareStatement(delCommand.toString());
               //    delPSt.setString(1,"b015892");
               //   delPSt.execute();
               //  if (true)
               //  return;
               if (vec.size() <= numIntervalls)
               {
                 endIndex = 0;
                 deltaID = vec.size();
               }
               for (int k = 0; k < vec.size() - deltaID; k = k + deltaID)
               {
                 System.out.println(vec.get(k) + " " + vec.get(k + deltaID) + " " + vec.lastElement());
                 if (query.indexOf("where") > 0)
                   tempQuery = query + " and " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID) + "'";
                 else
                   tempQuery = query + " where " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID) + "'";
                 System.out.println(tempQuery);
                 if (dialog != null)
                   dialog.title.setText("Reading table data ...");
   
                 // bean.makeQuery(tempQuery, deltaID);
                 if (dialog != null)
                   dialog.title.setText("Writing table data ...");
   
                 performSynchronize(idField, vec, tempQuery, linesToDelete, linesToAppend, insPst, updPst, delPSt, deltaID, delimiter);
                 // System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIdsDest.size());
                 endIndex = k + deltaID;
               }
               System.out.println(endIndex);
               //all data written ? if not write last chunk of data
               if (endIndex == vec.size() - 1)
                 System.out.println("fits");
               else
               {
                 System.out.println(" last intervall from " + vec.get(endIndex) + " " + vec.lastElement());
   
                 if (query.indexOf("where") > 0)
                   tempQuery = query + " and " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement() + "'";
                 else
                   tempQuery = query + " where " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement() + "'";
                 System.out.println(tempQuery);
                 if (dialog != null)
                   dialog.title.setText("Reading table data ...");
                 //    bean.makeQuery(tempQuery, 0);
                 if (dialog != null)
                   dialog.title.setText("Writing table data ...");
                 performSynchronize(idField, vec, tempQuery, linesToDelete, linesToAppend, insPst, updPst, delPSt, deltaID, delimiter);
                 // System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIdsDest.size());
               }
               // prepare new query for next chunk
               if (query.indexOf("where") > 0)
                 tempQuery = query + " and " + tempID + ">'" + vec.lastElement() + "'";
               else
                 tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'";
   
             }
             String tableName = names.get(tbIndex).toString();
             IndexList idList = (IndexList) indexList.get(0);
             System.out.println("found list " + idList);
             Statement stm = beanDest.getConnection().createStatement();
             Vector destTables = beanDest.getTableNames();
             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;
               }
   
               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)
                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  
         } // table loop
   
       } catch (Exception e)
       {
         System.out.println("Error while connecting to database " + e);
         e.printStackTrace();
         if (dialog != null)
         {
           dialog.setVisible(false);
           dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
           FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
         }
         java.io.ByteArrayOutputStream b = new java.io.ByteArrayOutputStream();
         java.io.PrintStream stream = new java.io.PrintStream(b);
         stream.print(command + "\n\n");
         e.printStackTrace(stream);
         FM2SQL.showErrorDialog(b.toString(), "Error occured !");
   
       }
       if (dialog != null)
       {
         dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
         FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
   
         dialog.setVisible(false);
       }
     }
     private static void performSynchronize(
       String idField,
       Vector vec,
       String tempQuery,
       TreeSet linesToDelete,
       TreeSet linesToAppend,
       PreparedStatement insPst,
       PreparedStatement updPst,
       PreparedStatement delPSt,
       int deltaID,
       String delimiter)
       throws SQLException, ParseException
     {
       Vector[] vectors = bean.getQueryData(tempQuery, deltaID);
       int idIndex = vectors[1].indexOf(idField);
       // todo arraylist code has to be added
       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.execute();
   
         }
       }
   
     } // 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 2063  class Convert Line 2779  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)
     {
       String[] fieldNames = null;
       String destTableName = null;
       // determine destTableName from createStatement or from source table name
       if (!create.equals(""))
       {
         int fromIndex = create.toLowerCase().indexOf("table") + 5;
         int toIndex = create.indexOf("(");
         int endIndex = create.indexOf(")", toIndex);
   
         destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "").trim();
         System.out.println("destTable " + destTableName);
         // retrieve field_names from select statement
         // TODO problem with different fieldNames in create statement will overwrite them
         if (query.indexOf("*") < 0)
         {
           int selectEndIndex = query.indexOf("from");
           StringTokenizer tokenizer = new StringTokenizer(query.substring(6, selectEndIndex), ",");
           int numFields = tokenizer.countTokens();
           fieldNames = new String[numFields];
           int fieldIndex = 0;
           while (tokenizer.hasMoreTokens())
           {
             String fieldName = tokenizer.nextToken().trim();
             fieldNames[fieldIndex] = convertText(fieldName);
             System.out.println(fieldNames[fieldIndex]);
             fieldIndex++;
           }
   
         } else
         {
           // use create statement for field names
           StringTokenizer tokenizer = new StringTokenizer(create.substring(toIndex + 1, endIndex), ",");
           int numFields = tokenizer.countTokens();
           fieldNames = new String[numFields];
           int fieldIndex = 0;
           while (tokenizer.hasMoreTokens())
           {
             String fieldName = tokenizer.nextToken().trim();
             int index = fieldName.lastIndexOf(" ");
             fieldNames[fieldIndex] = fieldName.substring(0, index);
             System.out.println(fieldNames[fieldIndex]);
             fieldIndex++;
           }
         }
       } else
       {
         destTableName = convertText(tableName);
   
         // retrieve field_names from select statement
         if (query.indexOf("*") < 0)
         {
           int selectEndIndex = query.indexOf("from");
           StringTokenizer tokenizer = new StringTokenizer(query.substring(6, selectEndIndex), ",");
           int numFields = tokenizer.countTokens();
           fieldNames = new String[numFields];
           int fieldIndex = 0;
           while (tokenizer.hasMoreTokens())
           {
             String fieldName = tokenizer.nextToken().trim();
             fieldNames[fieldIndex] =beanDest.getQC() + convertText(fieldName)+beanDest.getQC();
             // System.out.println("field "+ fieldNames[fieldIndex]);
             fieldIndex++;
           }
   
         } else
         {
           Vector fieldNamesVec = bean.getColumnNames();
           fieldNames = new String[fieldNamesVec.size()];
           int fieldIndex = -1;
           for (Iterator iter = fieldNamesVec.iterator(); iter.hasNext();)
           {
             String element = (String) iter.next();
             fieldNames[++fieldIndex] = beanDest.getQC() + convertText(element) + beanDest.getQC();
             // System.out.println("field " + fieldNames[fieldIndex]);
           }
         }
       }
       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;
     }
 }  }
   

Removed from v.1.58  
changed lines
  Added in v.1.71


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