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