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