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