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