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