--- FM2SQL/Attic/FM2SQL.java 2004/01/08 10:33:33 1.7 +++ FM2SQL/Attic/FM2SQL.java 2004/10/19 11:57:26 1.44 @@ -1,1451 +1,2068 @@ -import javax.swing.*; -import javax.swing.event.*; -import javax.swing.table.TableModel; - -import Convert.DataBase; +/* + * 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.event.*; +import java.awt.Cursor; import java.awt.Dimension; -import java.awt.*; -import java.sql.*; -import java.util.*; -import java.io.*; +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.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 - * + * 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 { - /** - * The database Bean instance. - * - */ - DBBean bean; - /** - * The database destination Bean instance. - * - */ - DBBean destBean; - - /** - * box - Tablenames - */ - - JComboBox box; - /** - * tList - Tablenames to choose from - */ - - JList tList = new JList(new String[] { "no database", "connection", "" }); - JList tListDest = new JList(new String[] { "no database connection", "", "" }); - - /** - * box2 - Layout names - */ - - JComboBox box2; - /** - * box3 - Database URLs - */ - JComboBox box3; - /** - * box4 - Database URLs - */ - JComboBox box4; - - 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; - Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); - JFileChooser configExportFileChooser; - JFileChooser configImportFileChooser; - - /** - * 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(getClass().getResource("icons/fm.jpg")); - if (local != null); - setIconImage(local); - bean = new DBBean(); - destBean = new DBBean(); - box2 = new JComboBox(); - box3 = new JComboBox(new String[] { "jdbc:fmpro:http://141.14.237.74:8050", "jdbc:fmpro:http://localhost", "jdbc:postgresql://foxridge/test" }); - box3.setEditable(true); - box4 = new JComboBox(new String[] { "jdbc:postgresql://foxridge/test", "jdbc:postgresql://erebos/test1" }); - box4.setEditable(true); - box4.addActionListener(this); - table = new TableComponent(); - box = new JComboBox(tables); - box.addActionListener(this); - box2.addActionListener(this); - box3.addActionListener(this); - - contentPanel = new JPanel(); - contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS)); - - box3.setMinimumSize(new Dimension(450, 20)); - box3.setMaximumSize(new Dimension(550, 20)); - box3.setPreferredSize(new Dimension(450, 20)); - box4.setMinimumSize(new Dimension(450, 20)); - box4.setMaximumSize(new Dimension(550, 20)); - box4.setPreferredSize(new Dimension(450, 20)); - 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(box3, gbc); - - topPanel2.add(box4, 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) - { - 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()); - 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 == box3) - { - if (debug) - System.out.println("hey" + box3.getSelectedItem()); - Object insObj =box3.getSelectedItem(); - ((DefaultComboBoxModel) box3.getModel()).removeElement(insObj); - - ((DefaultComboBoxModel) box3.getModel()).insertElementAt(insObj, 0); - box3.setSelectedItem(insObj); - } else if (src == box4) - { - if (debug) - System.out.println("hey" + box4.getSelectedItem()); - //((DefaultComboBoxModel) box4.getModel()).insertElementAt(box4.getSelectedItem(), 0); - try - { - String selected = (String) box4.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)); - } - box4.setModel(new DefaultComboBoxModel(urls)); - box4.setSelectedItem(selected); - } catch (Exception e5) - { - } - } - } - if (command == "comboBoxChanged") - { - try - { - //System.out.println("hallo " + (e.getSource() == box3)); - - Object src = e.getSource(); - if (src == box3&&!noUserUpdate) - { - Thread thread = new Thread() - { - public void run() - { - - try - { - PasswordDialog dialog = new PasswordDialog(fmInstance, bean); - dialog.setLocationRelativeTo(box3); - dialog.thread = Thread.currentThread(); - fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - fmInstance.setEnabled(false); - dialog.setVisible(true); - String url = box3.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)); + 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)); + // 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 == box4&&!noUserUpdate) - { - Thread thread = new Thread() - { - public void run() - { - - try - { - - PasswordDialog dialog = new PasswordDialog(fmInstance, destBean); - dialog.setLocationRelativeTo(box4); - dialog.thread = Thread.currentThread(); - fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + 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) box4.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)); + 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); + } + 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) - { - } - } - //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")) - { - - Thread thread = new Thread() - { - public void run() - { - setEnabled(false); - convert(); - setEnabled(true); - } - - }; - thread.start(); - } - if (command.equals("show Tables")) - { - Thread thread = new Thread() - { - public void run() - { + 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); + 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() - { + } + }; + 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); + 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")) - { - fmInstance.dispose(); - System.exit(0); - - } - - } - /** - * 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, box4.getSelectedItem().toString(), vectors[0], vectors[1],vectors[2],vectors[3]); - - destBean.setConnection((String) box4.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(); - Convert.DataBase source = new Convert.DataBase(bean,vectors[0],vectors[1],vectors[2],vectors[3]); - Convert.DataBase destination = new Convert.DataBase(destBean,new Vector(),new Vector(),new Vector(),new Vector()); - - 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); - DataBase destBase = (DataBase) databases.lastElement(); - //destBase.bean.getConnection(); - noUserUpdate = true; - destBean=destBase.bean; - Object destObj =destBean.url; - ((DefaultComboBoxModel) box4.getModel()).removeElement(destObj); - ((DefaultComboBoxModel) box4.getModel()).insertElementAt(destObj,0); - box4.setSelectedItem(destObj); - databases.remove(destBase); - for (Iterator iter = databases.iterator(); iter.hasNext();) - { - Convert.DataBase database = (Convert.DataBase) iter.next(); - database.bean.getConnection(); - bean = database.bean; - Object obj =bean.url; - ((DefaultComboBoxModel) box3.getModel()).removeElement(obj); - ((DefaultComboBoxModel) box3.getModel()).insertElementAt(obj,0); - box3.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 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) box4.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() == e.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,0).toString(); - String layout = (model.getValueAt(row,1)!=null) ?((JComboBox)model.getValueAt(row,1)).getSelectedItem().toString():""; - String query = model.getValueAt(row,2).toString(); - String create = model.getValueAt(row,3).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,3); - } - - - } -/* 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.setMnemonic('i'); - item.setAccelerator(KeyStroke.getKeyStroke('O',InputEvent.CTRL_DOWN_MASK)); - - item.addActionListener(fm); - menu.add(item); - item = new JMenuItem("save XML Config"); - 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.setAccelerator(KeyStroke.getKeyStroke('Q',InputEvent.CTRL_DOWN_MASK)); - item.addActionListener(fm); - menu.add(item); - - menubar.add(menu); - menu = new JMenu("Options"); - menu.setMnemonic('O'); - - item = new JMenuItem("show Driver features"); - item.addActionListener(fm); - menu.add(item); - menubar.add(menu); - - item.addActionListener(fm); - menu.add(item); - - menubar.add(menu); - - menu.setBackground(fm.getBackground()); - menubar.setBackground(fm.getBackground()); - 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; - public ProgressDialog(JFrame frame) - { - super(frame); - content = new JPanel(true); - //content.setBorder(BorderFactory.createRaisedBevelBorder()); - content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); - title = new JLabel("Progress of conversion"); - title.setHorizontalTextPosition(title.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)); + } + }; + 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() == e.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(title.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); - thread.stop(); - } - }); - pack(); - - } - - } - 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(title.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)); + 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(title.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(); - - } - - } - public void fillTable() - { - noDBUpdate = true; - Vector tableNames = bean.getTableNames(); - Collections.sort(tableNames, String.CASE_INSENSITIVE_ORDER); - Vector[] data = new Vector[2]; - data[1] = new Vector(); - data[1].add("Table"); - data[1].add("Layouts"); - data[1].add("select"); - data[1].add("create"); - - data[0] = new Vector(); - - for (int i = 0; i < tableNames.size(); i++) - { - String name = tableNames.get(i).toString(); - Vector layouts = new Vector(); - try - { - layouts = bean.getLayoutNames(name); - } catch (SQLException e) - { - layouts = new Vector(); - } - Vector dataRow = new Vector(); - dataRow.add(name); - if (!layouts.isEmpty()) - dataRow.add(new JComboBox(layouts)); - else - dataRow.add(null); - dataRow.add(new TableComponent.SQLCommand("select * from "+bean.getQC()+name+bean.getQC())); - - data[0].add(dataRow); - dataRow.add(new TableComponent.SQLCommand("")); - //System.out.println(dataRow); - } - tC.tableModel.setDataVector(data[0], data[1]); - tC.revalidate(); - tC.tableModel.fireTableDataChanged(); - noDBUpdate = false; - - } - public Vector[] getListFromTable() - { - Vector[] vec = new Vector[4]; - vec[0] = new Vector(); - vec[1] = new Vector(); + 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(title.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(); + } + + 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(); - int[] rows = tC.table.getSelectedRows(); - for (int i = 0; i < rows.length; i++) - { - //System.out.println(tC.tableModel.getValueAt(rows[i],1)); - vec[0].add(tC.tableModel.getValueAt(rows[i], 0)); - JComboBox box = ((JComboBox) tC.tableModel.getValueAt(rows[i], 1)); - String layoutName = (box != null) ? box.getSelectedItem().toString() : ""; - vec[1].add(layoutName); - vec[2].add(tC.tableModel.getValueAt(rows[i], 2).toString()); - vec[3].add(tC.tableModel.getValueAt(rows[i], 3).toString()); - - } - return vec; - } - public void setEnabled(boolean state) - { - showTables.setEnabled(state); - showTables1.setEnabled(state); - convert.setEnabled(state); - dropTables.setEnabled(state); - box3.setEnabled(state); - box4.setEnabled(state); - - } - public TableComponent.SQLCommand createStatement(String table,DBBean beanDest,String layout,String query) throws SQLException - { - fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - - if(beanDest.url.equals("")) beanDest.url=box4.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; - - } + 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 + { + 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; + + } } \ No newline at end of file