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