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