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