1: import java.util.*;
2: import java.sql.*;
3: import java.awt.Cursor;
4: import java.io.BufferedReader;
5: import java.io.BufferedWriter;
6: import java.io.File;
7: import java.io.FileInputStream;
8: import java.io.FileNotFoundException;
9: import java.io.FileOutputStream;
10: import java.io.InputStreamReader;
11: import java.io.OutputStreamWriter;
12: import java.io.PrintStream;
13: import java.io.UnsupportedEncodingException;
14:
15: import com.exploringxml.xml.Node;
16: import com.exploringxml.xml.Xparse;
17:
18: class Convert
19: {
20: static DBBean bean = new DBBean();
21: static DBBean beanDest = new DBBean();
22:
23: static String user = "", passwd = "e1nste1n";
24: static String userDest = "postgres", passwdDest = "rogo";
25: static boolean batchRun = false;
26: static Vector databases = new Vector();
27: final static int numHits = 5000;
28: final static int numIntervalls = 2;
29: public static void main(String args[])
30: {
31: /* try
32: {
33: //byte[] b = "ö".getBytes("UTF-8");
34: // System.out.println("QueryString " +b[0]+" "+b[1]+(new String(b).getBytes()[0])+" "+new String(b).getBytes()[1]);
35: //System.out.println(new String(b,"UTF-8"));
36: } catch (UnsupportedEncodingException e)
37: {
38: e.printStackTrace();
39: }*/
40: FileOutputStream file = null;
41: if (args.length != 1)
42: {
43: System.out.println("Usage: java Convert <xml config file>");
44: System.exit(-1);
45: }
46: if (!(new File(args[0]).exists()))
47: System.exit(0);
48: try
49: {
50: file = new FileOutputStream("./log.txt");
51: } catch (FileNotFoundException e1)
52: {
53: e1.printStackTrace();
54: }
55: PrintStream stream = new PrintStream(file);
56: System.setOut(stream);
57: System.setErr(stream);
58: readXMLFile(args[0]);
59: System.out.println("Finished!");
60: //convert("jdbc:fmpro:http://141.14.237.74:8050","jdbc:postgresql://erebos/test",null,null);
61: }
62: public static void convertBatch(DBBean source, DBBean destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids,int mode) throws Exception
63: {
64: bean = source;
65: beanDest = destination;
66: convert(null,null,names,layouts,selects,creates,ids,mode);
67: if(true) return;
68: StringBuffer command = null;
69: try
70: {
71: bean.setConnection(source.url);
72: if (names == null)
73: names = bean.getTableNames();
74: //Collections.sort(names);
75: int tbIndex = 1;
76:
77: for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)
78: {
79: Vector[] result = null;
80: try
81: {
82: String query = "select * from " + bean.getQC() + names.get(tbIndex).toString() + bean.getQC();
83: String layout = (layouts.isEmpty()) ? "" : layouts.get(tbIndex).toString();
84: query = (selects != null) ? selects.get(tbIndex).toString() : query;
85: //if vectors[1].get(i) != null)
86: if (!layout.equals(""))
87: {
88: System.out.println("before " + query + " table" + names.get(tbIndex));
89: layout = " layout " + bean.getQC() + layout + bean.getQC();
90: String name = names.get(tbIndex).toString();
91: StringBuffer queryLayout = new StringBuffer(query);
92: queryLayout.insert(queryLayout.indexOf(name) + name.length() + 1, " " + layout);
93: query = queryLayout.toString();
94: System.out.println("added layout " + query);
95:
96: }
97: System.out.println(" performing query " + query);
98: //result = bean.getQueryData(query, null, 0);
99: bean.getConnection();
100: bean.makeQuery(query, 0);
101: } catch (Exception e)
102: {
103: System.out.println(e.getMessage());
104: e.printStackTrace();
105: continue;
106: }
107: //beanDest.setConnection("jdbc:postgresql://erebos/test3");
108: beanDest.setConnection(destination.url);
109:
110: Statement stm = beanDest.getConnection().createStatement();
111:
112: Vector tables = beanDest.getTableNames();
113: // Collections.sort(tables);
114: System.out.println("converting table " + names.get(tbIndex) + " " + tables.indexOf(convertText((String) names.get(tbIndex)))); // "//beanDest.getTypeNames());
115: tables = beanDest.getTableNames();
116: // System.out.println(beanDest.getTableNames(beanDest.getCatalogs().get(2).toString()));
117: stm = beanDest.getConnection().createStatement();
118: // System.exit(0);
119: if (mode == Convert.DataBase.CONVERT_MODE)
120: {
121: if (tables.indexOf(names.get(tbIndex)) >= 0)
122: {
123: stm.executeUpdate("drop table " + beanDest.getQC() + names.get(tbIndex) + beanDest.getQC());
124: tables.remove((String) names.get(tbIndex));
125: System.out.println("dropped table " + names.get(tbIndex));
126: } else if (tables.indexOf(convertText(names.get(tbIndex).toString())) >= 0)
127: {
128: stm.executeUpdate("drop table " + beanDest.getQC() + convertText((String) names.get(tbIndex)) + beanDest.getQC());
129: tables.remove(convertText((String) names.get(tbIndex)));
130: System.out.println("dropped table " + names.get(tbIndex));
131: }
132:
133: if (tables.indexOf(names.get(tbIndex)) < 0 && tables.indexOf(convertText(names.get(tbIndex).toString())) < 0)
134: {
135: if (creates.get(tbIndex).equals("") || creates.get(tbIndex).toString().toLowerCase().indexOf("create") < 0)
136: {
137: System.out.println("Warning empty or invalid create statement - creating one for you\n");
138:
139: command = new StringBuffer(50);
140: command.append("CREATE TABLE ");
141: command.append(beanDest.getQC());
142: command.append(convertText((String) names.get(tbIndex)));
143: command.append(beanDest.getQC());
144: command.append("(");
145: String type = null;
146: Vector columnNames = bean.getColumnNames();
147: for (int i = 0; i < columnNames.size() - 1; ++i)
148: {
149: type = bean.metaData.getColumnTypeName(i + 1);
150: // System.out.println(i+" "+result[1].get(i)+" "+type);
151: type = (type.equals("NUMBER")) ? "INT4" : type;
152: type = (type.equals("CONTAINER")) ? "TEXT" : type;
153:
154: command.append(beanDest.getQC() + convertText((String) columnNames.get(i)) + beanDest.getQC() + " " + type + ", ");
155: }
156: type = bean.metaData.getColumnTypeName(columnNames.size());
157: type = (type.equals("NUMBER")) ? "INT4" : type;
158: type = (type.equals("CONTAINER")) ? "TEXT" : type;
159: command.append(beanDest.getQC() + convertText((String) columnNames.get(columnNames.size() - 1)) + beanDest.getQC() + " " + type);
160: command.append(" )");
161: } else
162: command = new StringBuffer().append(creates.get(tbIndex).toString());
163:
164: System.out.println(command);
165: // System.exit(0);
166: //command.append(DBBean.getQC());
167: stm.executeUpdate(command.toString());
168:
169: }
170: }
171: Vector row = null;
172: command = new StringBuffer();
173:
174: command.append("INSERT INTO ");
175: command.append(beanDest.getQC());
176: command.append(convertText((String) names.get(tbIndex)));
177: command.append(beanDest.getQC());
178: command.append(" values ( ");
179:
180: for (int i = 0; i < bean.getColumnNames().size() - 1; ++i)
181: command.append("?,");
182: command.append("?)");
183: PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString());
184: System.out.println(command);
185: while ((row = bean.getNextRow()) != null)
186: {
187: //print rows
188: Object obj = null;
189: for (int k = 0; k < row.size(); ++k)
190: {
191: obj = row.get(k);
192: if (obj instanceof ArrayList)
193: obj = ((List) obj).get(0);
194: String str = (obj == null) ? "NULL" : obj.toString();
195: if (!str.equals("NULL"))
196: pstm.setString(k + 1, str);
197: else
198: pstm.setNull(k + 1, Types.NULL);
199: }
200: pstm.execute();
201:
202: } // to for loop
203:
204: }
205: } catch (Exception e)
206: {
207: System.out.println("Error while connecting to database " + e);
208: //dialog.setVisible(false);
209: //dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
210: //FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
211: java.io.ByteArrayOutputStream b = new java.io.ByteArrayOutputStream();
212: java.io.PrintStream stream = new java.io.PrintStream(b);
213: stream.print(command + "\n\n");
214: e.printStackTrace(stream);
215: System.err.println(b);
216: //FM2SQL.showErrorDialog(b.toString(), "Error occured !");
217:
218: }
219: // dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
220: //FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
221:
222: // dialog.setVisible(false);
223: }
224:
225: public static void update(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode) throws Exception
226: {
227: FM2SQL.ProgressDialog dialog = null;
228: if (FM2SQL.fmInstance != null)
229: {
230: dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance);
231: dialog.setTitle("Conversion running ...");
232: dialog.title.setText("Getting table data ...");
233: dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x + (FM2SQL.fmInstance.getWidth() - 400) / 2, FM2SQL.fmInstance.getLocationOnScreen().y + (FM2SQL.fmInstance.getHeight() - 250) / 2);
234: dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
235: FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
236: dialog.thread = Thread.currentThread();
237: }
238: // setting user and passwd
239: bean.setUserAndPasswd(user, passwd);
240: // setting user and passwd
241: beanDest.setUserAndPasswd(userDest, passwdDest);
242: if (dialog != null)
243: dialog.setSize(400, 250);
244: StringBuffer command = null;
245: String query = null;
246: try
247: {
248: //bean.setConnection("jdbc:fmpro:http://141.14.237.74:8050");
249: //bean.setConnection("jdbc:postgresql://erebos/test","postgres","rogo");
250: bean.setConnection(source);
251: if (names == null)
252: names = bean.getTableNames();
253: // Collections.sort(names);
254: int tbIndex = 1;
255:
256: // System.out.println("Start at "+names.indexOf("archimedes_facsimiles"));
257: for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)
258: {
259: Vector[] result = null;
260: try
261: {
262: query = "select * from " + bean.getQC() + names.get(tbIndex).toString() + bean.getQC();
263: String layout = (layouts.isEmpty()) ? "" : layouts.get(tbIndex).toString();
264: query = (selects != null) ? selects.get(tbIndex).toString() : query;
265: //if vectors[1].get(i) != null)
266: if (layout != "")
267: {
268: layout = " layout " + bean.getQC() + layout + bean.getQC();
269: String name = names.get(tbIndex).toString();
270: StringBuffer queryLayout = new StringBuffer(query);
271: queryLayout.insert(queryLayout.indexOf(name) + name.length() + 1, " " + layout);
272: query = queryLayout.toString();
273: System.out.println("added layout " + query);
274:
275: }
276: dialog.title.setText("Getting table data ...");
277: dialog.table.setText(names.get(tbIndex).toString());
278: dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size());
279: dialog.show();
280: bean.getConnection();
281: bean.makeQuery(query, 0);
282: } catch (Exception e)
283: {
284: continue;
285: }
286: //beanDest.setConnection("jdbc:postgresql://erebos/test3");
287: beanDest.setConnection(destination);
288:
289: Statement stm = beanDest.getConnection().createStatement();
290:
291: Vector tables = beanDest.getTableNames();
292: // Collections.sort(tables);
293: System.out.println(names.get(tbIndex) + " " + tables.indexOf(convertText((String) names.get(tbIndex)))); // "//beanDest.getTypeNames());
294: tables = beanDest.getTableNames();
295: // System.out.println(beanDest.getTableNames(beanDest.getCatalogs().get(2).toString()));
296: stm = beanDest.getConnection().createStatement();
297: // System.exit(0);
298:
299: if (dialog != null)
300: dialog.title.setText("Writing table data ...");
301:
302: int j = -1;
303:
304: Vector row = null;
305: command = new StringBuffer();
306:
307: command.append("UPDATE ");
308: command.append(beanDest.getQC());
309: command.append(convertText((String) names.get(tbIndex)));
310: command.append(beanDest.getQC());
311: command.append(" SET ");
312:
313: int size = bean.getColumnNames().size();
314: for (int i = 0; i < size - 1; ++i)
315: command.append(beanDest.getQC() + convertText((String) bean.getColumnNames().get(i)) + beanDest.getQC() + " = ? ,");
316: command.append(convertText((String) bean.getColumnNames().get(size - 1)) + " = ? ");
317: command.append("WHERE " + convertText(ids.get(tbIndex).toString()) + " = ?");
318: PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString());
319: System.out.println(command + " " + tbIndex);
320: int rowCount = bean.getRowCount(query);
321: int idIndex = bean.getColumnNames().indexOf(ids.get(tbIndex));
322: while ((row = bean.getNextRow()) != null)
323: {
324: j++;
325: //print rows
326: Object obj = null;
327: /* for(int k=0;k<row.size()-1;++k)
328: {
329: obj = row.get(k);
330: //System.out.println("row "+obj+" "+k);
331: if(obj!=null&&!(obj instanceof ArrayList))
332: command.append("'"+convertUml(obj.toString())+"',");
333: else if(obj!=null&& obj instanceof ArrayList)
334: command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"',");
335: else command.append("NULL,");
336: }
337: obj = row.get(row.size() - 1);
338: if (obj != null && !(obj instanceof ArrayList))
339: command.append("'"+convertUml(obj.toString())+"')");
340: else
341: if(obj!=null&& obj instanceof ArrayList)
342: command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"')"); //command.append(obj.toString()+")");
343: else command.append("NULL)");
344: */
345: //command.append("'"+row.get(row.size()-1)+"')");
346: //command.append(" )");
347: // for(int k=0;k<row.size();++k)
348:
349: // System.out.println();
350: // System.out.println(command+" "+j+" "+row.size()+" "+ ((Vector)result2[0].get(j)).size());
351: // System.out.println(command);
352: for (int k = 0; k < row.size(); ++k)
353: {
354: obj = row.get(k);
355: if (obj instanceof ArrayList)
356: obj = ((List) obj).get(0);
357: String str = (obj == null) ? "NULL" : obj.toString();
358: if (!str.equals("NULL"))
359: pstm.setString(k + 1, str);
360: else
361: pstm.setNull(k + 1, Types.NULL);
362: }
363: pstm.setString(row.size() + 1, row.get(idIndex).toString());
364: //System.out.println(pstm.toString());
365: // System.exit(0);
366: pstm.execute();
367: //stm.executeUpdate(command.toString());
368: if (dialog != null)
369: dialog.progress.setValue((int) (((double) (j + 1) / (double) rowCount) * 100.0));
370: // System.out.println( (int)(((double)(j+1)/(double)result[0].size())*100.0)+" "+result[0].size()+" "+j);
371: command = null;
372: } // to for loop
373:
374: }
375: } catch (Exception e)
376: {
377: System.out.println("Error while connecting to database " + e);
378: if (dialog != null)
379: {
380: dialog.setVisible(false);
381: dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
382: FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
383: }
384: java.io.ByteArrayOutputStream b = new java.io.ByteArrayOutputStream();
385: java.io.PrintStream stream = new java.io.PrintStream(b);
386: stream.print(command + "\n\n");
387: e.printStackTrace(stream);
388: FM2SQL.showErrorDialog(b.toString(), "Error occured !");
389:
390: }
391: if (dialog != null)
392: {
393: dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
394: FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
395:
396: dialog.setVisible(false);
397: }
398:
399: }
400: /**
401: transfers the specified array of tables to the destination database
402: and creates the table if it does not exist if it exists and mode is not append the table is dropped
403:
404: **/
405: public static void convert(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode) throws Exception
406: {
407:
408: FM2SQL.ProgressDialog dialog = null;
409:
410: if (FM2SQL.fmInstance != null)
411: {
412: dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance);
413: dialog.setTitle("Conversion running ...");
414: dialog.title.setText("Getting table data ...");
415: dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x + (FM2SQL.fmInstance.getWidth() - 400) / 2, FM2SQL.fmInstance.getLocationOnScreen().y + (FM2SQL.fmInstance.getHeight() - 250) / 2);
416: dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
417: FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
418: dialog.thread = Thread.currentThread();
419: dialog.setSize(400, 250);
420: }
421: java.util.TreeSet myIds = new TreeSet();
422: int deltaID = 1;
423: String idField = "";
424: if (source != null && destination != null)
425: {
426: // setting user and passwd
427: bean.setUserAndPasswd(user, passwd);
428: // setting user and passwd
429: beanDest.setUserAndPasswd(userDest, passwdDest);
430: }
431: StringBuffer command = null;
432: String query = null;
433: try
434: {
435: //bean.setConnection("jdbc:fmpro:http://141.14.237.74:8050");
436: //bean.setConnection("jdbc:postgresql://erebos/test","postgres","rogo");
437: if(source!=null)
438: bean.setConnection(source);
439: else
440: bean.setConnection(bean.url);
441:
442: if (names == null)
443: names = bean.getTableNames();
444: // Collections.sort(names);
445: int tbIndex = 1;
446:
447: // System.out.println("Start at "+names.indexOf("archimedes_facsimiles"));
448: for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)
449: {
450: Vector[] result = null;
451: try
452: {
453: query = "select * from " + bean.getQC() + names.get(tbIndex).toString() + bean.getQC();
454: String layout = (layouts.isEmpty()) ? "" : layouts.get(tbIndex).toString();
455: query = (selects != null) ? selects.get(tbIndex).toString() : query;
456: //if vectors[1].get(i) != null)
457: if (layout != "")
458: {
459: layout = " layout " + bean.getQC() + layout + bean.getQC();
460: String name = names.get(tbIndex).toString();
461: StringBuffer queryLayout = new StringBuffer(query);
462: queryLayout.insert(queryLayout.indexOf(name) + name.length() + 1, " " + layout);
463: query = queryLayout.toString();
464: System.out.println("added layout " + query);
465:
466: }
467: // if ( layout!= "")
468: // query += " layout " + bean.getQC() + layout + bean.getQC();
469: if (dialog != null)
470: {
471: dialog.title.setText("Reading table data ...");
472: dialog.table.setText(names.get(tbIndex).toString());
473: dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size());
474: dialog.show();
475: }
476: //result = bean.getQueryData(query, dialog, 0);
477: bean.getConnection();
478: bean.makeQuery(query, 50);
479: // @TODO id Vector must be used in querys while loop over id ranges where id>=start and id<=end
480: idField = ids.get(tbIndex).toString();
481:
482: } catch (Exception e)
483: {
484: System.out.println(e);
485: continue;
486: }
487: //beanDest.setConnection("jdbc:postgresql://erebos/test3");
488: if(destination!=null)
489: beanDest.setConnection(destination);
490: else
491: beanDest.setConnection(beanDest.url);
492: Statement stm = beanDest.getConnection().createStatement();
493:
494: Vector tables = beanDest.getTableNames();
495: // Collections.sort(tables);
496: System.out.println(names.get(tbIndex) + " " + tables.indexOf(convertText((String) names.get(tbIndex)))); // "//beanDest.getTypeNames());
497: tables = beanDest.getTableNames();
498: // System.out.println(beanDest.getTableNames(beanDest.getCatalogs().get(2).toString()));
499: stm = beanDest.getConnection().createStatement();
500: // System.exit(0);
501: if (mode == Convert.DataBase.CONVERT_MODE)
502: {
503: if (tables.indexOf(names.get(tbIndex)) >= 0)
504: {
505: stm.executeUpdate("drop table " + beanDest.getQC() + names.get(tbIndex) + beanDest.getQC());
506: tables.remove((String) names.get(tbIndex));
507: System.out.println("dropped table" + names.get(tbIndex));
508: } else if (tables.indexOf(convertText(names.get(tbIndex).toString())) >= 0)
509: {
510: stm.executeUpdate("drop table " + beanDest.getQC() + convertText((String) names.get(tbIndex)) + beanDest.getQC());
511: tables.remove(convertText((String) names.get(tbIndex)));
512: System.out.println("dropped table" + names.get(tbIndex));
513: }
514:
515: if (tables.indexOf(names.get(tbIndex)) < 0 && tables.indexOf(convertText(names.get(tbIndex).toString())) < 0)
516: {
517: if (creates.get(tbIndex).equals("") || creates.get(tbIndex).toString().toLowerCase().indexOf("create") < 0)
518: {
519: System.out.println("Warning empty or invalid create statement - creating one for you\n");
520:
521: command = new StringBuffer(50);
522: command.append("CREATE TABLE ");
523: command.append(beanDest.getQC());
524: command.append(convertText((String) names.get(tbIndex)));
525: command.append(beanDest.getQC());
526: command.append("(");
527: String type = null;
528: Vector columnNames = bean.getColumnNames();
529: for (int i = 0; i < columnNames.size() - 1; ++i)
530: {
531: type = bean.metaData.getColumnTypeName(i + 1);
532: // System.out.println(i+" "+result[1].get(i)+" "+type);
533: type = (type.equals("NUMBER")) ? "INT4" : type;
534: type = (type.equals("CONTAINER")) ? "TEXT" : type;
535:
536: command.append(beanDest.getQC() + convertText((String) columnNames.get(i)) + beanDest.getQC() + " " + type + ", ");
537: }
538: type = bean.metaData.getColumnTypeName(columnNames.size());
539: type = (type.equals("NUMBER")) ? "INT4" : type;
540: type = (type.equals("CONTAINER")) ? "TEXT" : type;
541: command.append(beanDest.getQC() + convertText((String) columnNames.get(columnNames.size() - 1)) + beanDest.getQC() + " " + type);
542: command.append(" )");
543:
544: // System.out.println(command);
545: // System.exit(0);
546: //command.append(DBBean.getQC());
547: } else
548: command = new StringBuffer().append(creates.get(tbIndex).toString());
549: stm.executeUpdate(command.toString());
550:
551: }
552: }
553: if(dialog!=null)
554: dialog.title.setText("Writing table data ...");
555:
556: // prepare the insert statement
557: int j = -1;
558: Vector row = null;
559: command = new StringBuffer();
560:
561: command.append("INSERT INTO ");
562: command.append(beanDest.getQC());
563: command.append(convertText((String) names.get(tbIndex)));
564: command.append(beanDest.getQC());
565: command.append(" values ( ");
566:
567: for (int i = 0; i < bean.getColumnNames().size() - 1; ++i)
568: command.append("?,");
569: command.append("?)");
570: PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString());
571: System.out.println(command);
572: int rowCount = (idField != "") ? myIds.size() : bean.getRowCount(query);
573: Vector vec = new Vector(myIds);
574: int endIndex = -1;
575: String tempQuery = query;
576: String tempID = bean.getQC() + idField + bean.getQC();
577: if (!idField.equals(""))
578: {
579: long startTime = System.currentTimeMillis();
580: int counter = -1;
581: while (true)
582: {
583: ++counter;
584: if (counter == 0&&dialog!=null)
585: dialog.title.setText("Check if data is available");
586: else
587: if(dialog!=null)
588: dialog.title.setText("Check if more data is available");
589: myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex), tempQuery, numHits);
590: if (myIds.isEmpty())
591: break;
592: vec = new Vector(myIds);
593: rowCount = vec.size();
594: System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIds.size());
595: deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls);
596: if (vec.size() <= numIntervalls)
597: {
598: endIndex = 0;
599: deltaID = vec.size();
600: }
601: for (int k = 0; k < vec.size() - deltaID; k = k + deltaID)
602: {
603: System.out.println(vec.get(k) + " " + vec.get(k + deltaID) + " " + vec.lastElement());
604: if (query.indexOf("where") > 0)
605: tempQuery = query + " and " + tempID + ">=" + vec.get(k) + " and " + tempID + "<=" + vec.get(k + deltaID);
606: else
607: tempQuery = query + "where " + tempID + ">=" + vec.get(k) + " and " + tempID + "<=" + vec.get(k + deltaID);
608: System.out.println(tempQuery);
609: if(dialog!=null)
610: dialog.title.setText("Reading table data ...");
611:
612: bean.makeQuery(tempQuery, deltaID);
613: if(dialog!=null)
614: dialog.title.setText("Writing table data ...");
615:
616: command = writeDatainDestTable(dialog, command, k, pstm, rowCount);
617: endIndex = k + deltaID;
618: }
619: System.out.println(endIndex);
620: if (endIndex == vec.size() - 1)
621: System.out.println("fits");
622: else
623: {
624: System.out.println(" last intervall from " + vec.get(endIndex) + " " + vec.lastElement());
625:
626: if (query.indexOf("where") > 0)
627: tempQuery = query + " and " + tempID + ">=" + vec.get(endIndex) + " and " + tempID + "<=" + vec.lastElement();
628: else
629: tempQuery = query + "where " + tempID + ">=" + vec.get(endIndex) + " and " + tempID + "<=" + vec.lastElement();
630: System.out.println(tempQuery);
631: if(dialog!=null)
632: dialog.title.setText("Reading table data ...");
633: bean.makeQuery(tempQuery, 0);
634: if(dialog!=null)
635: dialog.title.setText("Writing table data ...");
636: command = writeDatainDestTable(dialog, command, endIndex, pstm, rowCount);
637: }
638: if (query.indexOf("where") > 0)
639: tempQuery = query + " and " + tempID + ">" + vec.lastElement();
640: else
641: tempQuery = query + " where " + tempID + ">" + vec.lastElement();
642:
643: }
644: long endTime = System.currentTimeMillis();
645: System.out.println("Time for incremental convert elapsed " + (endTime - startTime));
646: } else
647: {
648: long startTime = System.currentTimeMillis();
649:
650: bean.makeQuery(query, 0);
651: command = writeDatainDestTable(dialog, command, j, pstm, rowCount);
652: long endTime = System.currentTimeMillis();
653: System.out.println("Time for old convert elapsed " + (endTime - startTime));
654:
655: }
656: }
657: } catch (Exception e)
658: {
659: System.out.println("Error while connecting to database " + e);
660: if (dialog != null)
661: {
662: dialog.setVisible(false);
663: dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
664: FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
665: java.io.ByteArrayOutputStream b = new java.io.ByteArrayOutputStream();
666: java.io.PrintStream stream = new java.io.PrintStream(b);
667: stream.print(command + "\n\n");
668: e.printStackTrace(stream);
669: FM2SQL.showErrorDialog(b.toString(), "Error occured !");
670: } else
671: {
672: e.printStackTrace();
673:
674: }
675: }
676: if (dialog != null)
677: {
678: dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
679: FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
680: dialog.setVisible(false);
681: }
682: }
683: private static StringBuffer writeDatainDestTable(FM2SQL.ProgressDialog dialog, StringBuffer command, int j, PreparedStatement pstm, int rowCount) throws Exception, SQLException
684: {
685: Vector row;
686: while ((row = bean.getNextRow()) != null)
687: {
688: j++;
689: // row = (Vector) result[0].get(j);
690: /* command = new StringBuffer();
691:
692: command.append("INSERT INTO ");
693: command.append(beanDest.getQC());
694: command.append(convertText((String) names.get(tbIndex)));
695: command.append(beanDest.getQC());
696: command.append(" values ( ");
697: */
698: //print rows
699: Object obj = null;
700: /* for(int k=0;k<row.size()-1;++k)
701: {
702: obj = row.get(k);
703: //System.out.println("row "+obj+" "+k);
704: if(obj!=null&&!(obj instanceof ArrayList))
705: command.append("'"+convertUml(obj.toString())+"',");
706: else if(obj!=null&& obj instanceof ArrayList)
707: command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"',");
708: else command.append("NULL,");
709: }
710: obj = row.get(row.size() - 1);
711: if (obj != null && !(obj instanceof ArrayList))
712: command.append("'"+convertUml(obj.toString())+"')");
713: else
714: if(obj!=null&& obj instanceof ArrayList)
715: command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"')"); //command.append(obj.toString()+")");
716: else command.append("NULL)");
717: */
718: //command.append("'"+row.get(row.size()-1)+"')");
719: //command.append(" )");
720: // for(int k=0;k<row.size();++k)
721:
722: // System.out.println();
723: // System.out.println(command+" "+j+" "+row.size()+" "+ ((Vector)result2[0].get(j)).size());
724: // System.out.println(command);
725: for (int k = 0; k < row.size(); ++k)
726: {
727: obj = row.get(k);
728: if (obj instanceof ArrayList)
729: obj = ((List) obj).get(0);
730: String str = (obj == null) ? "NULL" : obj.toString();
731: if (!str.equals("NULL"))
732: pstm.setString(k + 1, str);
733: else
734: pstm.setNull(k + 1, Types.NULL);
735: }
736: pstm.execute();
737: //stm.executeUpdate(command.toString());
738: if (dialog != null)
739: dialog.progress.setValue((int) (((double) (j + 1) / (double) rowCount) * 100.0));
740: // System.out.println( (int)(((double)(j+1)/(double)result[0].size())*100.0)+" "+result[0].size()+" "+j);
741: command = null;
742: } // to while loop
743: return command;
744: }
745:
746: public static String convertText(String newName)
747: {
748: StringBuffer alterMe = new StringBuffer(newName.trim().toLowerCase());
749: int length = alterMe.length();
750: int j = 0;
751: int index = alterMe.indexOf(".fp5");
752: if (index >= 0)
753: {
754: alterMe.delete(index, index + 4);
755: length = length - 4;
756: }
757:
758: while (j < length)
759: {
760: if (alterMe.charAt(j) == ' ')
761: {
762: alterMe.setCharAt(j, '_');
763: // if(j<length-1) j=j+1;
764: } else if (alterMe.charAt(j) == '_')
765: {
766:
767: if (alterMe.charAt(j + 1) == '_')
768: alterMe.deleteCharAt(j);
769: length = length - 1;
770: // if(j<length-1) j=j+1;
771: } else if (alterMe.charAt(j) == 'ä')
772: {
773: alterMe.setCharAt(j, 'a');
774: alterMe.insert(j + 1, "e");
775: length = length + 1;
776: if (j < length - 1)
777: j = j + 1;
778: } else if (alterMe.charAt(j) == 'ö')
779: {
780: alterMe.setCharAt(j, 'o');
781: alterMe.insert(j + 1, "e");
782: length = length + 1;
783: if (j < length - 1)
784: j = j + 1;
785: } else if (alterMe.charAt(j) == 'ü')
786: {
787: alterMe.setCharAt(j, 'u');
788: alterMe.insert(j + 1, "e");
789: length = length + 1;
790: if (j < length - 1)
791: j = j + 1;
792: } else if (alterMe.charAt(j) == 'ß')
793: {
794: alterMe.setCharAt(j, 's');
795: alterMe.insert(j + 1, "s");
796: length = length + 1;
797: if (j < length - 1)
798: j = j + 1;
799: } else if (alterMe.charAt(j) == ':')
800: {
801: if (j < length - 1)
802: {
803: if (alterMe.charAt(j + 1) == ':')
804: {
805: alterMe.setCharAt(j, '_');
806: alterMe.delete(j + 1, j + 2);
807: length = length - 1;
808:
809: }
810:
811: if (j < length - 1)
812: j = j + 1;
813: }
814: } else if (alterMe.charAt(j) == '-')
815: {
816: alterMe.setCharAt(j, '_');
817:
818: } else if (alterMe.charAt(j) == '?')
819: {
820: // changed ? to _ because of update statement
821: alterMe.setCharAt(j, '_');
822: // length = length + 1;
823: // j=j+1;
824: System.out.println(alterMe);
825: } else if (alterMe.charAt(j) == '.')
826: {
827: if (j == length - 1)
828: {
829: alterMe.delete(j, j);
830: length--;
831: } else
832: alterMe.setCharAt(j, '_');
833: }
834:
835: ++j;
836: }
837: return alterMe.toString();
838: }
839: public static String convertToEntities(String newName)
840: {
841: StringBuffer alterMe = new StringBuffer(newName.trim());
842: int length = alterMe.length();
843: int j = 0;
844:
845: while (j < length)
846: {
847:
848: if (alterMe.charAt(j) == '>')
849: {
850: alterMe.setCharAt(j, '&');
851: alterMe.insert(j + 1, "gt;");
852: length = length + 2;
853: if (j < length - 1)
854: j = j + 1;
855:
856: } else if (alterMe.charAt(j) == '<')
857: {
858: alterMe.setCharAt(j, '&');
859: alterMe.insert(j + 1, "lt;");
860: length = length + 2;
861: if (j < length - 1)
862: j = j + 1;
863:
864: }
865: ++j;
866: }
867: return alterMe.toString();
868: }
869: public static String convertUml(String newName)
870: {
871: StringBuffer alterMe = new StringBuffer(newName.trim());
872: int length = alterMe.length();
873: int j = 0;
874:
875: while (j < length)
876: {
877:
878: if (alterMe.charAt(j) == '\'')
879: {
880: alterMe.setCharAt(j, '\\');
881: alterMe.insert(j + 1, "'");
882: length = length + 1;
883: if (j < length - 1)
884: j = j + 1;
885: }
886: /* else
887: if (alterMe.charAt(j) == '"')
888: {
889: alterMe.setCharAt(j, '\\');
890: alterMe.insert(j + 1, "\"");
891: length = length + 1;
892: if(j<length-1) j=j+1;
893: }
894: else
895: if (alterMe.charAt(j) == '>')
896: {
897: alterMe.setCharAt(j, '\\');
898: alterMe.insert(j + 1, ">");
899: length = length + 1;
900: if(j<length-1) j=j+1;
901: }
902: else
903: if (alterMe.charAt(j) == '<')
904: {
905: alterMe.setCharAt(j, '\\');
906: alterMe.insert(j + 1, "<");
907: length = length + 1;
908: if(j<length-1) j=j+1;
909: }
910: else
911: if (alterMe.charAt(j) == '?')
912: {
913: alterMe.setCharAt(j, '\\');
914: alterMe.insert(j + 1, "?");
915: length = length + 1;
916: if(j<length-1) j=j+1;
917: }
918: else
919: if (alterMe.charAt(j) == '&')
920: {
921: alterMe.setCharAt(j, '\\');
922: alterMe.insert(j + 1, "&");
923: length = length + 1;
924: if(j<length-1) j=j+1;
925: }
926: else
927: if (alterMe.charAt(j) == '=')
928: {
929: alterMe.setCharAt(j, '\\');
930: alterMe.insert(j + 1, "=");
931: length = length + 1;
932: if(j<length-1) j=j+1;
933: }
934: else
935: if (alterMe.charAt(j) == ',')
936: {
937: alterMe.setCharAt(j, '\\');
938: alterMe.insert(j + 1, ",");
939: length = length + 1;
940: if(j<length-1) j=j+1;
941: }
942: else
943: if (alterMe.charAt(j) == '.')
944: {
945: alterMe.setCharAt(j, '\\');
946: alterMe.insert(j + 1, ".");
947: length = length + 1;
948: if(j<length-1) j=j+1;
949: }
950: else
951: if (alterMe.charAt(j) == '[')
952: {
953: alterMe.setCharAt(j, '\\');
954: alterMe.insert(j + 1, ".");
955: length = length + 1;
956: if(j<length-1) j=j+1;
957: }
958: else
959: if (alterMe.charAt(j) == ']')
960: {
961: alterMe.setCharAt(j, '\\');
962: alterMe.insert(j + 1, ".");
963: length = length + 1;
964: if(j<length-1) j=j+1;
965: }
966: else
967: if (alterMe.charAt(j) == '%')
968: {
969: alterMe.setCharAt(j, '\\');
970: alterMe.insert(j + 1, "%");
971: length = length + 1;
972: if(j<length-1) j=j+1;
973: }*/
974: ++j;
975: }
976: return alterMe.toString();
977: }
978:
979: public static void parseXMLConfig(StringBuffer sb)
980: {
981: boolean finished = false;
982: // parse string and build document tree
983: Xparse parser = new Xparse();
984: parser.changeEntities = true;
985: Node root = parser.parse(sb.toString());
986: // printContents(root);
987: Vector databases = new Vector();
988: Vector tables = new Vector();
989: Vector layouts = new Vector();
990: Vector selects = new Vector();
991: Vector creates = new Vector();
992: Vector ids = new Vector();
993: int mode = -1;
994:
995: try
996: {
997: Node tempNode = root.find("convert/source", new int[] { 1, 1 });
998: if (tempNode == null)
999: throw new Error("parse error source tag missing");
1000: System.out.println(tempNode.name);
1001: int length = countNodes(tempNode);
1002: for (int i = 1; i <= length; i++)
1003: {
1004:
1005: DBBean database = new DBBean();
1006: tables = new Vector();
1007: layouts = new Vector();
1008: selects = new Vector();
1009: creates = new Vector();
1010: ids = new Vector();
1011: // parse dataBase
1012: Node node = root.find("convert/source/database/url", new int[] { 1, 1, i, 1 });
1013: Node node1 = root.find("convert/source/database/user", new int[] { 1, 1, i, 1, 1 });
1014: Node node2 = root.find("convert/source/database/password", new int[] { 1, 1, i, 1, 1 });
1015: Node node3 = root.find("convert/source/database", new int[] { 1, 1, i });
1016: Node nodeMode = root.find("convert/source/database/mode", new int[] { 1, 1, i, 1, 1 });
1017:
1018: if (node3 == null)
1019: throw new Error("parse error database tag missing");
1020: if (node == null)
1021: throw new Error("parse error url tag missing");
1022: if (node1 == null)
1023: throw new Error("parse error user tag missing");
1024: if (node2 == null)
1025: throw new Error("parse error password tag missing");
1026: String url = node.getCharacters();
1027: String user = node1.getCharacters();
1028: String password = node2.getCharacters();
1029: database.setURL(url.trim());
1030: database.setUserAndPasswd(user.trim(), password.trim());
1031: System.out.println(node.name + " " + node.getCharacters());
1032: System.out.println(node1.name + " " + node1.getCharacters());
1033: System.out.println(node2.name + " " + node2.getCharacters());
1034: String modeString = "";
1035: if (nodeMode == null)
1036: modeString = "convert";
1037: else
1038: modeString = nodeMode.getCharacters();
1039: if (modeString.equals("convert"))
1040: mode = DataBase.CONVERT_MODE;
1041: else if (modeString.equals("append"))
1042: mode = DataBase.APPEND_MODE;
1043: else if (modeString.equals("update"))
1044: mode = DataBase.UPDATE_MODE;
1045: // if(node3!=null)
1046: // System.out.println(node3.name);
1047:
1048: int length2 = countNodes(node3);
1049:
1050: System.out.println("number of tables " + length2);
1051:
1052: for (int j = 1; j <= length2; ++j)
1053: {
1054: Node node4 = root.find("convert/source/database/table", new int[] { 1, 1, i, j });
1055: Node node5 = root.find("convert/source/database/table/select", new int[] { 1, 1, i, j, 1 });
1056: Node node6 = root.find("convert/source/database/table/create", new int[] { 1, 1, i, j, 1 });
1057: if (node4 != null)
1058: System.out.println(node4.name + " " + node4.attributes.get("layout").equals(""));
1059: if (node5 != null)
1060: System.out.println(node5.name + " " + node5.getCharacters());
1061: if (node6 != null)
1062: System.out.println(node6.name + " " + node6.getCharacters());
1063: if (node4 == null)
1064: throw new Error("parse error table tag missing");
1065: // if(node5==null) throw new Error("parse error select tag missing");
1066: // if(node6==null) throw new Error("parse error create tag missing");
1067: String name = (String) node4.attributes.get("name");
1068: String layout = (String) node4.attributes.get("layout");
1069: String id = (String) node4.attributes.get("id");
1070: System.out.println("id was " + id);
1071: if (name == null)
1072: throw new Error("parse error required table tag attribute name missing");
1073: if (layout == null)
1074: layout = "";
1075: if (id == null)
1076: id = "";
1077: if (name.equals(""))
1078: throw new Error("parse error table tag attribute must not be empty");
1079: tables.add(name);
1080: layouts.add(layout);
1081: ids.add(id);
1082: String query = (node5 == null) ? "" : node5.getCharacters();
1083: if (query.equals(""))
1084: System.err.println("Warning empty select tag or select tag missing !!");
1085: query = (query.equals("")) ? "select * from " + database.getQC() + name + database.getQC() : query;
1086: selects.add(query);
1087: if (node6 != null)
1088: creates.add(node6.getCharacters().trim());
1089: else
1090: creates.add("");
1091:
1092: }
1093: databases.add(new DataBase(database, tables, layouts, selects, creates, ids, mode));
1094: }
1095: DBBean database = new DBBean();
1096: // parse dataBase
1097: Node node = root.find("convert/destination/database/url", new int[] { 1, 1, 1, 1 });
1098: Node node1 = root.find("convert/destination/database/user", new int[] { 1, 1, 1, 1, 1 });
1099: Node node2 = root.find("convert/destination/database/password", new int[] { 1, 1, 1, 1, 1 });
1100: String url = node.getCharacters();
1101: String user = node1.getCharacters();
1102: String password = node2.getCharacters();
1103: System.out.println(url);
1104: database.setURL(url.trim());
1105: database.setUserAndPasswd(user.trim(), password.trim());
1106: //databases.add(database);
1107: for (Iterator iter = databases.iterator(); iter.hasNext();)
1108: {
1109: DataBase db = (DataBase) iter.next();
1110: if (mode != DataBase.UPDATE_MODE)
1111: convertBatch(db.bean, database, db.tables, db.layouts, db.selects, db.creates, db.ids,mode);
1112: else
1113: update(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates, db.ids, mode);
1114:
1115: }
1116: // printContents(node3);
1117: // FM2SQL.fmInstance=new FM2SQL();
1118: } catch (Exception e)
1119: {
1120: // TODO Auto-generated catch block
1121: e.printStackTrace();
1122: }
1123: /*
1124: Node tempNode=root.find(rootNode,new int[] {1});
1125: if(tempNode==null) return rtTag;
1126: int count=1;
1127: /*
1128: for(int i=0;i<tempNode.contents.v.size();++i)
1129: {
1130: // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+" "+i);
1131: }*/
1132: /*
1133: if(tempNode.contents.v.size()==0) return rtTag;
1134: Node notNull=null;
1135: Node rtNode=root.find(rootNode+"/rt",new int[] {1,1});
1136: rtTag=(rtNode==null) ? "finished":rtNode.getCharacters();
1137: System.out.println("rt tag is "+ rtTag);
1138: int length=0;//(tempNode.contents.length()-1)/2;
1139: for(int i=0;i<tempNode.contents.v.size();++i) {
1140: Node node=(Node)tempNode.contents.v.elementAt(i);
1141: if(node.type.equals("element"))
1142: if(node.name.equals("doc"))length++;
1143: // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+" "+i);
1144: }
1145: if(length==0) rtTag="finished";
1146: while(count<=length)
1147: {
1148: //System.out.println(count+" "+length);
1149: tempNode=root.find(rootNode+"/doc",new int[] {1,count});
1150: if(tempNode==null)
1151: {
1152: rtTag="finished";
1153: break;
1154: }
1155: Bundle.Document doc = new Bundle.Document();
1156: Hashtable attributes=tempNode.attributes;
1157: int docID=0;
1158: int ver=0;
1159: if(attributes != null)
1160: {
1161: docID=Integer.parseInt((String)attributes.get("id"));
1162: ver=Integer.parseInt((String)attributes.get("ver"));
1163: doc.addData("docID",(String)attributes.get("id"));
1164: doc.addData("ver",(String)attributes.get("ver"));
1165: }
1166: bundle.docs.put(new Integer(docID),doc);
1167: bundle.documents.addElement(doc);
1168: // System.out.println("id " +docID+" ver "+ver);
1169: Node fileNode=root.find(rootNode+"/doc/file",new int[] {1,count,1});
1170: attributes=(fileNode==null)? null:fileNode.attributes;
1171: int fileID=0;
1172: int fileVer=0;
1173: if(attributes != null)
1174: {
1175: fileID=Integer.parseInt((String)attributes.get("id"));
1176: fileVer=Integer.parseInt((String)attributes.get("ver"));
1177: doc.addData("fileID",(String)attributes.get("id"));
1178: doc.addData("fileVer",(String)attributes.get("ver"));
1179: // System.out.println("fileid " +fileID+" ver "+fileVer);
1180: }
1181: // add all Document tags to actual Document
1182: for(int i=0;i<tempNode.contents.v.size();++i)
1183: {
1184: Node node=(Node)tempNode.contents.v.elementAt(i);
1185: if(node.type.equals("element"))
1186: {
1187: //System.out.println(node.name+" "+node.getCharacters()+" "+node.contents.v.size());
1188: if(node.contents.v.size()>1)
1189: {
1190: for(int j=0;j<node.contents.v.size();++j)
1191: {
1192: Node node2=(Node)node.contents.v.elementAt(j);
1193: if(node2.type.equals("element"))
1194: {
1195: doc.addData(node2.name,node2.getCharacters());
1196: //System.out.println(node2.name+" "+node2.getCharacters()+" "+node2.contents.v.size());
1197: }
1198: }
1199: } else doc.addData(node.name,node.getCharacters());
1200: }
1201: }
1202: bundle.docsLocator.put(doc.locator,doc);
1203:
1204: bundle.documents.addElement(doc);
1205: count++;
1206: } */
1207:
1208: // System.out.println(bundle.docs.size());
1209: // return rtTag;
1210: }
1211: public static Vector getXMLConfig(String xmlFile)
1212: {
1213: StringBuffer sb = null;
1214: try
1215: {
1216: // read XML Metadata from a file
1217: FileInputStream fi = new FileInputStream(xmlFile);
1218: InputStreamReader isr = new InputStreamReader(fi, "UTF-8");
1219: BufferedReader buffr = new BufferedReader(isr);
1220: sb = new StringBuffer();
1221: int c = 0;
1222: while ((c = buffr.read()) != -1)
1223: {
1224: char ch = (char) c;
1225: sb.append(ch);
1226: // System.out.print((char)c);
1227: }
1228:
1229: } catch (Exception e)
1230: {
1231: e.printStackTrace();
1232: }
1233:
1234: boolean finished = false;
1235: // parse string and build document tree
1236: Xparse parser = new Xparse();
1237: parser.changeEntities = true;
1238: Node root = parser.parse(sb.toString());
1239: // printContents(root);
1240: Vector databases = new Vector();
1241: Vector tables = new Vector();
1242: Vector layouts = new Vector();
1243: Vector selects = new Vector();
1244: Vector creates = new Vector();
1245: Vector ids = new Vector();
1246:
1247: int mode = -1;
1248: try
1249: {
1250: Node tempNode = root.find("convert/source", new int[] { 1, 1 });
1251: if (tempNode == null)
1252: throw new Error("parse error source tag missing");
1253: System.out.println(tempNode.name);
1254: int length = countNodes(tempNode);
1255: for (int i = 1; i <= length; i++)
1256: {
1257:
1258: DBBean database = new DBBean();
1259: tables = new Vector();
1260: layouts = new Vector();
1261: selects = new Vector();
1262: creates = new Vector();
1263: ids = new Vector();
1264: // parse dataBase
1265: Node node = root.find("convert/source/database/url", new int[] { 1, 1, i, 1 });
1266: Node node1 = root.find("convert/source/database/user", new int[] { 1, 1, i, 1, 1 });
1267: Node node2 = root.find("convert/source/database/password", new int[] { 1, 1, i, 1, 1 });
1268: Node node3 = root.find("convert/source/database", new int[] { 1, 1, i });
1269: Node nodeMode = root.find("convert/source/database/mode", new int[] { 1, 1, i, 1, 1 });
1270:
1271: if (node3 == null)
1272: throw new Error("parse error database tag missing");
1273: if (node == null)
1274: throw new Error("parse error url tag missing");
1275: if (node1 == null)
1276: throw new Error("parse error user tag missing");
1277: if (node2 == null)
1278: throw new Error("parse error password tag missing");
1279: String url = node.getCharacters();
1280: String user = node1.getCharacters();
1281: String password = node2.getCharacters();
1282: database.setURL(url.trim());
1283: database.setUserAndPasswd(user.trim(), password.trim());
1284: System.out.println(node.name + " " + node.getCharacters());
1285: System.out.println(node1.name + " " + node1.getCharacters());
1286: System.out.println(node2.name + " " + node2.getCharacters());
1287: String modeString = "";
1288: if (nodeMode == null)
1289: modeString = "convert";
1290: else
1291: modeString = nodeMode.getCharacters();
1292: if (modeString.equals("convert"))
1293: mode = DataBase.CONVERT_MODE;
1294: else if (modeString.equals("append"))
1295: mode = DataBase.APPEND_MODE;
1296: else if (modeString.equals("update"))
1297: mode = DataBase.UPDATE_MODE;
1298:
1299: // if(node3!=null)
1300: // System.out.println(node3.name);
1301:
1302: int length2 = countNodes(node3);
1303:
1304: System.out.println("number of tables " + length2);
1305:
1306: for (int j = 1; j <= length2; ++j)
1307: {
1308: Node node4 = root.find("convert/source/database/table", new int[] { 1, 1, i, j });
1309: Node node5 = root.find("convert/source/database/table/select", new int[] { 1, 1, i, j, 1 });
1310: Node node6 = root.find("convert/source/database/table/create", new int[] { 1, 1, i, j, 1 });
1311: if (node4 != null)
1312: System.out.println(node4.name + " " + node4.attributes.get("layout").equals(""));
1313: if (node5 != null)
1314: System.out.println(node5.name + " " + node5.getCharacters());
1315: if (node6 != null)
1316: System.out.println(node6.name + " " + node6.getCharacters());
1317: if (node4 == null)
1318: throw new Error("parse error table tag missing");
1319: // if(node5==null) throw new Error("parse error select tag missing");
1320: // if(node6==null) throw new Error("parse error create tag missing");
1321: String name = (String) node4.attributes.get("name");
1322: String layout = (String) node4.attributes.get("layout");
1323: String id = (String) node4.attributes.get("id");
1324: System.out.println("id was " + id);
1325:
1326: if (name == null)
1327: throw new Error("parse error required table tag attribute name missing");
1328: if (layout == null)
1329: layout = "";
1330: if (id == null)
1331: id = "";
1332: if (name.equals(""))
1333: throw new Error("parse error table tag attribute must not be empty");
1334: tables.add(name);
1335: layouts.add(layout);
1336: ids.add(id);
1337: String query = (node5 == null) ? "" : node5.getCharacters();
1338: if (query.equals(""))
1339: System.err.println("Warning empty select tag or select tag missing !!");
1340: query = (query.equals("")) ? "select * from " + database.getQC() + name + database.getQC() : query;
1341: selects.add(query);
1342: if (node6 != null)
1343: creates.add(node6.getCharacters().trim());
1344: else
1345: creates.add("");
1346:
1347: }
1348: databases.add(new DataBase(database, tables, layouts, selects, creates, ids, mode));
1349: }
1350: DBBean database = new DBBean();
1351: // parse dataBase
1352: Node node = root.find("convert/destination/database/url", new int[] { 1, 1, 1, 1 });
1353: Node node1 = root.find("convert/destination/database/user", new int[] { 1, 1, 1, 1, 1 });
1354: Node node2 = root.find("convert/destination/database/password", new int[] { 1, 1, 1, 1, 1 });
1355: String url = node.getCharacters();
1356: String user = node1.getCharacters();
1357: String password = node2.getCharacters();
1358: System.out.println(url);
1359: database.setURL(url.trim());
1360: database.setUserAndPasswd(user.trim(), password.trim());
1361: databases.add(new DataBase(database, null, null, null, null, null, 0));
1362: //databases.add(database);
1363: /* for (Iterator iter = databases.iterator(); iter.hasNext();)
1364: {
1365: DataBase db = (DataBase) iter.next();
1366: convertBatch(db.bean,database,db.tables,db.layouts,db.selects,db.creates);
1367:
1368: }*/
1369: // printContents(node3);
1370: // FM2SQL.fmInstance=new FM2SQL();
1371: } catch (Exception e)
1372: {
1373: // TODO Auto-generated catch block
1374: e.printStackTrace();
1375: }
1376: return databases;
1377: }
1378:
1379: private static int countNodes(Node tempNode)
1380: {
1381: int length = 0;
1382: for (int i = 0; i < tempNode.contents.v.size(); ++i)
1383: {
1384: Node node = (Node) tempNode.contents.v.elementAt(i);
1385: if (node.type.equals("element"))
1386: {
1387: if (node.name.equals("database"))
1388: length++;
1389: if (node.name.equals("table"))
1390: length++;
1391: }
1392:
1393: // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+" "+i);
1394: }
1395: return length;
1396: }
1397: private static void printContents(Node root)
1398: {
1399:
1400: Vector contents = (root.index == null) ? root.contents.v : root.index.v;
1401: for (int i = 0; i < contents.size(); ++i)
1402: {
1403: Node n = (Node) contents.elementAt(i);
1404: if (n.type.equals("element"))
1405: {
1406: System.out.println("tag " + n.name);
1407: System.out.println(n.getCharacters());
1408: //contents=n.contents.v i=0;
1409: }
1410: // System.out.println(n.type);
1411:
1412: }
1413: }
1414: public static void readXMLFile(String xmlFile)
1415: {
1416: try
1417: {
1418: // read XML Metadata from a file
1419: FileInputStream fi = new FileInputStream(xmlFile);
1420: InputStreamReader isr = new InputStreamReader(fi, "UTF-8");
1421: BufferedReader buffr = new BufferedReader(isr);
1422: StringBuffer sb = new StringBuffer();
1423: int c = 0;
1424: while ((c = buffr.read()) != -1)
1425: {
1426: char ch = (char) c;
1427: sb.append(ch);
1428: // System.out.print((char)c);
1429: }
1430: parseXMLConfig(sb);
1431: } catch (Exception e)
1432: {
1433: e.printStackTrace();
1434: }
1435: }
1436: public static class DataBase
1437: {
1438: DBBean bean;
1439: Vector creates;
1440: Vector selects;
1441: Vector layouts;
1442: Vector tables;
1443: Vector ids;
1444: final static int CONVERT_MODE = 1;
1445: final static int APPEND_MODE = 2;
1446: final static int UPDATE_MODE = 3;
1447: int mode = -1;
1448:
1449: public DataBase(DBBean bean, Vector tables, Vector layouts, Vector selects, Vector creates, Vector ids, int mode)
1450: {
1451: this.bean = bean;
1452: this.tables = tables;
1453: this.layouts = layouts;
1454: this.selects = selects;
1455: this.creates = creates;
1456: this.ids = ids;
1457: this.mode = mode;
1458: this.bean.setIDVector(ids);
1459: }
1460: public void exportToXML(BufferedWriter buffr) throws Exception
1461: {
1462: // ids=bean.getIDVector();
1463: buffr.write(" <database>\n");
1464: buffr.write(" <url>" + bean.url + "</url>\n");
1465: buffr.write(" <user>" + bean.user + "</user>\n");
1466: buffr.write(" <password>" + bean.passwd + "</password>\n");
1467: String modeString = "";
1468: if (mode == CONVERT_MODE)
1469: modeString = "convert";
1470: else if (mode == APPEND_MODE)
1471: modeString = "append";
1472: else if (mode == UPDATE_MODE)
1473: modeString = "update";
1474:
1475: buffr.write(" <mode>" + modeString + "</mode>\n");
1476: int index = 0;
1477: while (index < tables.size())
1478: {
1479: String table = (String) tables.get(index);
1480: String layout = (String) layouts.get(index);
1481: String select = (String) selects.get(index);
1482: String create = (String) creates.get(index);
1483: String id = (String) ids.get(index);
1484:
1485: buffr.write(" <table name = \"" + table + "\" layout = \"" + layout + "\" id = \"" + id + "\" >\n");
1486: buffr.write(" <select>" + convertToEntities(select) + "</select>\n");
1487: if (!create.equals(""))
1488: buffr.write(" <create>" + create + " </create>\n");
1489: buffr.write(" </table>\n");
1490: index++;
1491: }
1492: buffr.write(" </database>\n");
1493: }
1494: public String toString()
1495: {
1496: return bean.url + " " + tables;
1497: }
1498:
1499: }
1500: public static String convertToUTF8(Object command)
1501: {
1502: String str = null;
1503: try
1504: {
1505: str = new String(command.toString().getBytes("UTF-8"));
1506: } catch (UnsupportedEncodingException e)
1507: {
1508: // TODO Auto-generated catch block
1509: e.printStackTrace();
1510: }
1511: return str;
1512: }
1513: public static void writeConfig(String file, DataBase source, DataBase destination) throws Exception
1514: {
1515: if (!file.toLowerCase().endsWith(".xml"))
1516: file += ".xml";
1517: File f = new File(file);
1518:
1519: FileOutputStream fout = new FileOutputStream(f);
1520: OutputStreamWriter outsw = new OutputStreamWriter(fout, "UTF-8");
1521: BufferedWriter buffw = new BufferedWriter(outsw);
1522: buffw.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
1523: buffw.newLine();
1524: buffw.write("<convert>\n");
1525: buffw.write(" <source>\n");
1526: source.exportToXML(buffw);
1527: buffw.write(" </source>\n");
1528: buffw.write("\n <destination>\n");
1529: destination.exportToXML(buffw);
1530: buffw.write(" </destination>\n");
1531: buffw.write("</convert>\n");
1532: buffw.close();
1533: }
1534: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>