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