1: import javax.swing.*;
2: import javax.swing.event.*;
3: import javax.swing.table.TableModel;
4:
5: import Convert.DataBase;
6:
7: import java.awt.event.*;
8: import java.awt.Dimension;
9: import java.awt.FlowLayout;
10: import java.awt.*;
11: import java.sql.*;
12: import java.util.*;
13: import java.io.*;
14: /**
15: *
16: * <br>
17: * <h2>FileMaker Test (JDBC Database Driver Test)</h2>
18: * Main class :
19: * contains the main Frame, all event handlers etc
20: * <br>
21: * The Database access is made over DBBean class
22: * all other classes are just for the visualization of the data
23: * @version 0.2( first stable release)
24: * @author rogo
25: *
26: */
27: public class FM2SQL extends JFrame implements ActionListener, TableModelListener
28: {
29: /**
30: * The database Bean instance.
31: *
32: */
33: DBBean bean;
34: /**
35: * The database destination Bean instance.
36: *
37: */
38: DBBean destBean;
39:
40: /**
41: * box - Tablenames
42: */
43:
44: JComboBox box;
45: /**
46: * tList - Tablenames to choose from
47: */
48:
49: JList tList = new JList(new String[] { "no database", "connection", "" });
50: JList tListDest = new JList(new String[] { "no database connection", "", "" });
51:
52: /**
53: * box2 - Layout names
54: */
55:
56: JComboBox box2;
57: /**
58: * box3 - Database URLs
59: */
60: JComboBox box3;
61: /**
62: * box4 - Database URLs
63: */
64: JComboBox box4;
65:
66: TableComponent table, tC;
67: Vector tables = new Vector();
68: Vector layouts = new Vector();
69: JPanel listPanel;
70: JPanel topPanel,topPanel2, contentPanel;
71: JScrollPane paneDest;
72: FM2SQL fm = this;
73: boolean noDBUpdate = false;
74: boolean noUserUpdate = false;
75: int id = 0;
76: static boolean debug = false;
77: /**
78: * The result window used for query results
79: */
80: MultiResultWindow window;
81: /**
82: * The result window used for query results
83: */
84: MultiResultWindow windowDest;
85:
86: static FM2SQL fmInstance;
87: static String url = "jdbc:fmpro:http://141.14.237.42";
88: JButton showTables = new JButton(), showTables1 = new JButton();
89: JButton convert = new JButton();
90: JButton dropTables = new JButton();
91:
92: int oldWidth = 0, oldHeight = 0;
93: boolean resize = true;
94: static FileWriter logFile;
95: Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
96: JFileChooser configExportFileChooser;
97: JFileChooser configImportFileChooser;
98:
99: /**
100: * tries to connect to database specified in url-Variable.
101: * initializes all GUI components, then fails throws an exception
102: *
103: */
104: public FM2SQL() throws Exception
105: {
106:
107: initializeGUI();
108: }
109: public void initializeGUI() throws Exception
110: {
111: Image local = getToolkit().getImage(getClass().getResource("icons/fm.jpg"));
112: if (local != null);
113: setIconImage(local);
114: bean = new DBBean();
115: destBean = new DBBean();
116: box2 = new JComboBox();
117: box3 = new JComboBox(new String[] { "jdbc:fmpro:http://141.14.237.74:8050", "jdbc:fmpro:http://localhost", "jdbc:postgresql://foxridge/test" });
118: box3.setEditable(true);
119: box4 = new JComboBox(new String[] { "jdbc:postgresql://foxridge/test", "jdbc:postgresql://erebos/test1" });
120: box4.setEditable(true);
121: box4.addActionListener(this);
122: table = new TableComponent();
123: box = new JComboBox(tables);
124: box.addActionListener(this);
125: box2.addActionListener(this);
126: box3.addActionListener(this);
127:
128: contentPanel = new JPanel();
129: contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));
130:
131: box3.setMinimumSize(new Dimension(450, 20));
132: box3.setMaximumSize(new Dimension(550, 20));
133: box3.setPreferredSize(new Dimension(450, 20));
134: box4.setMinimumSize(new Dimension(450, 20));
135: box4.setMaximumSize(new Dimension(550, 20));
136: box4.setPreferredSize(new Dimension(450, 20));
137: paneDest = new JScrollPane(tListDest);
138: // tListDest.setPreferredSize(paneDest.getPreferredSize());
139: // paneDest.setPreferredSize(new Dimension(350, 365));
140: Dimension dim = paneDest.getPreferredSize();
141: paneDest.setMinimumSize(dim);
142: //paneDest.setMaximumSize(new Dimension(dim.width + 50, dim.height + 50));
143:
144: tC = new TableComponent();
145: tC.sizeToFit(450, 250);
146: tC.tableModel.addTableModelListener(this);
147: JPanel destPanel = new JPanel();
148: destPanel.setLayout(new java.awt.GridBagLayout());
149:
150: listPanel = new JPanel();
151: listPanel.setLayout(new java.awt.GridBagLayout());
152: java.awt.GridBagConstraints gbc = new java.awt.GridBagConstraints();
153: JScrollPane pane = new JScrollPane(tList);
154: tC.tableScroller.setPreferredSize(new Dimension(450, 365));
155: //tC.table.revalidate();
156: tC.tableScroller.setMinimumSize(new Dimension(450, 250));
157: // tC.tableScroller.setMaximumSize(tC.tableScroller.getPreferredSize());
158: topPanel = new JPanel();
159: topPanel.setLayout(new GridBagLayout());
160: topPanel2 = new JPanel();
161: topPanel2.setLayout(new GridBagLayout());
162:
163: gbc.gridx = 0;
164: gbc.gridy = 0;
165: gbc.weightx = 0.1;
166: gbc.weighty = 0.1;
167: gbc.gridwidth = 1;
168: gbc.gridheight = 1;
169: gbc.insets = new Insets(2, 2, 5, 5);
170: gbc.ipadx = 1;
171: gbc.ipady = 1;
172:
173: gbc.anchor = GridBagConstraints.WEST;
174: listPanel.add(topPanel, gbc);
175: destPanel.add(topPanel2, gbc);
176:
177: topPanel.add(new JLabel("Choose src database: ", JLabel.CENTER), gbc);
178: topPanel2.add(new JLabel("Choose dest database : ", JLabel.CENTER), gbc);
179:
180: gbc.anchor = GridBagConstraints.NORTHWEST;
181: gbc.gridy = 1;
182: topPanel.add(box3, gbc);
183:
184: topPanel2.add(box4, gbc);
185:
186: //gbc.gridx=GridBagConstraints.RELATIVE;
187: //dataBasePanel.add(new JLabel(" select Tables to Convert ", JLabel.LEFT));
188: gbc.gridy = 1;
189: gbc.anchor = GridBagConstraints.SOUTHWEST;
190:
191: listPanel.add(new JLabel(" select Tables to Convert ", JLabel.LEFT), gbc);
192: destPanel.add(new JLabel(" Tables in database ", JLabel.LEFT), gbc);
193:
194: // gbc.anchor = GridBagConstraints.WEST;
195: gbc.gridy = 2;
196: gbc.gridx = 0;
197: // gbc.weightx = 0.0;
198: //dataBasePanel.add(tC);
199: gbc.anchor = GridBagConstraints.NORTHWEST;
200: gbc.gridheight = 1;
201: gbc.fill = GridBagConstraints.BOTH;
202: listPanel.add(tC.tableScroller, gbc);
203: // gbc.fill = GridBagConstraints.VERTICAL;
204: destPanel.add(paneDest, gbc);
205: showTables1 = new JButton("show Tables");
206: showTables1.setActionCommand("show Tables source");
207: // gbc.anchor = GridBagConstraints.NORTH;
208: // gbc.weightx = 0.0;
209: gbc.fill = GridBagConstraints.NONE;
210: gbc.gridheight = 1;
211:
212: gbc.gridx = 0;
213: gbc.gridy = 2;
214: // topPanel.add(showTables1, gbc);
215: JPanel buttonPanel = new JPanel();
216: buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));
217: buttonPanel.setMinimumSize(new Dimension(380, 30));
218: convert = new JButton("Convert Tables");
219: showTables = new JButton("show Tables");
220: dropTables = new JButton("drop Tables");
221: // System.out.println(convert.getPreferredSize());
222: showTables.setMinimumSize(convert.getPreferredSize());
223: dropTables.setMinimumSize(convert.getPreferredSize());
224: showTables.setMaximumSize(convert.getPreferredSize());
225: dropTables.setMaximumSize(convert.getPreferredSize());
226: showTables.setPreferredSize(convert.getPreferredSize());
227: dropTables.setPreferredSize(convert.getPreferredSize());
228:
229: showTables.addActionListener(fm);
230: showTables1.addActionListener(fm);
231:
232: buttonPanel.add(showTables);
233: buttonPanel.add(convert);
234: convert.addActionListener(fm);
235: dropTables.addActionListener(fm);
236: buttonPanel.add(dropTables);
237:
238: JPanel buttonPanelSrc = new JPanel();
239: buttonPanelSrc.setLayout(new BoxLayout(buttonPanelSrc, BoxLayout.X_AXIS));
240: buttonPanelSrc.setMinimumSize(new Dimension(200, 30));
241: buttonPanelSrc.add(showTables1);
242:
243: topPanel.add(buttonPanelSrc, gbc);
244: topPanel2.add(buttonPanel, gbc);
245:
246: // gbc.anchor = GridBagConstraints.WEST;
247: // gbc.gridy = 1;
248: // gbc.gridx = 2;
249: // gbc.weightx = 0.2;
250:
251: // gbc.gridx = 3;
252: // gbc.anchor = GridBagConstraints.NORTHWEST;
253: // gbc.gridy = 1;
254: // gbc.weightx = 1.0;
255: //listPanel.add(buttonPanel, gbc);
256: JSplitPane splitter = new JSplitPane();
257: splitter.setTopComponent(listPanel);
258: splitter.setBottomComponent(destPanel);
259:
260: // contentPanel.add(dataBasePanel);
261: // contentPanel.add(listPanel);
262: listPanel.setMaximumSize(new Dimension(660, 750));
263: listPanel.setMinimumSize(new Dimension(660, 250));
264: listPanel.setPreferredSize(new Dimension(480, 500));
265: paneDest.setPreferredSize(new Dimension(250, 285));
266:
267: getContentPane().add(splitter, "Center");
268: this.addWindowListener(new WindowAdapter()
269: {
270: public void windowClosing(WindowEvent e)
271: {
272: System.exit(0);
273: }
274: });
275: addComponentListener(new ComponentAdapter()
276: {
277: public void componentResized(ComponentEvent e)
278: {
279:
280: if (oldWidth != getWidth() || oldHeight != getHeight())
281: {
282: table.sizeToFit(getWidth(), getHeight());
283:
284: Dimension dim = table.table.getPreferredSize();
285: int size = contentPanel.getPreferredSize().height + new JScrollBar().getPreferredSize().height + new JMenuBar().getPreferredSize().height + 10;
286:
287: table.tableScroller.setPreferredSize(new Dimension(getWidth() - 15, getHeight() - size));
288: Dimension d2 = table.tableScroller.getPreferredSize();
289:
290: oldWidth = getWidth();
291: oldHeight = getHeight();
292:
293: table.setPreferredSize(new Dimension(d2.width + 15, d2.height + 5));
294: table.table.revalidate();
295: table.tableScroller.revalidate();
296: table.revalidate();
297: if (getHeight() > table.table.getPreferredSize().height + (2 * size))
298: setSize(getWidth(), table.table.getPreferredSize().height + 2 * size);
299: // System.out.println("size" + size);
300: }
301: // listPanel.setMaximumSize(new Dimension(getPreferredSize().width - 5, 550));
302: // listPanel.setMinimumSize(new Dimension(getPreferredSize().width - 5, 200));
303: // listPanel.setPreferredSize(new Dimension(getPreferredSize().width - 5, 370));
304: tC.tableScroller.revalidate();
305: Dimension dim = getSize();
306: tC.tableScroller.setMinimumSize(new Dimension(dim.width-400, dim.height - topPanel.getPreferredSize().height - 100));
307: tC.tableScroller.setMaximumSize(getSize());
308: tC.tableScroller.setPreferredSize(tC.tableScroller.getMinimumSize());
309:
310: paneDest.setMinimumSize(new Dimension(400, dim.height - topPanel2.getPreferredSize().height - 100));
311: paneDest.setMaximumSize(tC.tableScroller.getMaximumSize());
312: paneDest.setPreferredSize(new Dimension(400, dim.height - topPanel2.getPreferredSize().height - 100));
313:
314: paneDest.validate();
315: // tC.tableScroller.setPreferredSize(getSize());
316: tC.sizeToFit(getWidth(), getHeight());
317: ((JPanel) getContentPane()).revalidate();
318: repaint();
319: setTitle("Filemaker 2 SQL Conversion Tool ");
320:
321: }
322: });
323:
324: setMenu();
325: //setSize(800, 600);
326: pack();
327: setLocation((screenSize.width - getWidth()) / 2, (screenSize.height - getHeight()) / 2);
328: //setVisible(true);
329: validate();
330:
331: // repaint();
332:
333: }
334:
335: /**
336: *
337: */
338: public static void main(String[] args)
339: {
340: try
341: {
342: System.setErr(System.out);
343: // Properties prop = System.getProperties();
344: // Enumeration enum= prop.keys();
345: // while(enum.hasMoreElements())
346: //System.out.println(enum.nextElement());
347:
348: if (System.getProperty("os.name").startsWith("W"))
349: // javax.swing.UIManager.setLookAndFeel(
350: // new com.sun.java.swing.plaf.windows.WindowsLookAndFeel());
351: javax.swing.UIManager.put("Table.focusCellHighlightBorder", new javax.swing.border.LineBorder(java.awt.Color.black));
352: javax.swing.UIManager.put("Table.focusCellBackground", new java.awt.Color(227, 227, 227, 127));
353:
354: fmInstance = new FM2SQL();
355: fmInstance.table.tableModel.addTableModelListener(fmInstance);
356: fmInstance.setVisible(true);
357: /* if (!new File("./html").exists())
358: new File("./html").mkdirs();
359: logFile = new FileWriter("./html/index.html");
360: openLog();
361: */
362: } catch (Exception e)
363: {
364: JOptionPane pane = new JOptionPane(e.getMessage() + " \n URL: " + url, JOptionPane.ERROR_MESSAGE);
365:
366: JDialog dialog = pane.createDialog(null, " Exception occured while connecting");
367: e.printStackTrace();
368: dialog.addWindowListener(new WindowAdapter()
369: {
370: public void windowClosing(WindowEvent e)
371: {
372: System.exit(0);
373: }
374: });
375: dialog.addComponentListener(new ComponentAdapter()
376: {
377:
378: public void componentHidden(ComponentEvent e)
379: {
380:
381: System.exit(0);
382: }
383: });
384: dialog.show();
385: }
386: }
387: public void actionPerformed(ActionEvent e)
388: {
389: String command = e.getActionCommand();
390: if (debug)
391: System.out.println("command " + command);
392: if (command == "comboBoxEdited")
393: {
394: Object src = e.getSource();
395: if (src == box3)
396: {
397: if (debug)
398: System.out.println("hey" + box3.getSelectedItem());
399: Object insObj =box3.getSelectedItem();
400: ((DefaultComboBoxModel) box3.getModel()).removeElement(insObj);
401:
402: ((DefaultComboBoxModel) box3.getModel()).insertElementAt(insObj, 0);
403: box3.setSelectedItem(insObj);
404: } else if (src == box4)
405: {
406: if (debug)
407: System.out.println("hey" + box4.getSelectedItem());
408: //((DefaultComboBoxModel) box4.getModel()).insertElementAt(box4.getSelectedItem(), 0);
409: try
410: {
411: String selected = (String) box4.getSelectedItem();
412: destBean.setConnection(selected);
413: Vector catalogs = destBean.getCatalogs();
414: Vector urls = new Vector();
415: for (int i = 0; i < catalogs.size(); ++i)
416: {
417: urls.add(destBean.url.substring(0, destBean.url.lastIndexOf("/") + 1) + catalogs.get(i));
418: }
419: box4.setModel(new DefaultComboBoxModel(urls));
420: box4.setSelectedItem(selected);
421: } catch (Exception e5)
422: {
423: }
424: }
425: }
426: if (command == "comboBoxChanged")
427: {
428: try
429: {
430: //System.out.println("hallo " + (e.getSource() == box3));
431:
432: Object src = e.getSource();
433: if (src == box3&&!noUserUpdate)
434: {
435: Thread thread = new Thread()
436: {
437: public void run()
438: {
439:
440: try
441: {
442: PasswordDialog dialog = new PasswordDialog(fmInstance, bean);
443: dialog.setLocationRelativeTo(box3);
444: dialog.thread = Thread.currentThread();
445: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
446: fmInstance.setEnabled(false);
447: dialog.setVisible(true);
448: String url = box3.getSelectedItem().toString();
449: bean.url = (url != null) ? url : bean.url;
450: bean.connection = null;
451: bean.getConnection();
452: tables = bean.getTableNames();
453: fillTable();
454: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
455: fmInstance.setEnabled(true);
456: // System.out.println("hallo" + tables + " ");
457: } catch (Exception e5)
458: {
459: ByteArrayOutputStream b = new ByteArrayOutputStream();
460: PrintStream stream = new PrintStream(b);
461: e5.printStackTrace(stream);
462: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
463: fmInstance.setEnabled(true);
464: Vector header = new Vector();
465: header.add("no database");
466: header.add("connection");
467: Vector rows = new Vector();
468: //rows.add(header);
469: noDBUpdate=true;
470: tC.tableModel.setDataVector(rows, header);
471: tC.tableModel.setRowCount(20);
472: tC.revalidate();
473: tC.tableModel.fireTableDataChanged();
474: noDBUpdate=false;
475: showErrorDialog(b.toString(), "Error occured !");
476: }
477: }
478: };
479: thread.start();
480: } else if (src == box4&&!noUserUpdate)
481: {
482: Thread thread = new Thread()
483: {
484: public void run()
485: {
486:
487: try
488: {
489:
490: PasswordDialog dialog = new PasswordDialog(fmInstance, destBean);
491: dialog.setLocationRelativeTo(box4);
492: dialog.thread = Thread.currentThread();
493: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
494: fmInstance.setEnabled(false);
495: dialog.setVisible(true);
496: destBean.setConnection((String) box4.getSelectedItem());
497: DefaultListModel model = new DefaultListModel();
498: Vector tables = destBean.getTableNames();
499: for (int j = 0; j < tables.size(); ++j)
500: model.addElement(tables.get(j));
501: // System.out.println("hallo" + tables + " ");
502: tListDest.setModel(model);
503: // System.out.println("hallo" + tables + " ");
504: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
505: fmInstance.setEnabled(true);
506: } catch (Exception e5)
507: {
508: ByteArrayOutputStream b = new ByteArrayOutputStream();
509: PrintStream stream = new PrintStream(b);
510: e5.printStackTrace(stream);
511: fmInstance.setEnabled(true);
512: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
513: DefaultListModel model = new DefaultListModel();
514: model.addElement("no database connection");
515: tListDest.setModel(model);
516:
517: showErrorDialog(b.toString(), "Error occured !");
518: }
519: }
520: };
521: thread.start();
522:
523: }
524: setTitle("Filemaker 2 SQL Conversion Tool ");
525: // pack();
526:
527: } catch (Exception e4)
528: {
529: ByteArrayOutputStream b = new ByteArrayOutputStream();
530: PrintStream stream = new PrintStream(b);
531: e4.printStackTrace(stream);
532: showErrorDialog(b.toString(), "Open of table failed");
533:
534: }
535: }
536: if (command == "show Driver features")
537: {
538: ResultWindow result = new ResultWindow(this);
539: try
540: {
541: Vector[] vecs = bean.TestDB(bean.getConnection().getMetaData());
542: result.updateResult(vecs[0], vecs[1]);
543: // result.pack();
544: result.title = "Database features";
545: result.setVisible(true);
546: String name = result.writeResult();
547: } catch (Exception e2)
548: {
549: }
550: }
551: //writing config
552: if (command.equals("export XML Config"))
553: {
554: if (configExportFileChooser == null)
555: {
556: configExportFileChooser = new JFileChooser();
557: configExportFileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
558: configExportFileChooser.setFileFilter(new XMLFilter());
559: configExportFileChooser.setDialogType(JFileChooser.SAVE_DIALOG);
560: configExportFileChooser.addActionListener(new ActionListener()
561: {
562: public void actionPerformed(ActionEvent e2)
563: {
564: System.out.println(e2.getActionCommand());
565: if (!e2.getActionCommand().toString().equals("ApproveSelection"))
566: return;
567:
568: Thread thread = new Thread()
569: {
570: public void run()
571: {
572: File configFile = configExportFileChooser.getSelectedFile();
573: writeConfig(configFile.toString());
574:
575: }
576: };
577: thread.start();
578:
579: }
580: });
581: }
582: configExportFileChooser.rescanCurrentDirectory();
583: configExportFileChooser.showDialog(fmInstance, " Save ");
584:
585: }
586: if (command.equals("import XML Config"))
587: {
588: if (configImportFileChooser == null)
589: {
590: configImportFileChooser = new JFileChooser();
591: configImportFileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
592: configImportFileChooser.setFileFilter(new XMLFilter());
593: configImportFileChooser.setDialogType(JFileChooser.OPEN_DIALOG);
594: configImportFileChooser.addActionListener(new ActionListener()
595: {
596: public void actionPerformed(ActionEvent e2)
597: {
598: System.out.println(e2.getActionCommand());
599: if (!e2.getActionCommand().toString().equals("ApproveSelection"))
600: return;
601:
602: Thread thread = new Thread()
603: {
604: public void run()
605: {
606: File configFile = configImportFileChooser.getSelectedFile();
607: readXMLConfig(configFile.toString());
608:
609: }
610: };
611: thread.start();
612:
613: }
614: });
615: }
616: configImportFileChooser.rescanCurrentDirectory();
617: configImportFileChooser.showDialog(fmInstance, " Open ");
618:
619: }
620:
621:
622: if (command.equals("Convert Tables"))
623: {
624:
625: Thread thread = new Thread()
626: {
627: public void run()
628: {
629: setEnabled(false);
630: convert();
631: setEnabled(true);
632: }
633:
634: };
635: thread.start();
636: }
637: if (command.equals("show Tables"))
638: {
639: Thread thread = new Thread()
640: {
641: public void run()
642: {
643: fmInstance.setEnabled(false);
644: boolean visible = showTable(1);
645: window.validate();
646: window.setVisible(visible);
647: fmInstance.setEnabled(true);
648:
649: }
650: };
651: thread.start();
652: // System.out.println("hello");
653:
654: }
655: if (command.equals("show Tables source"))
656: {
657: Thread thread = new Thread()
658: {
659: public void run()
660: {
661: fmInstance.setEnabled(false);
662: boolean visible = showTable(0);
663: window.validate();
664: window.setVisible(visible);
665: fmInstance.setEnabled(true);
666: }
667: };
668: thread.start();
669: // System.out.println("hello"+thread);
670:
671: }
672:
673: if (command.equals("drop Tables"))
674: {
675: Thread thread = new Thread()
676: {
677: public void run()
678: {
679: dropTable();
680: }
681: };
682: thread.start();
683: }
684: }
685: /**
686: * Copys the content of source to destination and makes new table if necessary
687: */
688: public void convert()
689: {
690:
691: Vector vectors[] = getListFromTable();
692: Convert.user = bean.user;
693: Convert.passwd = bean.passwd;
694: Convert.userDest = destBean.user;
695: Convert.passwdDest = destBean.passwd;
696: try
697: {
698: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
699: fmInstance.setEnabled(false);
700: Convert.convert(bean.url, box4.getSelectedItem().toString(), vectors[0], vectors[1],vectors[2],vectors[3]);
701:
702: destBean.setConnection((String) box4.getSelectedItem());
703: DefaultListModel model = new DefaultListModel();
704: tables = destBean.getTableNames();
705: for (int j = 0; j < tables.size(); ++j)
706: model.addElement(tables.get(j));
707: if (debug)
708: System.out.println("hallo" + tables + " ");
709: tListDest.setModel(model);
710: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
711: } catch (Exception e4)
712: {
713: ByteArrayOutputStream b = new ByteArrayOutputStream();
714: PrintStream stream = new PrintStream(b);
715: e4.printStackTrace(stream);
716: showErrorDialog(b.toString(), "Conversion of table failed");
717: fmInstance.setEnabled(true);
718: }
719: }
720: public void writeConfig(String file)
721: {
722: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
723: fmInstance.setEnabled(false);
724:
725: Vector vectors[] = getListFromTable();
726: Convert.DataBase source = new Convert.DataBase(bean,vectors[0],vectors[1],vectors[2],vectors[3]);
727: Convert.DataBase destination = new Convert.DataBase(destBean,new Vector(),new Vector(),new Vector(),new Vector());
728:
729: try
730: {
731: Convert.writeConfig(file,source,destination);
732: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
733: fmInstance.setEnabled(true);
734:
735: } catch (Exception e)
736: {
737: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
738: fmInstance.setEnabled(true);
739:
740: ByteArrayOutputStream b = new ByteArrayOutputStream();
741: PrintStream stream = new PrintStream(b);
742: e.printStackTrace(stream);
743: showErrorDialog(b.toString(), "Error while writing xml config !");
744: }
745:
746: }
747: public void readXMLConfig(String file)
748: {
749:
750: try
751: {
752: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
753: fmInstance.setEnabled(false);
754: Vector databases = Convert.getXMLConfig(file);
755: DataBase destBase = (DataBase) databases.lastElement();
756: //destBase.bean.getConnection();
757: noUserUpdate = true;
758: destBean=destBase.bean;
759: Object destObj =destBean.url;
760: ((DefaultComboBoxModel) box4.getModel()).removeElement(destObj);
761: ((DefaultComboBoxModel) box4.getModel()).insertElementAt(destObj,0);
762: box4.setSelectedItem(destObj);
763: databases.remove(destBase);
764: for (Iterator iter = databases.iterator(); iter.hasNext();)
765: {
766: Convert.DataBase database = (Convert.DataBase) iter.next();
767: database.bean.getConnection();
768: bean = database.bean;
769: Object obj =bean.url;
770: ((DefaultComboBoxModel) box3.getModel()).removeElement(obj);
771: ((DefaultComboBoxModel) box3.getModel()).insertElementAt(obj,0);
772: box3.setSelectedItem(obj);
773: fillTable();
774: Vector tables=database.bean.getTableNames();
775: Collections.sort(tables,String.CASE_INSENSITIVE_ORDER);
776: int[] indices = new int[database.tables.size()];
777: for (int i =0;i<database.tables.size();++i)
778: {
779: String table = (String) database.tables.get(i);
780: int index=tables.indexOf(table);
781: if(index<0) throw new RuntimeException("Error table \""+table+"\" does no longer exist\n at server "+bean.url +"\n or you mispelled the tablename.");
782: noDBUpdate = true;
783: tC.tableModel.setValueAt(new TableComponent.SQLCommand(database.selects.get(i).toString()),index,2);
784: String create =database.creates.get(i).toString();
785: tC.tableModel.setValueAt(new TableComponent.SQLCommand(create.equals("") ? create:" "+create),index,3);
786: Object comboBox=tC.tableModel.getValueAt(index,1);
787: indices[i] = index;
788: if(comboBox!=null) ((JComboBox)comboBox).setSelectedItem(database.layouts.get(i));
789: tC.tableModel.fireTableDataChanged();
790: noDBUpdate = false;
791: noUserUpdate = false;
792:
793: }
794: // add Selections
795: ListSelectionModel lm = tC.table.getSelectionModel();
796: for(int i=0;i<indices.length;++i)
797: lm.addSelectionInterval(indices[i],indices[i]);
798:
799: destBean.getConnection();
800:
801: DefaultListModel model = new DefaultListModel();
802: tables = destBean.getTableNames();
803: for (int j = 0; j < tables.size(); ++j)
804: model.addElement(tables.get(j));
805: // System.out.println("hallo" + tables + " ");
806: tListDest.setModel(model);
807: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
808: fmInstance.setEnabled(true);
809:
810: }
811:
812: } catch (Exception e)
813: {
814: noUserUpdate = false;
815: noDBUpdate = false;
816: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
817: fmInstance.setEnabled(true);
818:
819: ByteArrayOutputStream b = new ByteArrayOutputStream();
820: PrintStream stream = new PrintStream(b);
821: e.printStackTrace(stream);
822: showErrorDialog(b.toString(), "Error while reading xml config !");
823: }
824:
825: }
826: public boolean showTable(int list)
827: {
828: ProgressDialog dialog = new ProgressDialog(fm);
829: dialog.setTitle("Preparing tables to be displayed");
830: dialog.thread = Thread.currentThread();
831: dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
832: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
833: String query = new String();
834: Object[] objs = tListDest.getSelectedValues();
835: Vector[] vectors = getListFromTable();
836: Vector tables = (list == 0) ? vectors[0] : new Vector();
837: if (list > 0)
838: for (int i = 0; i < objs.length; ++i)
839: {
840: if (debug)
841: System.out.println(objs[i]);
842: tables.add(objs[i]);
843: }
844: if (window != null)
845: window.dispose();
846: if (windowDest != null)
847: windowDest.dispose();
848:
849: window = new MultiResultWindow(fm);
850: if (list > 0)
851: {
852: windowDest = new MultiResultWindow(fm);
853: window = windowDest;
854: }
855: dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x + (FM2SQL.fmInstance.getWidth() - 500) / 2, FM2SQL.fmInstance.getLocationOnScreen().y + (FM2SQL.fmInstance.getHeight() - 250) / 2);
856: dialog.setSize(500, 250);
857: if (!tables.isEmpty())
858: dialog.show();
859: dialog.title.setText("Preparing tables to be diplayed");
860: for (int i = 0; i < tables.size(); ++i)
861: {
862: dialog.table.setText("Getting table " + tables.get(i));
863: dialog.status.setText("Table " + (i + 1) + " of " + tables.size());
864:
865: if(list==0)
866: query = "select * from " + bean.getQC() +tables.get(i).toString() + bean.getQC();
867: else
868: query = "select * from " + destBean.getQC() +tables.get(i).toString() + destBean.getQC();
869: if(list==0) query = vectors[2].get(i).toString();
870: if (list == 0 && vectors[1].get(i) != null)
871: if (vectors[1].get(i).toString() != "")
872: {
873: String layout =" layout " + bean.getQC() + vectors[1].get(i).toString() + bean.getQC();
874: String name = tables.get(i).toString();
875: StringBuffer queryLayout=new StringBuffer(query);
876: queryLayout.insert(queryLayout.indexOf(name)+name.length()+1," "+layout);
877: query=queryLayout.toString();
878: }
879: if(debug)
880: showErrorDialog("query in show tables is "+query,"Hello");
881: window.title = " Table ;-) " + (String) tables.get(i);
882: // break;
883: // } else
884: // window.title = "Error! - No valid tablename found";
885:
886: try
887: {
888: if ((query.toLowerCase().indexOf("insert") >= 0)
889: || (query.toLowerCase().indexOf("delete") >= 0)
890: || (query.toLowerCase().indexOf("alter") >= 0)
891: || (query.toLowerCase().indexOf("update") >= 0))
892: {
893: Statement stm = (list > 0) ? destBean.getConnection().createStatement() : bean.getConnection().createStatement();
894: stm.executeUpdate(query);
895: Vector vec = new Vector();
896: Vector vec2 = new Vector();
897: Vector vec3 = new Vector();
898: vec2.add(query);
899: vec3.add(vec2);
900: vec.add("Insert, update, etc done! No results available");
901: // vec.add("no Results were produced");
902:
903: window.updateResult(vec3, vec);
904: //window.pack();
905: // window.setVisible(true);
906:
907: } else
908: {
909: Vector[] vecs = (list > 0) ? destBean.getQueryData(query, dialog, 50) : bean.getQueryData(query, dialog, 50);
910: if (vecs[1].isEmpty())
911: throw new Exception("Wrong columnname or Empty Layout");
912: window.updateResult(vecs[0], vecs[1]);
913:
914: //window.pack();
915: //String name = window.writeResult();
916: //appendLog(window.title, name);
917: }
918:
919: //window.setVisible(true);
920:
921: } catch (Exception e)
922: {
923: System.out.println("Exception occured");
924: e.printStackTrace();
925: Vector vec = new Vector();
926: Vector vec2 = new Vector();
927: Vector vec3 = new Vector();
928: vec2.add(e.getMessage());
929: vec3.add(vec2);
930: vec.add("Exception occured! No results available");
931: //vec.add("no Results were produced");
932:
933: window.updateResult(vec3, vec);
934: //window.pack();
935: // window.setVisible(true);
936: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
937:
938: }
939: } // to for
940: window.pack();
941: window.setSize(700, 600);
942:
943: window.oldTabCount = 10000;
944: dialog.dispose();
945: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
946:
947: return !tables.isEmpty();
948:
949: }
950:
951: public void dropTable()
952: {
953: String query = new String();
954: Object[] objs = tListDest.getSelectedValues();
955: Vector tables = new Vector();
956: for (int i = 0; i < objs.length; ++i)
957: {
958: System.out.println(objs[i]);
959: tables.add(objs[i]);
960: }
961:
962: for (int i = 0; i < tables.size(); ++i)
963: {
964:
965: query = "drop table "+destBean.getQC() + tables.get(i) + destBean.getQC();
966:
967: try
968: {
969: Statement stm = destBean.getConnection().createStatement();
970: stm.executeUpdate(query);
971: } catch (Exception e)
972: {
973: ByteArrayOutputStream b = new ByteArrayOutputStream();
974: PrintStream stream = new PrintStream(b);
975: e.printStackTrace(stream);
976: showErrorDialog(b.toString(), "Open of table failed");
977:
978: }
979: } // to for
980: try
981: {
982: destBean.setConnection((String) box4.getSelectedItem());
983: DefaultListModel model = new DefaultListModel();
984: tables = destBean.getTableNames();
985: for (int j = 0; j < tables.size(); ++j)
986: model.addElement(tables.get(j));
987: System.out.println("hallo" + tables + " ");
988: tListDest.setModel(model);
989: } catch (Exception e4)
990: {
991: }
992:
993: }
994: /**
995: * invoked then the user changes the table or the tableModel changes
996: */
997: public void tableChanged(TableModelEvent e)
998: {
999: // if (e.getType() == e.INSERT)
1000: //System.out.println("Insert done");
1001: // if (e.getType() == e.UPDATE)
1002: // System.out.println("Update done");
1003: //if (e.getType() == e.DELETE)
1004: // System.out.println("Delete done");
1005: if (e.getType() == e.UPDATE && !noDBUpdate)
1006: {
1007: int row = e.getFirstRow(), col = e.getColumn();
1008: System.out.println("Got in " + row + " " + col );
1009: TableModel model = (TableModel)e.getSource();
1010: String columnName = model.getColumnName(col);
1011: Object test = model.getValueAt(row, col);
1012: String idVal = (test == null) ? "" : test.toString();
1013: String value = (test == null) ? "" : test.toString();;
1014:
1015: System.out.println("Got in " + columnName +" "+idVal);
1016: try
1017: {
1018: if(columnName.equals("select")||columnName.equals("Layouts"))
1019: {
1020: String table = model.getValueAt(row,0).toString();
1021: String layout = (model.getValueAt(row,1)!=null) ?((JComboBox)model.getValueAt(row,1)).getSelectedItem().toString():"";
1022: String query = model.getValueAt(row,2).toString();
1023: String create = model.getValueAt(row,3).toString();
1024: System.out.println("table" +table+" layout "+layout+" query "+query);
1025: if(!create.equals(""))
1026: {
1027: Object[] options = { "Yes","No"};
1028: int option=showDialog("Create Statement not empty! Do you want to overwrite?","create statement",options );
1029: if(option==0)
1030: model.setValueAt(createStatement(table,destBean,layout,query),row,3);
1031: }
1032:
1033:
1034: }
1035: /* Statement stm = bean.getConnection().createStatement();
1036: // stm.executeUpdate("DELETE FROM \""+fm.tables.get(0)+"\" WHERE \"erstellt von\"='rogo') ");
1037:
1038: if (idVal == "")
1039: stm.executeUpdate("INSERT INTO " + DBBean.quoteChar + box.getSelectedItem() + DBBean.quoteChar + " (" + DBBean.quoteChar + columnName + DBBean.quoteChar + ") VALUES ('" + value + "') ");
1040: else
1041: stm.executeUpdate(
1042: "UPDATE " + DBBean.quoteChar + box.getSelectedItem() + DBBean.quoteChar + " SET " + DBBean.quoteChar + columnName + DBBean.quoteChar + "='" + value + "' WHERE ID='" + idVal + "' ");
1043: */
1044: } catch (Exception e2)
1045: {
1046: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
1047: ByteArrayOutputStream b = new ByteArrayOutputStream();
1048: PrintStream stream = new PrintStream(b);
1049: e2.printStackTrace(stream);
1050: showErrorDialog(b.toString(), "Error while updating table !");
1051: }
1052: }
1053: }
1054:
1055: /**
1056: * initialize the menubar
1057: */
1058: private void setMenu()
1059: {
1060: JMenuBar menubar = new JMenuBar();
1061: JMenu menu = new JMenu("File");
1062:
1063: JMenuItem item = new JMenuItem("import XML Config");
1064: item.addActionListener(fm);
1065: menu.add(item);
1066: item = new JMenuItem("export XML Config");
1067: item.addActionListener(fm);
1068: menu.add(item);
1069: menubar.add(menu);
1070: menu = new JMenu("Options");
1071:
1072: item = new JMenuItem("show Driver features");
1073: item.addActionListener(fm);
1074: menu.add(item);
1075: menubar.add(menu);
1076:
1077: item.addActionListener(fm);
1078: menu.add(item);
1079:
1080: menubar.add(menu);
1081:
1082: menu.setBackground(fm.getBackground());
1083: menubar.setBackground(fm.getBackground());
1084: setJMenuBar(menubar);
1085: }
1086: /**
1087: * open the log file (index.html)
1088: */
1089:
1090: public static void openLog() throws Exception
1091: {
1092:
1093: StringBuffer buff = new StringBuffer();
1094: buff.append("<html>");
1095: buff.append("<head>");
1096: buff.append("\n<title>");
1097: buff.append("FileMaker Test");
1098: buff.append("</title>\n");
1099: buff.append("</head>\n");
1100:
1101: buff.append("<body>\n");
1102: buff.append("<center>\n");
1103: buff.append("\n<h3>");
1104: buff.append("FileMaker Test");
1105: buff.append("</h3>\n");
1106:
1107: logFile.write(TableComponent.convertUml(buff).toString());
1108: logFile.flush();
1109: }
1110: /**
1111: * Append one entry to the log file(index.html)
1112: */
1113: public static void appendLog(String entry, String name) throws Exception
1114: {
1115: logFile.write("<a href=\"./" + name.substring(name.lastIndexOf("/") + 1) + "\">");
1116: logFile.write(entry + "</a>");
1117: logFile.write("<br>\n<br>\n");
1118: logFile.flush();
1119: }
1120: /**
1121: * closes the log file invoked then the application closes
1122: */
1123: public static void closeLog() throws Exception
1124: {
1125: logFile.write("\n</body>");
1126: logFile.write("\n</html>");
1127:
1128: logFile.close();
1129: }
1130: public static void showErrorDialog(String message, String title)
1131: {
1132: JDialog dialog = new JDialog(fmInstance);
1133: dialog.setTitle(title);
1134: JTextArea text = new JTextArea();
1135: JScrollPane scroller = new JScrollPane(text);
1136: dialog.getContentPane().add(scroller);
1137: text.append(message);
1138: dialog.setSize(600, 300);
1139: dialog.setLocationRelativeTo(fmInstance);
1140: dialog.show();
1141: //JOptionPane.showMessageDialog(null, message, title, JOptionPane.ERROR_MESSAGE);
1142: }
1143: public static class ProgressDialog extends JDialog
1144: {
1145: JLabel table = new JLabel(" ");
1146: JLabel status = new JLabel(" ");
1147: JLabel title = new JLabel(" ");
1148: JPanel content = new JPanel();
1149: JPanel titlePanel = new JPanel();
1150: JPanel labelPanel = new JPanel();
1151: JPanel statusPanel = new JPanel();
1152: JPanel buttonPanel = new JPanel();
1153:
1154: JProgressBar progress = new JProgressBar();
1155: JButton cancel = new JButton("Cancel");
1156: Thread thread;
1157: public ProgressDialog(JFrame frame)
1158: {
1159: super(frame);
1160: content = new JPanel(true);
1161: //content.setBorder(BorderFactory.createRaisedBevelBorder());
1162: content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
1163: title = new JLabel("Progress of conversion");
1164: title.setHorizontalTextPosition(title.CENTER);
1165: titlePanel.add(title);
1166: buttonPanel.add(cancel);
1167: // content.add(titlePanel);
1168: content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
1169: content.add(labelPanel);
1170: content.add(new JLabel(""));
1171: content.add(progress);
1172: content.add(statusPanel);
1173: content.add(buttonPanel);
1174: content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
1175: labelPanel.add(table);
1176: statusPanel.add(status);
1177: getContentPane().add(titlePanel, "North");
1178: getContentPane().add(content, "Center");
1179: this.addWindowListener(new WindowAdapter()
1180: {
1181: public void windowClosing(WindowEvent e)
1182: {
1183: cancel.doClick();
1184: }
1185: });
1186:
1187: cancel.addActionListener(new ActionListener()
1188: {
1189: public void actionPerformed(ActionEvent e)
1190: {
1191: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
1192: fmInstance.setEnabled(true);
1193: setVisible(false);
1194: thread.stop();
1195: }
1196: });
1197: pack();
1198:
1199: }
1200:
1201: }
1202: public static class PasswordDialog extends JDialog
1203: {
1204: JLabel table = new JLabel(" ");
1205: JLabel status = new JLabel(" ");
1206: JLabel title = new JLabel(" ");
1207: JPanel content = new JPanel();
1208: JPanel titlePanel = new JPanel();
1209: JPanel userPanel = new JPanel();
1210: JPanel passwordPanel = new JPanel();
1211: JPanel buttonPanel = new JPanel();
1212: JTextField user = new JTextField(10);
1213: JTextField passwd = new JPasswordField(10);
1214:
1215: JButton cancel = new JButton("Cancel");
1216: JButton ok = new JButton("Ok");
1217: DBBean bean = null;
1218: Thread thread;
1219: public PasswordDialog(JFrame frame, DBBean localBean)
1220: {
1221: super(frame);
1222: setTitle("PasswordDialog");
1223: setModal(true);
1224: content = new JPanel(true);
1225: this.bean = localBean;
1226: //content.setBorder(BorderFactory.createRaisedBevelBorder());
1227: ActionListener al = new ActionListener()
1228: {
1229: public void actionPerformed(ActionEvent e)
1230: {
1231: bean.setUserAndPasswd(user.getText(), passwd.getText());
1232: setVisible(false);
1233: }
1234:
1235: };
1236: this.addWindowListener(new WindowAdapter()
1237: {
1238: public void windowClosing(WindowEvent e)
1239: {
1240: cancel.doClick();
1241: }
1242: });
1243:
1244: user.setText(localBean.user);
1245: passwd.setText(localBean.passwd);
1246: user.addActionListener(al);
1247: passwd.addActionListener(al);
1248: content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
1249: title = new JLabel("Enter user and password ");
1250: title.setHorizontalTextPosition(title.CENTER);
1251: titlePanel.add(title);
1252: buttonPanel.add(ok);
1253: buttonPanel.add(cancel);
1254: content.add(titlePanel);
1255: content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
1256: // content.add(labelPanel);
1257: content.add(new JLabel(""));
1258: content.add(userPanel);
1259: content.add(passwordPanel);
1260: content.add(buttonPanel);
1261: content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
1262: //labelPanel.add(table);
1263: userPanel.add(new JLabel("Username: "));
1264: userPanel.add(user);
1265: passwordPanel.add(new JLabel("Password: "));
1266: passwordPanel.add(passwd);
1267: passwd.setPreferredSize(user.getPreferredSize());
1268: passwd.setMinimumSize(passwd.getPreferredSize());
1269: passwd.setMaximumSize(passwd.getPreferredSize());
1270: passwd.setSize(passwd.getPreferredSize());
1271: getContentPane().add(titlePanel, "North");
1272: getContentPane().add(content, "Center");
1273: ok.addActionListener(al);
1274: cancel.addActionListener(new ActionListener()
1275: {
1276: public void actionPerformed(ActionEvent e)
1277: {
1278: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
1279: fmInstance.setEnabled(true);
1280: setVisible(false);
1281: thread.stop();
1282: }
1283:
1284: });
1285: pack();
1286:
1287: }
1288:
1289: }
1290: public void fillTable()
1291: {
1292: noDBUpdate = true;
1293: Vector tableNames = bean.getTableNames();
1294: Collections.sort(tableNames, String.CASE_INSENSITIVE_ORDER);
1295: Vector[] data = new Vector[2];
1296: data[1] = new Vector();
1297: data[1].add("Table");
1298: data[1].add("Layouts");
1299: data[1].add("select");
1300: data[1].add("create");
1301:
1302: data[0] = new Vector();
1303:
1304: for (int i = 0; i < tableNames.size(); i++)
1305: {
1306: String name = tableNames.get(i).toString();
1307: Vector layouts = new Vector();
1308: try
1309: {
1310: layouts = bean.getLayoutNames(name);
1311: } catch (SQLException e)
1312: {
1313: layouts = new Vector();
1314: }
1315: Vector dataRow = new Vector();
1316: dataRow.add(name);
1317: if (!layouts.isEmpty())
1318: dataRow.add(new JComboBox(layouts));
1319: else
1320: dataRow.add(null);
1321: dataRow.add(new TableComponent.SQLCommand("select * from "+bean.getQC()+name+bean.getQC()));
1322:
1323: data[0].add(dataRow);
1324: dataRow.add(new TableComponent.SQLCommand(""));
1325: //System.out.println(dataRow);
1326: }
1327: tC.tableModel.setDataVector(data[0], data[1]);
1328: tC.revalidate();
1329: tC.tableModel.fireTableDataChanged();
1330: noDBUpdate = false;
1331:
1332: }
1333: public Vector[] getListFromTable()
1334: {
1335: Vector[] vec = new Vector[4];
1336: vec[0] = new Vector();
1337: vec[1] = new Vector();
1338: vec[2] = new Vector();
1339: vec[3] = new Vector();
1340: int[] rows = tC.table.getSelectedRows();
1341: for (int i = 0; i < rows.length; i++)
1342: {
1343: //System.out.println(tC.tableModel.getValueAt(rows[i],1));
1344: vec[0].add(tC.tableModel.getValueAt(rows[i], 0));
1345: JComboBox box = ((JComboBox) tC.tableModel.getValueAt(rows[i], 1));
1346: String layoutName = (box != null) ? box.getSelectedItem().toString() : "";
1347: vec[1].add(layoutName);
1348: vec[2].add(tC.tableModel.getValueAt(rows[i], 2).toString());
1349: vec[3].add(tC.tableModel.getValueAt(rows[i], 3).toString());
1350:
1351: }
1352: return vec;
1353: }
1354: public void setEnabled(boolean state)
1355: {
1356: showTables.setEnabled(state);
1357: showTables1.setEnabled(state);
1358: convert.setEnabled(state);
1359: dropTables.setEnabled(state);
1360: box3.setEnabled(state);
1361: box4.setEnabled(state);
1362:
1363: }
1364: public TableComponent.SQLCommand createStatement(String table,DBBean beanDest,String layout,String query) throws SQLException
1365: {
1366: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
1367:
1368: if(beanDest.url.equals("")) beanDest.url=box4.getSelectedItem().toString();
1369: StringBuffer command = new StringBuffer(50);
1370: command.append("\n CREATE TABLE ");
1371: command.append(beanDest.getQC());
1372: command.append(Convert.convertText(table));
1373: command.append(beanDest.getQC());
1374: command.append("\n ( ");
1375: String type = null;
1376: // String query = "select * from " + bean.getQC() +table + bean.getQC();
1377: if (!layout.equals(""))
1378: {
1379: layout = " layout " + bean.getQC() + layout + bean.getQC();
1380: StringBuffer queryLayout = new StringBuffer(query);
1381: queryLayout.insert(queryLayout.indexOf(table) + table.length() + 1, " " + layout);
1382: query = queryLayout.toString();
1383: System.out.println("added layout "+ query);
1384:
1385: }
1386: Vector[] result=bean.getQueryData(query,1);
1387: for (int i = 0; i < result[1].size() - 1; ++i)
1388: {
1389: type = bean.metaData.getColumnTypeName(i + 1);
1390: // System.out.println(i+" "+result[1].get(i)+" "+type);
1391: type = (type.equals("NUMBER")) ? "INT4" : type;
1392: type = (type.equals("CONTAINER")) ? "TEXT" : type;
1393: type = type.toUpperCase();
1394: if(i==0)
1395: command.append(beanDest.getQC() + Convert.convertText((String) result[1].get(i)) + beanDest.getQC() + " " + type + ", ");
1396: else
1397: command.append(" "+beanDest.getQC() + Convert.convertText((String) result[1].get(i)) + beanDest.getQC() + " " + type + ", ");
1398: command.append("\n");
1399: }
1400: type = bean.metaData.getColumnTypeName(result[1].size());
1401: type = (type.equals("NUMBER")) ? "INT4" : type;
1402: type = (type.equals("CONTAINER")) ? "TEXT" : type;
1403: type = type.toUpperCase();
1404: command.append(" "+beanDest.getQC() + Convert.convertText((String) result[1].get(result[1].size() - 1)) + beanDest.getQC() + " " + type);
1405: command.append("\n )\n");
1406: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
1407:
1408: return new TableComponent.SQLCommand(command.toString());
1409: }
1410: static class XMLFilter extends javax.swing.filechooser.FileFilter
1411: {
1412: public boolean accept(java.io.File file)
1413: {
1414: if (file.getName().toLowerCase().endsWith(".xml") || file.isDirectory())
1415: return true;
1416: else
1417: return false;
1418: }
1419: public String getDescription()
1420: {
1421: return "Batch Convert XML File";
1422: }
1423:
1424: }
1425: public static int showDialog(String message, String title, Object[] options)
1426: {
1427: int option = JOptionPane.showOptionDialog(null, message, title, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]);
1428: return option;
1429:
1430: }
1431:
1432: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>