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("save 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("open 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: if(command.equals("Quit"))
685: {
686: fmInstance.dispose();
687: System.exit(0);
688:
689: }
690:
691: }
692: /**
693: * Copys the content of source to destination and makes new table if necessary
694: */
695: public void convert()
696: {
697:
698: Vector vectors[] = getListFromTable();
699: Convert.user = bean.user;
700: Convert.passwd = bean.passwd;
701: Convert.userDest = destBean.user;
702: Convert.passwdDest = destBean.passwd;
703: try
704: {
705: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
706: fmInstance.setEnabled(false);
707: Convert.convert(bean.url, box4.getSelectedItem().toString(), vectors[0], vectors[1],vectors[2],vectors[3]);
708:
709: destBean.setConnection((String) box4.getSelectedItem());
710: DefaultListModel model = new DefaultListModel();
711: tables = destBean.getTableNames();
712: for (int j = 0; j < tables.size(); ++j)
713: model.addElement(tables.get(j));
714: if (debug)
715: System.out.println("hallo" + tables + " ");
716: tListDest.setModel(model);
717: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
718: } catch (Exception e4)
719: {
720: ByteArrayOutputStream b = new ByteArrayOutputStream();
721: PrintStream stream = new PrintStream(b);
722: e4.printStackTrace(stream);
723: showErrorDialog(b.toString(), "Conversion of table failed");
724: fmInstance.setEnabled(true);
725: }
726: }
727: public void writeConfig(String file)
728: {
729: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
730: fmInstance.setEnabled(false);
731:
732: Vector vectors[] = getListFromTable();
733: Convert.DataBase source = new Convert.DataBase(bean,vectors[0],vectors[1],vectors[2],vectors[3]);
734: Convert.DataBase destination = new Convert.DataBase(destBean,new Vector(),new Vector(),new Vector(),new Vector());
735:
736: try
737: {
738: Convert.writeConfig(file,source,destination);
739: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
740: fmInstance.setEnabled(true);
741:
742: } catch (Exception e)
743: {
744: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
745: fmInstance.setEnabled(true);
746:
747: ByteArrayOutputStream b = new ByteArrayOutputStream();
748: PrintStream stream = new PrintStream(b);
749: e.printStackTrace(stream);
750: showErrorDialog(b.toString(), "Error while writing xml config !");
751: }
752:
753: }
754: public void readXMLConfig(String file)
755: {
756:
757: try
758: {
759: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
760: fmInstance.setEnabled(false);
761: Vector databases = Convert.getXMLConfig(file);
762: DataBase destBase = (DataBase) databases.lastElement();
763: //destBase.bean.getConnection();
764: noUserUpdate = true;
765: destBean=destBase.bean;
766: Object destObj =destBean.url;
767: ((DefaultComboBoxModel) box4.getModel()).removeElement(destObj);
768: ((DefaultComboBoxModel) box4.getModel()).insertElementAt(destObj,0);
769: box4.setSelectedItem(destObj);
770: databases.remove(destBase);
771: for (Iterator iter = databases.iterator(); iter.hasNext();)
772: {
773: Convert.DataBase database = (Convert.DataBase) iter.next();
774: database.bean.getConnection();
775: bean = database.bean;
776: Object obj =bean.url;
777: ((DefaultComboBoxModel) box3.getModel()).removeElement(obj);
778: ((DefaultComboBoxModel) box3.getModel()).insertElementAt(obj,0);
779: box3.setSelectedItem(obj);
780: fillTable();
781: Vector tables=database.bean.getTableNames();
782: Collections.sort(tables,String.CASE_INSENSITIVE_ORDER);
783: int[] indices = new int[database.tables.size()];
784: for (int i =0;i<database.tables.size();++i)
785: {
786: String table = (String) database.tables.get(i);
787: int index=tables.indexOf(table);
788: if(index<0) throw new RuntimeException("Error table \""+table+"\" does no longer exist\n at server "+bean.url +"\n or you mispelled the tablename.");
789: noDBUpdate = true;
790: tC.tableModel.setValueAt(new TableComponent.SQLCommand(database.selects.get(i).toString()),index,2);
791: String create =database.creates.get(i).toString();
792: tC.tableModel.setValueAt(new TableComponent.SQLCommand(create.equals("") ? create:" "+create),index,3);
793: Object comboBox=tC.tableModel.getValueAt(index,1);
794: indices[i] = index;
795: if(comboBox!=null) ((JComboBox)comboBox).setSelectedItem(database.layouts.get(i));
796: tC.tableModel.fireTableDataChanged();
797: noDBUpdate = false;
798: noUserUpdate = false;
799:
800: }
801: // add Selections
802: ListSelectionModel lm = tC.table.getSelectionModel();
803: for(int i=0;i<indices.length;++i)
804: lm.addSelectionInterval(indices[i],indices[i]);
805:
806: destBean.getConnection();
807:
808: DefaultListModel model = new DefaultListModel();
809: tables = destBean.getTableNames();
810: for (int j = 0; j < tables.size(); ++j)
811: model.addElement(tables.get(j));
812: // System.out.println("hallo" + tables + " ");
813: tListDest.setModel(model);
814: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
815: fmInstance.setEnabled(true);
816:
817: }
818:
819: } catch (Exception e)
820: {
821: noUserUpdate = false;
822: noDBUpdate = false;
823: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
824: fmInstance.setEnabled(true);
825:
826: ByteArrayOutputStream b = new ByteArrayOutputStream();
827: PrintStream stream = new PrintStream(b);
828: e.printStackTrace(stream);
829: showErrorDialog(b.toString(), "Error while reading xml config !");
830: }
831:
832: }
833: public boolean showTable(int list)
834: {
835: ProgressDialog dialog = new ProgressDialog(fm);
836: dialog.setTitle("Preparing tables to be displayed");
837: dialog.thread = Thread.currentThread();
838: dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
839: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
840: String query = new String();
841: Object[] objs = tListDest.getSelectedValues();
842: Vector[] vectors = getListFromTable();
843: Vector tables = (list == 0) ? vectors[0] : new Vector();
844: if (list > 0)
845: for (int i = 0; i < objs.length; ++i)
846: {
847: if (debug)
848: System.out.println(objs[i]);
849: tables.add(objs[i]);
850: }
851: if (window != null)
852: window.dispose();
853: if (windowDest != null)
854: windowDest.dispose();
855:
856: window = new MultiResultWindow(fm);
857: if (list > 0)
858: {
859: windowDest = new MultiResultWindow(fm);
860: window = windowDest;
861: }
862: dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x + (FM2SQL.fmInstance.getWidth() - 500) / 2, FM2SQL.fmInstance.getLocationOnScreen().y + (FM2SQL.fmInstance.getHeight() - 250) / 2);
863: dialog.setSize(500, 250);
864: if (!tables.isEmpty())
865: dialog.show();
866: dialog.title.setText("Preparing tables to be diplayed");
867: for (int i = 0; i < tables.size(); ++i)
868: {
869: dialog.table.setText("Getting table " + tables.get(i));
870: dialog.status.setText("Table " + (i + 1) + " of " + tables.size());
871:
872: if(list==0)
873: query = "select * from " + bean.getQC() +tables.get(i).toString() + bean.getQC();
874: else
875: query = "select * from " + destBean.getQC() +tables.get(i).toString() + destBean.getQC();
876: if(list==0) query = vectors[2].get(i).toString();
877: if (list == 0 && vectors[1].get(i) != null)
878: if (vectors[1].get(i).toString() != "")
879: {
880: String layout =" layout " + bean.getQC() + vectors[1].get(i).toString() + bean.getQC();
881: String name = tables.get(i).toString();
882: StringBuffer queryLayout=new StringBuffer(query);
883: queryLayout.insert(queryLayout.indexOf(name)+name.length()+1," "+layout);
884: query=queryLayout.toString();
885: }
886: if(debug)
887: showErrorDialog("query in show tables is "+query,"Hello");
888: window.title = " Table ;-) " + (String) tables.get(i);
889: // break;
890: // } else
891: // window.title = "Error! - No valid tablename found";
892:
893: try
894: {
895: if ((query.toLowerCase().indexOf("insert") >= 0)
896: || (query.toLowerCase().indexOf("delete") >= 0)
897: || (query.toLowerCase().indexOf("alter") >= 0)
898: || (query.toLowerCase().indexOf("update") >= 0))
899: {
900: Statement stm = (list > 0) ? destBean.getConnection().createStatement() : bean.getConnection().createStatement();
901: stm.executeUpdate(query);
902: Vector vec = new Vector();
903: Vector vec2 = new Vector();
904: Vector vec3 = new Vector();
905: vec2.add(query);
906: vec3.add(vec2);
907: vec.add("Insert, update, etc done! No results available");
908: // vec.add("no Results were produced");
909:
910: window.updateResult(vec3, vec);
911: //window.pack();
912: // window.setVisible(true);
913:
914: } else
915: {
916: Vector[] vecs = (list > 0) ? destBean.getQueryData(query, dialog, 50) : bean.getQueryData(query, dialog, 50);
917: if (vecs[1].isEmpty())
918: throw new Exception("Wrong columnname or Empty Layout");
919: window.updateResult(vecs[0], vecs[1]);
920:
921: //window.pack();
922: //String name = window.writeResult();
923: //appendLog(window.title, name);
924: }
925:
926: //window.setVisible(true);
927:
928: } catch (Exception e)
929: {
930: System.out.println("Exception occured");
931: e.printStackTrace();
932: Vector vec = new Vector();
933: Vector vec2 = new Vector();
934: Vector vec3 = new Vector();
935: vec2.add(e.getMessage());
936: vec3.add(vec2);
937: vec.add("Exception occured! No results available");
938: //vec.add("no Results were produced");
939:
940: window.updateResult(vec3, vec);
941: //window.pack();
942: // window.setVisible(true);
943: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
944:
945: }
946: } // to for
947: window.pack();
948: window.setSize(700, 600);
949:
950: window.oldTabCount = 10000;
951: dialog.dispose();
952: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
953:
954: return !tables.isEmpty();
955:
956: }
957:
958: public void dropTable()
959: {
960: String query = new String();
961: Object[] objs = tListDest.getSelectedValues();
962: Vector tables = new Vector();
963: for (int i = 0; i < objs.length; ++i)
964: {
965: System.out.println(objs[i]);
966: tables.add(objs[i]);
967: }
968:
969: for (int i = 0; i < tables.size(); ++i)
970: {
971:
972: query = "drop table "+destBean.getQC() + tables.get(i) + destBean.getQC();
973:
974: try
975: {
976: Statement stm = destBean.getConnection().createStatement();
977: stm.executeUpdate(query);
978: } catch (Exception e)
979: {
980: ByteArrayOutputStream b = new ByteArrayOutputStream();
981: PrintStream stream = new PrintStream(b);
982: e.printStackTrace(stream);
983: showErrorDialog(b.toString(), "Open of table failed");
984:
985: }
986: } // to for
987: try
988: {
989: destBean.setConnection((String) box4.getSelectedItem());
990: DefaultListModel model = new DefaultListModel();
991: tables = destBean.getTableNames();
992: for (int j = 0; j < tables.size(); ++j)
993: model.addElement(tables.get(j));
994: System.out.println("hallo" + tables + " ");
995: tListDest.setModel(model);
996: } catch (Exception e4)
997: {
998: }
999:
1000: }
1001: /**
1002: * invoked then the user changes the table or the tableModel changes
1003: */
1004: public void tableChanged(TableModelEvent e)
1005: {
1006: // if (e.getType() == e.INSERT)
1007: //System.out.println("Insert done");
1008: // if (e.getType() == e.UPDATE)
1009: // System.out.println("Update done");
1010: //if (e.getType() == e.DELETE)
1011: // System.out.println("Delete done");
1012: if (e.getType() == e.UPDATE && !noDBUpdate)
1013: {
1014: int row = e.getFirstRow(), col = e.getColumn();
1015: System.out.println("Got in " + row + " " + col );
1016: TableModel model = (TableModel)e.getSource();
1017: String columnName = model.getColumnName(col);
1018: Object test = model.getValueAt(row, col);
1019: String idVal = (test == null) ? "" : test.toString();
1020: String value = (test == null) ? "" : test.toString();;
1021:
1022: System.out.println("Got in " + columnName +" "+idVal);
1023: try
1024: {
1025: if(columnName.equals("select")||columnName.equals("Layouts"))
1026: {
1027: String table = model.getValueAt(row,0).toString();
1028: String layout = (model.getValueAt(row,1)!=null) ?((JComboBox)model.getValueAt(row,1)).getSelectedItem().toString():"";
1029: String query = model.getValueAt(row,2).toString();
1030: String create = model.getValueAt(row,3).toString();
1031: System.out.println("table" +table+" layout "+layout+" query "+query);
1032: if(!create.equals(""))
1033: {
1034: Object[] options = { "Yes","No"};
1035: int option=showDialog("Create Statement not empty! Do you want to overwrite?","create statement",options );
1036: if(option==0)
1037: model.setValueAt(createStatement(table,destBean,layout,query),row,3);
1038: }
1039:
1040:
1041: }
1042: /* Statement stm = bean.getConnection().createStatement();
1043: // stm.executeUpdate("DELETE FROM \""+fm.tables.get(0)+"\" WHERE \"erstellt von\"='rogo') ");
1044:
1045: if (idVal == "")
1046: stm.executeUpdate("INSERT INTO " + DBBean.quoteChar + box.getSelectedItem() + DBBean.quoteChar + " (" + DBBean.quoteChar + columnName + DBBean.quoteChar + ") VALUES ('" + value + "') ");
1047: else
1048: stm.executeUpdate(
1049: "UPDATE " + DBBean.quoteChar + box.getSelectedItem() + DBBean.quoteChar + " SET " + DBBean.quoteChar + columnName + DBBean.quoteChar + "='" + value + "' WHERE ID='" + idVal + "' ");
1050: */
1051: } catch (Exception e2)
1052: {
1053: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
1054: ByteArrayOutputStream b = new ByteArrayOutputStream();
1055: PrintStream stream = new PrintStream(b);
1056: e2.printStackTrace(stream);
1057: showErrorDialog(b.toString(), "Error while updating table !");
1058: }
1059: }
1060: }
1061:
1062: /**
1063: * initialize the menubar
1064: */
1065: private void setMenu()
1066: {
1067: JMenuBar menubar = new JMenuBar();
1068: JMenu menu = new JMenu("File");
1069: menu.setMnemonic('F');
1070: JMenuItem item = new JMenuItem("open XML Config");
1071: item.setMnemonic('i');
1072: item.setAccelerator(KeyStroke.getKeyStroke('O',InputEvent.CTRL_DOWN_MASK));
1073:
1074: item.addActionListener(fm);
1075: menu.add(item);
1076: item = new JMenuItem("save XML Config");
1077: item.setAccelerator(KeyStroke.getKeyStroke('S',InputEvent.CTRL_DOWN_MASK));
1078: item.setMnemonic('x');
1079:
1080: item.addActionListener(fm);
1081: menu.add(item);
1082: item = new JMenuItem("Quit");
1083: item.setMnemonic('Q');
1084: item.setAccelerator(KeyStroke.getKeyStroke('Q',InputEvent.CTRL_DOWN_MASK));
1085: item.addActionListener(fm);
1086: menu.add(item);
1087:
1088: menubar.add(menu);
1089: menu = new JMenu("Options");
1090: menu.setMnemonic('O');
1091:
1092: item = new JMenuItem("show Driver features");
1093: item.addActionListener(fm);
1094: menu.add(item);
1095: menubar.add(menu);
1096:
1097: item.addActionListener(fm);
1098: menu.add(item);
1099:
1100: menubar.add(menu);
1101:
1102: menu.setBackground(fm.getBackground());
1103: menubar.setBackground(fm.getBackground());
1104: setJMenuBar(menubar);
1105: }
1106: /**
1107: * open the log file (index.html)
1108: */
1109:
1110: public static void openLog() throws Exception
1111: {
1112:
1113: StringBuffer buff = new StringBuffer();
1114: buff.append("<html>");
1115: buff.append("<head>");
1116: buff.append("\n<title>");
1117: buff.append("FileMaker Test");
1118: buff.append("</title>\n");
1119: buff.append("</head>\n");
1120:
1121: buff.append("<body>\n");
1122: buff.append("<center>\n");
1123: buff.append("\n<h3>");
1124: buff.append("FileMaker Test");
1125: buff.append("</h3>\n");
1126:
1127: logFile.write(TableComponent.convertUml(buff).toString());
1128: logFile.flush();
1129: }
1130: /**
1131: * Append one entry to the log file(index.html)
1132: */
1133: public static void appendLog(String entry, String name) throws Exception
1134: {
1135: logFile.write("<a href=\"./" + name.substring(name.lastIndexOf("/") + 1) + "\">");
1136: logFile.write(entry + "</a>");
1137: logFile.write("<br>\n<br>\n");
1138: logFile.flush();
1139: }
1140: /**
1141: * closes the log file invoked then the application closes
1142: */
1143: public static void closeLog() throws Exception
1144: {
1145: logFile.write("\n</body>");
1146: logFile.write("\n</html>");
1147:
1148: logFile.close();
1149: }
1150: public static void showErrorDialog(String message, String title)
1151: {
1152: JDialog dialog = new JDialog(fmInstance);
1153: dialog.setTitle(title);
1154: JTextArea text = new JTextArea();
1155: JScrollPane scroller = new JScrollPane(text);
1156: dialog.getContentPane().add(scroller);
1157: text.append(message);
1158: dialog.setSize(600, 300);
1159: dialog.setLocationRelativeTo(fmInstance);
1160: dialog.show();
1161: //JOptionPane.showMessageDialog(null, message, title, JOptionPane.ERROR_MESSAGE);
1162: }
1163: public static class ProgressDialog extends JDialog
1164: {
1165: JLabel table = new JLabel(" ");
1166: JLabel status = new JLabel(" ");
1167: JLabel title = new JLabel(" ");
1168: JPanel content = new JPanel();
1169: JPanel titlePanel = new JPanel();
1170: JPanel labelPanel = new JPanel();
1171: JPanel statusPanel = new JPanel();
1172: JPanel buttonPanel = new JPanel();
1173:
1174: JProgressBar progress = new JProgressBar();
1175: JButton cancel = new JButton("Cancel");
1176: Thread thread;
1177: public ProgressDialog(JFrame frame)
1178: {
1179: super(frame);
1180: content = new JPanel(true);
1181: //content.setBorder(BorderFactory.createRaisedBevelBorder());
1182: content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
1183: title = new JLabel("Progress of conversion");
1184: title.setHorizontalTextPosition(title.CENTER);
1185: titlePanel.add(title);
1186: buttonPanel.add(cancel);
1187: // content.add(titlePanel);
1188: content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
1189: content.add(labelPanel);
1190: content.add(new JLabel(""));
1191: content.add(progress);
1192: content.add(statusPanel);
1193: content.add(buttonPanel);
1194: content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
1195: labelPanel.add(table);
1196: statusPanel.add(status);
1197: getContentPane().add(titlePanel, "North");
1198: getContentPane().add(content, "Center");
1199: this.addWindowListener(new WindowAdapter()
1200: {
1201: public void windowClosing(WindowEvent e)
1202: {
1203: cancel.doClick();
1204: }
1205: });
1206:
1207: cancel.addActionListener(new ActionListener()
1208: {
1209: public void actionPerformed(ActionEvent e)
1210: {
1211: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
1212: fmInstance.setEnabled(true);
1213: setVisible(false);
1214: thread.stop();
1215: }
1216: });
1217: pack();
1218:
1219: }
1220:
1221: }
1222: public static class PasswordDialog extends JDialog
1223: {
1224: JLabel table = new JLabel(" ");
1225: JLabel status = new JLabel(" ");
1226: JLabel title = new JLabel(" ");
1227: JPanel content = new JPanel();
1228: JPanel titlePanel = new JPanel();
1229: JPanel userPanel = new JPanel();
1230: JPanel passwordPanel = new JPanel();
1231: JPanel buttonPanel = new JPanel();
1232: JTextField user = new JTextField(10);
1233: JTextField passwd = new JPasswordField(10);
1234:
1235: JButton cancel = new JButton("Cancel");
1236: JButton ok = new JButton("Ok");
1237: DBBean bean = null;
1238: Thread thread;
1239: public PasswordDialog(JFrame frame, DBBean localBean)
1240: {
1241: super(frame);
1242: setTitle("PasswordDialog");
1243: setModal(true);
1244: content = new JPanel(true);
1245: this.bean = localBean;
1246: //content.setBorder(BorderFactory.createRaisedBevelBorder());
1247: ActionListener al = new ActionListener()
1248: {
1249: public void actionPerformed(ActionEvent e)
1250: {
1251: bean.setUserAndPasswd(user.getText(), passwd.getText());
1252: setVisible(false);
1253: }
1254:
1255: };
1256: this.addWindowListener(new WindowAdapter()
1257: {
1258: public void windowClosing(WindowEvent e)
1259: {
1260: cancel.doClick();
1261: }
1262: });
1263:
1264: user.setText(localBean.user);
1265: passwd.setText(localBean.passwd);
1266: user.addActionListener(al);
1267: passwd.addActionListener(al);
1268: content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
1269: title = new JLabel("Enter user and password ");
1270: title.setHorizontalTextPosition(title.CENTER);
1271: titlePanel.add(title);
1272: buttonPanel.add(ok);
1273: buttonPanel.add(cancel);
1274: content.add(titlePanel);
1275: content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
1276: // content.add(labelPanel);
1277: content.add(new JLabel(""));
1278: content.add(userPanel);
1279: content.add(passwordPanel);
1280: content.add(buttonPanel);
1281: content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
1282: //labelPanel.add(table);
1283: userPanel.add(new JLabel("Username: "));
1284: userPanel.add(user);
1285: passwordPanel.add(new JLabel("Password: "));
1286: passwordPanel.add(passwd);
1287: passwd.setPreferredSize(user.getPreferredSize());
1288: passwd.setMinimumSize(passwd.getPreferredSize());
1289: passwd.setMaximumSize(passwd.getPreferredSize());
1290: passwd.setSize(passwd.getPreferredSize());
1291: getContentPane().add(titlePanel, "North");
1292: getContentPane().add(content, "Center");
1293: ok.addActionListener(al);
1294: cancel.addActionListener(new ActionListener()
1295: {
1296: public void actionPerformed(ActionEvent e)
1297: {
1298: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
1299: fmInstance.setEnabled(true);
1300: setVisible(false);
1301: thread.stop();
1302: }
1303:
1304: });
1305: pack();
1306:
1307: }
1308:
1309: }
1310: public void fillTable()
1311: {
1312: noDBUpdate = true;
1313: Vector tableNames = bean.getTableNames();
1314: Collections.sort(tableNames, String.CASE_INSENSITIVE_ORDER);
1315: Vector[] data = new Vector[2];
1316: data[1] = new Vector();
1317: data[1].add("Table");
1318: data[1].add("Layouts");
1319: data[1].add("select");
1320: data[1].add("create");
1321:
1322: data[0] = new Vector();
1323:
1324: for (int i = 0; i < tableNames.size(); i++)
1325: {
1326: String name = tableNames.get(i).toString();
1327: Vector layouts = new Vector();
1328: try
1329: {
1330: layouts = bean.getLayoutNames(name);
1331: } catch (SQLException e)
1332: {
1333: layouts = new Vector();
1334: }
1335: Vector dataRow = new Vector();
1336: dataRow.add(name);
1337: if (!layouts.isEmpty())
1338: dataRow.add(new JComboBox(layouts));
1339: else
1340: dataRow.add(null);
1341: dataRow.add(new TableComponent.SQLCommand("select * from "+bean.getQC()+name+bean.getQC()));
1342:
1343: data[0].add(dataRow);
1344: dataRow.add(new TableComponent.SQLCommand(""));
1345: //System.out.println(dataRow);
1346: }
1347: tC.tableModel.setDataVector(data[0], data[1]);
1348: tC.revalidate();
1349: tC.tableModel.fireTableDataChanged();
1350: noDBUpdate = false;
1351:
1352: }
1353: public Vector[] getListFromTable()
1354: {
1355: Vector[] vec = new Vector[4];
1356: vec[0] = new Vector();
1357: vec[1] = new Vector();
1358: vec[2] = new Vector();
1359: vec[3] = new Vector();
1360: int[] rows = tC.table.getSelectedRows();
1361: for (int i = 0; i < rows.length; i++)
1362: {
1363: //System.out.println(tC.tableModel.getValueAt(rows[i],1));
1364: vec[0].add(tC.tableModel.getValueAt(rows[i], 0));
1365: JComboBox box = ((JComboBox) tC.tableModel.getValueAt(rows[i], 1));
1366: String layoutName = (box != null) ? box.getSelectedItem().toString() : "";
1367: vec[1].add(layoutName);
1368: vec[2].add(tC.tableModel.getValueAt(rows[i], 2).toString());
1369: vec[3].add(tC.tableModel.getValueAt(rows[i], 3).toString());
1370:
1371: }
1372: return vec;
1373: }
1374: public void setEnabled(boolean state)
1375: {
1376: showTables.setEnabled(state);
1377: showTables1.setEnabled(state);
1378: convert.setEnabled(state);
1379: dropTables.setEnabled(state);
1380: box3.setEnabled(state);
1381: box4.setEnabled(state);
1382:
1383: }
1384: public TableComponent.SQLCommand createStatement(String table,DBBean beanDest,String layout,String query) throws SQLException
1385: {
1386: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
1387:
1388: if(beanDest.url.equals("")) beanDest.url=box4.getSelectedItem().toString();
1389: StringBuffer command = new StringBuffer(50);
1390: command.append("\n CREATE TABLE ");
1391: command.append(beanDest.getQC());
1392: command.append(Convert.convertText(table));
1393: command.append(beanDest.getQC());
1394: command.append("\n ( ");
1395: String type = null;
1396: // String query = "select * from " + bean.getQC() +table + bean.getQC();
1397: if (!layout.equals(""))
1398: {
1399: layout = " layout " + bean.getQC() + layout + bean.getQC();
1400: StringBuffer queryLayout = new StringBuffer(query);
1401: queryLayout.insert(queryLayout.indexOf(table) + table.length() + 1, " " + layout);
1402: query = queryLayout.toString();
1403: System.out.println("added layout "+ query);
1404:
1405: }
1406: Vector[] result=bean.getQueryData(query,1);
1407: for (int i = 0; i < result[1].size() - 1; ++i)
1408: {
1409: type = bean.metaData.getColumnTypeName(i + 1);
1410: // System.out.println(i+" "+result[1].get(i)+" "+type);
1411: type = (type.equals("NUMBER")) ? "INT4" : type;
1412: type = (type.equals("CONTAINER")) ? "TEXT" : type;
1413: type = type.toUpperCase();
1414: if(i==0)
1415: command.append(beanDest.getQC() + Convert.convertText((String) result[1].get(i)) + beanDest.getQC() + " " + type + ", ");
1416: else
1417: command.append(" "+beanDest.getQC() + Convert.convertText((String) result[1].get(i)) + beanDest.getQC() + " " + type + ", ");
1418: command.append("\n");
1419: }
1420: type = bean.metaData.getColumnTypeName(result[1].size());
1421: type = (type.equals("NUMBER")) ? "INT4" : type;
1422: type = (type.equals("CONTAINER")) ? "TEXT" : type;
1423: type = type.toUpperCase();
1424: command.append(" "+beanDest.getQC() + Convert.convertText((String) result[1].get(result[1].size() - 1)) + beanDest.getQC() + " " + type);
1425: command.append("\n )\n");
1426: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
1427:
1428: return new TableComponent.SQLCommand(command.toString());
1429: }
1430: static class XMLFilter extends javax.swing.filechooser.FileFilter
1431: {
1432: public boolean accept(java.io.File file)
1433: {
1434: if (file.getName().toLowerCase().endsWith(".xml") || file.isDirectory())
1435: return true;
1436: else
1437: return false;
1438: }
1439: public String getDescription()
1440: {
1441: return "Batch Convert XML File";
1442: }
1443:
1444: }
1445: public static int showDialog(String message, String title, Object[] options)
1446: {
1447: int option = JOptionPane.showOptionDialog(null, message, title, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]);
1448: return option;
1449:
1450: }
1451:
1452: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>