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