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