/* * FM2SQL.java -- Main program Filemaker to SQL Converter * Copyright (C) 2003 Robert Gordesch (rogo@mpiwg-berlin.mpg.de) * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 2 of the License, or (at your option) * any later version. Please read license.txt for the full details. A copy of * the GPL may be found at http://www.gnu.org/copyleft/lgpl.html You should * have received a copy of the GNU General Public License along with this * program; if not, write to the Free Software Foundation, Inc., 59 Temple * Place, Suite 330, Boston, MA 02111-1307 USA Created on 15.09.2003 by * rogo */ import java.awt.Cursor; import java.awt.Dimension; import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Image; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.awt.event.InputEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileWriter; import java.io.PrintStream; import java.sql.SQLException; import java.sql.Statement; import java.text.ParseException; import java.util.Collections; import java.util.Iterator; import java.util.Vector; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.ButtonGroup; import javax.swing.DefaultComboBoxModel; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JCheckBoxMenuItem; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JProgressBar; import javax.swing.JScrollBar; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.KeyStroke; import javax.swing.ListSelectionModel; import javax.swing.SwingConstants; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.TableModel; /** * *
*

FileMaker Test (JDBC Database Driver Test)

* Main class : contains the main Frame, all event handlers etc
* The Database access is made over DBBean class all other classes are just for * the visualization of the data * * @version 0.3( first stable release) * @author rogo * */ public class FM2SQL extends JFrame implements ActionListener, TableModelListener { private JMenuItem delimiterItem; private JCheckBoxMenuItem convertItem; private JCheckBoxMenuItem appendItem; private JCheckBoxMenuItem updateItem; private JCheckBoxMenuItem deleteItem; private JCheckBoxMenuItem useNormanToUnicodeMapper; int mode = -1; final static int STATUS_INDEX = 0; final static int NAME_INDEX = 1; final static int ID_INDEX = 2; final static int SELECT_INDEX = 3; final static int CREATE_INDEX = 4; final static int LAYOUT_INDEX = 5; /** * The database Bean instance. * */ DBBean bean; /** * The database destination Bean instance. * */ DBBean destBean; /** * tList - Tablenames to choose from */ JList tList = new JList(new String[] {"no database", "connection", ""}); JList tListDest = new JList(new String[] {"no database connection", "", ""}); /** * sourceUrl - Database URL ComboBox */ JComboBox sourceURLBox; /** * destUrlBox - Database URL ComboBox */ JComboBox destURLBox; TableComponent table, tC; Vector tables = new Vector(); Vector layouts = new Vector(); JPanel listPanel; JPanel topPanel, topPanel2, contentPanel; JScrollPane paneDest; FM2SQL fm = this; boolean noDBUpdate = false; boolean noUserUpdate = false; int id = 0; static boolean debug = false; /** * The result window used for query results */ MultiResultWindow window; /** * The result window used for query results */ MultiResultWindow windowDest; static FM2SQL fmInstance; static String url = "jdbc:fmpro:http://141.14.237.42"; JButton showTables = new JButton(), showTables1 = new JButton(); JButton convert = new JButton(); JButton dropTables = new JButton(); int oldWidth = 0, oldHeight = 0; boolean resize = true; static FileWriter logFile; String delimiter = ""; Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); JFileChooser configExportFileChooser; JFileChooser configImportFileChooser; private JCheckBoxMenuItem synchronizeItem; /** * tries to connect to database specified in url-Variable. initializes all GUI * components, then fails throws an exception * */ public FM2SQL() throws Exception { initializeGUI(); } public void initializeGUI() throws Exception { Image local = getToolkit().getImage(FM2SQL.class.getResource("icons/fm.jpg")); if (local != null) ; setIconImage(local); bean = new DBBean(); destBean = new DBBean(); sourceURLBox = new JComboBox(new String[] {"jdbc:fmpro:http://141.14.237.74:8050", "jdbc:fmpro:http://localhost", "jdbc:postgresql://foxridge/test", "jdbc:sequelink://r583-3:2399"}); sourceURLBox.setEditable(true); sourceURLBox.setFont(new Font("Times New Roman", Font.PLAIN, 14)); destURLBox = new JComboBox(new String[] {"jdbc:postgresql://foxridge/test", "jdbc:postgresql://erebos/test1"}); destURLBox.setEditable(true); destURLBox.addActionListener(this); destURLBox.setFont(new Font("Times New Roman", Font.PLAIN, 14)); table = new TableComponent(); //box = new JComboBox(tables); // box.addActionListener(this); // box2.addActionListener(this); sourceURLBox.addActionListener(this); contentPanel = new JPanel(); contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS)); sourceURLBox.setMinimumSize(new Dimension(450, 25)); sourceURLBox.setMaximumSize(new Dimension(550, 25)); sourceURLBox.setPreferredSize(new Dimension(450, 25)); destURLBox.setMinimumSize(new Dimension(450, 25)); destURLBox.setMaximumSize(new Dimension(550, 25)); destURLBox.setPreferredSize(new Dimension(450, 25)); paneDest = new JScrollPane(tListDest); // tListDest.setPreferredSize(paneDest.getPreferredSize()); // paneDest.setPreferredSize(new Dimension(350, 365)); Dimension dim = paneDest.getPreferredSize(); paneDest.setMinimumSize(dim); //paneDest.setMaximumSize(new Dimension(dim.width + 50, dim.height + 50)); tC = new TableComponent(); tC.sizeToFit(450, 250); tC.tableModel.addTableModelListener(this); JPanel destPanel = new JPanel(); destPanel.setLayout(new java.awt.GridBagLayout()); listPanel = new JPanel(); listPanel.setLayout(new java.awt.GridBagLayout()); java.awt.GridBagConstraints gbc = new java.awt.GridBagConstraints(); JScrollPane pane = new JScrollPane(tList); tC.tableScroller.setPreferredSize(new Dimension(450, 365)); //tC.table.revalidate(); tC.tableScroller.setMinimumSize(new Dimension(450, 250)); // tC.tableScroller.setMaximumSize(tC.tableScroller.getPreferredSize()); topPanel = new JPanel(); topPanel.setLayout(new GridBagLayout()); topPanel2 = new JPanel(); topPanel2.setLayout(new GridBagLayout()); gbc.gridx = 0; gbc.gridy = 0; gbc.weightx = 0.1; gbc.weighty = 0.1; gbc.gridwidth = 1; gbc.gridheight = 1; gbc.insets = new Insets(2, 2, 5, 5); gbc.ipadx = 1; gbc.ipady = 1; gbc.anchor = GridBagConstraints.WEST; listPanel.add(topPanel, gbc); destPanel.add(topPanel2, gbc); topPanel.add(new JLabel("Choose src database: ", JLabel.CENTER), gbc); topPanel2.add(new JLabel("Choose dest database : ", JLabel.CENTER), gbc); gbc.anchor = GridBagConstraints.NORTHWEST; gbc.gridy = 1; topPanel.add(sourceURLBox, gbc); topPanel2.add(destURLBox, gbc); //gbc.gridx=GridBagConstraints.RELATIVE; //dataBasePanel.add(new JLabel(" select Tables to Convert ", JLabel.LEFT)); gbc.gridy = 1; gbc.anchor = GridBagConstraints.SOUTHWEST; listPanel.add(new JLabel(" select Tables to Convert ", JLabel.LEFT), gbc); destPanel.add(new JLabel(" Tables in database ", JLabel.LEFT), gbc); // gbc.anchor = GridBagConstraints.WEST; gbc.gridy = 2; gbc.gridx = 0; // gbc.weightx = 0.0; //dataBasePanel.add(tC); gbc.anchor = GridBagConstraints.NORTHWEST; gbc.gridheight = 1; gbc.fill = GridBagConstraints.BOTH; listPanel.add(tC.tableScroller, gbc); // gbc.fill = GridBagConstraints.VERTICAL; destPanel.add(paneDest, gbc); showTables1 = new JButton("show Tables"); showTables1.setActionCommand("show Tables source"); // gbc.anchor = GridBagConstraints.NORTH; // gbc.weightx = 0.0; gbc.fill = GridBagConstraints.NONE; gbc.gridheight = 1; gbc.gridx = 0; gbc.gridy = 2; // topPanel.add(showTables1, gbc); JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS)); buttonPanel.setMinimumSize(new Dimension(380, 30)); convert = new JButton("Convert Tables"); showTables = new JButton("show Tables"); dropTables = new JButton("drop Tables"); // System.out.println(convert.getPreferredSize()); showTables.setMinimumSize(convert.getPreferredSize()); dropTables.setMinimumSize(convert.getPreferredSize()); showTables.setMaximumSize(convert.getPreferredSize()); dropTables.setMaximumSize(convert.getPreferredSize()); showTables.setPreferredSize(convert.getPreferredSize()); dropTables.setPreferredSize(convert.getPreferredSize()); showTables.addActionListener(fm); showTables1.addActionListener(fm); buttonPanel.add(showTables); buttonPanel.add(convert); convert.addActionListener(fm); dropTables.addActionListener(fm); buttonPanel.add(dropTables); JPanel buttonPanelSrc = new JPanel(); buttonPanelSrc.setLayout(new BoxLayout(buttonPanelSrc, BoxLayout.X_AXIS)); buttonPanelSrc.setMinimumSize(new Dimension(200, 30)); buttonPanelSrc.add(showTables1); topPanel.add(buttonPanelSrc, gbc); topPanel2.add(buttonPanel, gbc); // gbc.anchor = GridBagConstraints.WEST; // gbc.gridy = 1; // gbc.gridx = 2; // gbc.weightx = 0.2; // gbc.gridx = 3; // gbc.anchor = GridBagConstraints.NORTHWEST; // gbc.gridy = 1; // gbc.weightx = 1.0; //listPanel.add(buttonPanel, gbc); JSplitPane splitter = new JSplitPane(); splitter.setTopComponent(listPanel); splitter.setBottomComponent(destPanel); // contentPanel.add(dataBasePanel); // contentPanel.add(listPanel); listPanel.setMaximumSize(new Dimension(660, 750)); listPanel.setMinimumSize(new Dimension(660, 250)); listPanel.setPreferredSize(new Dimension(480, 500)); paneDest.setPreferredSize(new Dimension(250, 285)); getContentPane().add(splitter, "Center"); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { bean.closeAllConnections(); destBean.closeAllConnections(); System.exit(0); } }); addComponentListener(new ComponentAdapter() { public void componentResized(ComponentEvent e) { if (oldWidth != getWidth() || oldHeight != getHeight()) { //table.sizeToFit(getWidth(), getHeight()); Dimension dim = table.table.getPreferredSize(); int size = contentPanel.getPreferredSize().height + new JScrollBar().getPreferredSize().height + new JMenuBar().getPreferredSize().height + 10; table.tableScroller.setPreferredSize(new Dimension(getWidth() - 15, getHeight() - size)); Dimension d2 = table.tableScroller.getPreferredSize(); oldWidth = getWidth(); oldHeight = getHeight(); table.setPreferredSize(new Dimension(d2.width + 15, d2.height + 5)); table.table.revalidate(); table.tableScroller.revalidate(); table.revalidate(); if (getHeight() > table.table.getPreferredSize().height + (2 * size)) setSize(getWidth(), table.table.getPreferredSize().height + 2 * size); // System.out.println("size" + size); } // listPanel.setMaximumSize(new Dimension(getPreferredSize().width - 5, // 550)); // listPanel.setMinimumSize(new Dimension(getPreferredSize().width - 5, // 200)); // listPanel.setPreferredSize(new Dimension(getPreferredSize().width - // 5, 370)); tC.tableScroller.revalidate(); Dimension dim = getSize(); tC.tableScroller.setMinimumSize(new Dimension(dim.width - 400, dim.height - topPanel.getPreferredSize().height - 100)); tC.tableScroller.setMaximumSize(getSize()); tC.tableScroller.setPreferredSize(tC.tableScroller.getMinimumSize()); paneDest.setMinimumSize(new Dimension(400, dim.height - topPanel2.getPreferredSize().height - 100)); paneDest.setMaximumSize(tC.tableScroller.getMaximumSize()); paneDest.setPreferredSize(new Dimension(400, dim.height - topPanel2.getPreferredSize().height - 100)); paneDest.validate(); // tC.tableScroller.setPreferredSize(getSize()); // @TODO new sizeToFit method for listPanel table!!! tC.sizeToFit(getWidth(), getHeight()); ((JPanel) getContentPane()).revalidate(); repaint(); setTitle("Filemaker 2 SQL Conversion Tool "); } }); setMenu(); //setSize(800, 600); pack(); setLocation((screenSize.width - getWidth()) / 2, (screenSize.height - getHeight()) / 2); //setVisible(true); validate(); // repaint(); } /** * */ public static void main(String[] args) { try { System.setErr(System.out); // Properties prop = System.getProperties(); // Enumeration enum= prop.keys(); // while(enum.hasMoreElements()) //System.out.println(enum.nextElement()); if (System.getProperty("os.name").startsWith("W")) // javax.swing.UIManager.setLookAndFeel( // new com.sun.java.swing.plaf.windows.WindowsLookAndFeel()); javax.swing.UIManager.put("Table.focusCellHighlightBorder", new javax.swing.border.LineBorder(java.awt.Color.black)); javax.swing.UIManager.put("Table.focusCellBackground", new java.awt.Color(227, 227, 227, 127)); fmInstance = new FM2SQL(); fmInstance.table.tableModel.addTableModelListener(fmInstance); fmInstance.setVisible(true); /* * if (!new File("./html").exists()) new File("./html").mkdirs(); logFile = * new FileWriter("./html/index.html"); openLog(); */ } catch (Exception e) { JOptionPane pane = new JOptionPane(e.getMessage() + " \n URL: " + url, JOptionPane.ERROR_MESSAGE); JDialog dialog = pane.createDialog(null, " Exception occured while connecting"); e.printStackTrace(); dialog.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); dialog.addComponentListener(new ComponentAdapter() { public void componentHidden(ComponentEvent e) { System.exit(0); } }); dialog.show(); } } public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if (debug) System.out.println("command " + command); if (command == "comboBoxEdited") { Object src = e.getSource(); if (src == sourceURLBox) { if (debug) System.out.println("hey" + sourceURLBox.getSelectedItem()); Object insObj = sourceURLBox.getSelectedItem(); ((DefaultComboBoxModel) sourceURLBox.getModel()).removeElement(insObj); ((DefaultComboBoxModel) sourceURLBox.getModel()).insertElementAt(insObj, 0); sourceURLBox.setSelectedItem(insObj); } else if (src == destURLBox) { if (debug) System.out.println("hey" + destURLBox.getSelectedItem()); //((DefaultComboBoxModel) // box4.getModel()).insertElementAt(box4.getSelectedItem(), 0); try { String selected = (String) destURLBox.getSelectedItem(); destBean.setConnection(selected); Vector catalogs = destBean.getCatalogs(); Vector urls = new Vector(); for (int i = 0; i < catalogs.size(); ++i) { urls.add(destBean.url.substring(0, destBean.url.lastIndexOf("/") + 1) + catalogs.get(i)); } destURLBox.setModel(new DefaultComboBoxModel(urls)); destURLBox.setSelectedItem(selected); } catch (Exception e5) { } } } if (command == "comboBoxChanged") { try { //System.out.println("hallo " + (e.getSource() == box3)); Object src = e.getSource(); if (src == sourceURLBox && !noUserUpdate) { Thread thread = new Thread() { public void run() { try { PasswordDialog dialog = new PasswordDialog(fmInstance, bean); dialog.setLocationRelativeTo(sourceURLBox); dialog.thread = Thread.currentThread(); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); fmInstance.setEnabled(false); dialog.setVisible(true); String url = sourceURLBox.getSelectedItem().toString(); bean.url = (url != null) ? url : bean.url; bean.connection = null; bean.getConnection(); tables = bean.getTableNames(); fillTable(); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); fmInstance.setEnabled(true); // System.out.println("hallo" + tables + " "); } catch (Exception e5) { ByteArrayOutputStream b = new ByteArrayOutputStream(); PrintStream stream = new PrintStream(b); e5.printStackTrace(stream); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); fmInstance.setEnabled(true); Vector header = new Vector(); header.add("no database"); header.add("connection"); Vector rows = new Vector(); //rows.add(header); noDBUpdate = true; tC.tableModel.setDataVector(rows, header); tC.tableModel.setRowCount(20); tC.revalidate(); tC.tableModel.fireTableDataChanged(); noDBUpdate = false; showErrorDialog(b.toString(), "Error occured !"); } } }; thread.start(); } else if (src == destURLBox && !noUserUpdate) { Thread thread = new Thread() { public void run() { try { PasswordDialog dialog = new PasswordDialog(fmInstance, destBean); dialog.setLocationRelativeTo(destURLBox); dialog.thread = Thread.currentThread(); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); fmInstance.setEnabled(false); dialog.setVisible(true); destBean.setConnection((String) destURLBox.getSelectedItem()); DefaultListModel model = new DefaultListModel(); Vector tables = destBean.getTableNames(); for (int j = 0; j < tables.size(); ++j) model.addElement(tables.get(j)); // System.out.println("hallo" + tables + " "); tListDest.setModel(model); // System.out.println("hallo" + tables + " "); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); fmInstance.setEnabled(true); } catch (Exception e5) { ByteArrayOutputStream b = new ByteArrayOutputStream(); PrintStream stream = new PrintStream(b); e5.printStackTrace(stream); fmInstance.setEnabled(true); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); DefaultListModel model = new DefaultListModel(); model.addElement("no database connection"); tListDest.setModel(model); showErrorDialog(b.toString(), "Error occured !"); } } }; thread.start(); } setTitle("Filemaker 2 SQL Conversion Tool "); // pack(); } catch (Exception e4) { ByteArrayOutputStream b = new ByteArrayOutputStream(); PrintStream stream = new PrintStream(b); e4.printStackTrace(stream); showErrorDialog(b.toString(), "Open of table failed"); } } if (command == "show Driver features") { ResultWindow result = new ResultWindow(this); try { Vector[] vecs = bean.TestDB(bean.getConnection().getMetaData()); result.updateResult(vecs[0], vecs[1]); // result.pack(); result.title = "Database features"; result.setVisible(true); String name = result.writeResult(); } catch (Exception e2) { } } if (command.equals("Delimiter")) { new DelimiterDialog(fmInstance).setVisible(true); //delimiter = JOptionPane.showInputDialog(fmInstance,"Enter delimiter // String",delimiter); } if (command == "Convert Mode") { System.out.println("Convert Mode selected"); convert.setText("Convert Tables"); convert.setActionCommand("Convert Tables"); convert.setToolTipText("Normal table conversion existing table will be deleted"); mode = Convert.DataBase.CONVERT_MODE; } if (command == "Append Mode") { System.out.println("Append Mode selected"); convert.setText("Append Tables"); convert.setActionCommand("Append Tables"); convert.setToolTipText("Appends data to an existing table"); mode = Convert.DataBase.APPEND_MODE; } if (command == "Update Mode") { System.out.println("Update Mode selected"); convert.setText("Update Tables"); convert.setActionCommand("Update Tables"); convert.setToolTipText("Updates data that has been changed in source"); mode = Convert.DataBase.UPDATE_MODE; } if (command == "Delete Mode") { System.out.println("Delete Mode selected"); convert.setText("Delete Tables"); convert.setActionCommand("Delete Tables"); convert.setToolTipText("Deletes data that has been deleted in source"); mode = Convert.DataBase.DELETE_MODE; } if (command == "Synchronize Mode") { System.out.println("Synchronize Mode selected"); convert.setText("Synchronize Tables"); convert.setActionCommand("Synchronize Tables"); convert.setToolTipText("Synchronize data with destination table"); mode = Convert.DataBase.SYNCHRONIZE_MODE; } if (command.equals("use NormanToUnicodeMapper")) { if (bean != null) bean.setUseNormanToUnicodeMapper(useNormanToUnicodeMapper.isSelected()); } //writing config if (command.equals("save XML Config")) { if (configExportFileChooser == null) { configExportFileChooser = new JFileChooser(); configExportFileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); configExportFileChooser.setFileFilter(new XMLFilter()); configExportFileChooser.setDialogType(JFileChooser.SAVE_DIALOG); configExportFileChooser.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e2) { System.out.println(e2.getActionCommand()); if (!e2.getActionCommand().toString().equals("ApproveSelection")) return; Thread thread = new Thread() { public void run() { File configFile = configExportFileChooser.getSelectedFile(); writeConfig(configFile.toString()); } }; thread.start(); } }); } configExportFileChooser.rescanCurrentDirectory(); configExportFileChooser.showDialog(fmInstance, " Save "); } if (command.equals("open XML Config")) { if (configImportFileChooser == null) { configImportFileChooser = new JFileChooser(); configImportFileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); configImportFileChooser.setFileFilter(new XMLFilter()); configImportFileChooser.setDialogType(JFileChooser.OPEN_DIALOG); configImportFileChooser.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e2) { System.out.println(e2.getActionCommand()); if (!e2.getActionCommand().toString().equals("ApproveSelection")) return; Thread thread = new Thread() { public void run() { File configFile = configImportFileChooser.getSelectedFile(); readXMLConfig(configFile.toString()); } }; thread.start(); } }); } configImportFileChooser.rescanCurrentDirectory(); configImportFileChooser.showDialog(fmInstance, " Open "); } if (command.equals("Convert Tables") || command.equals("Append Tables")) { Thread thread = new Thread() { public void run() { setEnabled(false); convert(); setEnabled(true); } }; thread.start(); } if (command.equals("Update Tables")) { Thread thread = new Thread() { public void run() { setEnabled(false); update(); setEnabled(true); } }; thread.start(); } if (command.equals("Delete Tables")) { Thread thread = new Thread() { public void run() { setEnabled(false); delete(); setEnabled(true); } }; thread.start(); } if (command.equals("Synchronize Tables")) { Thread thread = new Thread() { public void run() { setEnabled(false); synchronize(); setEnabled(true); } }; thread.start(); } if (command.equals("show Tables")) { Thread thread = new Thread() { public void run() { fmInstance.setEnabled(false); boolean visible = showTable(1); window.validate(); window.setVisible(visible); fmInstance.setEnabled(true); } }; thread.start(); // System.out.println("hello"); } if (command.equals("show Tables source")) { Thread thread = new Thread() { public void run() { fmInstance.setEnabled(false); boolean visible = showTable(0); window.validate(); window.setVisible(visible); fmInstance.setEnabled(true); } }; thread.start(); // System.out.println("hello"+thread); } if (command.equals("drop Tables")) { Thread thread = new Thread() { public void run() { dropTable(); } }; thread.start(); } if (command.equals("Quit")) { bean.closeAllConnections(); destBean.closeAllConnections(); fmInstance.dispose(); System.exit(0); } } /** * */ protected void synchronize() { Vector vectors[] = getListFromTable(); Convert.user = bean.user; Convert.passwd = bean.passwd; Convert.userDest = destBean.user; Convert.passwdDest = destBean.passwd; try { fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); fmInstance.setEnabled(false); // TODO indexList vector weiter reichen Convert.synchronize(bean.url, destURLBox.getSelectedItem().toString(), vectors[0], vectors[1], vectors[2], vectors[3], vectors[4], mode, delimiter, new Vector()); destBean.setConnection((String) destURLBox.getSelectedItem()); DefaultListModel model = new DefaultListModel(); tables = destBean.getTableNames(); for (int j = 0; j < tables.size(); ++j) model.addElement(tables.get(j)); if (debug) System.out.println("hallo" + tables + " "); tListDest.setModel(model); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } catch (Exception e4) { ByteArrayOutputStream b = new ByteArrayOutputStream(); PrintStream stream = new PrintStream(b); e4.printStackTrace(stream); showErrorDialog(b.toString(), "Synchronize of table failed"); fmInstance.setEnabled(true); } } /** * Updates the content of source to destination and makes new table if * necessary */ public void update() { Vector vectors[] = getListFromTable(); Convert.user = bean.user; Convert.passwd = bean.passwd; Convert.userDest = destBean.user; Convert.passwdDest = destBean.passwd; try { fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); fmInstance.setEnabled(false); Convert.update(bean.url, destURLBox.getSelectedItem().toString(), vectors[0], vectors[1], vectors[2], vectors[3], vectors[4], mode); destBean.setConnection((String) destURLBox.getSelectedItem()); DefaultListModel model = new DefaultListModel(); tables = destBean.getTableNames(); for (int j = 0; j < tables.size(); ++j) model.addElement(tables.get(j)); if (debug) System.out.println("hallo" + tables + " "); tListDest.setModel(model); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } catch (Exception e4) { ByteArrayOutputStream b = new ByteArrayOutputStream(); PrintStream stream = new PrintStream(b); e4.printStackTrace(stream); showErrorDialog(b.toString(), "Update of table failed"); fmInstance.setEnabled(true); } } public void delete() { Vector vectors[] = getListFromTable(); Convert.user = bean.user; Convert.passwd = bean.passwd; Convert.userDest = destBean.user; Convert.passwdDest = destBean.passwd; try { fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); fmInstance.setEnabled(false); Convert.delete(bean.url, destURLBox.getSelectedItem().toString(), vectors[0], vectors[1], vectors[2], vectors[3], vectors[4], mode); destBean.setConnection((String) destURLBox.getSelectedItem()); DefaultListModel model = new DefaultListModel(); tables = destBean.getTableNames(); for (int j = 0; j < tables.size(); ++j) model.addElement(tables.get(j)); if (debug) System.out.println("hallo" + tables + " "); tListDest.setModel(model); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } catch (Exception e4) { ByteArrayOutputStream b = new ByteArrayOutputStream(); PrintStream stream = new PrintStream(b); e4.printStackTrace(stream); showErrorDialog(b.toString(), "Delete of table failed"); fmInstance.setEnabled(true); } } /** * Copys the content of source to destination and makes new table if necessary */ public void convert() { Vector vectors[] = getListFromTable(); Convert.user = bean.user; Convert.passwd = bean.passwd; Convert.userDest = destBean.user; Convert.passwdDest = destBean.passwd; try { fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); fmInstance.setEnabled(false); Convert.convert(bean.url, destURLBox.getSelectedItem().toString(), vectors[0], vectors[1], vectors[2], vectors[3], vectors[4], mode, delimiter); destBean.setConnection((String) destURLBox.getSelectedItem()); DefaultListModel model = new DefaultListModel(); tables = destBean.getTableNames(); for (int j = 0; j < tables.size(); ++j) model.addElement(tables.get(j)); if (debug) System.out.println("hallo" + tables + " "); tListDest.setModel(model); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } catch (Exception e4) { ByteArrayOutputStream b = new ByteArrayOutputStream(); PrintStream stream = new PrintStream(b); e4.printStackTrace(stream); showErrorDialog(b.toString(), "Conversion of table failed"); fmInstance.setEnabled(true); } } public void writeConfig(String file) { fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); fmInstance.setEnabled(false); Vector vectors[] = getListFromTable(); if (convertItem.isSelected()) mode = Convert.DataBase.CONVERT_MODE; else if (appendItem.isSelected()) mode = Convert.DataBase.APPEND_MODE; else if (updateItem.isSelected()) mode = Convert.DataBase.UPDATE_MODE; else if (deleteItem.isSelected()) mode = Convert.DataBase.DELETE_MODE; else if (synchronizeItem.isSelected()) mode = Convert.DataBase.SYNCHRONIZE_MODE; // TODO add id vector in table and write it out Convert.DataBase source = new Convert.DataBase(bean, vectors[0], vectors[1], vectors[2], vectors[3], vectors[4], mode); Convert.DataBase destination = new Convert.DataBase(destBean, new Vector(), new Vector(), new Vector(), new Vector(), new Vector(), -1); source.delimiter = delimiter; source.useNormanToUnicodeMapper = useNormanToUnicodeMapper.isSelected(); try { Convert.writeConfig(file, source, destination); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); fmInstance.setEnabled(true); } catch (Exception e) { fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); fmInstance.setEnabled(true); ByteArrayOutputStream b = new ByteArrayOutputStream(); PrintStream stream = new PrintStream(b); e.printStackTrace(stream); showErrorDialog(b.toString(), "Error while writing xml config !"); } } public void readXMLConfig(String file) { try { fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); fmInstance.setEnabled(false); Vector databases = Convert.getXMLConfig(file); Convert.DataBase destBase = (Convert.DataBase) databases.lastElement(); //destBase.bean.getConnection(); noUserUpdate = true; destBean = destBase.bean; Object destObj = destBean.url; ((DefaultComboBoxModel) destURLBox.getModel()).removeElement(destObj); ((DefaultComboBoxModel) destURLBox.getModel()).insertElementAt(destObj, 0); destURLBox.setSelectedItem(destObj); databases.remove(destBase); for (Iterator iter = databases.iterator(); iter.hasNext();) { Convert.DataBase database = (Convert.DataBase) iter.next(); if (database.mode == Convert.DataBase.CONVERT_MODE) { convertItem.doClick(); } else if (database.mode == Convert.DataBase.APPEND_MODE) { appendItem.doClick(); } else if (database.mode == Convert.DataBase.UPDATE_MODE) { updateItem.doClick(); } else if (database.mode == Convert.DataBase.DELETE_MODE) { deleteItem.doClick(); } else if (database.mode == Convert.DataBase.SYNCHRONIZE_MODE) { synchronizeItem.doClick(); } delimiter = database.delimiter; database.bean.getConnection(); bean = database.bean; if (bean.isUseNormanToUnicodeMapper()) useNormanToUnicodeMapper.setSelected(true); Object obj = bean.url; ((DefaultComboBoxModel) sourceURLBox.getModel()).removeElement(obj); ((DefaultComboBoxModel) sourceURLBox.getModel()).insertElementAt(obj, 0); sourceURLBox.setSelectedItem(obj); fillTable(); Vector tables = database.bean.getTableNames(); Collections.sort(tables, String.CASE_INSENSITIVE_ORDER); int[] indices = new int[database.tables.size()]; for (int i = 0; i < database.tables.size(); ++i) { String table = (String) database.tables.get(i); int index = tables.indexOf(table); if (index < 0) throw new RuntimeException("Error table \"" + table + "\" does no longer exist\n at server " + bean.url + "\n or you mispelled the tablename."); noDBUpdate = true; tC.tableModel.setValueAt(new TableComponent.SQLCommand(database.selects.get(i).toString()), index, SELECT_INDEX); String create = database.creates.get(i).toString(); tC.tableModel.setValueAt(new TableComponent.SQLCommand(create.equals("") ? create : " " + create), index, CREATE_INDEX); // tC.tableModel.setValueAt(new // TableComponent.SQLCommand(bean.ids.get(i).toString()),index,ID_INDEX); Object comboBox = tC.tableModel.getValueAt(index, LAYOUT_INDEX); Object idcomboBox = tC.tableModel.getValueAt(index, ID_INDEX); indices[i] = index; if (comboBox != null) { String layout = database.layouts.get(i).toString(); ((JComboBox) comboBox).setSelectedItem(layout); if (layout != "") { bean.makeQuery("select * from" + bean.getQC() + table + bean.getQC() + " layout " + bean.getQC() + layout + bean.getQC(), 1); Vector idVec = bean.getColumnNames(); if (idVec == null) idVec = new Vector(); idVec.add(0, ""); ((JComboBox) idcomboBox).setModel(new DefaultComboBoxModel(idVec)); } } if (idcomboBox != null) ((JComboBox) idcomboBox).setSelectedItem(bean.ids.get(i)); tC.tableModel.fireTableDataChanged(); noDBUpdate = false; noUserUpdate = false; } // add Selections ListSelectionModel lm = tC.table.getSelectionModel(); for (int i = 0; i < indices.length; ++i) { lm.addSelectionInterval(indices[i], indices[i]); tC.tableModel.setValueAt(Boolean.TRUE, indices[i], STATUS_INDEX); } destBean.getConnection(); DefaultListModel model = new DefaultListModel(); tables = destBean.getTableNames(); for (int j = 0; j < tables.size(); ++j) model.addElement(tables.get(j)); // System.out.println("hallo" + tables + " "); tListDest.setModel(model); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); fmInstance.setEnabled(true); } } catch (Exception e) { noUserUpdate = false; noDBUpdate = false; fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); fmInstance.setEnabled(true); ByteArrayOutputStream b = new ByteArrayOutputStream(); PrintStream stream = new PrintStream(b); e.printStackTrace(stream); showErrorDialog(b.toString(), "Error while reading xml config !"); } } public boolean showTable(int list) { ProgressDialog dialog = new ProgressDialog(fm, bean); dialog.setTitle("Preparing tables to be displayed"); dialog.thread = Thread.currentThread(); dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); String query = new String(); Object[] objs = tListDest.getSelectedValues(); Vector[] vectors = (list == 0) ? getListFromTable() : null; Vector tables = (list == 0) ? vectors[0] : new Vector(); if (list > 0) for (int i = 0; i < objs.length; ++i) { if (debug) System.out.println(objs[i]); tables.add(objs[i]); } if (window != null) window.dispose(); if (windowDest != null) windowDest.dispose(); window = new MultiResultWindow(fm); if (list > 0) { windowDest = new MultiResultWindow(fm); window = windowDest; } dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x + (FM2SQL.fmInstance.getWidth() - 500) / 2, FM2SQL.fmInstance.getLocationOnScreen().y + (FM2SQL.fmInstance.getHeight() - 250) / 2); dialog.setSize(500, 250); if (!tables.isEmpty()) dialog.show(); dialog.title.setText("Preparing tables to be diplayed"); for (int i = 0; i < tables.size(); ++i) { dialog.table.setText("Getting table " + tables.get(i)); dialog.status.setText("Table " + (i + 1) + " of " + tables.size()); if (list == 0) query = "select * from " + bean.getQC() + tables.get(i).toString() + bean.getQC(); else query = "select * from " + destBean.getQC() + tables.get(i).toString() + destBean.getQC(); if (list == 0) query = vectors[2].get(i).toString(); if (list == 0 && vectors[1].get(i) != null) if (vectors[1].get(i).toString() != "") { String layout = " layout " + bean.getQC() + vectors[1].get(i).toString() + bean.getQC(); String name = tables.get(i).toString(); StringBuffer queryLayout = new StringBuffer(query); queryLayout.insert(queryLayout.indexOf(name) + name.length() + 1, " " + layout); query = queryLayout.toString(); } if (debug) showErrorDialog("query in show tables is " + query, "Hello"); window.title = " Table ;-) " + (String) tables.get(i); // break; // } else // window.title = "Error! - No valid tablename found"; try { if ((query.toLowerCase().indexOf("insert") >= 0) || (query.toLowerCase().indexOf("delete") >= 0) || (query.toLowerCase().indexOf("alter") >= 0) || (query.toLowerCase().indexOf("update") >= 0)) { Statement stm = (list > 0) ? destBean.getConnection().createStatement() : bean.getConnection().createStatement(); stm.executeUpdate(query); Vector vec = new Vector(); Vector vec2 = new Vector(); Vector vec3 = new Vector(); vec2.add(query); vec3.add(vec2); vec.add("Insert, update, etc done! No results available"); // vec.add("no Results were produced"); window.updateResult(vec3, vec); //window.pack(); // window.setVisible(true); } else { Vector[] vecs = (list > 0) ? destBean.getQueryData(query, dialog, 50) : bean.getQueryData(query, dialog, 50); if (vecs[1].isEmpty()) throw new Exception("Wrong columnname or Empty Layout"); window.updateResult(vecs[0], vecs[1]); //window.pack(); //String name = window.writeResult(); //appendLog(window.title, name); } //window.setVisible(true); } catch (Exception e) { System.out.println("Exception occured"); e.printStackTrace(); Vector vec = new Vector(); Vector vec2 = new Vector(); Vector vec3 = new Vector(); vec2.add(e.getMessage()); vec3.add(vec2); vec.add("Exception occured! No results available"); //vec.add("no Results were produced"); window.updateResult(vec3, vec); //window.pack(); // window.setVisible(true); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } } // to for window.pack(); window.setSize(700, 600); window.oldTabCount = 10000; dialog.dispose(); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); return !tables.isEmpty(); } public void dropTable() { String query = new String(); Object[] objs = tListDest.getSelectedValues(); Vector tables = new Vector(); for (int i = 0; i < objs.length; ++i) { System.out.println(objs[i]); tables.add(objs[i]); } for (int i = 0; i < tables.size(); ++i) { query = "drop table " + destBean.getQC() + tables.get(i) + destBean.getQC(); try { Statement stm = destBean.getConnection().createStatement(); stm.executeUpdate(query); } catch (Exception e) { ByteArrayOutputStream b = new ByteArrayOutputStream(); PrintStream stream = new PrintStream(b); e.printStackTrace(stream); showErrorDialog(b.toString(), "Open of table failed"); } } // to for try { destBean.setConnection((String) destURLBox.getSelectedItem()); DefaultListModel model = new DefaultListModel(); tables = destBean.getTableNames(); for (int j = 0; j < tables.size(); ++j) model.addElement(tables.get(j)); System.out.println("hallo" + tables + " "); tListDest.setModel(model); } catch (Exception e4) { } } /** * invoked then the user changes the table or the tableModel changes */ public void tableChanged(TableModelEvent e) { // if (e.getType() == e.INSERT) //System.out.println("Insert done"); // if (e.getType() == e.UPDATE) // System.out.println("Update done"); //if (e.getType() == e.DELETE) // System.out.println("Delete done"); if (e.getType() == TableModelEvent.UPDATE && !noDBUpdate) { int row = e.getFirstRow(), col = e.getColumn(); System.out.println("Got in " + row + " " + col); TableModel model = (TableModel) e.getSource(); String columnName = model.getColumnName(col); Object test = model.getValueAt(row, col); String idVal = (test == null) ? "" : test.toString(); String value = (test == null) ? "" : test.toString(); ; System.out.println("Got in " + columnName + " " + idVal); try { if (columnName.equals("select") || columnName.equals("Layouts")) { String table = model.getValueAt(row, NAME_INDEX).toString(); String layout = (model.getValueAt(row, LAYOUT_INDEX) != null) ? ((JComboBox) model.getValueAt(row, LAYOUT_INDEX)).getSelectedItem().toString() : ""; String query = model.getValueAt(row, SELECT_INDEX).toString(); String create = model.getValueAt(row, CREATE_INDEX).toString(); String id = (model.getValueAt(row, ID_INDEX) != null) ? ((JComboBox) model.getValueAt(row, ID_INDEX)).getSelectedItem().toString() : ""; System.out.println("table" + table + " layout " + layout + " query " + query); if (!create.equals("")) { Object[] options = {"Yes", "No"}; int option = showDialog("Create Statement not empty! Do you want to overwrite?", "create statement", options); if (option == 0) model.setValueAt(createStatement(table, destBean, layout, query), row, CREATE_INDEX); } if (columnName.equals("Layouts")) { bean.makeQuery("select * from" + bean.getQC() + table + bean.getQC() + " layout " + bean.getQC() + layout + bean.getQC(), 1); Vector idVec = bean.getColumnNames(); if (idVec == null) idVec = new Vector(); idVec.add(0, ""); JComboBox box = ((JComboBox) model.getValueAt(row, ID_INDEX)); box.setModel(new DefaultComboBoxModel(idVec)); box.setSelectedItem(id); tC.tableModel.fireTableCellUpdated(row, ID_INDEX); } } /* * Statement stm = bean.getConnection().createStatement(); // * stm.executeUpdate("DELETE FROM \""+fm.tables.get(0)+"\" WHERE * \"erstellt von\"='rogo') "); * * if (idVal == "") stm.executeUpdate("INSERT INTO " + DBBean.quoteChar + * box.getSelectedItem() + DBBean.quoteChar + " (" + DBBean.quoteChar + * columnName + DBBean.quoteChar + ") VALUES ('" + value + "') "); else * stm.executeUpdate( "UPDATE " + DBBean.quoteChar + * box.getSelectedItem() + DBBean.quoteChar + " SET " + DBBean.quoteChar + * columnName + DBBean.quoteChar + "='" + value + "' WHERE ID='" + idVal + "' * "); */ } catch (Exception e2) { fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); ByteArrayOutputStream b = new ByteArrayOutputStream(); PrintStream stream = new PrintStream(b); e2.printStackTrace(stream); showErrorDialog(b.toString(), "Error while updating table !"); } } } /** * initialize the menubar */ private void setMenu() { JMenuBar menubar = new JMenuBar(); JMenu menu = new JMenu("File"); menu.setMnemonic('F'); JMenuItem item = new JMenuItem("open XML Config"); item.setToolTipText("opens a XML config file for batch conversion"); item.setMnemonic('i'); item.setAccelerator(KeyStroke.getKeyStroke('O', InputEvent.CTRL_DOWN_MASK)); item.addActionListener(fm); menu.add(item); item = new JMenuItem("save XML Config"); item.setToolTipText("saves the current selections in an XML config file for batch conversion"); item.setAccelerator(KeyStroke.getKeyStroke('S', InputEvent.CTRL_DOWN_MASK)); item.setMnemonic('x'); item.addActionListener(fm); menu.add(item); item = new JMenuItem("Quit"); item.setMnemonic('Q'); item.setToolTipText("Quits the application"); item.setAccelerator(KeyStroke.getKeyStroke('Q', InputEvent.CTRL_DOWN_MASK)); item.addActionListener(fm); menu.add(item); menubar.add(menu); menu = new JMenu("Options"); menu.setMnemonic('O'); ButtonGroup bgrp = new ButtonGroup(); convertItem = new JCheckBoxMenuItem("Convert Mode"); convertItem.setToolTipText("Normal table conversion existing table will be deleted"); convertItem.addActionListener(fm); bgrp.add(convertItem); menu.add(convertItem); menubar.add(menu); appendItem = new JCheckBoxMenuItem("Append Mode"); appendItem.setToolTipText("Appends data to an existing table"); appendItem.addActionListener(fm); bgrp.add(appendItem); menu.add(appendItem); menubar.add(menu); updateItem = new JCheckBoxMenuItem("Update Mode"); updateItem.setToolTipText("Updates data in an existing table"); updateItem.addActionListener(fm); bgrp.add(updateItem); menu.add(updateItem); deleteItem = new JCheckBoxMenuItem("Delete Mode"); deleteItem.setToolTipText("Deletes data in an existing table \n that has been deleted in source table"); deleteItem.addActionListener(fm); bgrp.add(deleteItem); menu.add(deleteItem); synchronizeItem = new JCheckBoxMenuItem("Synchronize Mode"); 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"); synchronizeItem.addActionListener(fm); bgrp.add(synchronizeItem); menu.add(synchronizeItem); useNormanToUnicodeMapper = new JCheckBoxMenuItem("use NormanToUnicodeMapper"); useNormanToUnicodeMapper.setToolTipText("maps characters in norman encoding to unicode characters"); useNormanToUnicodeMapper.addActionListener(fm); menu.add(useNormanToUnicodeMapper); menubar.add(menu); item = new JMenuItem("show Driver features"); item.setToolTipText("shows the features of the selected driver"); item.addActionListener(fm); menu.add(item); menubar.add(menu); delimiterItem = new JMenuItem("Delimiter"); delimiterItem.setToolTipText("Delimiter for FM Arrayfields"); delimiterItem.addActionListener(fm); menu.add(delimiterItem); menubar.add(menu); // item.addActionListener(fm); // menu.add(item); menubar.add(menu); menu.setBackground(fm.getBackground()); menubar.setBackground(fm.getBackground()); convertItem.doClick(); setJMenuBar(menubar); } /** * open the log file (index.html) */ public static void openLog() throws Exception { StringBuffer buff = new StringBuffer(); buff.append(""); buff.append(""); buff.append("\n"); buff.append("FileMaker Test"); buff.append("\n"); buff.append("\n"); buff.append("\n"); buff.append("
\n"); buff.append("\n

"); buff.append("FileMaker Test"); buff.append("

\n"); logFile.write(TableComponent.convertUml(buff).toString()); logFile.flush(); } /** * Append one entry to the log file(index.html) */ public static void appendLog(String entry, String name) throws Exception { logFile.write(""); logFile.write(entry + ""); logFile.write("
\n
\n"); logFile.flush(); } /** * closes the log file invoked then the application closes */ public static void closeLog() throws Exception { logFile.write("\n"); logFile.write("\n"); logFile.close(); } public static void showErrorDialog(String message, String title) { JDialog dialog = new JDialog(fmInstance); dialog.setTitle(title); JTextArea text = new JTextArea(); JScrollPane scroller = new JScrollPane(text); dialog.getContentPane().add(scroller); text.append(message); dialog.setSize(600, 300); dialog.setLocationRelativeTo(fmInstance); dialog.show(); //JOptionPane.showMessageDialog(null, message, title, // JOptionPane.ERROR_MESSAGE); } public static class ProgressDialog extends JDialog { JLabel table = new JLabel(" "); JLabel status = new JLabel(" "); JLabel title = new JLabel(" "); JPanel content = new JPanel(); JPanel titlePanel = new JPanel(); JPanel labelPanel = new JPanel(); JPanel statusPanel = new JPanel(); JPanel buttonPanel = new JPanel(); JProgressBar progress = new JProgressBar(); JButton cancel = new JButton("Cancel"); Thread thread; DBBean bean; public ProgressDialog(JFrame frame, DBBean bean) { super(frame); this.bean = bean; content = new JPanel(true); //content.setBorder(BorderFactory.createRaisedBevelBorder()); content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); title = new JLabel("Progress of conversion"); title.setHorizontalTextPosition(SwingConstants.CENTER); titlePanel.add(title); buttonPanel.add(cancel); // content.add(titlePanel); content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); content.add(labelPanel); content.add(new JLabel("")); content.add(progress); content.add(statusPanel); content.add(buttonPanel); content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); labelPanel.add(table); statusPanel.add(status); getContentPane().add(titlePanel, "North"); getContentPane().add(content, "Center"); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { cancel.doClick(); } }); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); fmInstance.setEnabled(true); setVisible(false); try { ProgressDialog.this.bean.getConnection().close(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } thread.stop(); } }); pack(); } } public static class DelimiterDialog extends JDialog { JLabel table = new JLabel(" "); JLabel status = new JLabel(" "); JLabel title = new JLabel(" "); JPanel content = new JPanel(); JPanel titlePanel = new JPanel(); JPanel delimiterPanel = new JPanel(); JPanel buttonPanel = new JPanel(); JTextField delimiter = new JTextField(10); JButton cancel = new JButton("Cancel"); JButton ok = new JButton("Ok"); Thread thread; public DelimiterDialog(JFrame frame) { super(frame); setTitle("Delimiter Editor"); setModal(true); content = new JPanel(true); delimiter.setText(fmInstance.delimiter); ActionListener al = new ActionListener() { public void actionPerformed(ActionEvent e) { fmInstance.delimiter = parseDelimiter(delimiter.getText()); setVisible(false); } }; this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { cancel.doClick(); } }); //delimiter.setText(fmInstance.delimiter); delimiter.addActionListener(al); content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); title = new JLabel("Enter Delimiter "); title.setHorizontalTextPosition(SwingConstants.CENTER); titlePanel.add(title); buttonPanel.add(ok); buttonPanel.add(cancel); content.add(titlePanel); content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); content.add(new JLabel("")); content.add(delimiterPanel); content.add(buttonPanel); content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); delimiterPanel.add(new JLabel("Delimiter: ")); delimiterPanel.add(delimiter); getContentPane().add(titlePanel, "North"); getContentPane().add(content, "Center"); ok.addActionListener(al); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); fmInstance.setEnabled(true); setVisible(false); // thread.stop(); } }); pack(); setLocationRelativeTo(fmInstance); } public String parseDelimiter(Object o) { String str = o.toString(); StringBuffer sbuff = new StringBuffer(); int length = str.length(); for (int i = 0; i < length; ++i) { if (str.charAt(i) == '\\') { System.out.println(str.charAt(i)); if (str.charAt(i + 1) == 'r') { sbuff.append("\r"); } if (str.charAt(i + 1) == 't') { sbuff.append("\t"); } if (str.charAt(i + 1) == 'n') { sbuff.append("\n"); } if (str.charAt(i + 1) == '\\') { sbuff.append("\\"); } if (i < length - 1) ++i; } else sbuff.append(str.charAt(i)); } return sbuff.toString(); } } public static class PasswordDialog extends JDialog { JLabel table = new JLabel(" "); JLabel status = new JLabel(" "); JLabel title = new JLabel(" "); JPanel content = new JPanel(); JPanel titlePanel = new JPanel(); JPanel userPanel = new JPanel(); JPanel passwordPanel = new JPanel(); JPanel buttonPanel = new JPanel(); JTextField user = new JTextField(10); JTextField passwd = new JPasswordField(10); JButton cancel = new JButton("Cancel"); JButton ok = new JButton("Ok"); DBBean bean = null; Thread thread; public PasswordDialog(JFrame frame, DBBean localBean) { super(frame); setTitle("PasswordDialog"); setModal(true); content = new JPanel(true); this.bean = localBean; //content.setBorder(BorderFactory.createRaisedBevelBorder()); ActionListener al = new ActionListener() { public void actionPerformed(ActionEvent e) { bean.setUserAndPasswd(user.getText(), passwd.getText()); setVisible(false); } }; this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { cancel.doClick(); } }); user.setText(localBean.user); passwd.setText(localBean.passwd); user.addActionListener(al); passwd.addActionListener(al); content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); title = new JLabel("Enter user and password "); title.setHorizontalTextPosition(SwingConstants.CENTER); titlePanel.add(title); buttonPanel.add(ok); buttonPanel.add(cancel); content.add(titlePanel); content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); // content.add(labelPanel); content.add(new JLabel("")); content.add(userPanel); content.add(passwordPanel); content.add(buttonPanel); content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); //labelPanel.add(table); userPanel.add(new JLabel("Username: ")); userPanel.add(user); passwordPanel.add(new JLabel("Password: ")); passwordPanel.add(passwd); passwd.setPreferredSize(user.getPreferredSize()); passwd.setMinimumSize(passwd.getPreferredSize()); passwd.setMaximumSize(passwd.getPreferredSize()); passwd.setSize(passwd.getPreferredSize()); getContentPane().add(titlePanel, "North"); getContentPane().add(content, "Center"); ok.addActionListener(al); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); fmInstance.setEnabled(true); setVisible(false); thread.stop(); } }); pack(); } } public void fillTable() { noDBUpdate = true; bean.setUseNormanToUnicodeMapper(useNormanToUnicodeMapper.isSelected()); Vector tableNames = bean.getTableNames(); Collections.sort(tableNames, String.CASE_INSENSITIVE_ORDER); Vector[] data = new Vector[2]; data[1] = new Vector(6); data[1].setSize(6); data[1].set(STATUS_INDEX, " "); data[1].set(NAME_INDEX, " source Tablename "); data[1].set(LAYOUT_INDEX, "Layouts"); data[1].set(SELECT_INDEX, "select"); data[1].set(CREATE_INDEX, "create"); data[1].set(ID_INDEX, " id "); data[0] = new Vector(); for (int i = 0; i < tableNames.size(); i++) { String name = tableNames.get(i).toString(); Vector layouts = new Vector(); Vector idVec = new Vector(); try { bean.makeQuery("select * from" + bean.getQC() + name + bean.getQC(), 1); layouts = bean.getLayoutNames(name); } catch (SQLException e) { layouts = new Vector(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } idVec = bean.getColumnNames(); if (idVec == null) idVec = new Vector(); idVec.add(0, ""); Vector dataRow = new Vector(6); dataRow.setSize(6); dataRow.set(STATUS_INDEX, Boolean.FALSE); dataRow.set(NAME_INDEX, name); dataRow.set(SELECT_INDEX, new TableComponent.SQLCommand("select * from " + bean.getQC() + name + bean.getQC())); if (!layouts.isEmpty()) dataRow.set(LAYOUT_INDEX, new JComboBox(layouts)); else dataRow.set(LAYOUT_INDEX, null); // create row dataRow.set(CREATE_INDEX, new TableComponent.SQLCommand("")); // id row dataRow.set(ID_INDEX, new TableComponent.IDComboBox(idVec));//new // TableComponent.SQLCommand("")); bean.ids.add(""); data[0].add(dataRow); //System.out.println(dataRow); } tC.booleanRenderer.renderFalseEmpty = true; tC.tableModel.setDataVector(data[0], data[1]); //@TODO new sizeToFit method needed //tC.sizeToFit(450, 250); Dimension dim = listPanel.getPreferredSize(); tC.sizeToFit(dim.width, dim.height); tC.revalidate(); tC.tableModel.fireTableDataChanged(); noDBUpdate = false; } public Vector[] getListFromTable() { Vector[] vec = new Vector[5]; vec[0] = new Vector(); vec[1] = new Vector(); vec[2] = new Vector(); vec[3] = new Vector(); vec[4] = new Vector(); for (int i = 0; i < tC.tableModel.getRowCount(); ++i) { } int[] rows = tC.table.getSelectedRows(); for (int i = 0; i < tC.tableModel.getRowCount(); i++) { if (((Boolean) tC.tableModel.getValueAt(i, STATUS_INDEX)) == Boolean.FALSE) { System.out.println("skipped row " + i); continue; } //System.out.println(tC.tableModel.getValueAt(rows[i],1)); vec[0].add(tC.tableModel.getValueAt(i, NAME_INDEX)); JComboBox box = ((JComboBox) tC.tableModel.getValueAt(i, LAYOUT_INDEX)); String layoutName = (box != null) ? box.getSelectedItem().toString() : ""; String idName = ((JComboBox) tC.tableModel.getValueAt(i, ID_INDEX)).getSelectedItem().toString(); vec[1].add(layoutName); vec[2].add(tC.tableModel.getValueAt(i, SELECT_INDEX).toString()); vec[3].add(tC.tableModel.getValueAt(i, CREATE_INDEX).toString()); vec[4].add(idName); } return vec; } public void setEnabled(boolean state) { showTables.setEnabled(state); showTables1.setEnabled(state); convert.setEnabled(state); dropTables.setEnabled(state); sourceURLBox.setEnabled(state); destURLBox.setEnabled(state); } public TableComponent.SQLCommand createStatement(String table, DBBean beanDest, String layout, String query) throws SQLException, ParseException, Exception { fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); if (beanDest.url.equals("")) beanDest.url = destURLBox.getSelectedItem().toString(); StringBuffer command = new StringBuffer(50); command.append("\n CREATE TABLE "); command.append(beanDest.getQC()); command.append(Convert.convertText(table)); command.append(beanDest.getQC()); command.append("\n ( "); String type = null; // String query = "select * from " + bean.getQC() +table + bean.getQC(); if (!layout.equals("")) { layout = " layout " + bean.getQC() + layout + bean.getQC(); StringBuffer queryLayout = new StringBuffer(query); queryLayout.insert(queryLayout.indexOf(table) + table.length() + 1, " " + layout); query = queryLayout.toString(); System.out.println("added layout " + query); } Vector[] result = bean.getQueryData(query, 1); for (int i = 0; i < result[1].size() - 1; ++i) { type = bean.metaData.getColumnTypeName(i + 1); // System.out.println(i+" "+result[1].get(i)+" "+type); type = (type.equals("NUMBER")) ? "INT4" : type; type = (type.equals("CONTAINER")) ? "TEXT" : type; type = type.toUpperCase(); if (i == 0) command.append(beanDest.getQC() + Convert.convertText((String) result[1].get(i)) + beanDest.getQC() + " " + type + ", "); else command.append(" " + beanDest.getQC() + Convert.convertText((String) result[1].get(i)) + beanDest.getQC() + " " + type + ", "); command.append("\n"); } type = bean.metaData.getColumnTypeName(result[1].size()); type = (type.equals("NUMBER")) ? "INT4" : type; type = (type.equals("CONTAINER")) ? "TEXT" : type; type = type.toUpperCase(); command.append(" " + beanDest.getQC() + Convert.convertText((String) result[1].get(result[1].size() - 1)) + beanDest.getQC() + " " + type); command.append("\n )\n"); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); return new TableComponent.SQLCommand(command.toString()); } static class XMLFilter extends javax.swing.filechooser.FileFilter { public boolean accept(java.io.File file) { if (file.getName().toLowerCase().endsWith(".xml") || file.isDirectory()) return true; else return false; } public String getDescription() { return "Batch Convert XML File"; } } public static int showDialog(String message, String title, Object[] options) { int option = JOptionPane.showOptionDialog(null, message, title, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]); return option; } }