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