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