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