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