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