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