Annotation of FM2SQL/Convert.java, revision 1.79
1.51 rogo 1: /*
1.79 ! rogo 2: * Convert.java -- Converter class - Filemaker to SQL Converter Copyright (C)
! 3: * 2003 Robert Gordesch (rogo@mpiwg-berlin.mpg.de) This program is free
! 4: * software; you can redistribute it and/or modify it under the terms of the GNU
! 5: * General Public License as published by the Free Software Foundation; either
! 6: * version 2 of the License, or (at your option) any later version. Please read
! 7: * license.txt for the full details. A copy of the GPL may be found at
! 8: * http://www.gnu.org/copyleft/lgpl.html You should have received a copy of the
! 9: * GNU General Public License along with this program; if not, write to the Free
! 10: * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
! 11: * USA Created on 15.09.2003 by rogo
1.51 rogo 12: */
13:
1.1 rogo 14: import java.awt.Cursor;
15: import java.io.BufferedReader;
16: import java.io.BufferedWriter;
17: import java.io.File;
18: import java.io.FileInputStream;
19: import java.io.FileNotFoundException;
20: import java.io.FileOutputStream;
1.60 rogo 21: import java.io.InputStream;
1.1 rogo 22: import java.io.InputStreamReader;
23: import java.io.OutputStreamWriter;
24: import java.io.PrintStream;
25: import java.io.UnsupportedEncodingException;
1.60 rogo 26: import java.net.URL;
1.57 rogo 27: import java.sql.PreparedStatement;
1.77 rogo 28: import java.sql.ResultSet;
1.57 rogo 29: import java.sql.SQLException;
30: import java.sql.Statement;
31: import java.sql.Types;
1.66 rogo 32: import java.text.ParseException;
1.57 rogo 33: import java.util.ArrayList;
1.69 rogo 34: import java.util.Hashtable;
1.57 rogo 35: import java.util.Iterator;
36: import java.util.List;
37: import java.util.StringTokenizer;
38: import java.util.TreeSet;
39: import java.util.Vector;
1.1 rogo 40:
1.77 rogo 41: import javax.swing.JDialog;
42: import javax.swing.JLabel;
43: import javax.swing.JPanel;
44:
1.1 rogo 45: import com.exploringxml.xml.Node;
46: import com.exploringxml.xml.Xparse;
47:
1.34 rogo 48: class Convert
1.1 rogo 49: {
1.79 ! rogo 50: /**
! 51: * Helper class for index creation
! 52: *
! 53: * @author rogo
! 54: *
! 55: */
! 56: public static class IndexList extends Vector
! 57: {
! 58: public String toString()
! 59: {
! 60: StringBuffer buff = new StringBuffer(1000);
! 61: int count = 0;
! 62: for (Iterator iter = this.iterator(); iter.hasNext();)
! 63: {
! 64: String element = (String) iter.next();
! 65: if (count < elementCount - 1)
! 66: {
! 67: buff.append(element).append(", ");
! 68: count++;
! 69: }
! 70: else
! 71: buff.append(element);
! 72:
! 73: }
! 74:
! 75: return buff.toString();
! 76: }
! 77: }
! 78:
! 79: static DBBean bean = new DBBean();
! 80:
! 81: static DBBean beanDest = new DBBean();
! 82:
! 83: static String user = "", passwd = "e1nste1n";
! 84:
! 85: static String userDest = "postgres", passwdDest = "rogo";
! 86:
! 87: static boolean batchRun = false;
! 88:
! 89: static Vector databases = new Vector();
! 90:
! 91: final static int numHits = 5000;
! 92:
! 93: final static int numIntervalls = 4;
! 94:
! 95: static boolean debug = true;
! 96:
! 97: public static void main(String args[])
! 98: {
! 99: /*
! 100: * try { //byte[] b = "ö".getBytes("UTF-8"); //
! 101: * System.out.println("QueryString " +b[0]+" "+b[1]+(new
! 102: * String(b).getBytes()[0])+" "+new String(b).getBytes()[1]);
! 103: * //System.out.println(new String(b,"UTF-8")); } catch
! 104: * (UnsupportedEncodingException e) { e.printStackTrace(); }
! 105: */
! 106: FileOutputStream file = null;
! 107: if (args.length != 1)
! 108: {
! 109: System.out.println("Usage: java Convert <xml config file>");
! 110: System.exit(-1);
! 111: }
! 112: try
! 113: {
! 114: file = new FileOutputStream("./log.txt");
! 115: }
! 116: catch (FileNotFoundException e1)
! 117: {
! 118: e1.printStackTrace();
! 119: }
! 120: PrintStream stream = new PrintStream(file, false);
! 121: if (!debug)
! 122: {
! 123: System.setOut(stream);
! 124: System.setErr(stream);
! 125: }
! 126: readXMLFile(args[0]);
! 127: if (!(new File(args[0]).exists()))
! 128: System.exit(0);
! 129:
! 130: System.out.println("Finished!");
! 131: //convert("jdbc:fmpro:http://141.14.237.74:8050","jdbc:postgresql://erebos/test",null,null);
! 132: }
! 133:
! 134: public static void convertBatch(DBBean source, DBBean destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode, String delimiter) throws Exception
! 135: {
! 136: bean = source;
! 137: beanDest = destination;
! 138: convert(null, null, names, layouts, selects, creates, ids, mode, delimiter);
! 139: if (true)
! 140: return;
! 141: StringBuffer command = null;
! 142: try
! 143: {
! 144: bean.setConnection(source.url);
! 145: if (names == null)
! 146: names = bean.getTableNames();
! 147: //Collections.sort(names);
! 148: int tbIndex = 1;
! 149:
! 150: for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)
! 151: {
! 152: Vector[] result = null;
! 153: try
! 154: {
! 155: String query = "select * from " + bean.getQC() + names.get(tbIndex).toString() + bean.getQC();
! 156: String layout = (layouts.isEmpty()) ? "" : layouts.get(tbIndex).toString();
! 157: query = (selects != null) ? selects.get(tbIndex).toString() : query;
! 158: //if vectors[1].get(i) != null)
! 159: if (!layout.equals(""))
! 160: {
! 161: System.out.println("before " + query + " table" + names.get(tbIndex));
! 162: layout = " layout " + bean.getQC() + layout + bean.getQC();
! 163: String name = names.get(tbIndex).toString();
! 164: StringBuffer queryLayout = new StringBuffer(query);
! 165: queryLayout.insert(queryLayout.indexOf(name) + name.length() + 1, " " + layout);
! 166: query = queryLayout.toString();
! 167: System.out.println("added layout " + query);
! 168:
! 169: }
! 170: System.out.println(" performing query " + query);
! 171: //result = bean.getQueryData(query, null, 0);
! 172: bean.getConnection();
! 173: bean.makeQuery(query, 0);
! 174: }
! 175: catch (Exception e)
! 176: {
! 177: System.out.println(e.getMessage());
! 178: e.printStackTrace();
! 179: continue;
! 180: }
! 181: //beanDest.setConnection("jdbc:postgresql://erebos/test3");
! 182: beanDest.setConnection(destination.url);
! 183:
! 184: Statement stm = beanDest.getConnection().createStatement();
! 185:
! 186: Vector tables = beanDest.getTableNames();
! 187: // Collections.sort(tables);
! 188: System.out.println("converting table " + names.get(tbIndex) + " " + tables.indexOf(convertText((String) names.get(tbIndex)))); // "//beanDest.getTypeNames());
! 189: tables = beanDest.getTableNames();
! 190: // System.out.println(beanDest.getTableNames(beanDest.getCatalogs().get(2).toString()));
! 191: stm = beanDest.getConnection().createStatement();
! 192: // System.exit(0);
! 193: if (mode == Convert.DataBase.CONVERT_MODE)
! 194: {
! 195: if (tables.indexOf(names.get(tbIndex)) >= 0)
! 196: {
! 197: stm.executeUpdate("drop table " + beanDest.getQC() + names.get(tbIndex) + beanDest.getQC());
! 198: tables.remove((String) names.get(tbIndex));
! 199: System.out.println("dropped table " + names.get(tbIndex));
! 200: }
! 201: else if (tables.indexOf(convertText(names.get(tbIndex).toString())) >= 0)
! 202: {
! 203: stm.executeUpdate("drop table " + beanDest.getQC() + convertText((String) names.get(tbIndex)) + beanDest.getQC());
! 204: tables.remove(convertText((String) names.get(tbIndex)));
! 205: System.out.println("dropped table " + names.get(tbIndex));
! 206: }
! 207:
! 208: if (tables.indexOf(names.get(tbIndex)) < 0 && tables.indexOf(convertText(names.get(tbIndex).toString())) < 0)
! 209: {
! 210: if (creates.get(tbIndex).equals("") || creates.get(tbIndex).toString().toLowerCase().indexOf("create") < 0)
! 211: {
! 212: System.out.println("Warning empty or invalid create statement - creating one for you\n");
! 213:
! 214: command = new StringBuffer(50);
! 215: command.append("CREATE TABLE ");
! 216: command.append(beanDest.getQC());
! 217: command.append(convertText((String) names.get(tbIndex)));
! 218: command.append(beanDest.getQC());
! 219: command.append("(");
! 220: String type = null;
! 221: Vector columnNames = bean.getColumnNames();
! 222: for (int i = 0; i < columnNames.size() - 1; ++i)
! 223: {
! 224: type = bean.metaData.getColumnTypeName(i + 1);
! 225: // System.out.println(i+" "+result[1].get(i)+"
! 226: // "+type);
! 227: type = (type.equals("NUMBER")) ? "INT4" : type;
! 228: type = (type.equals("CONTAINER")) ? "TEXT" : type;
! 229:
! 230: command.append(beanDest.getQC() + convertText((String) columnNames.get(i)) + beanDest.getQC() + " " + type + ", ");
! 231: }
! 232: type = bean.metaData.getColumnTypeName(columnNames.size());
! 233: type = (type.equals("NUMBER")) ? "INT4" : type;
! 234: type = (type.equals("CONTAINER")) ? "TEXT" : type;
! 235: command.append(beanDest.getQC() + convertText((String) columnNames.get(columnNames.size() - 1)) + beanDest.getQC() + " " + type);
! 236: command.append(" )");
! 237: }
! 238: else
! 239: command = new StringBuffer().append(creates.get(tbIndex).toString());
! 240:
! 241: System.out.println(command);
! 242: // System.exit(0);
! 243: //command.append(DBBean.getQC());
! 244: stm.executeUpdate(command.toString());
! 245:
! 246: }
! 247: }
! 248: Vector row = null;
! 249: command = new StringBuffer();
! 250:
! 251: command.append("INSERT INTO ");
! 252: command.append(beanDest.getQC());
! 253: command.append(convertText((String) names.get(tbIndex)));
! 254: command.append(beanDest.getQC());
! 255: command.append(" values ( ");
! 256:
! 257: for (int i = 0; i < bean.getColumnNames().size() - 1; ++i)
! 258: command.append("?,");
! 259: command.append("?)");
! 260: PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString());
! 261: System.out.println(command);
! 262: while ((row = bean.getNextRow()) != null)
! 263: {
! 264: //print rows
! 265: Object obj = null;
! 266: for (int k = 0; k < row.size(); ++k)
! 267: {
! 268: obj = row.get(k);
! 269: if (obj instanceof ArrayList)
! 270: obj = formatFileMakerArray((List) obj, "\n");
! 271: String str = (obj == null) ? "NULL" : obj.toString();
! 272: if (!str.equals("NULL"))
! 273: pstm.setString(k + 1, str);
! 274: else
! 275: pstm.setNull(k + 1, Types.NULL);
! 276: }
! 277: pstm.execute();
! 278:
! 279: } // to for loop
! 280:
! 281: }
! 282: }
! 283: catch (Exception e)
! 284: {
! 285: System.out.println("Error while connecting to database " + e);
! 286: //dialog.setVisible(false);
! 287: //dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
! 288: //FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
! 289: java.io.ByteArrayOutputStream b = new java.io.ByteArrayOutputStream();
! 290: java.io.PrintStream stream = new java.io.PrintStream(b);
! 291: stream.print(command + "\n\n");
! 292: e.printStackTrace(stream);
! 293: System.err.println(b);
! 294: //FM2SQL.showErrorDialog(b.toString(), "Error occured !");
! 295:
! 296: }
! 297: // dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
! 298: //FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
! 299:
! 300: // dialog.setVisible(false);
! 301: }
! 302:
! 303: public static String formatFileMakerArray(List list, String delimiter)
! 304: {
! 305: StringBuffer formattedString = new StringBuffer();
! 306: for (int i = 0; i < list.size(); ++i)
! 307: {
! 308: formattedString.append(list.get(i).toString());
! 309: if (i < list.size() - 1)
! 310: formattedString.append(delimiter);
! 311: }
! 312: return formattedString.toString();
! 313: }
! 314:
! 315: /**
! 316: * Method for SQL UPDATE
! 317: *
! 318: * @param source
! 319: * @param destination
! 320: * @param names
! 321: * @param layouts
! 322: * @param selects
! 323: * @param creates
! 324: * @param ids
! 325: * @param mode
! 326: * @throws Exception
! 327: */
! 328: public static void update(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode) throws Exception
! 329: {
! 330:
! 331: FM2SQL.ProgressDialog dialog = null;
! 332: if (FM2SQL.fmInstance != null)
! 333: {
! 334: dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean);
! 335: dialog.setTitle("Conversion running ...");
! 336: dialog.title.setText("Getting table data ...");
! 337: dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x + (FM2SQL.fmInstance.getWidth() - 400) / 2, FM2SQL.fmInstance.getLocationOnScreen().y + (FM2SQL.fmInstance.getHeight() - 250) / 2);
! 338: dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
! 339: FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
! 340: dialog.thread = Thread.currentThread();
! 341: }
! 342: // setting user and passwd
! 343: bean.setUserAndPasswd(user, passwd);
! 344: // setting user and passwd
! 345: beanDest.setUserAndPasswd(userDest, passwdDest);
! 346: if (dialog != null)
! 347: dialog.setSize(400, 250);
! 348: StringBuffer command = null;
! 349: String query = null;
! 350: try
! 351: {
! 352: //bean.setConnection("jdbc:fmpro:http://141.14.237.74:8050");
! 353: //bean.setConnection("jdbc:postgresql://erebos/test","postgres","rogo");
! 354: bean.setConnection(source);
! 355: if (names == null)
! 356: names = bean.getTableNames();
! 357: // Collections.sort(names);
! 358: int tbIndex = 1;
! 359:
! 360: // System.out.println("Start at
! 361: // "+names.indexOf("archimedes_facsimiles"));
! 362: for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)
! 363: {
! 364: Vector[] result = null;
! 365: String destTableName = "";
! 366: try
! 367: {
! 368: query = "select * from " + bean.getQC() + names.get(tbIndex).toString() + bean.getQC();
! 369: String layout = (layouts.isEmpty()) ? "" : layouts.get(tbIndex).toString();
! 370: query = (selects != null) ? selects.get(tbIndex).toString() : query;
! 371: //if vectors[1].get(i) != null)
! 372: if (layout != "")
! 373: {
! 374: layout = " layout " + bean.getQC() + layout + bean.getQC();
! 375: String name = names.get(tbIndex).toString();
! 376: StringBuffer queryLayout = new StringBuffer(query);
! 377: queryLayout.insert(queryLayout.indexOf(name) + name.length() + 1, " " + layout);
! 378: query = queryLayout.toString();
! 379: System.out.println("added layout " + query);
! 380:
! 381: }
! 382: if (dialog != null)
! 383: {
! 384: dialog.title.setText("Getting table data ...");
! 385: dialog.table.setText(names.get(tbIndex).toString());
! 386: dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size());
! 387: dialog.show();
! 388: }
! 389: bean.getConnection();
! 390: bean.makeQuery(query, 0);
! 391:
! 392: }
! 393: catch (Exception e)
! 394: {
! 395: continue;
! 396: }
! 397: // determine destTableName from createStatement or from source
! 398: // table name
! 399: if (!creates.get(tbIndex).equals(""))
! 400: {
! 401: String create = creates.get(tbIndex).toString().toLowerCase();
! 402: int fromIndex = create.indexOf("table") + 5;
! 403: int toIndex = create.indexOf("(");
! 404: destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "").trim();
! 405: System.out.println("destTable " + destTableName);
! 406:
! 407: }
! 408: else
! 409: destTableName = convertText(names.get(tbIndex).toString());
! 410:
! 411: //beanDest.setConnection("jdbc:postgresql://erebos/test3");
! 412: beanDest.setConnection(destination);
! 413:
! 414: Statement stm = beanDest.getConnection().createStatement();
! 415:
! 416: Vector tables = beanDest.getTableNames();
! 417: // Collections.sort(tables);
! 418: System.out.println(names.get(tbIndex) + " " + tables.indexOf(convertText((String) names.get(tbIndex)))); // "//beanDest.getTypeNames());
! 419: tables = beanDest.getTableNames();
! 420: // System.out.println(beanDest.getTableNames(beanDest.getCatalogs().get(2).toString()));
! 421: stm = beanDest.getConnection().createStatement();
! 422: // System.exit(0);
! 423:
! 424: if (dialog != null)
! 425: dialog.title.setText("Updating table data ...");
! 426:
! 427: int j = -1;
! 428:
! 429: Vector row = null;
! 430: command = new StringBuffer();
! 431:
! 432: command.append("UPDATE ");
! 433: command.append(beanDest.getQC());
! 434: command.append(destTableName);
! 435: //command.append(convertText((String) names.get(tbIndex)));
! 436: command.append(beanDest.getQC());
! 437: command.append(" SET ");
! 438:
! 439: int size = bean.getColumnNames().size();
! 440: for (int i = 0; i < size - 1; ++i)
! 441: command.append(beanDest.getQC() + convertText((String) bean.getColumnNames().get(i)) + beanDest.getQC() + " = ? ,");
! 442: command.append(convertText((String) bean.getColumnNames().get(size - 1)) + " = ? ");
! 443: command.append("WHERE " + convertText(ids.get(tbIndex).toString()) + " = ?");
! 444: PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString());
! 445: System.out.println(command + " " + tbIndex);
! 446: int rowCount = bean.getRowCount(query);
! 447: int idIndex = bean.getColumnNames().indexOf(ids.get(tbIndex));
! 448: while ((row = bean.getNextRow()) != null)
! 449: {
! 450: j++;
! 451: //print rows
! 452: Object obj = null;
! 453: /*
! 454: * for(int k=0;k <row.size()-1;++k) { obj = row.get(k);
! 455: * //System.out.println("row "+obj+" "+k); if(obj!=null&&!(obj
! 456: * instanceof ArrayList))
! 457: * command.append("'"+convertUml(obj.toString())+"',"); else
! 458: * if(obj!=null&& obj instanceof ArrayList)
! 459: * command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"',");
! 460: * else command.append("NULL,"); } obj = row.get(row.size() - 1); if
! 461: * (obj != null && !(obj instanceof ArrayList))
! 462: * command.append("'"+convertUml(obj.toString())+"')"); else
! 463: * if(obj!=null&& obj instanceof ArrayList)
! 464: * command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"')");
! 465: * //command.append(obj.toString()+")"); else command.append("NULL)");
! 466: */
! 467: //command.append("'"+row.get(row.size()-1)+"')");
! 468: //command.append(" )");
! 469: // for(int k=0;k<row.size();++k)
! 470: // System.out.println();
! 471: // System.out.println(command+" "+j+" "+row.size()+" "+
! 472: // ((Vector)result2[0].get(j)).size());
! 473: // System.out.println(command);
! 474: for (int k = 0; k < row.size(); ++k)
! 475: {
! 476: obj = row.get(k);
! 477: if (obj instanceof ArrayList)
! 478: obj = ((List) obj).get(0);
! 479: String str = (obj == null) ? "NULL" : obj.toString();
! 480: if (!str.equals("NULL"))
! 481: pstm.setString(k + 1, str);
! 482: else
! 483: pstm.setNull(k + 1, Types.NULL);
! 484: }
! 485: pstm.setString(row.size() + 1, row.get(idIndex).toString());
! 486: //System.out.println(pstm.toString());
! 487: // System.exit(0);
! 488: pstm.execute();
! 489: //stm.executeUpdate(command.toString());
! 490: if (dialog != null)
! 491: dialog.progress.setValue((int) (((double) (j + 1) / (double) rowCount) * 100.0));
! 492: // System.out.println(
! 493: // (int)(((double)(j+1)/(double)result[0].size())*100.0)+"
! 494: // "+result[0].size()+" "+j);
! 495: command = null;
! 496: } // to for loop
! 497:
! 498: }
! 499: }
! 500: catch (Exception e)
! 501: {
! 502: System.out.println("Error while connecting to database " + e);
! 503: if (dialog != null)
! 504: {
! 505: dialog.setVisible(false);
! 506: dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
! 507: FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
! 508: }
! 509: java.io.ByteArrayOutputStream b = new java.io.ByteArrayOutputStream();
! 510: java.io.PrintStream stream = new java.io.PrintStream(b);
! 511: stream.print(command + "\n\n");
! 512: e.printStackTrace(stream);
! 513: FM2SQL.showErrorDialog(b.toString(), "Error occured !");
! 514:
! 515: }
! 516: if (dialog != null)
! 517: {
! 518: dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
! 519: FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
! 520:
! 521: dialog.setVisible(false);
! 522: }
! 523:
! 524: }
! 525:
! 526: /**
! 527: * transfers the specified array of tables to the destination database and
! 528: * creates the table if it does not exist if it exists and mode is not append
! 529: * the table is dropped
! 530: *
! 531: * @param source
! 532: * @param destination
! 533: * @param names
! 534: * @param layouts
! 535: * @param selects
! 536: * @param creates
! 537: * @param ids
! 538: * @param mode
! 539: * @throws Exception
! 540: */
! 541:
! 542: public static void convert(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode, String delimiter) throws Exception
! 543: {
! 544:
! 545: FM2SQL.ProgressDialog dialog = null;
! 546:
! 547: if (FM2SQL.fmInstance != null)
! 548: {
! 549: dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean);
! 550: dialog.setTitle("Conversion running ...");
! 551: dialog.title.setText("Getting table data ...");
! 552: dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x + (FM2SQL.fmInstance.getWidth() - 400) / 2, FM2SQL.fmInstance.getLocationOnScreen().y + (FM2SQL.fmInstance.getHeight() - 250) / 2);
! 553: dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
! 554: FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
! 555: dialog.thread = Thread.currentThread();
! 556: dialog.setSize(400, 250);
! 557: }
! 558: java.util.TreeSet myIds = new TreeSet();
! 559: int deltaID = 1;
! 560: String idField = "";
! 561: String destTableName = "";
! 562: String[] fieldNames = null;
! 563: if (source != null && destination != null)
! 564: {
! 565: // setting user and passwd
! 566: bean.setUserAndPasswd(user, passwd);
! 567: // setting user and passwd
! 568: beanDest.setUserAndPasswd(userDest, passwdDest);
! 569: }
! 570: StringBuffer command = null;
! 571: String query = null;
! 572: try
! 573: {
! 574: if (source != null)
! 575: bean.setConnection(source);
! 576: else
! 577: bean.setConnection(bean.url);
! 578:
! 579: if (names == null)
! 580: names = bean.getTableNames();
! 581: // Collections.sort(names);
! 582: int tbIndex = 1;
! 583:
! 584: // System.out.println("Start at
! 585: // "+names.indexOf("archimedes_facsimiles"));
! 586: for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)
! 587: {
! 588: Vector[] result = null;
! 589: try
! 590: {
! 591: query = "select * from " + bean.getQC() + names.get(tbIndex).toString() + bean.getQC();
! 592: String layout = (layouts.isEmpty()) ? "" : layouts.get(tbIndex).toString();
! 593: query = (selects != null) ? selects.get(tbIndex).toString() : query;
! 594: //if vectors[1].get(i) != null)
! 595: if (layout != "")
! 596: {
! 597: layout = " layout " + bean.getQC() + layout + bean.getQC();
! 598: String name = names.get(tbIndex).toString();
! 599: StringBuffer queryLayout = new StringBuffer(query);
! 600: queryLayout.insert(queryLayout.indexOf(name) + name.length() + 1, " " + layout);
! 601: query = queryLayout.toString();
! 602: System.out.println("added layout " + query);
! 603:
! 604: }
! 605: // if ( layout!= "")
! 606: // query += " layout " + bean.getQC() + layout +
! 607: // bean.getQC();
! 608: if (dialog != null)
! 609: {
! 610: dialog.title.setText("Reading table data ...");
! 611: dialog.table.setText(names.get(tbIndex).toString());
! 612: dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size());
! 613: dialog.show();
! 614: }
! 615: //result = bean.getQueryData(query, dialog, 0);
! 616: bean.getConnection();
! 617: bean.makeQuery(query, 50);
! 618: idField = ids.get(tbIndex).toString();
! 619:
! 620: }
! 621: catch (Exception e)
! 622: {
! 623: System.out.println(e);
! 624: continue;
! 625: }
! 626: if (destination != null)
! 627: beanDest.setConnection(destination);
! 628: else
! 629: beanDest.setConnection(beanDest.url);
! 630: Statement stm = beanDest.getConnection().createStatement();
! 631:
! 632: Vector tables = beanDest.getTableNames();
! 633: // Collections.sort(tables);
! 634: System.out.println(names.get(tbIndex) + " " + tables.indexOf(convertText((String) names.get(tbIndex)))); // "//beanDest.getTypeNames());
! 635: tables = beanDest.getTableNames();
! 636: // System.out.println(beanDest.getTableNames(beanDest.getCatalogs().get(2).toString()));
! 637: stm = beanDest.getConnection().createStatement();
! 638: // System.exit(0);
! 639:
! 640: // determine destTableName from createStatement or from source
! 641: // table name
! 642: ConversionProperties prop = getFieldNamesAndDestTableName(creates.get(tbIndex).toString(), query, names.get(tbIndex).toString());
! 643: destTableName = prop.destTableName;
! 644: fieldNames = prop.fieldNames;
! 645: if (mode == Convert.DataBase.CONVERT_MODE)
! 646: {
! 647:
! 648: if (tables.indexOf(destTableName) >= 0)
! 649: {
! 650: stm.executeUpdate("drop table " + beanDest.getQC() + destTableName + beanDest.getQC());
! 651: tables.remove(destTableName);
! 652: System.out.println("dropped table" + destTableName);
! 653:
! 654: }
! 655: /*
! 656: * if(destTableName.equals("")) if (tables.indexOf(names.get(tbIndex)) >=
! 657: * 0) { stm.executeUpdate("drop table " + beanDest.getQC() +
! 658: * names.get(tbIndex) + beanDest.getQC()); tables.remove((String)
! 659: * names.get(tbIndex)); System.out.println("dropped table" +
! 660: * names.get(tbIndex)); } else if
! 661: * (tables.indexOf(convertText(names.get(tbIndex).toString())) >= 0) {
! 662: * stm.executeUpdate("drop table " + beanDest.getQC() +
! 663: * convertText((String) names.get(tbIndex)) + beanDest.getQC());
! 664: * tables.remove(convertText((String) names.get(tbIndex)));
! 665: * System.out.println("dropped table" + names.get(tbIndex)); }
! 666: */
! 667: if ((tables.indexOf(destTableName) < 0)) //&&
! 668: // tables.indexOf(names.get(tbIndex))
! 669: // < 0 &&
! 670: // tables.indexOf(convertText(names.get(tbIndex).toString()))
! 671: // < 0 )
! 672: {
! 673:
! 674: if (creates.get(tbIndex).equals("") || creates.get(tbIndex).toString().toLowerCase().indexOf("create") < 0)
! 675: {
! 676: System.out.println("Warning empty or invalid create statement - creating one for you\n");
! 677:
! 678: command = new StringBuffer(50);
! 679: command.append("CREATE TABLE ");
! 680: command.append(beanDest.getQC());
! 681: command.append(convertText((String) names.get(tbIndex)));
! 682: command.append(beanDest.getQC());
! 683: command.append("(");
! 684: String type = null;
! 685: Vector columnNames = bean.getColumnNames();
! 686: for (int i = 0; i < columnNames.size() - 1; ++i)
! 687: {
! 688: type = bean.metaData.getColumnTypeName(i + 1);
! 689: // System.out.println(i+" "+result[1].get(i)+"
! 690: // "+type);
! 691: type = (type.equals("NUMBER")) ? "INT4" : type;
! 692: type = (type.equals("CONTAINER")) ? "TEXT" : type;
! 693:
! 694: command.append(beanDest.getQC() + convertText((String) columnNames.get(i)) + beanDest.getQC() + " " + type + ", ");
! 695: }
! 696: type = bean.metaData.getColumnTypeName(columnNames.size());
! 697: type = (type.equals("NUMBER")) ? "INT4" : type;
! 698: type = (type.equals("CONTAINER")) ? "TEXT" : type;
! 699: command.append(beanDest.getQC() + convertText((String) columnNames.get(columnNames.size() - 1)) + beanDest.getQC() + " " + type);
! 700: command.append(" )");
! 701:
! 702: // System.out.println(command);
! 703: // System.exit(0);
! 704: //command.append(DBBean.getQC());
! 705: }
! 706: else
! 707: command = new StringBuffer().append(creates.get(tbIndex).toString().toLowerCase());
! 708: stm.executeUpdate(command.toString());
! 709:
! 710: }
! 711: }
! 712: if (dialog != null)
! 713: dialog.title.setText("Writing table data ...");
! 714:
! 715: // prepare the insert statement
! 716: int j = -1;
! 717: Vector row = null;
! 718: command = new StringBuffer();
! 719:
! 720: command.append("INSERT INTO ");
! 721: command.append(beanDest.getQC());
! 722: command.append(destTableName); //convertText((String)
! 723: // names.get(tbIndex)));
! 724: command.append(beanDest.getQC());
! 725: command.append(" (");
! 726: for (int i = 0; i < fieldNames.length; i++)
! 727: {
! 728: command.append(fieldNames[i]);
! 729: if (i < fieldNames.length - 1)
! 730: command.append(",");
! 731: }
! 732: command.append(") ");
! 733:
! 734: command.append(" values ( ");
! 735:
! 736: // add a question marks for every field
! 737: for (int i = 0; i < bean.getColumnNames().size() - 1; ++i)
! 738: command.append("?,");
! 739: command.append("?)");
! 740: PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString());
! 741: System.out.println(command);
! 742: int rowCount = (idField != "") ? myIds.size() : bean.getRowCount(query);
! 743: Vector vec = new Vector(myIds);
! 744: int endIndex = -1;
! 745: String tempQuery = query;
! 746: String tempID = bean.getQC() + idField + bean.getQC();
! 747: // if id_field not do incremental conversion else do it all at
! 748: // once
! 749: if (!idField.equals(""))
! 750: {
! 751: long startTime = System.currentTimeMillis();
! 752: int counter = -1;
! 753: while (true)
! 754: {
! 755: ++counter;
! 756: if (counter == 0 && dialog != null)
! 757: dialog.title.setText("Check if data is available");
! 758: else if (dialog != null)
! 759: dialog.title.setText("Check if more data is available");
! 760: myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex), tempQuery, numHits);
! 761: if (myIds.isEmpty())
! 762: break;
! 763: vec = new Vector(myIds);
! 764: rowCount = vec.size();
! 765: System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIds.size());
! 766: deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls);
! 767: if (vec.size() <= numIntervalls)
! 768: {
! 769: endIndex = 0;
! 770: deltaID = vec.size();
! 771: }
! 772: for (int k = 0; k < vec.size() - deltaID; k = k + deltaID)
! 773: {
! 774: System.out.println(vec.get(k) + " " + vec.get(k + deltaID) + " " + vec.lastElement());
! 775: if (query.indexOf("where") > 0)
! 776: tempQuery = query + " and " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID) + "'";
! 777: else
! 778: tempQuery = query + " where " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID) + "'";
! 779: System.out.println(tempQuery);
! 780: if (dialog != null)
! 781: dialog.title.setText("Reading table data ...");
! 782:
! 783: bean.makeQuery(tempQuery, deltaID);
! 784: if (dialog != null)
! 785: dialog.title.setText("Writing table data ...");
! 786:
! 787: command = writeDatainDestTable(dialog, command, k, pstm, rowCount, delimiter);
! 788: endIndex = k + deltaID;
! 789: }
! 790: System.out.println(endIndex);
! 791: //all data written ? if not write last chunk of data
! 792: if (endIndex == vec.size() - 1)
! 793: System.out.println("fits");
! 794: else
! 795: {
! 796: System.out.println(" last intervall from " + vec.get(endIndex) + " " + vec.lastElement());
! 797:
! 798: if (query.indexOf("where") > 0)
! 799: tempQuery = query + " and " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement() + "'";
! 800: else
! 801: tempQuery = query + " where " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement() + "'";
! 802: System.out.println(tempQuery);
! 803: if (dialog != null)
! 804: dialog.title.setText("Reading table data ...");
! 805: bean.makeQuery(tempQuery, 0);
! 806: if (dialog != null)
! 807: dialog.title.setText("Writing table data ...");
! 808: command = writeDatainDestTable(dialog, command, endIndex, pstm, rowCount, delimiter);
! 809: }
! 810: // prepare new query for next chunk
! 811: if (query.indexOf("where") > 0)
! 812: tempQuery = query + " and " + tempID + ">'" + vec.lastElement() + "'";
! 813: else
! 814: tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'";
! 815:
! 816: }
! 817: long endTime = System.currentTimeMillis();
! 818: System.out.println("Time for incremental convert elapsed " + (endTime - startTime));
! 819: }
! 820: else
! 821: {
! 822: // read and write all in one big chunk
! 823: long startTime = System.currentTimeMillis();
! 824:
! 825: bean.makeQuery(query, 0);
! 826: command = writeDatainDestTable(dialog, command, j, pstm, rowCount, delimiter);
! 827: long endTime = System.currentTimeMillis();
! 828: System.out.println("Time for old convert elapsed " + (endTime - startTime));
! 829:
! 830: }
! 831: }
! 832: }
! 833: catch (Exception e)
! 834: {
! 835: System.out.println("Error while connecting to database " + e);
! 836: if (dialog != null)
! 837: {
! 838: dialog.setVisible(false);
! 839: dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
! 840: FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
! 841: java.io.ByteArrayOutputStream b = new java.io.ByteArrayOutputStream();
! 842: java.io.PrintStream stream = new java.io.PrintStream(b);
! 843: stream.print(command + "\n\n");
! 844: e.printStackTrace(stream);
! 845: FM2SQL.showErrorDialog(b.toString(), "Error occured !");
! 846: }
! 847: else
! 848: {
! 849: e.printStackTrace();
! 850:
! 851: }
! 852: }
! 853: if (dialog != null)
! 854: {
! 855: dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
! 856: FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
! 857: dialog.setVisible(false);
! 858: }
! 859: }
! 860:
! 861: /**
! 862: * Writes data to the destination table
! 863: *
! 864: * @param dialog
! 865: * progress dialog
! 866: * @param command
! 867: * @param j
! 868: * data index for progress bar
! 869: * @param pstm
! 870: * prepared statement
! 871: * @param rowCount
! 872: * number of datasets
! 873: * @return command
! 874: * @throws Exception
! 875: * @throws SQLException
! 876: */
! 877: private static StringBuffer writeDatainDestTable(FM2SQL.ProgressDialog dialog, StringBuffer command, int j, PreparedStatement pstm, int rowCount, String delimiter) throws Exception, SQLException
! 878: {
! 879: Vector row;
! 880: while ((row = bean.getNextRow()) != null)
! 881: {
! 882: j++;
! 883: // row = (Vector) result[0].get(j);
! 884: /*
! 885: * command = new StringBuffer();
! 886: *
! 887: * command.append("INSERT INTO "); command.append(beanDest.getQC());
! 888: * command.append(convertText((String) names.get(tbIndex)));
! 889: * command.append(beanDest.getQC()); command.append(" values ( ");
! 890: */
! 891: //print rows
! 892: Object obj = null;
! 893: /*
! 894: * for(int k=0;k <row.size()-1;++k) { obj = row.get(k);
! 895: * //System.out.println("row "+obj+" "+k); if(obj!=null&&!(obj instanceof
! 896: * ArrayList)) command.append("'"+convertUml(obj.toString())+"',"); else
! 897: * if(obj!=null&& obj instanceof ArrayList)
! 898: * command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"',");
! 899: * else command.append("NULL,"); } obj = row.get(row.size() - 1); if (obj !=
! 900: * null && !(obj instanceof ArrayList))
! 901: * command.append("'"+convertUml(obj.toString())+"')"); else
! 902: * if(obj!=null&& obj instanceof ArrayList)
! 903: * command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"')");
! 904: * //command.append(obj.toString()+")"); else command.append("NULL)");
! 905: */
! 906: //command.append("'"+row.get(row.size()-1)+"')");
! 907: //command.append(" )");
! 908: // for(int k=0;k<row.size();++k)
! 909: // System.out.println();
! 910: // System.out.println(command+" "+j+" "+row.size()+" "+
! 911: // ((Vector)result2[0].get(j)).size());
! 912: // System.out.println(command);
! 913: for (int k = 0; k < row.size(); ++k)
! 914: {
! 915: obj = row.get(k);
! 916:
! 917: if (obj instanceof ArrayList)
! 918: obj = formatFileMakerArray((List) obj, delimiter);
! 919:
! 920: String str = (obj == null) ? "NULL" : obj.toString();
! 921: if (obj instanceof Double)
! 922: {
! 923: pstm.setDouble(k + 1, ((Double) obj).doubleValue());
! 924: }
! 925: else if (!str.equals("NULL"))
! 926: pstm.setString(k + 1, str);
! 927: else
! 928: pstm.setNull(k + 1, Types.NULL);
! 929: }
! 930: pstm.execute();
! 931: //stm.executeUpdate(command.toString());
! 932: if (dialog != null)
! 933: dialog.progress.setValue((int) (((double) (j + 1) / (double) rowCount) * 100.0));
! 934: // System.out.println(
! 935: // (int)(((double)(j+1)/(double)result[0].size())*100.0)+"
! 936: // "+result[0].size()+" "+j);
! 937: command = null;
! 938: } // to while loop
! 939: return command;
! 940: }
! 941:
! 942: /**
! 943: * removes special characters from the input string as well as .fp5
! 944: *
! 945: * @param newName
! 946: * String to change
! 947: * @return
! 948: */
! 949: public static String convertText(String newName)
! 950: {
! 951: StringBuffer alterMe = new StringBuffer(newName.trim().toLowerCase());
! 952: int length = alterMe.length();
! 953: int j = 0;
! 954: int index = alterMe.indexOf(".fp5");
! 955: if (index >= 0)
! 956: {
! 957: alterMe.delete(index, index + 4);
! 958: length = length - 4;
! 959: }
! 960:
! 961: while (j < length)
! 962: {
! 963: if (alterMe.charAt(j) == ' ')
! 964: {
! 965: alterMe.setCharAt(j, '_');
! 966: // if(j<length-1) j=j+1;
! 967: }
! 968: else if (alterMe.charAt(j) == '_')
! 969: {
! 970:
! 971: if (alterMe.charAt(j + 1) == '_')
! 972: alterMe.deleteCharAt(j);
! 973: length = length - 1;
! 974: // if(j<length-1) j=j+1;
! 975: }
! 976: else if (alterMe.charAt(j) == 'ä')
! 977: {
! 978: alterMe.setCharAt(j, 'a');
! 979: alterMe.insert(j + 1, "e");
! 980: length = length + 1;
! 981: if (j < length - 1)
! 982: j = j + 1;
! 983: }
! 984: else if (alterMe.charAt(j) == 'ö')
! 985: {
! 986: alterMe.setCharAt(j, 'o');
! 987: alterMe.insert(j + 1, "e");
! 988: length = length + 1;
! 989: if (j < length - 1)
! 990: j = j + 1;
! 991: }
! 992: else if (alterMe.charAt(j) == 'ü')
! 993: {
! 994: alterMe.setCharAt(j, 'u');
! 995: alterMe.insert(j + 1, "e");
! 996: length = length + 1;
! 997: if (j < length - 1)
! 998: j = j + 1;
! 999: }
! 1000: else if (alterMe.charAt(j) == 'ß')
! 1001: {
! 1002: alterMe.setCharAt(j, 's');
! 1003: alterMe.insert(j + 1, "s");
! 1004: length = length + 1;
! 1005: if (j < length - 1)
! 1006: j = j + 1;
! 1007: }
! 1008: else if (alterMe.charAt(j) == ':')
! 1009: {
! 1010: if (j < length - 1)
! 1011: {
! 1012: if (alterMe.charAt(j + 1) == ':')
! 1013: {
! 1014: alterMe.setCharAt(j, '_');
! 1015: alterMe.delete(j + 1, j + 2);
! 1016: length = length - 1;
! 1017:
! 1018: }
! 1019:
! 1020: if (j < length - 1)
! 1021: j = j + 1;
! 1022: }
! 1023: }
! 1024: else if (alterMe.charAt(j) == '-')
! 1025: {
! 1026: alterMe.setCharAt(j, '_');
! 1027:
! 1028: }
! 1029: else if (alterMe.charAt(j) == '?')
! 1030: {
! 1031: // changed ? to _ because of update statement
! 1032: alterMe.setCharAt(j, '_');
! 1033: // length = length + 1;
! 1034: // j=j+1;
! 1035: System.out.println(alterMe);
! 1036: }
! 1037: else if (alterMe.charAt(j) == '.')
! 1038: {
! 1039: if (j == length - 1)
! 1040: {
! 1041: alterMe.delete(j, j);
! 1042: length--;
! 1043: }
! 1044: else
! 1045: alterMe.setCharAt(j, '_');
! 1046: }
! 1047:
! 1048: ++j;
! 1049: }
! 1050: return alterMe.toString();
! 1051: }
! 1052:
! 1053: /**
! 1054: * Converts > and < in an entity (> or <)
! 1055: *
! 1056: * @param newName
! 1057: * @return
! 1058: */
! 1059: public static String convertToEntities(String newName)
! 1060: {
! 1061: StringBuffer alterMe = new StringBuffer(newName.trim());
! 1062: int length = alterMe.length();
! 1063: int j = 0;
! 1064:
! 1065: while (j < length)
! 1066: {
! 1067:
! 1068: if (alterMe.charAt(j) == '>')
! 1069: {
! 1070: alterMe.setCharAt(j, '&');
! 1071: alterMe.insert(j + 1, "gt;");
! 1072: length = length + 2;
! 1073: if (j < length - 1)
! 1074: j = j + 1;
! 1075:
! 1076: }
! 1077: else if (alterMe.charAt(j) == '<')
! 1078: {
! 1079: alterMe.setCharAt(j, '&');
! 1080: alterMe.insert(j + 1, "lt;");
! 1081: length = length + 2;
! 1082: if (j < length - 1)
! 1083: j = j + 1;
! 1084:
! 1085: }
! 1086: ++j;
! 1087: }
! 1088: return alterMe.toString();
! 1089: }
! 1090:
! 1091: /**
! 1092: * Masks the single quote character '-->\'
! 1093: *
! 1094: * @param newName
! 1095: * @return
! 1096: */
! 1097: public static String convertUml(String newName)
! 1098: {
! 1099: StringBuffer alterMe = new StringBuffer(newName.trim());
! 1100: int length = alterMe.length();
! 1101: int j = 0;
! 1102:
! 1103: while (j < length)
! 1104: {
! 1105:
! 1106: if (alterMe.charAt(j) == '\'')
! 1107: {
! 1108: alterMe.setCharAt(j, '\\');
! 1109: alterMe.insert(j + 1, "'");
! 1110: length = length + 1;
! 1111: if (j < length - 1)
! 1112: j = j + 1;
! 1113: }
! 1114: /*
! 1115: * else if (alterMe.charAt(j) == '"') { alterMe.setCharAt(j, '\\');
! 1116: * alterMe.insert(j + 1, "\""); length = length + 1; if(j <length-1)
! 1117: * j=j+1; } else if (alterMe.charAt(j) == '>') { alterMe.setCharAt(j,
! 1118: * '\\'); alterMe.insert(j + 1, ">"); length = length + 1; if(j <length-1)
! 1119: * j=j+1; } else if (alterMe.charAt(j) == ' <') { alterMe.setCharAt(j,
! 1120: * '\\'); alterMe.insert(j + 1, " <"); length = length + 1; if(j
! 1121: * <length-1) j=j+1; } else if (alterMe.charAt(j) == '?') {
! 1122: * alterMe.setCharAt(j, '\\'); alterMe.insert(j + 1, "?"); length = length +
! 1123: * 1; if(j <length-1) j=j+1; } else if (alterMe.charAt(j) == '&') {
! 1124: * alterMe.setCharAt(j, '\\'); alterMe.insert(j + 1, "&"); length = length +
! 1125: * 1; if(j <length-1) j=j+1; } else if (alterMe.charAt(j) == '=') {
! 1126: * alterMe.setCharAt(j, '\\'); alterMe.insert(j + 1, "="); length = length +
! 1127: * 1; if(j <length-1) j=j+1; } else if (alterMe.charAt(j) == ',') {
! 1128: * alterMe.setCharAt(j, '\\'); alterMe.insert(j + 1, ","); length = length +
! 1129: * 1; if(j <length-1) j=j+1; } else if (alterMe.charAt(j) == '.') {
! 1130: * alterMe.setCharAt(j, '\\'); alterMe.insert(j + 1, "."); length = length +
! 1131: * 1; if(j <length-1) j=j+1; } else if (alterMe.charAt(j) == '[') {
! 1132: * alterMe.setCharAt(j, '\\'); alterMe.insert(j + 1, "."); length = length +
! 1133: * 1; if(j <length-1) j=j+1; } else if (alterMe.charAt(j) == ']') {
! 1134: * alterMe.setCharAt(j, '\\'); alterMe.insert(j + 1, "."); length = length +
! 1135: * 1; if(j <length-1) j=j+1; } else if (alterMe.charAt(j) == '%') {
! 1136: * alterMe.setCharAt(j, '\\'); alterMe.insert(j + 1, "%"); length = length +
! 1137: * 1; if(j <length-1) j=j+1; }
! 1138: */
! 1139: ++j;
! 1140: }
! 1141: return alterMe.toString();
! 1142: }
! 1143:
! 1144: /**
! 1145: * parses the input xml file for batch conversion called from readXMLFile *
! 1146: *
! 1147: * @param sb
! 1148: */
! 1149: public static void parseXMLConfig(StringBuffer sb)
! 1150: {
! 1151: boolean finished = false;
! 1152: // parse string and build document tree
! 1153: Xparse parser = new Xparse();
! 1154: parser.changeEntities = true;
! 1155: Node root = parser.parse(sb.toString());
! 1156: // printContents(root);
! 1157: Vector databases = new Vector();
! 1158: Vector tables = new Vector();
! 1159: Vector layouts = new Vector();
! 1160: Vector selects = new Vector();
! 1161: Vector creates = new Vector();
! 1162: Vector ids = new Vector();
! 1163: Vector indexListVec = new Vector();
! 1164: String delimiter = "|";
! 1165: int mode = -1;
! 1166:
! 1167: try
! 1168: {
! 1169: Node tempNode = root.find("convert/source", new int[]
! 1170: {1, 1});
! 1171: if (tempNode == null)
! 1172: throw new Error("parse error source tag missing");
! 1173: System.out.println(tempNode.name);
! 1174: int length = countNodes(tempNode);
! 1175: for (int i = 1; i <= length; i++)
! 1176: {
! 1177:
! 1178: DBBean database = new DBBean();
! 1179: tables = new Vector();
! 1180: layouts = new Vector();
! 1181: selects = new Vector();
! 1182: creates = new Vector();
! 1183: ids = new Vector();
! 1184: indexListVec = new Vector();
! 1185: // parse dataBase
! 1186: Node node = root.find("convert/source/database/url", new int[]
! 1187: {1, 1, i, 1});
! 1188: Node node1 = root.find("convert/source/database/user", new int[]
! 1189: {1, 1, i, 1, 1});
! 1190: Node node2 = root.find("convert/source/database/password", new int[]
! 1191: {1, 1, i, 1, 1});
! 1192: Node node3 = root.find("convert/source/database", new int[]
! 1193: {1, 1, i});
! 1194: Node nodeMode = root.find("convert/source/database/mode", new int[]
! 1195: {1, 1, i, 1, 1});
! 1196: Node delimiterNode = root.find("convert/source/database/delimiter", new int[]
! 1197: {1, 1, i, 1, 1});
! 1198: Node useNormanToUnicodeMapper = root.find("convert/source/database/usenormantounicodemapper", new int[]
! 1199: {1, 1, i, 1, 1});
! 1200:
! 1201: if (node3 == null)
! 1202: throw new Error("parse error database tag missing");
! 1203: if (node == null)
! 1204: throw new Error("parse error url tag missing");
! 1205: if (node1 == null)
! 1206: throw new Error("parse error user tag missing");
! 1207: if (node2 == null)
! 1208: throw new Error("parse error password tag missing");
! 1209: if (delimiterNode != null)
! 1210: delimiter = delimiterNode.getCharacters();
! 1211: if (useNormanToUnicodeMapper != null)
! 1212: {
! 1213: database.setUseNormanToUnicodeMapper(Boolean.valueOf(useNormanToUnicodeMapper.getCharacters()).booleanValue());
! 1214: System.out.println("useMapper " + Boolean.valueOf(useNormanToUnicodeMapper.getCharacters().trim()).booleanValue());
! 1215: }
! 1216:
! 1217: String url = node.getCharacters();
! 1218: String user = node1.getCharacters();
! 1219: String password = node2.getCharacters();
! 1220: database.setURL(url.trim());
! 1221: database.setUserAndPasswd(user.trim(), password.trim());
! 1222: System.out.println(node.name + " " + node.getCharacters());
! 1223: System.out.println(node1.name + " " + node1.getCharacters());
! 1224: System.out.println(node2.name + " " + node2.getCharacters());
! 1225: String modeString = "";
! 1226: if (nodeMode == null)
! 1227: modeString = "convert";
! 1228: else
! 1229: modeString = nodeMode.getCharacters();
! 1230: if (modeString.equals("convert"))
! 1231: mode = DataBase.CONVERT_MODE;
! 1232: else if (modeString.equals("append"))
! 1233: mode = DataBase.APPEND_MODE;
! 1234: else if (modeString.equals("update"))
! 1235: mode = DataBase.UPDATE_MODE;
! 1236: else if (modeString.equals("delete"))
! 1237: mode = DataBase.DELETE_MODE;
! 1238: else if (modeString.equals("synchronize"))
! 1239: mode = DataBase.SYNCHRONIZE_MODE;
! 1240:
! 1241: // if(node3!=null)
! 1242: // System.out.println(node3.name);
! 1243:
! 1244: int length2 = countNodes(node3);
! 1245:
! 1246: System.out.println("number of tables " + length2);
! 1247:
! 1248: for (int j = 1; j <= length2; ++j)
! 1249: {
! 1250: Node node4 = root.find("convert/source/database/table", new int[]
! 1251: {1, 1, i, j});
! 1252: Node node5 = root.find("convert/source/database/table/select", new int[]
! 1253: {1, 1, i, j, 1});
! 1254: Node node6 = root.find("convert/source/database/table/create", new int[]
! 1255: {1, 1, i, j, 1});
! 1256: if (node4 != null)
! 1257: System.out.println(node4.name + " " + node4.attributes.get("layout").equals(""));
! 1258: if (node5 != null)
! 1259: System.out.println(node5.name + " " + node5.getCharacters());
! 1260: if (node6 != null)
! 1261: System.out.println(node6.name + " " + node6.getCharacters());
! 1262: if (node4 == null)
! 1263: throw new Error("parse error table tag missing");
! 1264: // if(node5==null) throw new Error("parse error select tag
! 1265: // missing");
! 1266: // if(node6==null) throw new Error("parse error create tag
! 1267: // missing");
! 1268: String name = (String) node4.attributes.get("name");
! 1269: String layout = (String) node4.attributes.get("layout");
! 1270: String id = (String) node4.attributes.get("id");
! 1271: String indexList = (String) node4.attributes.get("indexList");
! 1272:
! 1273: System.out.println("id was " + id);
! 1274: if (name == null)
! 1275: throw new Error("parse error required table tag attribute name missing");
! 1276: if (layout == null)
! 1277: layout = "";
! 1278: if (id == null)
! 1279: id = "";
! 1280: if (indexList == null)
! 1281: indexList = "";
! 1282: if (name.equals(""))
! 1283: throw new Error("parse error table tag attribute must not be empty");
! 1284: tables.add(name);
! 1285: layouts.add(layout);
! 1286:
! 1287: ids.add(id);
! 1288: indexListVec.add(indexList);
! 1289: String query = (node5 == null) ? "" : node5.getCharacters();
! 1290: if (query.equals(""))
! 1291: System.err.println("Warning empty select tag or select tag missing !!");
! 1292: query = (query.equals("")) ? "select * from " + database.getQC() + name + database.getQC() : query;
! 1293: selects.add(query);
! 1294: if (node6 != null)
! 1295: creates.add(node6.getCharacters().trim());
! 1296: else
! 1297: creates.add("");
! 1298:
! 1299: }
! 1300: DataBase dataBase = new DataBase(database, tables, layouts, selects, creates, ids, mode);
! 1301: dataBase.delimiter = delimiter;
! 1302: dataBase.buildIndexTable(indexListVec);
! 1303: databases.add(dataBase);
! 1304: }
! 1305: DBBean database = new DBBean();
! 1306: // parse dataBase
! 1307: Node node = root.find("convert/destination/database/url", new int[]
! 1308: {1, 1, 1, 1});
! 1309: Node node1 = root.find("convert/destination/database/user", new int[]
! 1310: {1, 1, 1, 1, 1});
! 1311: Node node2 = root.find("convert/destination/database/password", new int[]
! 1312: {1, 1, 1, 1, 1});
! 1313: String url = node.getCharacters();
! 1314: String user = node1.getCharacters();
! 1315: String password = node2.getCharacters();
! 1316: System.out.println(url);
! 1317: database.setURL(url.trim());
! 1318: database.setUserAndPasswd(user.trim(), password.trim());
! 1319: //databases.add(database);
! 1320: for (Iterator iter = databases.iterator(); iter.hasNext();)
! 1321: {
! 1322: DataBase db = (DataBase) iter.next();
! 1323: if (mode == DataBase.CONVERT_MODE || mode == DataBase.APPEND_MODE)
! 1324: convertBatch(db.bean, database, db.tables, db.layouts, db.selects, db.creates, db.ids, mode, db.delimiter);
! 1325: else if (mode == DataBase.UPDATE_MODE)
! 1326: {
! 1327: Convert.user = db.bean.user;
! 1328: Convert.passwd = db.bean.passwd;
! 1329: userDest = database.user;
! 1330: passwdDest = database.passwd;
! 1331:
! 1332: update(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates, db.ids, mode);
! 1333: }
! 1334: else if (mode == DataBase.SYNCHRONIZE_MODE)
! 1335: {
! 1336: Convert.user = db.bean.user;
! 1337: Convert.passwd = db.bean.passwd;
! 1338: userDest = database.user;
! 1339: passwdDest = database.passwd;
! 1340:
! 1341: synchronize(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates, db.ids, mode, db.delimiter, new Vector(db.htIndex.values()));
! 1342: }
! 1343: }
! 1344: // printContents(node3);
! 1345: // FM2SQL.fmInstance=new FM2SQL();
! 1346: }
! 1347: catch (Exception e)
! 1348: {
! 1349:
! 1350: e.printStackTrace();
! 1351:
! 1352: } finally
! 1353: {
! 1354: bean.closeAllConnections();
! 1355: beanDest.closeAllConnections();
! 1356: }
! 1357: }
! 1358:
! 1359: public static Vector getXMLConfig(String xmlFile)
! 1360: {
! 1361: StringBuffer sb = null;
! 1362: try
! 1363: {
! 1364: // read XML Metadata from a file
! 1365: FileInputStream fi = new FileInputStream(xmlFile);
! 1366: InputStreamReader isr = new InputStreamReader(fi, "UTF-8");
! 1367: BufferedReader buffr = new BufferedReader(isr);
! 1368: sb = new StringBuffer();
! 1369: int c = 0;
! 1370: while ((c = buffr.read()) != -1)
! 1371: {
! 1372: char ch = (char) c;
! 1373: sb.append(ch);
! 1374: // System.out.print((char)c);
! 1375: }
! 1376:
! 1377: }
! 1378: catch (Exception e)
! 1379: {
! 1380: e.printStackTrace();
! 1381: }
! 1382:
! 1383: boolean finished = false;
! 1384: // parse string and build document tree
! 1385: Xparse parser = new Xparse();
! 1386: parser.changeEntities = true;
! 1387: Node root = parser.parse(sb.toString());
! 1388: // printContents(root);
! 1389: Vector databases = new Vector();
! 1390: Vector tables = new Vector();
! 1391: Vector layouts = new Vector();
! 1392: Vector selects = new Vector();
! 1393: Vector creates = new Vector();
! 1394: Vector ids = new Vector();
! 1395: String delimiter = "|";
! 1396: int mode = -1;
! 1397: try
! 1398: {
! 1399: Node tempNode = root.find("convert/source", new int[]
! 1400: {1, 1});
! 1401: if (tempNode == null)
! 1402: throw new Error("parse error source tag missing");
! 1403: System.out.println(tempNode.name);
! 1404: int length = countNodes(tempNode);
! 1405: for (int i = 1; i <= length; i++)
! 1406: {
! 1407:
! 1408: DBBean database = new DBBean();
! 1409: tables = new Vector();
! 1410: layouts = new Vector();
! 1411: selects = new Vector();
! 1412: creates = new Vector();
! 1413: ids = new Vector();
! 1414: // parse dataBase
! 1415: Node node = root.find("convert/source/database/url", new int[]
! 1416: {1, 1, i, 1});
! 1417: Node node1 = root.find("convert/source/database/user", new int[]
! 1418: {1, 1, i, 1, 1});
! 1419: Node node2 = root.find("convert/source/database/password", new int[]
! 1420: {1, 1, i, 1, 1});
! 1421: Node node3 = root.find("convert/source/database", new int[]
! 1422: {1, 1, i});
! 1423: Node nodeMode = root.find("convert/source/database/mode", new int[]
! 1424: {1, 1, i, 1, 1});
! 1425: Node delimiterNode = root.find("convert/source/database/delimiter", new int[]
! 1426: {1, 1, i, 1, 1});
! 1427: Node useNormanToUnicodeMapper = root.find("convert/source/database/usenormantounicodemapper", new int[]
! 1428: {1, 1, i, 1, 1});
! 1429:
! 1430: if (delimiterNode != null)
! 1431: delimiter = delimiterNode.getCharacters();
! 1432: if (useNormanToUnicodeMapper != null)
! 1433: {
! 1434: database.setUseNormanToUnicodeMapper(Boolean.valueOf(useNormanToUnicodeMapper.getCharacters()).booleanValue());
! 1435: System.out.println("useMapper " + Boolean.valueOf(useNormanToUnicodeMapper.getCharacters().trim()).booleanValue());
! 1436: }
! 1437:
! 1438: if (node3 == null)
! 1439: throw new Error("parse error database tag missing");
! 1440: if (node == null)
! 1441: throw new Error("parse error url tag missing");
! 1442: if (node1 == null)
! 1443: throw new Error("parse error user tag missing");
! 1444: if (node2 == null)
! 1445: throw new Error("parse error password tag missing");
! 1446: String url = node.getCharacters();
! 1447: String user = node1.getCharacters();
! 1448: String password = node2.getCharacters();
! 1449: database.setURL(url.trim());
! 1450: database.setUserAndPasswd(user.trim(), password.trim());
! 1451: System.out.println(node.name + " " + node.getCharacters());
! 1452: System.out.println(node1.name + " " + node1.getCharacters());
! 1453: System.out.println(node2.name + " " + node2.getCharacters());
! 1454: String modeString = "";
! 1455: if (nodeMode == null)
! 1456: modeString = "convert";
! 1457: else
! 1458: modeString = nodeMode.getCharacters();
! 1459: if (modeString.equals("convert"))
! 1460: mode = DataBase.CONVERT_MODE;
! 1461: else if (modeString.equals("append"))
! 1462: mode = DataBase.APPEND_MODE;
! 1463: else if (modeString.equals("update"))
! 1464: mode = DataBase.UPDATE_MODE;
! 1465: else if (modeString.equals("delete"))
! 1466: mode = DataBase.DELETE_MODE;
! 1467:
! 1468: // if(node3!=null)
! 1469: // System.out.println(node3.name);
! 1470:
! 1471: int length2 = countNodes(node3);
! 1472:
! 1473: System.out.println("number of tables " + length2);
! 1474:
! 1475: for (int j = 1; j <= length2; ++j)
! 1476: {
! 1477: Node node4 = root.find("convert/source/database/table", new int[]
! 1478: {1, 1, i, j});
! 1479: Node node5 = root.find("convert/source/database/table/select", new int[]
! 1480: {1, 1, i, j, 1});
! 1481: Node node6 = root.find("convert/source/database/table/create", new int[]
! 1482: {1, 1, i, j, 1});
! 1483: if (node4 != null)
! 1484: System.out.println(node4.name + " " + node4.attributes.get("layout").equals(""));
! 1485: if (node5 != null)
! 1486: System.out.println(node5.name + " " + node5.getCharacters());
! 1487: if (node6 != null)
! 1488: System.out.println(node6.name + " " + node6.getCharacters());
! 1489: if (node4 == null)
! 1490: throw new Error("parse error table tag missing");
! 1491: // if(node5==null) throw new Error("parse error select tag
! 1492: // missing");
! 1493: // if(node6==null) throw new Error("parse error create tag
! 1494: // missing");
! 1495: String name = (String) node4.attributes.get("name");
! 1496: String layout = (String) node4.attributes.get("layout");
! 1497: String id = (String) node4.attributes.get("id");
! 1498: System.out.println("id was " + id);
! 1499:
! 1500: if (name == null)
! 1501: throw new Error("parse error required table tag attribute name missing");
! 1502: if (layout == null)
! 1503: layout = "";
! 1504: if (id == null)
! 1505: id = "";
! 1506: if (name.equals(""))
! 1507: throw new Error("parse error table tag attribute must not be empty");
! 1508: tables.add(name);
! 1509: layouts.add(layout);
! 1510: ids.add(id);
! 1511: String query = (node5 == null) ? "" : node5.getCharacters();
! 1512: if (query.equals(""))
! 1513: System.err.println("Warning empty select tag or select tag missing !!");
! 1514: query = (query.equals("")) ? "select * from " + database.getQC() + name + database.getQC() : query;
! 1515: selects.add(query);
! 1516: if (node6 != null)
! 1517: creates.add(node6.getCharacters().trim());
! 1518: else
! 1519: creates.add("");
! 1520:
! 1521: }
! 1522: DataBase dataBase = new DataBase(database, tables, layouts, selects, creates, ids, mode);
! 1523: dataBase.delimiter = delimiter;
! 1524: databases.add(dataBase);
! 1525: }
! 1526: DBBean database = new DBBean();
! 1527: // parse dataBase
! 1528: Node node = root.find("convert/destination/database/url", new int[]
! 1529: {1, 1, 1, 1});
! 1530: Node node1 = root.find("convert/destination/database/user", new int[]
! 1531: {1, 1, 1, 1, 1});
! 1532: Node node2 = root.find("convert/destination/database/password", new int[]
! 1533: {1, 1, 1, 1, 1});
! 1534: String url = node.getCharacters();
! 1535: String user = node1.getCharacters();
! 1536: String password = node2.getCharacters();
! 1537: System.out.println(url);
! 1538: database.setURL(url.trim());
! 1539: database.setUserAndPasswd(user.trim(), password.trim());
! 1540: databases.add(new DataBase(database, null, null, null, null, null, 0));
! 1541: //databases.add(database);
! 1542: /*
! 1543: * for (Iterator iter = databases.iterator(); iter.hasNext();) { DataBase
! 1544: * db = (DataBase) iter.next();
! 1545: * convertBatch(db.bean,database,db.tables,db.layouts,db.selects,db.creates); }
! 1546: */
! 1547: // printContents(node3);
! 1548: // FM2SQL.fmInstance=new FM2SQL();
! 1549: }
! 1550: catch (Exception e)
! 1551: {
! 1552: // TODO Auto-generated catch block
! 1553: e.printStackTrace();
! 1554: }
! 1555: return databases;
! 1556: }
! 1557:
! 1558: private static int countNodes(Node tempNode)
! 1559: {
! 1560: int length = 0;
! 1561: for (int i = 0; i < tempNode.contents.v.size(); ++i)
! 1562: {
! 1563: Node node = (Node) tempNode.contents.v.elementAt(i);
! 1564: if (node.type.equals("element"))
! 1565: {
! 1566: if (node.name.equals("database"))
! 1567: length++;
! 1568: if (node.name.equals("table"))
! 1569: length++;
! 1570: }
! 1571:
! 1572: // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+"
! 1573: // "+i);
! 1574: }
! 1575: return length;
! 1576: }
! 1577:
! 1578: private static void printContents(Node root)
! 1579: {
! 1580:
! 1581: Vector contents = (root.index == null) ? root.contents.v : root.index.v;
! 1582: for (int i = 0; i < contents.size(); ++i)
! 1583: {
! 1584: Node n = (Node) contents.elementAt(i);
! 1585: if (n.type.equals("element"))
! 1586: {
! 1587: System.out.println("tag " + n.name);
! 1588: System.out.println(n.getCharacters());
! 1589: //contents=n.contents.v i=0;
! 1590: }
! 1591: // System.out.println(n.type);
! 1592: }
! 1593: }
! 1594:
! 1595: /**
! 1596: * reads the specified xml file
! 1597: *
! 1598: * @param xmlFile
! 1599: */
! 1600: public static void readXMLFile(String xmlFile)
! 1601: {
! 1602: try
! 1603: {
! 1604: InputStream stream = null;
! 1605:
! 1606: if (xmlFile.indexOf("file://") >= 0 || xmlFile.indexOf("http://") >= 0)
! 1607: {
! 1608: URL url = new URL(xmlFile);
! 1609: stream = url.openStream();
! 1610: }
! 1611: else
! 1612: // read XML Metadata from a file
! 1613: stream = new FileInputStream(xmlFile);
! 1614: InputStreamReader isr = new InputStreamReader(stream, "UTF-8");
! 1615: BufferedReader buffr = new BufferedReader(isr);
! 1616: StringBuffer sb = new StringBuffer();
! 1617: int c = 0;
! 1618: while ((c = buffr.read()) != -1)
! 1619: {
! 1620: char ch = (char) c;
! 1621: sb.append(ch);
! 1622: // System.out.print((char)c);
! 1623: }
! 1624: parseXMLConfig(sb);
! 1625: }
! 1626: catch (Exception e)
! 1627: {
! 1628: e.printStackTrace();
! 1629: }
! 1630: }
! 1631:
! 1632: /**
! 1633: * Helper class for Conversion etc Holds the some data
! 1634: *
! 1635: * @author rogo
! 1636: *
! 1637: */
! 1638:
! 1639: public static class ConversionProperties
! 1640: {
! 1641: String destTableName;
! 1642:
! 1643: String[] fieldNames;
! 1644:
! 1645: public ConversionProperties()
! 1646: {
! 1647: }
! 1648:
! 1649: public ConversionProperties(String destTableName, String[] fieldNames)
! 1650: {
! 1651: this.destTableName = destTableName;
! 1652: this.fieldNames = fieldNames;
! 1653:
! 1654: }
! 1655:
! 1656: }
! 1657:
! 1658: /**
! 1659: * Helper class for XML-File parsing Holds the parsed data
! 1660: *
! 1661: * @author rogo
! 1662: *
! 1663: */
! 1664: public static class DataBase
! 1665: {
! 1666: DBBean bean;
! 1667:
! 1668: Vector creates;
! 1669:
! 1670: Vector selects;
! 1671:
! 1672: Vector layouts;
! 1673:
! 1674: Vector tables;
! 1675:
! 1676: Vector ids;
! 1677:
! 1678: String delimiter = "//";
! 1679:
! 1680: /**
! 1681: * maps table name to index fields
! 1682: */
! 1683: Hashtable htIndex = new Hashtable();
! 1684:
! 1685: boolean useNormanToUnicodeMapper = false;
! 1686:
! 1687: final static int CONVERT_MODE = 1;
! 1688:
! 1689: final static int APPEND_MODE = 2;
! 1690:
! 1691: final static int UPDATE_MODE = 3;
! 1692:
! 1693: final static int DELETE_MODE = 4;
! 1694:
! 1695: final static int SYNCHRONIZE_MODE = 5;
! 1696:
! 1697: int mode = -1;
! 1698:
! 1699: public DataBase(DBBean bean, Vector tables, Vector layouts, Vector selects, Vector creates, Vector ids, int mode)
! 1700: {
! 1701: this.bean = bean;
! 1702: this.tables = tables;
! 1703: this.layouts = layouts;
! 1704: this.selects = selects;
! 1705: this.creates = creates;
! 1706: this.ids = ids;
! 1707: this.mode = mode;
! 1708: this.bean.setIDVector(ids);
! 1709: }
! 1710:
! 1711: /**
! 1712: * @param indexListVec
! 1713: */
! 1714: public void buildIndexTable(Vector indexListVec)
! 1715: {
! 1716: for (int i = 0; i < tables.size(); i++)
! 1717: {
! 1718: fillIndexList((String) tables.get(i), (String) indexListVec.get(i));
! 1719: }
! 1720: }
! 1721:
! 1722: /**
! 1723: * writes the data contained in this object to the buffered writer *
! 1724: *
! 1725: * @param buffr
! 1726: * @throws Exception
! 1727: */
! 1728: public void exportToXML(BufferedWriter buffr) throws Exception
! 1729: {
! 1730: // ids=bean.getIDVector();
! 1731: buffr.write(" <database>\n");
! 1732: buffr.write(" <url>" + bean.url + "</url>\n");
! 1733: buffr.write(" <user>" + bean.user + "</user>\n");
! 1734: buffr.write(" <password>" + bean.passwd + "</password>\n");
! 1735: buffr.write(" <delimiter>" + delimiter + "</delimiter>\n");
! 1736: String modeString = "";
! 1737: if (mode == CONVERT_MODE)
! 1738: modeString = "convert";
! 1739: else if (mode == APPEND_MODE)
! 1740: modeString = "append";
! 1741: else if (mode == UPDATE_MODE)
! 1742: modeString = "update";
! 1743: else if (mode == DELETE_MODE)
! 1744: modeString = "delete";
! 1745:
! 1746: buffr.write(" <mode>" + modeString + "</mode>\n");
! 1747: buffr.write(" <usenormantounicodemapper>" + useNormanToUnicodeMapper + "</usenormantounicodemapper>\n");
! 1748:
! 1749: int index = 0;
! 1750: while (index < tables.size())
! 1751: {
! 1752: String table = (String) tables.get(index);
! 1753: String layout = (String) layouts.get(index);
! 1754: String select = (String) selects.get(index);
! 1755: String create = (String) creates.get(index);
! 1756: String id = (String) ids.get(index);
! 1757: IndexList indexList = (IndexList) htIndex.get(table);
! 1758: if (indexList == null)
! 1759: indexList = new IndexList();
! 1760: buffr.write(" <table name = \"" + table + "\" layout = \"" + layout + "\" id = \"" + id + "\" indexList =\"" + indexList + "\">\n");
! 1761: buffr.write(" <select>" + convertToEntities(select) + "</select>\n");
! 1762: if (!create.equals(""))
! 1763: buffr.write(" <create>" + create + " </create>\n");
! 1764: buffr.write(" </table>\n");
! 1765: index++;
! 1766: }
! 1767: buffr.write(" </database>\n");
! 1768: }
! 1769:
! 1770: public void fillIndexList(String table, String list)
! 1771: {
! 1772: IndexList indexList = new IndexList();
! 1773: StringTokenizer tokenizer = new StringTokenizer(list, ",");
! 1774: while (tokenizer.hasMoreTokens())
! 1775: {
! 1776: indexList.add(tokenizer.nextToken());
! 1777: }
! 1778: System.out.println(indexList);
! 1779:
! 1780: htIndex.put(table, indexList);
! 1781: }
! 1782:
! 1783: public String toString()
! 1784: {
! 1785: return bean.url + " " + tables;
! 1786: }
! 1787:
! 1788: }
! 1789:
! 1790: public static String convertToUTF8(Object command)
! 1791: {
! 1792: String str = null;
! 1793: try
! 1794: {
! 1795: str = new String(command.toString().getBytes("UTF-8"));
! 1796: }
! 1797: catch (UnsupportedEncodingException e)
! 1798: {
! 1799: // TODO Auto-generated catch block
! 1800: e.printStackTrace();
! 1801: }
! 1802: return str;
! 1803: }
! 1804:
! 1805: public static void writeConfig(String file, DataBase source, DataBase destination) throws Exception
! 1806: {
! 1807: if (!file.toLowerCase().endsWith(".xml"))
! 1808: file += ".xml";
! 1809: File f = new File(file);
! 1810:
! 1811: FileOutputStream fout = new FileOutputStream(f);
! 1812: OutputStreamWriter outsw = new OutputStreamWriter(fout, "UTF-8");
! 1813: BufferedWriter buffw = new BufferedWriter(outsw);
! 1814: buffw.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
! 1815: buffw.newLine();
! 1816: buffw.write("<convert>\n");
! 1817: buffw.write(" <source>\n");
! 1818: source.exportToXML(buffw);
! 1819: buffw.write(" </source>\n");
! 1820: buffw.write("\n <destination>\n");
! 1821: destination.exportToXML(buffw);
! 1822: buffw.write(" </destination>\n");
! 1823: buffw.write("</convert>\n");
! 1824: buffw.close();
! 1825: }
! 1826:
! 1827: public static void delete(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode) throws Exception
! 1828: {
! 1829: FM2SQL.ProgressDialog dialog = null;
! 1830: if (FM2SQL.fmInstance != null)
! 1831: {
! 1832: dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean);
! 1833: dialog.setTitle("Conversion running ...");
! 1834: dialog.title.setText("Getting table data ...");
! 1835: dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x + (FM2SQL.fmInstance.getWidth() - 400) / 2, FM2SQL.fmInstance.getLocationOnScreen().y + (FM2SQL.fmInstance.getHeight() - 250) / 2);
! 1836: dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
! 1837: FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
! 1838: dialog.thread = Thread.currentThread();
! 1839: }
! 1840: // setting user and passwd
! 1841: bean.setUserAndPasswd(user, passwd);
! 1842: // setting user and passwd
! 1843: beanDest.setUserAndPasswd(userDest, passwdDest);
! 1844: if (dialog != null)
! 1845: dialog.setSize(400, 250);
! 1846: StringBuffer command = null;
! 1847: String query = null;
! 1848: try
! 1849: {
! 1850: //bean.setConnection("jdbc:fmpro:http://141.14.237.74:8050");
! 1851: //bean.setConnection("jdbc:postgresql://erebos/test","postgres","rogo");
! 1852: bean.setConnection(source);
! 1853: if (names == null)
! 1854: names = bean.getTableNames();
! 1855: // Collections.sort(names);
! 1856: int tbIndex = 1;
! 1857:
! 1858: // System.out.println("Start at
! 1859: // "+names.indexOf("archimedes_facsimiles"));
! 1860: for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)
! 1861: {
! 1862: Vector[] result = null;
! 1863: java.util.TreeSet myIds = new TreeSet();
! 1864: java.util.TreeSet myIdsDest = new TreeSet();
! 1865: int deltaID = 1;
! 1866: String idField = "";
! 1867: String destTableName = "";
! 1868:
! 1869: try
! 1870: {
! 1871: query = "select * from " + bean.getQC() + names.get(tbIndex).toString() + bean.getQC();
! 1872: String layout = (layouts.isEmpty()) ? "" : layouts.get(tbIndex).toString();
! 1873: query = (selects != null) ? selects.get(tbIndex).toString() : query;
! 1874: //if vectors[1].get(i) != null)
! 1875: if (layout != "")
! 1876: {
! 1877: layout = " layout " + bean.getQC() + layout + bean.getQC();
! 1878: String name = names.get(tbIndex).toString();
! 1879: StringBuffer queryLayout = new StringBuffer(query);
! 1880: queryLayout.insert(queryLayout.indexOf(name) + name.length() + 1, " " + layout);
! 1881: query = queryLayout.toString();
! 1882: System.out.println("added layout " + query);
! 1883:
! 1884: }
! 1885: dialog.title.setText("Getting table data ...");
! 1886: dialog.table.setText(names.get(tbIndex).toString());
! 1887: dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size());
! 1888: dialog.show();
! 1889: bean.getConnection();
! 1890: bean.makeQuery(query, 50);
! 1891: idField = ids.get(tbIndex).toString();
! 1892:
! 1893: }
! 1894: catch (Exception e)
! 1895: {
! 1896: continue;
! 1897: }
! 1898: // determine destTableName from createStatement or from source
! 1899: // table name
! 1900: if (!creates.get(tbIndex).equals(""))
! 1901: {
! 1902: String create = creates.get(tbIndex).toString().toLowerCase();
! 1903: int fromIndex = create.indexOf("table") + 5;
! 1904: int toIndex = create.indexOf("(");
! 1905: destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "").trim();
! 1906: System.out.println("destTable " + destTableName);
! 1907:
! 1908: }
! 1909: else
! 1910: destTableName = convertText(names.get(tbIndex).toString());
! 1911:
! 1912: // for id kram
! 1913: Vector vec = null;
! 1914: Vector vecDest = null;
! 1915: // tempo
! 1916: beanDest.setConnection(destination);
! 1917: int rowCount = (idField != "") ? myIds.size() : bean.getRowCount(query);
! 1918: String tempID = bean.getQC() + idField + bean.getQC();
! 1919: String tempIDdest = beanDest.getQC() + convertText(idField) + beanDest.getQC();
! 1920:
! 1921: int endIndex = -1;
! 1922: String tempQuery = query;
! 1923: String destQuery = query.replaceAll(names.get(tbIndex).toString(), destTableName);
! 1924: String tempQueryDest = destQuery;
! 1925: // remove extra query parts
! 1926: // destQuery.substring(0,destQuery.lastIndexOf(destTableName)+destTableName.length()+1);
! 1927: System.out.println("new Query " + tempQueryDest);
! 1928: if (!idField.equals(""))
! 1929: {
! 1930: long startTime = System.currentTimeMillis();
! 1931: int counter = -1;
! 1932: while (true)
! 1933: {
! 1934: ++counter;
! 1935: if (counter == 0 && dialog != null)
! 1936: dialog.title.setText("Check if data is available");
! 1937: else if (dialog != null)
! 1938: dialog.title.setText("Check if more data is available");
! 1939: myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex), tempQuery, numHits);
! 1940: myIdsDest = beanDest.getIDVector(convertText(idField), destTableName, tempQueryDest, numHits);
! 1941: if (myIds.isEmpty())
! 1942: break;
! 1943: vec = new Vector(myIds);
! 1944: vecDest = new Vector(myIdsDest);
! 1945: rowCount = vec.size();
! 1946: // Deletion will work this way
! 1947: Vector deleted = new Vector(vec);
! 1948: Vector linesToDelete = new Vector(vecDest);
! 1949: // remove all lines that should not be deleted
! 1950: linesToDelete.removeAll(deleted);
! 1951: // System.out.println("ID LIST SIZE " +
! 1952: // Math.round((double) myIds.size() / (double)
! 1953: // numIntervalls) + " " + myIdsDest.size());
! 1954: /// @TODO complete delete task remove query show lines
! 1955: // to be deleted let user choose if he wants that
! 1956: System.out.println("number of lines to be deleted " + linesToDelete.size());
! 1957: deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls);
! 1958: beanDest.setConnection(destination);
! 1959:
! 1960: Statement stm = beanDest.getConnection().createStatement();
! 1961:
! 1962: Vector tables = beanDest.getTableNames();
! 1963: // Collections.sort(tables);
! 1964: System.out.println(names.get(tbIndex) + " " + tables.indexOf(convertText((String) names.get(tbIndex)))); // "//beanDest.getTypeNames());
! 1965: tables = beanDest.getTableNames();
! 1966: // System.out.println(beanDest.getTableNames(beanDest.getCatalogs().get(2).toString()));
! 1967: stm = beanDest.getConnection().createStatement();
! 1968:
! 1969: if (dialog != null)
! 1970: dialog.title.setText(" Deleting table data ...");
! 1971:
! 1972: int j = -1;
! 1973:
! 1974: Vector row = null;
! 1975: command = new StringBuffer();
! 1976:
! 1977: command.append("DELETE FROM");
! 1978: command.append(beanDest.getQC());
! 1979: command.append(destTableName);
! 1980: //command.append(convertText((String)
! 1981: // names.get(tbIndex)));
! 1982: command.append(beanDest.getQC());
! 1983: int size = bean.getColumnNames().size();
! 1984: command.append("WHERE " + convertText(ids.get(tbIndex).toString()) + " = ?");
! 1985: PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString());
! 1986: System.out.println(command + " " + tbIndex);
! 1987: //int rowCount = bean.getRowCount(query);
! 1988: // int idIndex =
! 1989: // bean.getColumnNames().indexOf(ids.get(tbIndex));
! 1990: while (true)
! 1991: {
! 1992:
! 1993: ++j;
! 1994: if (j == linesToDelete.size())
! 1995: break;
! 1996: //print rows
! 1997: pstm.setString(1, linesToDelete.get(j).toString());
! 1998: System.out.println(pstm.toString());
! 1999: pstm.execute();
! 2000: if (dialog != null)
! 2001: dialog.progress.setValue((int) (((double) (j + 1) / (double) rowCount) * 100.0));
! 2002: command = null;
! 2003: }
! 2004: // prepare new query for next chunk
! 2005: if (query.indexOf("where") > 0)
! 2006: tempQuery = query + " and " + tempID + ">'" + vec.lastElement() + "'";
! 2007: else
! 2008: tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'";
! 2009:
! 2010: } //to outer while
! 2011: } // to idfield if
! 2012: } // table loop
! 2013:
! 2014: }
! 2015: catch (Exception e)
! 2016: {
! 2017: System.out.println("Error while connecting to database " + e);
! 2018: if (dialog != null)
! 2019: {
! 2020: dialog.setVisible(false);
! 2021: dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
! 2022: FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
! 2023: }
! 2024: java.io.ByteArrayOutputStream b = new java.io.ByteArrayOutputStream();
! 2025: java.io.PrintStream stream = new java.io.PrintStream(b);
! 2026: stream.print(command + "\n\n");
! 2027: e.printStackTrace(stream);
! 2028: FM2SQL.showErrorDialog(b.toString(), "Error occured !");
! 2029:
! 2030: }
! 2031: if (dialog != null)
! 2032: {
! 2033: dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
! 2034: FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
! 2035:
! 2036: dialog.setVisible(false);
! 2037: }
! 2038: } // to method
! 2039:
! 2040: /**
! 2041: * synchronize method based on delete method code
! 2042: *
! 2043: * @param source
! 2044: * @param destination
! 2045: * @param names
! 2046: * @param layouts
! 2047: * @param selects
! 2048: * @param creates
! 2049: * @param ids
! 2050: * @param mode
! 2051: * @throws Exception
! 2052: */
! 2053: // TODO implement append,update and delete in one method
! 2054: // TODO using id based algorithm
! 2055: public static void synchronize(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode, String delimiter, Vector indexList)
! 2056: throws Exception
! 2057: {
! 2058: System.out.println(" bin in synchronize!!!");
! 2059: FM2SQL.ProgressDialog dialog = null;
! 2060: if (FM2SQL.fmInstance != null)
! 2061: {
! 2062: dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean);
! 2063: dialog.setTitle("Synchronize running ...");
! 2064: dialog.title.setText("Getting table data ...");
! 2065: dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x + (FM2SQL.fmInstance.getWidth() - 400) / 2, FM2SQL.fmInstance.getLocationOnScreen().y + (FM2SQL.fmInstance.getHeight() - 250) / 2);
! 2066: dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
! 2067: FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
! 2068: dialog.thread = Thread.currentThread();
! 2069: }
! 2070: // setting user and passwd
! 2071: bean.setUserAndPasswd(user, passwd);
! 2072: // setting user and passwd
! 2073: beanDest.setUserAndPasswd(userDest, passwdDest);
! 2074: if (dialog != null)
! 2075: dialog.setSize(400, 250);
! 2076: StringBuffer command = null;
! 2077: String query = null;
! 2078: try
! 2079: {
! 2080: //bean.setConnection("jdbc:fmpro:http://141.14.237.74:8050");
! 2081: //bean.setConnection("jdbc:postgresql://erebos/test","postgres","rogo");
! 2082: bean.setConnection(source);
! 2083: if (names == null)
! 2084: names = bean.getTableNames();
! 2085: // Collections.sort(names);
! 2086: int tbIndex = 1;
! 2087:
! 2088: // System.out.println("Start at
! 2089: // "+names.indexOf("archimedes_facsimiles"));
! 2090: for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)
! 2091: {
! 2092: Vector[] result = null;
! 2093: java.util.TreeSet myIds = new TreeSet();
! 2094: java.util.TreeSet myIdsDest = new TreeSet();
! 2095: int deltaID = 1;
! 2096: String idField = "";
! 2097: String destTableName = "";
! 2098:
! 2099: try
! 2100: {
! 2101: query = "select * from " + bean.getQC() + names.get(tbIndex).toString() + bean.getQC();
! 2102: String layout = (layouts.isEmpty()) ? "" : layouts.get(tbIndex).toString();
! 2103: query = (selects != null) ? selects.get(tbIndex).toString() : query;
! 2104: //if vectors[1].get(i) != null)
! 2105: if (!layout.equals(""))
! 2106: {
! 2107: layout = " layout " + bean.getQC() + layout + bean.getQC();
! 2108: String name = names.get(tbIndex).toString();
! 2109: StringBuffer queryLayout = new StringBuffer(query);
! 2110: queryLayout.insert(queryLayout.indexOf(name) + name.length() + 1, " " + layout);
! 2111: query = queryLayout.toString();
! 2112: System.out.println("added layout " + query);
! 2113:
! 2114: }
! 2115: if (dialog != null)
! 2116: {
! 2117: dialog.title.setText("Getting table data ...");
! 2118: dialog.table.setText(names.get(tbIndex).toString());
! 2119: dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size());
! 2120: dialog.show();
! 2121: }
! 2122: bean.getConnection();
! 2123: bean.makeQuery(query, 50);
! 2124: idField = ids.get(tbIndex).toString();
! 2125:
! 2126: }
! 2127: catch (Exception e)
! 2128: {
! 2129: continue;
! 2130: }
! 2131: // determine destTableName from createStatement or from source
! 2132: // table name
! 2133: if (!creates.get(tbIndex).equals(""))
! 2134: {
! 2135: String create = creates.get(tbIndex).toString().toLowerCase();
! 2136: int fromIndex = create.indexOf("table") + 5;
! 2137: int toIndex = create.indexOf("(");
! 2138: destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "").trim();
! 2139: System.out.println("destTable " + destTableName);
! 2140:
! 2141: }
! 2142: else
! 2143: destTableName = convertText(names.get(tbIndex).toString());
! 2144:
! 2145: // for id kram
! 2146: Vector vec = null;
! 2147: Vector vecDest = null;
! 2148: // tempo
! 2149: beanDest.setConnection(destination);
! 2150: int rowCount = (idField != "") ? myIds.size() : bean.getRowCount(query);
! 2151: String tempID = bean.getQC() + idField + bean.getQC();
! 2152: String tempIDdest = beanDest.getQC() + convertText(idField) + beanDest.getQC();
! 2153:
! 2154: int endIndex = -1;
! 2155: String tempQuery = query;
! 2156: String destQuery = query.replaceAll(names.get(tbIndex).toString(), destTableName);
! 2157: destQuery = destQuery.replaceAll(bean.getQC(), beanDest.getQC());
! 2158: destQuery = removeLayoutPartFromQuery(destQuery, layouts.get(tbIndex).toString());
! 2159: // TODO remove layout part for destQuery
! 2160: String tempQueryDest = destQuery;
! 2161: // remove extra query parts
! 2162: // destQuery.substring(0,destQuery.lastIndexOf(destTableName)+destTableName.length()+1);
! 2163: System.out.println("new Query " + tempQueryDest);
! 2164: System.out.println("idfield " + idField + " " + ids.get(tbIndex).toString());
! 2165: if (!idField.equals(""))
! 2166: {
! 2167: long startTime = System.currentTimeMillis();
! 2168: int counter = -1;
! 2169: TreeSet linesToDelete = null;
! 2170: PreparedStatement delPSt = null;
! 2171: while (true)
! 2172: {
! 2173: ++counter;
! 2174: if (counter == 0 && dialog != null)
! 2175: dialog.title.setText("Check if data is available");
! 2176: else if (dialog != null)
! 2177: dialog.title.setText("Check if more data is available");
! 2178:
! 2179: myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex), tempQuery, 0);
! 2180: myIdsDest = beanDest.getIDVector(convertText(idField), destTableName, tempQueryDest, 0);
! 2181: //System.out.println("status of remove
! 2182: // "+myIds.remove("b015892"));
! 2183: System.out.println("ids found for " + idField + " " + !myIds.isEmpty());
! 2184: if (myIds.isEmpty())
! 2185: break;
! 2186: vec = new Vector(myIds);
! 2187: vecDest = new Vector(myIdsDest);
! 2188: rowCount = vec.size();
! 2189: // Deletion will work this way
! 2190: Vector deleted = new Vector(vec);
! 2191:
! 2192: TreeSet linesToAppend = new TreeSet(vec);
! 2193: linesToAppend.addAll(vec);
! 2194: linesToDelete = new TreeSet(vecDest);
! 2195: // remove all lines that are already in dest database
! 2196: linesToAppend.removeAll(vecDest);
! 2197: // remove all lines that should not be deleted
! 2198: linesToDelete.removeAll(deleted);
! 2199: System.out.println("linesToAppend " + linesToAppend.size() + " " + destTableName);
! 2200: System.out.println("linesToDelete " + linesToDelete.size() + " " + destTableName);
! 2201: System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIds.size());
! 2202: deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls);
! 2203: ConversionProperties prop = getFieldNamesAndDestTableName(creates.get(tbIndex).toString(), query, names.get(tbIndex).toString());
! 2204: StringBuffer insCommand = createInsertCommand(prop.destTableName, prop.fieldNames);
! 2205: StringBuffer updCommand = createUpdateCommand(prop.destTableName, prop.fieldNames, tempIDdest);
! 2206: StringBuffer delCommand = createDeleteCommand(destTableName, tempIDdest);
! 2207: PreparedStatement insPst = beanDest.getConnection().prepareStatement(insCommand.toString());
! 2208: PreparedStatement updPst = beanDest.getConnection().prepareStatement(updCommand.toString());
! 2209: delPSt = beanDest.getConnection().prepareStatement(delCommand.toString());
! 2210: // delPSt.setString(1,"b015892");
! 2211: // delPSt.execute();
! 2212: // if (true)
! 2213: // return;
! 2214: if (vec.size() <= numIntervalls)
! 2215: {
! 2216: endIndex = 0;
! 2217: deltaID = vec.size();
! 2218: }
! 2219: for (int k = 0; k < vec.size() - deltaID; k = k + deltaID)
! 2220: {
! 2221: System.out.println(vec.get(k) + " " + vec.get(k + deltaID) + " " + vec.lastElement());
! 2222: if (query.indexOf("where") > 0)
! 2223: tempQuery = query + " and " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID) + "'";
! 2224: else
! 2225: tempQuery = query + " where " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID) + "'";
! 2226: System.out.println(tempQuery);
! 2227: if (dialog != null)
! 2228: dialog.title.setText("Reading table data ...");
! 2229:
! 2230: // bean.makeQuery(tempQuery, deltaID);
! 2231: if (dialog != null)
! 2232: dialog.title.setText("Writing table data ...");
! 2233:
! 2234: performSynchronize(idField, vec, tempQuery, linesToDelete, linesToAppend, insPst, updPst, delPSt, deltaID, delimiter);
! 2235: // System.out.println("ID LIST SIZE " +
! 2236: // Math.round((double) myIds.size() / (double)
! 2237: // numIntervalls) + " " + myIdsDest.size());
! 2238: endIndex = k + deltaID;
! 2239: }
! 2240: System.out.println(endIndex);
! 2241: //all data written ? if not write last chunk of data
! 2242: if (endIndex == vec.size() - 1)
! 2243: System.out.println("fits");
! 2244: else
! 2245: {
! 2246: System.out.println(" last intervall from " + vec.get(endIndex) + " " + vec.lastElement());
! 2247:
! 2248: if (query.indexOf("where") > 0)
! 2249: tempQuery = query + " and " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement() + "'";
! 2250: else
! 2251: tempQuery = query + " where " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement() + "'";
! 2252: System.out.println(tempQuery);
! 2253: if (dialog != null)
! 2254: dialog.title.setText("Reading table data ...");
! 2255: // bean.makeQuery(tempQuery, 0);
! 2256: if (dialog != null)
! 2257: dialog.title.setText("Writing table data ...");
! 2258: performSynchronize(idField, vec, tempQuery, linesToDelete, linesToAppend, insPst, updPst, delPSt, deltaID, delimiter);
! 2259: // System.out.println("ID LIST SIZE " +
! 2260: // Math.round((double) myIds.size() / (double)
! 2261: // numIntervalls) + " " + myIdsDest.size());
! 2262: }
! 2263: // prepare new query for next chunk
! 2264: if (query.indexOf("where") > 0)
! 2265: tempQuery = query + " and " + tempID + ">'" + vec.lastElement() + "'";
! 2266: else
! 2267: tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'";
! 2268:
! 2269: }
! 2270: String tableName = names.get(tbIndex).toString();
! 2271: IndexList idList = (IndexList) indexList.get(0);
! 2272: System.out.println("found list " + idList);
! 2273: Statement stm = beanDest.getConnection().createStatement();
! 2274: Vector destTables = beanDest.getTableNames();
! 2275: System.out.println("tempQueryDest" + tempQueryDest);
! 2276: beanDest.makeQuery(tempQueryDest, 0);
! 2277: for (Iterator iter = idList.iterator(); iter.hasNext();)
! 2278: {
! 2279: String indexField = (String) iter.next();
! 2280: indexField = convertText(indexField);
! 2281: String indexName = destTableName + "_" + indexField;
! 2282: if (destTables.contains(indexName))
! 2283: {
! 2284: stm.execute("DROP INDEX " + destTableName + "_" + indexField);
! 2285: // continue;
! 2286: }
! 2287: // stm.execute("DROP INDEX
! 2288: // "+destTableName+"_"+indexField);
! 2289:
! 2290: String type = beanDest.getColumnType(indexField).toLowerCase();
! 2291: // System.out.println(indexField+" "+type+"
! 2292: // "+(type.indexOf("text") >= 0 ||
! 2293: // type.indexOf("varchar") >= 0 || type.indexOf("char")
! 2294: // >= 0));
! 2295: if (type.indexOf("text") >= 0 || type.indexOf("varchar") >= 0 || type.indexOf("char") >= 0)
! 2296: {
! 2297: if (beanDest.url.indexOf("mysql") >= 0)
! 2298: {
! 2299: //System.out.println("CREATE INDEX " +
! 2300: // indexName + " ON " + destTableName + " (" +
! 2301: // indexField + "(10))");
! 2302: // TODO problem if index exist !!!
! 2303: stm.execute("CREATE INDEX " + indexName + " ON " + destTableName + " (" + indexField + "(10))");
! 2304: }
! 2305: else
! 2306: {
! 2307: stm.execute("CREATE INDEX " + indexName + " ON " + destTableName + " (lower( " + indexField + "))");
! 2308:
! 2309: }
! 2310:
! 2311: }
! 2312: else
! 2313: {
! 2314: stm.execute("CREATE INDEX " + destTableName + "_" + indexField + " ON " + destTableName + "(" + indexField + ")");
! 2315:
! 2316: }
! 2317:
! 2318: // stm.execute("DROP INDEX
! 2319: // "+destTableName+"_"+indexField);
! 2320:
! 2321: }
! 2322: // CREATE UNIQUE INDEX title_idx ON films (title);
! 2323: for (Iterator iter = linesToDelete.iterator(); iter.hasNext();)
! 2324: {
! 2325: String id = (String) iter.next();
! 2326: delPSt.setString(1, id);
! 2327: delPSt.execute();
! 2328:
! 2329: }
! 2330:
! 2331: long endTime = System.currentTimeMillis();
! 2332: System.out.println("Time for incremental synchronize elapsed " + (endTime - startTime));
! 2333: } // to idfield if
! 2334: } // table loop
! 2335:
! 2336: }
! 2337: catch (Exception e)
! 2338: {
! 2339: System.out.println("Error while connecting to database " + e);
! 2340: e.printStackTrace();
! 2341: if (dialog != null)
! 2342: {
! 2343: dialog.setVisible(false);
! 2344: dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
! 2345: FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
! 2346: }
! 2347: java.io.ByteArrayOutputStream b = new java.io.ByteArrayOutputStream();
! 2348: java.io.PrintStream stream = new java.io.PrintStream(b);
! 2349: stream.print(command + "\n\n");
! 2350: e.printStackTrace(stream);
! 2351: FM2SQL.showErrorDialog(b.toString(), "Error occured !");
! 2352:
! 2353: }
! 2354: if (dialog != null)
! 2355: {
! 2356: dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
! 2357: FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
! 2358:
! 2359: dialog.setVisible(false);
! 2360: }
! 2361: }
! 2362:
! 2363: /**
! 2364: * @param destQuery
! 2365: * @param string
! 2366: * @return
! 2367: */
! 2368: private static String removeLayoutPartFromQuery(String destQuery, String layoutName)
! 2369: {
! 2370: String removeString = "layout " + beanDest.getQC() + layoutName + beanDest.getQC();
! 2371: destQuery = destQuery.replaceFirst(removeString, "");
! 2372: System.out.println("destQuery change to " + destQuery);
! 2373: return destQuery;
! 2374: }
! 2375:
! 2376: private static void performSynchronize(String idField, Vector vec, String tempQuery, TreeSet linesToDelete, TreeSet linesToAppend, PreparedStatement insPst, PreparedStatement updPst,
! 2377: PreparedStatement delPSt, int deltaID, String delimiter) throws SQLException, ParseException
! 2378: {
! 2379: Vector[] vectors = bean.getQueryData(tempQuery, deltaID);
! 2380: int idIndex = vectors[1].indexOf(idField);
! 2381: System.out.println(idIndex + " " + vectors[1] + " " + idField);
! 2382: // todo arraylist code has to be added
! 2383: for (Iterator iter = vectors[0].iterator(); iter.hasNext();)
! 2384: {
! 2385: Vector line = (Vector) iter.next();
! 2386: Object lineIDIndex = line.get(idIndex);
! 2387: if (linesToAppend.contains(lineIDIndex))
! 2388: System.out.println("line " + linesToAppend.contains(line.get(idIndex)) + " " + lineIDIndex);
! 2389: if (linesToAppend.contains(lineIDIndex))
! 2390: {
! 2391: for (int l = 0; l < line.size(); ++l)
! 2392: {
! 2393: Object obj = line.get(l);
! 2394: if (obj instanceof ArrayList)
! 2395: obj = formatFileMakerArray((List) obj, delimiter);
! 2396: if (obj != null)
! 2397: insPst.setString(l + 1, obj.toString());
! 2398: else
! 2399: insPst.setNull(l + 1, Types.NULL);
! 2400: }
! 2401: insPst.execute();
! 2402:
! 2403: }
! 2404: else
! 2405: // update
! 2406: {
! 2407: for (int l = 0; l < line.size(); ++l)
! 2408: {
! 2409: Object obj = line.get(l);
! 2410: if (obj instanceof ArrayList)
! 2411: obj = formatFileMakerArray((List) obj, delimiter);
! 2412: if (obj != null)
! 2413: updPst.setString(l + 1, obj.toString());
! 2414: else
! 2415: updPst.setNull(l + 1, Types.NULL);
! 2416: }
! 2417: updPst.setString(line.size() + 1, line.get(idIndex).toString());
! 2418: //updPst.addBatch();
! 2419: updPst.execute();
! 2420: }
! 2421: }
! 2422: //updPst.executeBatch();
! 2423: } // to method
! 2424:
! 2425: /**
! 2426: * Converts input String in norman encoding to unicode
! 2427: *
! 2428: * @param inp
! 2429: * @return converted String
! 2430: */
! 2431: static public String normanToUnicode(String inp)
! 2432: {
! 2433: StringBuffer buf = new StringBuffer();
! 2434: for (int i = 0; i < inp.length(); i++)
! 2435: {
! 2436: char c = inp.charAt(i);
! 2437: // System.out.println("char "+c+" "+(int)c);
! 2438: switch (c)
! 2439: {
! 2440: case 1 :
! 2441: buf.append("\u00d0");
! 2442: break; // Eth
! 2443: case 2 :
! 2444: buf.append("\u00f0");
! 2445: break; // eth
! 2446: case 3 :
! 2447: buf.append("\u0141");
! 2448: break; // Lslash
! 2449: case 4 :
! 2450: buf.append("\u0142");
! 2451: break; // lslash
! 2452: case 5 :
! 2453: buf.append("\u0160");
! 2454: break; // S caron
! 2455: case 6 :
! 2456: buf.append("\u0161");
! 2457: break; // s caron
! 2458: case 7 :
! 2459: buf.append("\u00dd");
! 2460: break; // Y acute
! 2461: case 8 :
! 2462: buf.append("\u00fd");
! 2463: break; // y acute
! 2464: case 11 :
! 2465: buf.append("\u00de");
! 2466: break; // Thorn
! 2467: case 12 :
! 2468: buf.append("\u00fe");
! 2469: break; // thorn
! 2470: case 14 :
! 2471: buf.append("\u017d");
! 2472: break; // Z caron
! 2473: case 15 :
! 2474: buf.append("\u017e");
! 2475: break; // z caron
! 2476: case 17 :
! 2477: buf.append("\u0073");
! 2478: break; // asciitilde
! 2479: case 18 :
! 2480: buf.append("j\u0305");
! 2481: break; // j macron [does a single char exist?]
! 2482: case 19 :
! 2483: buf.append("^");
! 2484: break; // circumflex
! 2485: case 20 :
! 2486: buf.append("\u0303");
! 2487: break; // tilde
! 2488: case 21 :
! 2489: buf.append("\u00bd");
! 2490: break; // onehalf
! 2491: case 22 :
! 2492: buf.append("\u00bc");
! 2493: break; // onequarter
! 2494: case 23 :
! 2495: buf.append("\u00b9");
! 2496: break; // onesuperior
! 2497: case 24 :
! 2498: buf.append("\u00be");
! 2499: break; // threequarters
! 2500: case 25 :
! 2501: buf.append("\u00b3");
! 2502: break; // threesuperior
! 2503: case 26 :
! 2504: buf.append("\u00b2");
! 2505: break; // twosuperior
! 2506: case 27 :
! 2507: buf.append("\u00a6");
! 2508: break; // brokenbar
! 2509: case 28 :
! 2510: buf.append("-");
! 2511: break; // minus
! 2512: case 29 :
! 2513: buf.append("\u00d7");
! 2514: break; // multiply
! 2515: case 39 :
! 2516: buf.append("'");
! 2517: break; // quotesingle
! 2518: case 94 :
! 2519: buf.append("\u0302");
! 2520: break; // circumflex
! 2521: case 96 :
! 2522: buf.append("\u0300");
! 2523: break; // grave
! 2524: case 196 :
! 2525: buf.append("\u00c4");
! 2526: break; // A dieresis
! 2527: case 197 :
! 2528: buf.append("\u00c5");
! 2529: break; // A ring
! 2530: case 201 :
! 2531: buf.append("\u00c9");
! 2532: break; // E acute
! 2533: case 209 :
! 2534: buf.append("\u00d1");
! 2535: break; // N tilde
! 2536: case 214 :
! 2537: buf.append("\u00d6");
! 2538: break; // O dieresis
! 2539: case 220 :
! 2540: buf.append("\u00dc");
! 2541: break; // U dieresis
! 2542: case 225 :
! 2543: buf.append("\u00e1");
! 2544: break; // a acute
! 2545: case 224 :
! 2546: buf.append("\u00e0");
! 2547: break; // a grave
! 2548: case 226 :
! 2549: buf.append("\u00e2");
! 2550: break; // a circumflex
! 2551: case 228 :
! 2552: buf.append("\u00e4");
! 2553: break; // a dieresis
! 2554: case 227 :
! 2555: buf.append("\u00e3");
! 2556: break; // a tilde
! 2557: case 229 :
! 2558: buf.append("\u0101");
! 2559: break; // a macron
! 2560: case 231 :
! 2561: buf.append("\u00e7");
! 2562: break; // c cedilla
! 2563: case 233 :
! 2564: buf.append("\u00e9");
! 2565: break; // e acute
! 2566: case 232 :
! 2567: buf.append("\u00e8");
! 2568: break; // e grave
! 2569: case 234 :
! 2570: buf.append("\u00ea");
! 2571: break; // e circumflex
! 2572: case 235 :
! 2573: buf.append("\u00eb");
! 2574: break; // e dieresis
! 2575: case 237 :
! 2576: buf.append("\u00ed");
! 2577: break; // i acute
! 2578: case 236 :
! 2579: buf.append("\u00ec");
! 2580: break; // i grave
! 2581: case 238 :
! 2582: buf.append("\u00ee");
! 2583: break; // i circumflex
! 2584: case 239 :
! 2585: buf.append("\u00ef");
! 2586: break; // i dieresis
! 2587: case 241 :
! 2588: buf.append("\u00f1");
! 2589: break; // n tilde
! 2590: case 243 :
! 2591: buf.append("\u00f3");
! 2592: break; // o acute
! 2593: case 242 :
! 2594: buf.append("\u00f2");
! 2595: break; // o grave
! 2596: case 244 :
! 2597: buf.append("\u00f4");
! 2598: break; // o circumflex
! 2599: case 246 :
! 2600: buf.append("\u00f6");
! 2601: break; // o dieresis
! 2602: case 245 :
! 2603: buf.append("\u00f5");
! 2604: break; // o tilde
! 2605: case 250 :
! 2606: buf.append("\u00fa");
! 2607: break; // u acute
! 2608: case 249 :
! 2609: buf.append("\u00f9");
! 2610: break; // u grave
! 2611: case 251 :
! 2612: buf.append("\u00fb");
! 2613: break; // u circumflex
! 2614: case 252 :
! 2615: buf.append("\u00fc");
! 2616: break; // u dieresis
! 2617: case 8224 :
! 2618: buf.append("\u1e6d");
! 2619: break; // t underdot
! 2620: case 176 :
! 2621: buf.append("\u00b0");
! 2622: break; // degree
! 2623: case 162 :
! 2624: buf.append("\u1ebd");
! 2625: break; // e tilde
! 2626: case 163 :
! 2627: buf.append("\u00a3");
! 2628: break; // sterling
! 2629: case 167 :
! 2630: buf.append("\u00a7");
! 2631: break; // section
! 2632: case 182 :
! 2633: buf.append("\u00b6");
! 2634: break; // paragraph
! 2635: case 223 :
! 2636: buf.append("\u015b");
! 2637: break; // s acute
! 2638: case 174 :
! 2639: buf.append("\u1e5b");
! 2640: break; // r underdot
! 2641: case 169 :
! 2642: buf.append("\u1e45");
! 2643: break; // n overdot
! 2644: case 353 :
! 2645: buf.append("\u1e45");
! 2646: break; // n overdot
! 2647: case 180 :
! 2648: buf.append("\u0301");
! 2649: break; // acute
! 2650: case 168 :
! 2651: buf.append("\u0308");
! 2652: break; // dieresis
! 2653: case 8800 :
! 2654: buf.append("\u1e6d");
! 2655: break; // t underdot
! 2656: case 198 :
! 2657: buf.append("\u00c6");
! 2658: break; // AE
! 2659: case 216 :
! 2660: buf.append("\u014d");
! 2661: break; // o macron
! 2662: case 8734 :
! 2663: buf.append("\u0129");
! 2664: break; // i tilde
! 2665: case 177 :
! 2666: buf.append("\u00b1");
! 2667: break; // plusminus
! 2668: case 165 :
! 2669: buf.append("\u012b");
! 2670: break; // i macron
! 2671: case 181 :
! 2672: buf.append("\u1e43");
! 2673: break; // m underdot
! 2674: case 8706 :
! 2675: buf.append("\u1e0d");
! 2676: break; // d underdot
! 2677: case 240 :
! 2678: buf.append("\u1e0d");
! 2679: break; // d underdot
! 2680:
! 2681: case 8721 :
! 2682: buf.append("\u1e63");
! 2683: break; // s underdot
! 2684: case 960 :
! 2685: buf.append("\u017a");
! 2686: break; // z acute
! 2687: case 8747 :
! 2688: buf.append("\u1e45");
! 2689: break; // n overdot
! 2690: case 937 :
! 2691: buf.append("\u0169");
! 2692: break; // u tilde
! 2693: case 230 :
! 2694: buf.append("\u00e6");
! 2695: break; // ae
! 2696: case 248 :
! 2697: buf.append("\u00f8");
! 2698: break; // oslash
! 2699: case 191 :
! 2700: buf.append("\u0304\u0306");
! 2701: break; // macron breve
! 2702: case 172 :
! 2703: buf.append("\u1e37");
! 2704: break; //
! 2705: case 8730 :
! 2706: buf.append("j\u0305");
! 2707: break; // j macron [does a single char exist?]
! 2708: case 402 :
! 2709: buf.append("\u0103");
! 2710: break; // a breve
! 2711: case 8776 :
! 2712: buf.append("\u016d");
! 2713: break; // u breve
! 2714: case 187 :
! 2715: buf.append("\u1e42");
! 2716: break; // M underdot
! 2717: case 8230 :
! 2718: buf.append("\u2026");
! 2719: break; // ellipsis
! 2720: case 192 :
! 2721: buf.append("\u00c0");
! 2722: break; // A grave
! 2723: case 195 :
! 2724: buf.append("\u00c3");
! 2725: break; // A tilde
! 2726: case 213 :
! 2727: buf.append("\u00d5");
! 2728: break; // O tilde
! 2729: case 338 :
! 2730: buf.append("m\u0306");
! 2731: break; // m breve
! 2732: case 339 :
! 2733: buf.append("\u0153");
! 2734: break; // oe
! 2735: case 8211 :
! 2736: buf.append("\u2013");
! 2737: break; // endash
! 2738: case 8212 :
! 2739: buf.append("\u2014");
! 2740: break; // emdash
! 2741: case 8220 :
! 2742: buf.append("\u201c");
! 2743: break; // quotedblleft
! 2744: case 8221 :
! 2745: buf.append("\u201d");
! 2746: break; // quotedblright
! 2747: case 8216 :
! 2748: buf.append("\u2018");
! 2749: break; // quoteleft
! 2750: case 8217 :
! 2751: buf.append("\u2019");
! 2752: break; // quoteright
! 2753: case 247 :
! 2754: buf.append("\u1e37");
! 2755: break; // l underring [actually underdot]
! 2756: case 9674 :
! 2757: buf.append("\u1e41");
! 2758: break; // m overdot
! 2759: case 255 :
! 2760: buf.append("n\u0306");
! 2761: break; // n breve
! 2762: case 376 :
! 2763: buf.append("\u00d7");
! 2764: break; // multiply
! 2765: case 8364 :
! 2766: buf.append("\u1e5b");
! 2767: break; // r underring [actually underdot]
! 2768: case 8249 :
! 2769: buf.append("\u1e44");
! 2770: break; // N overdot
! 2771: case 8250 :
! 2772: buf.append("\u1e62");
! 2773: break; // S underdot
! 2774: case 64257 :
! 2775: buf.append("\u1e24");
! 2776: break; // H underdot
! 2777: case 64258 :
! 2778: buf.append("\u1e0c");
! 2779: break; // D underdot
! 2780: case 8225 :
! 2781: buf.append("\u2021");
! 2782: break; // daggerdbl
! 2783: case 8218 :
! 2784: buf.append("\u1e36");
! 2785: break; // L underdot
! 2786: case 8222 :
! 2787: buf.append("\u0113");
! 2788: break; // e macron
! 2789: case 194 :
! 2790: buf.append("\u1e5f");
! 2791: break; // r underbar
! 2792: case 202 :
! 2793: buf.append("r\u0324");
! 2794: break; // r underdieresis
! 2795: case 193 :
! 2796: buf.append("\u012a");
! 2797: break; // I macron
! 2798: case 8486 :
! 2799: case 203 :
! 2800: buf.append("\u016b");
! 2801: break; // u macron
! 2802: case 200 :
! 2803: buf.append("\u1e6c");
! 2804: break; // T underdot
! 2805: case 205 :
! 2806: buf.append("\u1e64");
! 2807: break; // S acute
! 2808: case 206 :
! 2809: buf.append("\u2020");
! 2810: break; // dagger
! 2811: case 207 :
! 2812: buf.append("\u0115");
! 2813: break; // e breve
! 2814: case 204 :
! 2815: buf.append("\u014f");
! 2816: break; // o breve
! 2817: case 211 :
! 2818: buf.append("\u0100");
! 2819: break; // A macron
! 2820: case 212 :
! 2821: buf.append("\u1e46");
! 2822: break; // N underdot
! 2823: case 210 :
! 2824: buf.append("\u1e3b");
! 2825: break; // l underbar
! 2826: case 218 :
! 2827: buf.append("\u016a");
! 2828: break; // U macron
! 2829: case 219 :
! 2830: buf.append("\u0179");
! 2831: break; // Z acute
! 2832: case 217 :
! 2833: buf.append("\u1e5a");
! 2834: break; // R underdot
! 2835: case 305 :
! 2836: buf.append("\u0131");
! 2837: break; // dotlessi
! 2838: case 710 :
! 2839: buf.append("\u1e47");
! 2840: break; // n underdot
! 2841: case 732 :
! 2842: buf.append("\u1e49");
! 2843: break; // n underbar
! 2844: case 175 :
! 2845: buf.append("\u0304");
! 2846: break; // macron
! 2847: case 728 :
! 2848: buf.append("\u0306");
! 2849: break; // breve
! 2850: case 729 :
! 2851: case 215 :
! 2852: buf.append("\u1e25");
! 2853: break; // h underdot
! 2854: case 730 :
! 2855: buf.append("\u012d");
! 2856: break; // i breve
! 2857: case 184 :
! 2858: buf.append("\u0327");
! 2859: break; // cedilla
! 2860: case 733 :
! 2861: buf.append("\u030b");
! 2862: break; // hungarumlaut
! 2863: case 731 :
! 2864: buf.append("\u0328");
! 2865: break; // ogonek
! 2866: case 711 :
! 2867: buf.append("\u030c");
! 2868: break; // caron
! 2869: case 199 :
! 2870: buf.append("\u012b\u0303");
! 2871: break; // imacron tilde
! 2872: case 8226 :
! 2873: buf.append("\u1e5d");
! 2874: break; // runderdot macron
! 2875: case 8482 :
! 2876: buf.append("\u016b\0306");
! 2877: break; // umacron breve
! 2878: case 8804 :
! 2879: buf.append("\u0101\u0301");
! 2880: break; // amacron acute
! 2881: case 8805 :
! 2882: buf.append("\u016b\u0301");
! 2883: break; // umacron acute
! 2884: case 8719 :
! 2885: buf.append("\u0113\u0301");
! 2886: break; // emacron acute
! 2887: case 170 :
! 2888: buf.append("\u0113\u0300");
! 2889: break; // emacron breve
! 2890: case 186 :
! 2891: buf.append("\u014d\u0300");
! 2892: break; // omacron breve
! 2893: case 161 :
! 2894: buf.append("\u0101\u0306");
! 2895: break; // amacron breve
! 2896: case 8710 :
! 2897: buf.append("\u0101\u0303");
! 2898: break; // amacron tilde
! 2899: case 171 :
! 2900: buf.append("\u012b\u0301");
! 2901: break; // imacron acute
! 2902: case 8260 :
! 2903: buf.append("\u1e00");
! 2904: break; // runderdotmacron acute
! 2905: case 183 :
! 2906: buf.append("\u1e5b\u0301");
! 2907: break; // runderdot acute
! 2908: case 8240 :
! 2909: buf.append("\u012b\u0306");
! 2910: break; // imacron breve
! 2911: case 63743 :
! 2912: buf.append("\u016b\u0303");
! 2913: break; // umacron tilde
! 2914: default :
! 2915: buf.append(c);
! 2916: if ((int) c > 127)
! 2917: System.out.println("char " + c + " " + (int) c);
! 2918: break;
! 2919: }
! 2920: }
! 2921: return buf.toString();
! 2922: }
! 2923:
! 2924: static public String normanToUnicodeOld(String inp)
! 2925: {
! 2926: StringBuffer buf = new StringBuffer();
! 2927: for (int i = 0; i < inp.length(); i++)
! 2928: {
! 2929: char c = inp.charAt(i);
! 2930: switch (c)
! 2931: {
! 2932: case 1 :
! 2933: buf.append("\u00d0");
! 2934: break; // Eth
! 2935: case 2 :
! 2936: buf.append("\u00f0");
! 2937: break; // eth
! 2938: case 3 :
! 2939: buf.append("\u0141");
! 2940: break; // Lslash
! 2941: case 4 :
! 2942: buf.append("\u0142");
! 2943: break; // lslash
! 2944: case 5 :
! 2945: buf.append("\u0160");
! 2946: break; // S caron
! 2947: case 6 :
! 2948: buf.append("\u0161");
! 2949: break; // s caron
! 2950: case 7 :
! 2951: buf.append("\u00dd");
! 2952: break; // Y acute
! 2953: case 8 :
! 2954: buf.append("\u00fd");
! 2955: break; // y acute
! 2956: case 11 :
! 2957: buf.append("\u00de");
! 2958: break; // Thorn
! 2959: case 12 :
! 2960: buf.append("\u00fe");
! 2961: break; // thorn
! 2962: case 14 :
! 2963: buf.append("\u017d");
! 2964: break; // Z caron
! 2965: case 15 :
! 2966: buf.append("\u017e");
! 2967: break; // z caron
! 2968: case 17 :
! 2969: buf.append("\u0073");
! 2970: break; // asciitilde
! 2971: case 18 :
! 2972: buf.append("j\u0305");
! 2973: break; // j macron [does a single char exist?]
! 2974: case 19 :
! 2975: buf.append("^");
! 2976: break; // circumflex
! 2977: case 20 :
! 2978: buf.append("\u0303");
! 2979: break; // tilde
! 2980: case 21 :
! 2981: buf.append("\u00bd");
! 2982: break; // onehalf
! 2983: case 22 :
! 2984: buf.append("\u00bc");
! 2985: break; // onequarter
! 2986: case 23 :
! 2987: buf.append("\u00b9");
! 2988: break; // onesuperior
! 2989: case 24 :
! 2990: buf.append("\u00be");
! 2991: break; // threequarters
! 2992: case 25 :
! 2993: buf.append("\u00b3");
! 2994: break; // threesuperior
! 2995: case 26 :
! 2996: buf.append("\u00b2");
! 2997: break; // twosuperior
! 2998: case 27 :
! 2999: buf.append("\u00a6");
! 3000: break; // brokenbar
! 3001: case 28 :
! 3002: buf.append("-");
! 3003: break; // minus
! 3004: case 29 :
! 3005: buf.append("\u00d7");
! 3006: break; // multiply
! 3007: case 39 :
! 3008: buf.append("'");
! 3009: break; // quotesingle
! 3010: case 94 :
! 3011: buf.append("\u0302");
! 3012: break; // circumflex
! 3013: case 96 :
! 3014: buf.append("\u0300");
! 3015: break; // grave
! 3016: case 128 :
! 3017: buf.append("\u00c4");
! 3018: break; // A dieresis
! 3019: case 129 :
! 3020: buf.append("\u00c5");
! 3021: break; // A ring
! 3022: case 131 :
! 3023: buf.append("\u00c9");
! 3024: break; // E acute
! 3025: case 132 :
! 3026: buf.append("\u00d1");
! 3027: break; // N tilde
! 3028: case 133 :
! 3029: buf.append("\u00d6");
! 3030: break; // O dieresis
! 3031: case 134 :
! 3032: buf.append("\u00dc");
! 3033: break; // U dieresis
! 3034: case 135 :
! 3035: buf.append("\u00e1");
! 3036: break; // a acute
! 3037: case 136 :
! 3038: buf.append("\u00e0");
! 3039: break; // a grave
! 3040: case 137 :
! 3041: buf.append("\u00e2");
! 3042: break; // a circumflex
! 3043: case 138 :
! 3044: buf.append("\u00e4");
! 3045: break; // a dieresis
! 3046: case 139 :
! 3047: buf.append("\u00e3");
! 3048: break; // a tilde
! 3049: case 140 :
! 3050: buf.append("\u0101");
! 3051: break; // a macron
! 3052: case 141 :
! 3053: buf.append("\u00e7");
! 3054: break; // c cedilla
! 3055: case 142 :
! 3056: buf.append("\u00e9");
! 3057: break; // e acute
! 3058: case 143 :
! 3059: buf.append("\u00e8");
! 3060: break; // e grave
! 3061: case 144 :
! 3062: buf.append("\u00ea");
! 3063: break; // e circumflex
! 3064: case 145 :
! 3065: buf.append("\u00eb");
! 3066: break; // e dieresis
! 3067: case 146 :
! 3068: buf.append("\u00ed");
! 3069: break; // i acute
! 3070: case 147 :
! 3071: buf.append("\u00ec");
! 3072: break; // i grave
! 3073: case 148 :
! 3074: buf.append("\u00ee");
! 3075: break; // i circumflex
! 3076: case 149 :
! 3077: buf.append("\u00ef");
! 3078: break; // i dieresis
! 3079: case 150 :
! 3080: buf.append("\u00f1");
! 3081: break; // n tilde
! 3082: case 151 :
! 3083: buf.append("\u00f3");
! 3084: break; // o acute
! 3085: case 152 :
! 3086: buf.append("\u00f2");
! 3087: break; // o grave
! 3088: case 153 :
! 3089: buf.append("\u00f4");
! 3090: break; // o circumflex
! 3091: case 154 :
! 3092: buf.append("\u00f6");
! 3093: break; // o dieresis
! 3094: case 155 :
! 3095: buf.append("\u00f5");
! 3096: break; // o tilde
! 3097: case 156 :
! 3098: buf.append("\u00fa");
! 3099: break; // u acute
! 3100: case 157 :
! 3101: buf.append("\u00f9");
! 3102: break; // u grave
! 3103: case 158 :
! 3104: buf.append("\u00fb");
! 3105: break; // u circumflex
! 3106: case 159 :
! 3107: buf.append("\u00fc");
! 3108: break; // u dieresis
! 3109: case 160 :
! 3110: buf.append("\u1e6d");
! 3111: break; // t underdot
! 3112: case 161 :
! 3113: buf.append("\u00b0");
! 3114: break; // degree
! 3115: case 162 :
! 3116: buf.append("\u1ebd");
! 3117: break; // e tilde
! 3118: case 163 :
! 3119: buf.append("\u00a3");
! 3120: break; // sterling
! 3121: case 164 :
! 3122: buf.append("\u00a7");
! 3123: break; // section
! 3124: case 166 :
! 3125: buf.append("\u00b6");
! 3126: break; // paragraph
! 3127: case 167 :
! 3128: buf.append("\u015b");
! 3129: break; // s acute
! 3130: case 168 :
! 3131: buf.append("\u1e5b");
! 3132: break; // r underdot
! 3133: case 169 :
! 3134: buf.append("\u1e67");
! 3135: break; // s caron
! 3136: case 171 :
! 3137: buf.append("\u0301");
! 3138: break; // acute
! 3139: case 172 :
! 3140: buf.append("\u0308");
! 3141: break; // dieresis
! 3142: case 173 :
! 3143: buf.append("\u1e6d");
! 3144: break; // t underdot
! 3145: case 174 :
! 3146: buf.append("\u00c6");
! 3147: break; // AE
! 3148: case 175 :
! 3149: buf.append("\u014d");
! 3150: break; // o macron
! 3151: case 176 :
! 3152: buf.append("\u0129");
! 3153: break; // i tilde
! 3154: case 177 :
! 3155: buf.append("\u00b1");
! 3156: break; // plusminus
! 3157: case 180 :
! 3158: buf.append("\u012b");
! 3159: break; // i macron
! 3160: case 181 :
! 3161: buf.append("\u1e43");
! 3162: break; // m underdot
! 3163: case 182 :
! 3164: buf.append("\u1e0d");
! 3165: break; // d underdot
! 3166: case 183 :
! 3167: buf.append("\u1e63");
! 3168: break; // s underdot
! 3169: case 185 :
! 3170: buf.append("\u017a");
! 3171: break; // z acute
! 3172: case 186 :
! 3173: buf.append("\u1e45");
! 3174: break; // n overdot
! 3175: case 189 :
! 3176: buf.append("\u0169");
! 3177: break; // u tilde
! 3178: case 190 :
! 3179: buf.append("\u00e6");
! 3180: break; // ae
! 3181: case 191 :
! 3182: buf.append("\u00f8");
! 3183: break; // oslash
! 3184: case 192 :
! 3185: buf.append("\u0304\u0306");
! 3186: break; // macron breve
! 3187: case 194 :
! 3188: buf.append("\u1e37");
! 3189: break; //
! 3190: case 195 :
! 3191: buf.append("j\u0305");
! 3192: break; // j macron [does a single char exist?]
! 3193: case 196 :
! 3194: buf.append("\u0103");
! 3195: break; // a breve
! 3196: case 197 :
! 3197: buf.append("\u016d");
! 3198: break; // u breve
! 3199: case 200 :
! 3200: buf.append("\u1e42");
! 3201: break; // M underdot
! 3202: case 201 :
! 3203: buf.append("\u2026");
! 3204: break; // ellipsis
! 3205: case 203 :
! 3206: buf.append("\u00c0");
! 3207: break; // A grave
! 3208: case 204 :
! 3209: buf.append("\u00c3");
! 3210: break; // A tilde
! 3211: case 205 :
! 3212: buf.append("\u00d5");
! 3213: break; // O tilde
! 3214: case 206 :
! 3215: buf.append("m\u0306");
! 3216: break; // m breve
! 3217: case 207 :
! 3218: buf.append("\u0153");
! 3219: break; // oe
! 3220: case 208 :
! 3221: buf.append("\u2013");
! 3222: break; // endash
! 3223: case 209 :
! 3224: buf.append("\u2014");
! 3225: break; // emdash
! 3226: case 210 :
! 3227: buf.append("\u201c");
! 3228: break; // quotedblleft
! 3229: case 211 :
! 3230: buf.append("\u201d");
! 3231: break; // quotedblright
! 3232: case 212 :
! 3233: buf.append("\u2018");
! 3234: break; // quoteleft
! 3235: case 213 :
! 3236: buf.append("\u2019");
! 3237: break; // quoteright
! 3238: case 214 :
! 3239: buf.append("\u1e37");
! 3240: break; // l underring [actually underdot]
! 3241: case 215 :
! 3242: buf.append("\u1e41");
! 3243: break; // m overdot
! 3244: case 216 :
! 3245: buf.append("n\u0306");
! 3246: break; // n breve
! 3247: case 217 :
! 3248: buf.append("\u00d7");
! 3249: break; // multiply
! 3250: case 219 :
! 3251: buf.append("\u1e5b");
! 3252: break; // r underring [actually underdot]
! 3253: case 220 :
! 3254: buf.append("\u1e44");
! 3255: break; // N overdot
! 3256: case 221 :
! 3257: buf.append("\u1e62");
! 3258: break; // S underdot
! 3259: case 222 :
! 3260: buf.append("\u1e24");
! 3261: break; // H underdot
! 3262: case 223 :
! 3263: buf.append("\u1e0c");
! 3264: break; // D underdot
! 3265: case 224 :
! 3266: buf.append("\u2021");
! 3267: break; // daggerdbl
! 3268: case 226 :
! 3269: buf.append("\u1e36");
! 3270: break; // L underdot
! 3271: case 227 :
! 3272: buf.append("\u0113");
! 3273: break; // e macron
! 3274: case 229 :
! 3275: buf.append("\u1e5f");
! 3276: break; // r underbar
! 3277: case 230 :
! 3278: buf.append("r\u0324");
! 3279: break; // r underdieresis
! 3280: case 231 :
! 3281: buf.append("\u012a");
! 3282: break; // I macron
! 3283: case 232 :
! 3284: buf.append("\u016b");
! 3285: break; // u macron
! 3286: case 233 :
! 3287: buf.append("\u01e6c");
! 3288: break; // T underdot
! 3289: case 234 :
! 3290: buf.append("\u1e64");
! 3291: break; // S acute
! 3292: case 235 :
! 3293: buf.append("\u2020");
! 3294: break; // dagger
! 3295: case 236 :
! 3296: buf.append("\u0115");
! 3297: break; // e breve
! 3298: case 237 :
! 3299: buf.append("\u014f");
! 3300: break; // o breve
! 3301: case 238 :
! 3302: buf.append("\u0100");
! 3303: break; // A macron
! 3304: case 239 :
! 3305: buf.append("\u1e46");
! 3306: break; // N underdot
! 3307: case 241 :
! 3308: buf.append("\u1e3b");
! 3309: break; // l underbar
! 3310: case 242 :
! 3311: buf.append("\u016a");
! 3312: break; // U macron
! 3313: case 243 :
! 3314: buf.append("\u0179");
! 3315: break; // Z acute
! 3316: case 244 :
! 3317: buf.append("\u1e5a");
! 3318: break; // R underdot
! 3319: case 245 :
! 3320: buf.append("\u0131");
! 3321: break; // dotlessi
! 3322: case 246 :
! 3323: buf.append("\u1e47");
! 3324: break; // n underdot
! 3325: case 247 :
! 3326: buf.append("\u1e49");
! 3327: break; // n underbar
! 3328: case 248 :
! 3329: buf.append("\u0304");
! 3330: break; // macron
! 3331: case 249 :
! 3332: buf.append("\u0306");
! 3333: break; // breve
! 3334: case 250 :
! 3335: buf.append("\u1e25");
! 3336: break; // h underdot
! 3337: case 251 :
! 3338: buf.append("\u012d");
! 3339: break; // i breve
! 3340: case 252 :
! 3341: buf.append("\u0327");
! 3342: break; // cedilla
! 3343: case 253 :
! 3344: buf.append("\u030b");
! 3345: break; // hungarumlaut
! 3346: case 254 :
! 3347: buf.append("\u0328");
! 3348: break; // ogonek
! 3349: case 255 :
! 3350: buf.append("\u030c");
! 3351: break; // caron
! 3352: case 130 :
! 3353: buf.append("\u012b\u0303");
! 3354: break; // imacron tilde
! 3355: case 165 :
! 3356: buf.append("\u1e5d");
! 3357: break; // runderdot macron
! 3358: case 170 :
! 3359: buf.append("\u016b\0306");
! 3360: break; // umacron breve
! 3361: case 178 :
! 3362: buf.append("\u0101\u0301");
! 3363: break; // amacron acute
! 3364: case 179 :
! 3365: buf.append("\u016b\u0301");
! 3366: break; // umacron acute
! 3367: case 184 :
! 3368: buf.append("\u0113\u0301");
! 3369: break; // emacron acute
! 3370: case 187 :
! 3371: buf.append("\u0113\u0300");
! 3372: break; // emacron breve
! 3373: case 188 :
! 3374: buf.append("\u014d\u0300");
! 3375: break; // omacron breve
! 3376: case 193 :
! 3377: buf.append("\u0101\u0306");
! 3378: break; // amacron breve
! 3379: case 198 :
! 3380: buf.append("\u0101\u0303");
! 3381: break; // amacron tilde
! 3382: case 199 :
! 3383: buf.append("\u012b\u0301");
! 3384: break; // imacron acute
! 3385: case 218 :
! 3386: buf.append("\u1e00");
! 3387: break; // runderdotmacron acute
! 3388: case 225 :
! 3389: buf.append("\u1e5b\u0301");
! 3390: break; // runderdot acute
! 3391: case 228 :
! 3392: buf.append("\u012b\u0306");
! 3393: break; // imacron breve
! 3394: case 240 :
! 3395: buf.append("\u016b\u0303");
! 3396: break; // umacron tilde
! 3397: default :
! 3398: buf.append(c);
! 3399: break;
! 3400: }
! 3401: }
! 3402: return buf.toString();
! 3403: }
! 3404:
! 3405: static public String normanToUnicodeNew(String inp)
! 3406: {
! 3407: StringBuffer buf = new StringBuffer();
! 3408: for (int i = 0; i < inp.length(); i++)
! 3409: {
! 3410: char c = inp.charAt(i);
! 3411: switch (c)
! 3412: {
! 3413: case 1 :
! 3414: buf.append("\u00d0");
! 3415: break; // Eth
! 3416: case 2 :
! 3417: buf.append("\u00f0");
! 3418: break; // eth
! 3419: case 3 :
! 3420: buf.append("\u0141");
! 3421: break; // Lslash
! 3422: case 4 :
! 3423: buf.append("\u0142");
! 3424: break; // lslash
! 3425: case 5 :
! 3426: buf.append("\u0160");
! 3427: break; // S caron
! 3428: case 6 :
! 3429: buf.append("\u0161");
! 3430: break; // s caron
! 3431: case 7 :
! 3432: buf.append("\u00dd");
! 3433: break; // Y acute
! 3434: case 8 :
! 3435: buf.append("\u00fd");
! 3436: break; // y acute
! 3437: case 11 :
! 3438: buf.append("\u00de");
! 3439: break; // Thorn
! 3440: case 12 :
! 3441: buf.append("\u00fe");
! 3442: break; // thorn
! 3443: case 14 :
! 3444: buf.append("\u017d");
! 3445: break; // Z caron
! 3446: case 15 :
! 3447: buf.append("\u017e");
! 3448: break; // z caron
! 3449: case 17 :
! 3450: buf.append("\u0073");
! 3451: break; // asciitilde
! 3452: case 18 :
! 3453: buf.append("j\u0305");
! 3454: break; // j macron [does a single char exist?]
! 3455: case 19 :
! 3456: buf.append("^");
! 3457: break; // circumflex
! 3458: case 20 :
! 3459: buf.append("\u0303");
! 3460: break; // tilde
! 3461: case 21 :
! 3462: buf.append("\u00bd");
! 3463: break; // onehalf
! 3464: case 22 :
! 3465: buf.append("\u00bc");
! 3466: break; // onequarter
! 3467: case 23 :
! 3468: buf.append("\u00b9");
! 3469: break; // onesuperior
! 3470: case 24 :
! 3471: buf.append("\u00be");
! 3472: break; // threequarters
! 3473: case 25 :
! 3474: buf.append("\u00b3");
! 3475: break; // threesuperior
! 3476: case 26 :
! 3477: buf.append("\u00b2");
! 3478: break; // twosuperior
! 3479: case 27 :
! 3480: buf.append("\u00a6");
! 3481: break; // brokenbar
! 3482: case 28 :
! 3483: buf.append("-");
! 3484: break; // minus
! 3485: case 29 :
! 3486: buf.append("\u00d7");
! 3487: break; // multiply
! 3488: case 39 :
! 3489: buf.append("'");
! 3490: break; // quotesingle
! 3491: case 94 :
! 3492: buf.append("\u0302");
! 3493: break; // circumflex
! 3494: case 96 :
! 3495: buf.append("\u0300");
! 3496: break; // grave
! 3497: case 196 :
! 3498: buf.append("\u00c4");
! 3499: break; // A dieresis
! 3500: case 197 :
! 3501: buf.append("\u00c5");
! 3502: break; // A ring
! 3503: case 201 :
! 3504: buf.append("\u00c9");
! 3505: break; // E acute
! 3506: case 209 :
! 3507: buf.append("\u00d1");
! 3508: break; // N tilde
! 3509: case 214 :
! 3510: buf.append("\u00d6");
! 3511: break; // O dieresis
! 3512: case 220 :
! 3513: buf.append("\u00dc");
! 3514: break; // U dieresis
! 3515: case 225 :
! 3516: buf.append("\u00e1");
! 3517: break; // a acute
! 3518: case 224 :
! 3519: buf.append("\u00e0");
! 3520: break; // a grave
! 3521: case 226 :
! 3522: buf.append("\u00e2");
! 3523: break; // a circumflex
! 3524: case 228 :
! 3525: buf.append("\u00e4");
! 3526: break; // a dieresis
! 3527: case 227 :
! 3528: buf.append("\u00e3");
! 3529: break; // a tilde
! 3530: case 229 :
! 3531: buf.append("\u0101");
! 3532: break; // a macron
! 3533: case 231 :
! 3534: buf.append("\u00e7");
! 3535: break; // c cedilla
! 3536: case 233 :
! 3537: buf.append("\u00e9");
! 3538: break; // e acute
! 3539: case 232 :
! 3540: buf.append("\u00e8");
! 3541: break; // e grave
! 3542: case 234 :
! 3543: buf.append("\u00ea");
! 3544: break; // e circumflex
! 3545: case 235 :
! 3546: buf.append("\u00eb");
! 3547: break; // e dieresis
! 3548: case 237 :
! 3549: buf.append("\u00ed");
! 3550: break; // i acute
! 3551: case 236 :
! 3552: buf.append("\u00ec");
! 3553: break; // i grave
! 3554: case 238 :
! 3555: buf.append("\u00ee");
! 3556: break; // i circumflex
! 3557: case 239 :
! 3558: buf.append("\u00ef");
! 3559: break; // i dieresis
! 3560: case 241 :
! 3561: buf.append("\u00f1");
! 3562: break; // n tilde
! 3563: case 243 :
! 3564: buf.append("\u00f3");
! 3565: break; // o acute
! 3566: case 242 :
! 3567: buf.append("\u00f2");
! 3568: break; // o grave
! 3569: case 244 :
! 3570: buf.append("\u00f4");
! 3571: break; // o circumflex
! 3572: case 246 :
! 3573: buf.append("\u00f6");
! 3574: break; // o dieresis
! 3575: case 245 :
! 3576: buf.append("\u00f5");
! 3577: break; // o tilde
! 3578: case 250 :
! 3579: buf.append("\u00fa");
! 3580: break; // u acute
! 3581: case 249 :
! 3582: buf.append("\u00f9");
! 3583: break; // u grave
! 3584: case 251 :
! 3585: buf.append("\u00fb");
! 3586: break; // u circumflex
! 3587: case 252 :
! 3588: buf.append("\u00fc");
! 3589: break; // u dieresis
! 3590: case 8224 :
! 3591: buf.append("\u1e6d");
! 3592: break; // t underdot
! 3593: case 176 :
! 3594: buf.append("\u00b0");
! 3595: break; // degree
! 3596: case 162 :
! 3597: buf.append("\u1ebd");
! 3598: break; // e tilde
! 3599: case 163 :
! 3600: buf.append("\u00a3");
! 3601: break; // sterling
! 3602: case 167 :
! 3603: buf.append("\u00a7");
! 3604: break; // section
! 3605: case 182 :
! 3606: buf.append("\u00b6");
! 3607: break; // paragraph
! 3608: case 223 :
! 3609: buf.append("\u015b");
! 3610: break; // s acute
! 3611: case 174 :
! 3612: buf.append("\u1e5b");
! 3613: break; // r underdot
! 3614: case 169 :
! 3615: buf.append("\u1e45");
! 3616: break; // n overdot
! 3617: case 180 :
! 3618: buf.append("\u0301");
! 3619: break; // acute
! 3620: case 168 :
! 3621: buf.append("\u0308");
! 3622: break; // dieresis
! 3623: case 8800 :
! 3624: buf.append("\u1e6d");
! 3625: break; // t underdot
! 3626: case 198 :
! 3627: buf.append("\u00c6");
! 3628: break; // AE
! 3629: case 216 :
! 3630: buf.append("\u014d");
! 3631: break; // o macron
! 3632: case 8734 :
! 3633: buf.append("\u0129");
! 3634: break; // i tilde
! 3635: case 177 :
! 3636: buf.append("\u00b1");
! 3637: break; // plusminus
! 3638: case 165 :
! 3639: buf.append("\u012b");
! 3640: break; // i macron
! 3641: case 181 :
! 3642: buf.append("\u1e43");
! 3643: break; // m underdot
! 3644: case 8706 :
! 3645: buf.append("\u1e0d");
! 3646: break; // d underdot
! 3647: case 8721 :
! 3648: buf.append("\u1e63");
! 3649: break; // s underdot
! 3650: case 960 :
! 3651: buf.append("\u017a");
! 3652: break; // z acute
! 3653: case 8747 :
! 3654: buf.append("\u1e45");
! 3655: break; // n overdot
! 3656: case 937 :
! 3657: buf.append("\u0169");
! 3658: break; // u tilde
! 3659: case 230 :
! 3660: buf.append("\u00e6");
! 3661: break; // ae
! 3662: case 248 :
! 3663: buf.append("\u00f8");
! 3664: break; // oslash
! 3665: case 191 :
! 3666: buf.append("\u0304\u0306");
! 3667: break; // macron breve
! 3668: case 172 :
! 3669: buf.append("\u1e37");
! 3670: break; //
! 3671: case 8730 :
! 3672: buf.append("j\u0305");
! 3673: break; // j macron [does a single char exist?]
! 3674: case 402 :
! 3675: buf.append("\u0103");
! 3676: break; // a breve
! 3677: case 8776 :
! 3678: buf.append("\u016d");
! 3679: break; // u breve
! 3680: case 187 :
! 3681: buf.append("\u1e42");
! 3682: break; // M underdot
! 3683: case 8230 :
! 3684: buf.append("\u2026");
! 3685: break; // ellipsis
! 3686: case 192 :
! 3687: buf.append("\u00c0");
! 3688: break; // A grave
! 3689: case 195 :
! 3690: buf.append("\u00c3");
! 3691: break; // A tilde
! 3692: case 213 :
! 3693: buf.append("\u00d5");
! 3694: break; // O tilde
! 3695: case 338 :
! 3696: buf.append("m\u0306");
! 3697: break; // m breve
! 3698: case 339 :
! 3699: buf.append("\u0153");
! 3700: break; // oe
! 3701: case 8211 :
! 3702: buf.append("\u2013");
! 3703: break; // endash
! 3704: case 8212 :
! 3705: buf.append("\u2014");
! 3706: break; // emdash
! 3707: case 8220 :
! 3708: buf.append("\u201c");
! 3709: break; // quotedblleft
! 3710: case 8221 :
! 3711: buf.append("\u201d");
! 3712: break; // quotedblright
! 3713: case 8216 :
! 3714: buf.append("\u2018");
! 3715: break; // quoteleft
! 3716: case 8217 :
! 3717: buf.append("\u2019");
! 3718: break; // quoteright
! 3719: case 247 :
! 3720: buf.append("\u1e37");
! 3721: break; // l underring [actually underdot]
! 3722: case 9674 :
! 3723: buf.append("\u1e41");
! 3724: break; // m overdot
! 3725: case 255 :
! 3726: buf.append("n\u0306");
! 3727: break; // n breve
! 3728: case 376 :
! 3729: buf.append("\u00d7");
! 3730: break; // multiply
! 3731: case 8364 :
! 3732: buf.append("\u1e5b");
! 3733: break; // r underring [actually underdot]
! 3734: case 8249 :
! 3735: buf.append("\u1e44");
! 3736: break; // N overdot
! 3737: case 8250 :
! 3738: buf.append("\u1e62");
! 3739: break; // S underdot
! 3740: case 64257 :
! 3741: buf.append("\u1e24");
! 3742: break; // H underdot
! 3743: case 64258 :
! 3744: buf.append("\u1e0c");
! 3745: break; // D underdot
! 3746: case 8225 :
! 3747: buf.append("\u2021");
! 3748: break; // daggerdbl
! 3749: case 8218 :
! 3750: buf.append("\u1e36");
! 3751: break; // L underdot
! 3752: case 8222 :
! 3753: buf.append("\u0113");
! 3754: break; // e macron
! 3755: case 194 :
! 3756: buf.append("\u1e5f");
! 3757: break; // r underbar
! 3758: case 202 :
! 3759: buf.append("r\u0324");
! 3760: break; // r underdieresis
! 3761: case 193 :
! 3762: buf.append("\u012a");
! 3763: break; // I macron
! 3764: case 203 :
! 3765: buf.append("\u016b");
! 3766: break; // u macron
! 3767: case 200 :
! 3768: buf.append("\u1e6c");
! 3769: break; // T underdot
! 3770: case 205 :
! 3771: buf.append("\u1e64");
! 3772: break; // S acute
! 3773: case 206 :
! 3774: buf.append("\u2020");
! 3775: break; // dagger
! 3776: case 207 :
! 3777: buf.append("\u0115");
! 3778: break; // e breve
! 3779: case 204 :
! 3780: buf.append("\u014f");
! 3781: break; // o breve
! 3782: case 211 :
! 3783: buf.append("\u0100");
! 3784: break; // A macron
! 3785: case 212 :
! 3786: buf.append("\u1e46");
! 3787: break; // N underdot
! 3788: case 210 :
! 3789: buf.append("\u1e3b");
! 3790: break; // l underbar
! 3791: case 218 :
! 3792: buf.append("\u016a");
! 3793: break; // U macron
! 3794: case 219 :
! 3795: buf.append("\u0179");
! 3796: break; // Z acute
! 3797: case 217 :
! 3798: buf.append("\u1e5a");
! 3799: break; // R underdot
! 3800: case 305 :
! 3801: buf.append("\u0131");
! 3802: break; // dotlessi
! 3803: case 710 :
! 3804: buf.append("\u1e47");
! 3805: break; // n underdot
! 3806: case 732 :
! 3807: buf.append("\u1e49");
! 3808: break; // n underbar
! 3809: case 175 :
! 3810: buf.append("\u0304");
! 3811: break; // macron
! 3812: case 728 :
! 3813: buf.append("\u0306");
! 3814: break; // breve
! 3815: case 729 :
! 3816: buf.append("\u1e25");
! 3817: break; // h underdot
! 3818: case 730 :
! 3819: buf.append("\u012d");
! 3820: break; // i breve
! 3821: case 184 :
! 3822: buf.append("\u0327");
! 3823: break; // cedilla
! 3824: case 733 :
! 3825: buf.append("\u030b");
! 3826: break; // hungarumlaut
! 3827: case 731 :
! 3828: buf.append("\u0328");
! 3829: break; // ogonek
! 3830: case 711 :
! 3831: buf.append("\u030c");
! 3832: break; // caron
! 3833: case 199 :
! 3834: buf.append("\u012b\u0303");
! 3835: break; // imacron tilde
! 3836: case 8226 :
! 3837: buf.append("\u1e5d");
! 3838: break; // runderdot macron
! 3839: case 8482 :
! 3840: buf.append("\u016b\0306");
! 3841: break; // umacron breve
! 3842: case 8804 :
! 3843: buf.append("\u0101\u0301");
! 3844: break; // amacron acute
! 3845: case 8805 :
! 3846: buf.append("\u016b\u0301");
! 3847: break; // umacron acute
! 3848: case 8719 :
! 3849: buf.append("\u0113\u0301");
! 3850: break; // emacron acute
! 3851: case 170 :
! 3852: buf.append("\u0113\u0300");
! 3853: break; // emacron breve
! 3854: case 186 :
! 3855: buf.append("\u014d\u0300");
! 3856: break; // omacron breve
! 3857: case 161 :
! 3858: buf.append("\u0101\u0306");
! 3859: break; // amacron breve
! 3860: case 8710 :
! 3861: buf.append("\u0101\u0303");
! 3862: break; // amacron tilde
! 3863: case 171 :
! 3864: buf.append("\u012b\u0301");
! 3865: break; // imacron acute
! 3866: case 8260 :
! 3867: buf.append("\u1e00");
! 3868: break; // runderdotmacron acute
! 3869: case 183 :
! 3870: buf.append("\u1e5b\u0301");
! 3871: break; // runderdot acute
! 3872: case 8240 :
! 3873: buf.append("\u012b\u0306");
! 3874: break; // imacron breve
! 3875: case 63743 :
! 3876: buf.append("\u016b\u0303");
! 3877: break; // umacron tilde
! 3878: default :
! 3879: buf.append(c);
! 3880: break;
! 3881: }
! 3882: }
! 3883: return buf.toString();
! 3884: }
! 3885:
! 3886: public static ConversionProperties getFieldNamesAndDestTableName(String create, String query, String tableName)
! 3887: {
! 3888: String[] fieldNames = null;
! 3889: String destTableName = null;
! 3890: // determine destTableName from createStatement or from source table
! 3891: // name
! 3892: if (!create.equals(""))
! 3893: {
! 3894: int fromIndex = create.toLowerCase().indexOf("table") + 5;
! 3895: int toIndex = create.indexOf("(");
! 3896: int endIndex = create.indexOf(")", toIndex);
! 3897:
! 3898: destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "").trim();
! 3899: System.out.println("destTable " + destTableName);
! 3900: // retrieve field_names from select statement
! 3901: // TODO problem with different fieldNames in create statement will
! 3902: // overwrite them
! 3903: if (query.indexOf("*") < 0)
! 3904: {
! 3905: int selectEndIndex = query.indexOf("from");
! 3906: StringTokenizer tokenizer = new StringTokenizer(query.substring(6, selectEndIndex), ",");
! 3907: int numFields = tokenizer.countTokens();
! 3908: fieldNames = new String[numFields];
! 3909: int fieldIndex = 0;
! 3910: while (tokenizer.hasMoreTokens())
! 3911: {
! 3912: String fieldName = tokenizer.nextToken().trim();
! 3913: fieldNames[fieldIndex] = convertText(fieldName);
! 3914: System.out.println(fieldNames[fieldIndex]);
! 3915: fieldIndex++;
! 3916: }
! 3917:
! 3918: }
! 3919: else
! 3920: {
! 3921: // use create statement for field names
! 3922: StringTokenizer tokenizer = new StringTokenizer(create.substring(toIndex + 1, endIndex), ",");
! 3923: int numFields = tokenizer.countTokens();
! 3924: fieldNames = new String[numFields];
! 3925: int fieldIndex = 0;
! 3926: while (tokenizer.hasMoreTokens())
! 3927: {
! 3928: String fieldName = tokenizer.nextToken().trim();
! 3929: int index = fieldName.lastIndexOf(" ");
! 3930: fieldNames[fieldIndex] = fieldName.substring(0, index);
! 3931: System.out.println(fieldNames[fieldIndex]);
! 3932: fieldIndex++;
! 3933: }
! 3934: }
! 3935: }
! 3936: else
! 3937: {
! 3938: destTableName = convertText(tableName);
! 3939:
! 3940: // retrieve field_names from select statement
! 3941: if (query.indexOf("*") < 0)
! 3942: {
! 3943: int selectEndIndex = query.indexOf("from");
! 3944: StringTokenizer tokenizer = new StringTokenizer(query.substring(6, selectEndIndex), ",");
! 3945: int numFields = tokenizer.countTokens();
! 3946: fieldNames = new String[numFields];
! 3947: int fieldIndex = 0;
! 3948: while (tokenizer.hasMoreTokens())
! 3949: {
! 3950: String fieldName = tokenizer.nextToken().trim();
! 3951: fieldNames[fieldIndex] = beanDest.getQC() + convertText(fieldName) + beanDest.getQC();
! 3952: // System.out.println("field "+ fieldNames[fieldIndex]);
! 3953: fieldIndex++;
! 3954: }
! 3955:
! 3956: }
! 3957: else
! 3958: {
! 3959: Vector fieldNamesVec = bean.getColumnNames();
! 3960: fieldNames = new String[fieldNamesVec.size()];
! 3961: int fieldIndex = -1;
! 3962: for (Iterator iter = fieldNamesVec.iterator(); iter.hasNext();)
! 3963: {
! 3964: String element = (String) iter.next();
! 3965: fieldNames[++fieldIndex] = beanDest.getQC() + convertText(element) + beanDest.getQC();
! 3966: // System.out.println("field " + fieldNames[fieldIndex]);
! 3967: }
! 3968: }
! 3969: }
! 3970: return new ConversionProperties(destTableName, fieldNames);
! 3971: }
! 3972:
! 3973: /**
! 3974: * creates an insert into statement for the specified table and given field
! 3975: * names
! 3976: *
! 3977: * @param destTableName
! 3978: * @param fieldNames
! 3979: * @return
! 3980: */
! 3981: public static StringBuffer createInsertCommand(String destTableName, String[] fieldNames)
! 3982: {
! 3983: StringBuffer command = new StringBuffer();
! 3984: command.append("INSERT INTO ");
! 3985: command.append(beanDest.getQC());
! 3986: command.append(destTableName); //convertText((String)
! 3987: // names.get(tbIndex)));
! 3988: command.append(beanDest.getQC());
! 3989: command.append(" (");
! 3990: for (int i = 0; i < fieldNames.length; i++)
! 3991: {
! 3992: command.append(fieldNames[i]);
! 3993: if (i < fieldNames.length - 1)
! 3994: command.append(",");
! 3995: }
! 3996: command.append(") ");
! 3997:
! 3998: command.append(" values ( ");
! 3999: // add a question marks for every field
! 4000: for (int i = 0; i < bean.getColumnNames().size() - 1; ++i)
! 4001: command.append("?,");
! 4002: command.append("?)");
! 4003: return command;
! 4004: }
! 4005:
! 4006: public static StringBuffer createUpdateCommand(String destTableName, String[] fieldNames, String id)
! 4007: {
! 4008: StringBuffer command = new StringBuffer();
! 4009:
! 4010: command.append("UPDATE ");
! 4011: command.append(beanDest.getQC());
! 4012: command.append(destTableName);
! 4013: //command.append(convertText((String) names.get(tbIndex)));
! 4014: command.append(beanDest.getQC());
! 4015: command.append(" SET ");
! 4016:
! 4017: int size = bean.getColumnNames().size();
! 4018: for (int i = 0; i < size - 1; ++i)
! 4019: command.append(fieldNames[i] + " = ? ,");
! 4020: command.append(fieldNames[size - 1] + " = ? ");
! 4021: command.append("WHERE " + id + " = ?");
! 4022: return command;
! 4023: }
! 4024:
! 4025: public static StringBuffer createDeleteCommand(String destTableName, String idField)
! 4026: {
! 4027: StringBuffer command = new StringBuffer();
! 4028:
! 4029: command.append("DELETE FROM");
! 4030: command.append(beanDest.getQC());
! 4031: command.append(destTableName);
! 4032: //command.append(convertText((String) names.get(tbIndex)));
! 4033: command.append(beanDest.getQC());
! 4034: command.append("WHERE " + idField + " = ?");
! 4035: return command;
! 4036: }
! 4037:
! 4038: public void makeTest(String table, String idField, String tempQuery) throws Exception
! 4039: {
! 4040: int counter = 0;
! 4041:
! 4042: // ****** test code *****
! 4043:
! 4044: bean.getConnection();
! 4045: ResultSet resultSet = null;
! 4046: String lastResult = "P227634.11";//"P227625.79554";//"P227625.77391";//"P116034.970998";
! 4047: String myQuery = "select " + bean.getQC() + idField + bean.getQC() + ",serial " + " from " + bean.getQC() + table + bean.getQC();
! 4048: System.out.println("Query is now " + myQuery);
! 4049: JDialog statusDialog = new JDialog();
! 4050: statusDialog.setTitle("Status Information");
! 4051: JLabel status = new JLabel("actual DataSet : ");
! 4052: JLabel status2 = new JLabel(Integer.toString(++counter));
! 4053: JLabel status3 = new JLabel(lastResult);
! 4054:
! 4055: JPanel statusPanel = new JPanel();
! 4056: JPanel statusPanel2 = new JPanel();
! 4057: statusPanel.add(status);
! 4058: statusPanel.add(status2);
! 4059: statusPanel2.add(status3);
! 4060: statusDialog.getContentPane().add(statusPanel, "North");
! 4061: statusDialog.getContentPane().add(statusPanel2, "Center");
! 4062: statusDialog.setLocation(400, 500);
! 4063: statusDialog.setSize(300, 150);
! 4064: statusDialog.setVisible(true);
! 4065: while (true)
! 4066: {
! 4067: if (!statusDialog.isVisible())
! 4068: statusDialog.setVisible(true);
! 4069: tempQuery = myQuery + " where " + bean.getQC() + idField + bean.getQC() + ">'" + lastResult + "'";
! 4070: resultSet = bean.makeQuery(tempQuery, 1);
! 4071: if (resultSet == null)
! 4072: {
! 4073: System.out.println("lastResult was " + lastResult + " counter was " + counter);
! 4074: break;
! 4075: }
! 4076: else
! 4077: {
! 4078: resultSet.next();
! 4079: lastResult = resultSet.getString(1);
! 4080: counter++;
! 4081: status2.setText(Integer.toString(counter));
! 4082: status3.setText(lastResult + " " + resultSet.getString(2));
! 4083: if (counter % 100 == 0)
! 4084: {
! 4085: System.out.println("actual Result was " + lastResult + " counter was " + counter);
! 4086: // break;
! 4087: }
! 4088: }
! 4089: resultSet = null;
! 4090: }
! 4091: System.exit(0);
1.77 rogo 4092:
1.79 ! rogo 4093: //****** end Test ******
1.77 rogo 4094:
1.79 ! rogo 4095: }
1.55 rogo 4096: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>