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