Annotation of FM2SQL/FM2SQL.java, revision 1.34
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: {
1.34 ! rogo 1086: ProgressDialog dialog = new ProgressDialog(fm,bean);
1.1 rogo 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;
1.34 ! rogo 1489: DBBean bean;
! 1490: public ProgressDialog(JFrame frame,DBBean bean)
1.1 rogo 1491: {
1492: super(frame);
1.34 ! rogo 1493: this.bean = bean;
! 1494:
1.1 rogo 1495: content = new JPanel(true);
1496: //content.setBorder(BorderFactory.createRaisedBevelBorder());
1497: content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
1498: title = new JLabel("Progress of conversion");
1499: title.setHorizontalTextPosition(title.CENTER);
1500: titlePanel.add(title);
1501: buttonPanel.add(cancel);
1502: // content.add(titlePanel);
1503: content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
1504: content.add(labelPanel);
1505: content.add(new JLabel(""));
1506: content.add(progress);
1507: content.add(statusPanel);
1508: content.add(buttonPanel);
1509: content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
1510: labelPanel.add(table);
1511: statusPanel.add(status);
1512: getContentPane().add(titlePanel, "North");
1513: getContentPane().add(content, "Center");
1514: this.addWindowListener(new WindowAdapter()
1515: {
1516: public void windowClosing(WindowEvent e)
1517: {
1518: cancel.doClick();
1519: }
1520: });
1521:
1522: cancel.addActionListener(new ActionListener()
1523: {
1524: public void actionPerformed(ActionEvent e)
1525: {
1526: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
1527: fmInstance.setEnabled(true);
1528: setVisible(false);
1.34 ! rogo 1529: try
! 1530: {
! 1531: ProgressDialog.this.bean.getConnection().close();
! 1532: } catch (SQLException e1)
! 1533: {
! 1534: // TODO Auto-generated catch block
! 1535: e1.printStackTrace();
! 1536: } catch (Exception e1)
! 1537: {
! 1538: // TODO Auto-generated catch block
! 1539: e1.printStackTrace();
! 1540: }
1.1 rogo 1541: thread.stop();
1542: }
1543: });
1544: pack();
1545:
1546: }
1547:
1548: }
1.26 rogo 1549: public static class DelimiterDialog extends JDialog
1550: {
1551: JLabel table = new JLabel(" ");
1552: JLabel status = new JLabel(" ");
1553: JLabel title = new JLabel(" ");
1554: JPanel content = new JPanel();
1555: JPanel titlePanel = new JPanel();
1556: JPanel delimiterPanel = new JPanel();
1557: JPanel buttonPanel = new JPanel();
1558: JTextField delimiter = new JTextField(10);
1559:
1560: JButton cancel = new JButton("Cancel");
1561: JButton ok = new JButton("Ok");
1562: Thread thread;
1563: public DelimiterDialog(JFrame frame)
1564: {
1565: super(frame);
1566: setTitle("Delimiter Editor");
1567: setModal(true);
1568: content = new JPanel(true);
1.27 rogo 1569: delimiter.setText(fmInstance.delimiter);
1.26 rogo 1570: ActionListener al = new ActionListener()
1571: {
1572: public void actionPerformed(ActionEvent e)
1573: {
1574: fmInstance.delimiter=parseDelimiter(delimiter.getText());
1575: setVisible(false);
1576: }
1577:
1578: };
1579: this.addWindowListener(new WindowAdapter()
1580: {
1581: public void windowClosing(WindowEvent e)
1582: {
1583: cancel.doClick();
1584: }
1585: });
1586:
1587: //delimiter.setText(fmInstance.delimiter);
1588: delimiter.addActionListener(al);
1589: content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
1590: title = new JLabel("Enter Delimiter ");
1591: title.setHorizontalTextPosition(title.CENTER);
1592: titlePanel.add(title);
1593: buttonPanel.add(ok);
1594: buttonPanel.add(cancel);
1595: content.add(titlePanel);
1596: content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
1597:
1598: content.add(new JLabel(""));
1599: content.add(delimiterPanel);
1600: content.add(buttonPanel);
1601: content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
1602:
1603: delimiterPanel.add(new JLabel("Delimiter: "));
1604: delimiterPanel.add(delimiter);
1605: getContentPane().add(titlePanel, "North");
1606: getContentPane().add(content, "Center");
1607: ok.addActionListener(al);
1608: cancel.addActionListener(new ActionListener()
1609: {
1610: public void actionPerformed(ActionEvent e)
1611: {
1612: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
1613: fmInstance.setEnabled(true);
1614: setVisible(false);
1615: // thread.stop();
1616: }
1617:
1618: });
1619: pack();
1620: setLocationRelativeTo(fmInstance);
1621: }
1622: public String parseDelimiter(Object o)
1623: {
1624: String str = o.toString();
1625: StringBuffer sbuff = new StringBuffer();
1626: int length = str.length();
1627: for(int i = 0;i<length;++i)
1628: {
1629:
1630: if(str.charAt(i)=='\\')
1631: {
1632: System.out.println(str.charAt(i));
1633: if (str.charAt(i + 1) == 'r')
1634: {
1635: sbuff.append("\r");
1636: }
1637: if (str.charAt(i + 1) == 't')
1638: {
1639: sbuff.append("\t");
1640: }
1641: if (str.charAt(i + 1) == 'n')
1642: {
1643: sbuff.append("\n");
1644: }
1645: if (str.charAt(i + 1) == '\\')
1646: {
1647: sbuff.append("\\");
1648: }
1649:
1650: if(i<length-1) ++i;
1651:
1652: } else sbuff.append(str.charAt(i));
1653: }
1654:
1655: return sbuff.toString();
1656: }
1657: }
1658:
1659:
1.1 rogo 1660: public static class PasswordDialog extends JDialog
1661: {
1662: JLabel table = new JLabel(" ");
1663: JLabel status = new JLabel(" ");
1664: JLabel title = new JLabel(" ");
1665: JPanel content = new JPanel();
1666: JPanel titlePanel = new JPanel();
1667: JPanel userPanel = new JPanel();
1668: JPanel passwordPanel = new JPanel();
1669: JPanel buttonPanel = new JPanel();
1670: JTextField user = new JTextField(10);
1671: JTextField passwd = new JPasswordField(10);
1672:
1673: JButton cancel = new JButton("Cancel");
1674: JButton ok = new JButton("Ok");
1675: DBBean bean = null;
1676: Thread thread;
1677: public PasswordDialog(JFrame frame, DBBean localBean)
1678: {
1679: super(frame);
1680: setTitle("PasswordDialog");
1681: setModal(true);
1682: content = new JPanel(true);
1683: this.bean = localBean;
1684: //content.setBorder(BorderFactory.createRaisedBevelBorder());
1685: ActionListener al = new ActionListener()
1686: {
1687: public void actionPerformed(ActionEvent e)
1688: {
1689: bean.setUserAndPasswd(user.getText(), passwd.getText());
1690: setVisible(false);
1691: }
1692:
1693: };
1694: this.addWindowListener(new WindowAdapter()
1695: {
1696: public void windowClosing(WindowEvent e)
1697: {
1698: cancel.doClick();
1699: }
1700: });
1701:
1702: user.setText(localBean.user);
1703: passwd.setText(localBean.passwd);
1704: user.addActionListener(al);
1705: passwd.addActionListener(al);
1706: content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
1707: title = new JLabel("Enter user and password ");
1708: title.setHorizontalTextPosition(title.CENTER);
1709: titlePanel.add(title);
1710: buttonPanel.add(ok);
1711: buttonPanel.add(cancel);
1712: content.add(titlePanel);
1713: content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
1714: // content.add(labelPanel);
1715: content.add(new JLabel(""));
1716: content.add(userPanel);
1717: content.add(passwordPanel);
1718: content.add(buttonPanel);
1719: content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
1720: //labelPanel.add(table);
1721: userPanel.add(new JLabel("Username: "));
1722: userPanel.add(user);
1723: passwordPanel.add(new JLabel("Password: "));
1724: passwordPanel.add(passwd);
1725: passwd.setPreferredSize(user.getPreferredSize());
1726: passwd.setMinimumSize(passwd.getPreferredSize());
1727: passwd.setMaximumSize(passwd.getPreferredSize());
1728: passwd.setSize(passwd.getPreferredSize());
1729: getContentPane().add(titlePanel, "North");
1730: getContentPane().add(content, "Center");
1731: ok.addActionListener(al);
1732: cancel.addActionListener(new ActionListener()
1733: {
1734: public void actionPerformed(ActionEvent e)
1735: {
1736: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
1737: fmInstance.setEnabled(true);
1738: setVisible(false);
1739: thread.stop();
1740: }
1741:
1742: });
1743: pack();
1744:
1745: }
1746:
1747: }
1748: public void fillTable()
1749: {
1750: noDBUpdate = true;
1751: Vector tableNames = bean.getTableNames();
1752: Collections.sort(tableNames, String.CASE_INSENSITIVE_ORDER);
1753: Vector[] data = new Vector[2];
1.18 rogo 1754: data[1] = new Vector(5);
1755: data[1].setSize(5);
1756: data[1].set(0," source Tablename ");
1757: data[1].set(LAYOUT_INDEX,"Layouts");
1758: data[1].set(SELECT_INDEX,"select");
1759: data[1].set(CREATE_INDEX,"create");
1760: data[1].set(ID_INDEX," id ");
1.1 rogo 1761: data[0] = new Vector();
1762: for (int i = 0; i < tableNames.size(); i++)
1763: {
1764: String name = tableNames.get(i).toString();
1765: Vector layouts = new Vector();
1.19 rogo 1766: Vector idVec = new Vector();
1767:
1.1 rogo 1768: try
1769: {
1.19 rogo 1770: bean.makeQuery("select * from"+bean.getQC()+name+bean.getQC(),1);
1.1 rogo 1771: layouts = bean.getLayoutNames(name);
1772: } catch (SQLException e)
1773: {
1774: layouts = new Vector();
1775: }
1.19 rogo 1776:
1777: idVec = bean.getColumnNames();
1778: if(idVec==null) idVec=new Vector();
1779: idVec.add(0,"");
1.18 rogo 1780: Vector dataRow = new Vector(5);
1781:
1782: dataRow.setSize(5);
1783: dataRow.set(0,name);
1784:
1785: dataRow.set(SELECT_INDEX,new TableComponent.SQLCommand("select * from " + bean.getQC() + name + bean.getQC()));
1.1 rogo 1786: if (!layouts.isEmpty())
1.18 rogo 1787: dataRow.set(LAYOUT_INDEX,new JComboBox(layouts));
1788: else
1789: dataRow.set(LAYOUT_INDEX,null);
1790:
1.17 rogo 1791:
1792: // create row
1.18 rogo 1793: dataRow.set(CREATE_INDEX,new TableComponent.SQLCommand(""));
1.17 rogo 1794: // id row
1.19 rogo 1795: dataRow.set(ID_INDEX,new TableComponent.IDComboBox(idVec));//new TableComponent.SQLCommand(""));
1.17 rogo 1796: bean.ids.add("");
1.18 rogo 1797: data[0].add(dataRow);
1798:
1.1 rogo 1799: //System.out.println(dataRow);
1800: }
1.17 rogo 1801:
1.1 rogo 1802: tC.tableModel.setDataVector(data[0], data[1]);
1.17 rogo 1803: //@TODO new sizeToFit method needed
1.18 rogo 1804: //tC.sizeToFit(450, 250);
1805: Dimension dim=listPanel.getPreferredSize();
1806: tC.sizeToFit(dim.width,dim.height);
1.1 rogo 1807: tC.revalidate();
1808: tC.tableModel.fireTableDataChanged();
1809: noDBUpdate = false;
1810:
1811: }
1812: public Vector[] getListFromTable()
1813: {
1.13 rogo 1814: Vector[] vec = new Vector[5];
1.1 rogo 1815: vec[0] = new Vector();
1816: vec[1] = new Vector();
1817: vec[2] = new Vector();
1818: vec[3] = new Vector();
1.13 rogo 1819: vec[4] = new Vector();
1.1 rogo 1820: int[] rows = tC.table.getSelectedRows();
1821: for (int i = 0; i < rows.length; i++)
1822: {
1823: //System.out.println(tC.tableModel.getValueAt(rows[i],1));
1824: vec[0].add(tC.tableModel.getValueAt(rows[i], 0));
1.18 rogo 1825: JComboBox box = ((JComboBox) tC.tableModel.getValueAt(rows[i], LAYOUT_INDEX));
1.1 rogo 1826: String layoutName = (box != null) ? box.getSelectedItem().toString() : "";
1.19 rogo 1827:
1828: String idName = ((JComboBox)tC.tableModel.getValueAt(rows[i], ID_INDEX)).getSelectedItem().toString();
1.1 rogo 1829: vec[1].add(layoutName);
1.18 rogo 1830: vec[2].add(tC.tableModel.getValueAt(rows[i],SELECT_INDEX ).toString());
1831: vec[3].add(tC.tableModel.getValueAt(rows[i], CREATE_INDEX).toString());
1.19 rogo 1832: vec[4].add(idName);
1.1 rogo 1833:
1834: }
1835: return vec;
1836: }
1837: public void setEnabled(boolean state)
1838: {
1839: showTables.setEnabled(state);
1840: showTables1.setEnabled(state);
1841: convert.setEnabled(state);
1842: dropTables.setEnabled(state);
1.17 rogo 1843: sourceURLBox.setEnabled(state);
1844: destURLBox.setEnabled(state);
1.1 rogo 1845:
1846: }
1847: public TableComponent.SQLCommand createStatement(String table,DBBean beanDest,String layout,String query) throws SQLException
1848: {
1849: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
1850:
1.17 rogo 1851: if(beanDest.url.equals("")) beanDest.url=destURLBox.getSelectedItem().toString();
1.1 rogo 1852: StringBuffer command = new StringBuffer(50);
1853: command.append("\n CREATE TABLE ");
1854: command.append(beanDest.getQC());
1855: command.append(Convert.convertText(table));
1856: command.append(beanDest.getQC());
1857: command.append("\n ( ");
1858: String type = null;
1859: // String query = "select * from " + bean.getQC() +table + bean.getQC();
1860: if (!layout.equals(""))
1861: {
1862: layout = " layout " + bean.getQC() + layout + bean.getQC();
1863: StringBuffer queryLayout = new StringBuffer(query);
1864: queryLayout.insert(queryLayout.indexOf(table) + table.length() + 1, " " + layout);
1865: query = queryLayout.toString();
1866: System.out.println("added layout "+ query);
1867:
1868: }
1869: Vector[] result=bean.getQueryData(query,1);
1870: for (int i = 0; i < result[1].size() - 1; ++i)
1871: {
1872: type = bean.metaData.getColumnTypeName(i + 1);
1873: // System.out.println(i+" "+result[1].get(i)+" "+type);
1874: type = (type.equals("NUMBER")) ? "INT4" : type;
1875: type = (type.equals("CONTAINER")) ? "TEXT" : type;
1876: type = type.toUpperCase();
1877: if(i==0)
1878: command.append(beanDest.getQC() + Convert.convertText((String) result[1].get(i)) + beanDest.getQC() + " " + type + ", ");
1879: else
1880: command.append(" "+beanDest.getQC() + Convert.convertText((String) result[1].get(i)) + beanDest.getQC() + " " + type + ", ");
1881: command.append("\n");
1882: }
1883: type = bean.metaData.getColumnTypeName(result[1].size());
1884: type = (type.equals("NUMBER")) ? "INT4" : type;
1885: type = (type.equals("CONTAINER")) ? "TEXT" : type;
1886: type = type.toUpperCase();
1887: command.append(" "+beanDest.getQC() + Convert.convertText((String) result[1].get(result[1].size() - 1)) + beanDest.getQC() + " " + type);
1888: command.append("\n )\n");
1889: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
1890:
1891: return new TableComponent.SQLCommand(command.toString());
1892: }
1893: static class XMLFilter extends javax.swing.filechooser.FileFilter
1894: {
1895: public boolean accept(java.io.File file)
1896: {
1897: if (file.getName().toLowerCase().endsWith(".xml") || file.isDirectory())
1898: return true;
1899: else
1900: return false;
1901: }
1902: public String getDescription()
1903: {
1904: return "Batch Convert XML File";
1905: }
1906:
1907: }
1908: public static int showDialog(String message, String title, Object[] options)
1909: {
1910: int option = JOptionPane.showOptionDialog(null, message, title, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]);
1911: return option;
1912:
1913: }
1914:
1915: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>