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