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

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

\n"); - - logFile.write(TableComponent.convertUml(buff).toString()); - logFile.flush(); - } - /** - * Append one entry to the log file(index.html) - */ - public static void appendLog(String entry, String name) throws Exception - { - logFile.write(""); - logFile.write(entry + ""); - logFile.write("
\n
\n"); - logFile.flush(); - } - /** - * closes the log file invoked then the application closes - */ - public static void closeLog() throws Exception - { - logFile.write("\n"); - logFile.write("\n"); - - logFile.close(); - } - public static void showErrorDialog(String message, String title) - { - JDialog dialog = new JDialog(fmInstance); - dialog.setTitle(title); - JTextArea text = new JTextArea(); - JScrollPane scroller = new JScrollPane(text); - dialog.getContentPane().add(scroller); - text.append(message); - dialog.setSize(600, 300); - dialog.setLocationRelativeTo(fmInstance); - dialog.setVisible(true); - // JOptionPane.showMessageDialog(null, message, title, - // JOptionPane.ERROR_MESSAGE); - } - public static class ProgressDialog extends JDialog - { - JLabel table = new JLabel(" "); - JLabel status = new JLabel(" "); - JLabel title = new JLabel(" "); - JPanel content = new JPanel(); - JPanel titlePanel = new JPanel(); - JPanel labelPanel = new JPanel(); - JPanel statusPanel = new JPanel(); - JPanel buttonPanel = new JPanel(); - - JProgressBar progress = new JProgressBar(); - JButton cancel = new JButton("Cancel"); - Thread thread; - DBBean bean; - public ProgressDialog(JFrame frame, DBBean bean) - { - super(frame); - this.bean = bean; - - content = new JPanel(true); - // content.setBorder(BorderFactory.createRaisedBevelBorder()); - content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); - title = new JLabel("Progress of conversion"); - title.setHorizontalTextPosition(SwingConstants.CENTER); - titlePanel.add(title); - buttonPanel.add(cancel); - // content.add(titlePanel); - content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); - content.add(labelPanel); - content.add(new JLabel("")); - content.add(progress); - content.add(statusPanel); - content.add(buttonPanel); - content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); - labelPanel.add(table); - statusPanel.add(status); - getContentPane().add(titlePanel, "North"); - getContentPane().add(content, "Center"); - this.addWindowListener(new WindowAdapter() - { - public void windowClosing(WindowEvent e) - { - cancel.doClick(); - } - }); - - cancel.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - fmInstance.setEnabled(true); - setVisible(false); - try - { - ProgressDialog.this.bean.getConnection().close(); - } - catch (SQLException e1) - { - // TODO Auto-generated catch block - e1.printStackTrace(); - } - catch (Exception e1) - { - // TODO Auto-generated catch block - e1.printStackTrace(); - } - thread.stop(); - } - }); - pack(); - - } - - } - public static class DelimiterDialog extends JDialog - { - JLabel table = new JLabel(" "); - JLabel status = new JLabel(" "); - JLabel title = new JLabel(" "); - JPanel content = new JPanel(); - JPanel titlePanel = new JPanel(); - JPanel delimiterPanel = new JPanel(); - JPanel buttonPanel = new JPanel(); - JTextField delimiter = new JTextField(10); - - JButton cancel = new JButton("Cancel"); - JButton ok = new JButton("Ok"); - Thread thread; - public DelimiterDialog(JFrame frame) - { - super(frame); - setTitle("Delimiter Editor"); - setModal(true); - content = new JPanel(true); - delimiter.setText(fmInstance.delimiter); - ActionListener al = new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - fmInstance.delimiter = parseDelimiter(delimiter.getText()); - setVisible(false); - } - - }; - this.addWindowListener(new WindowAdapter() - { - public void windowClosing(WindowEvent e) - { - cancel.doClick(); - } - }); - - // delimiter.setText(fmInstance.delimiter); - delimiter.addActionListener(al); - content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); - title = new JLabel("Enter Delimiter "); - title.setHorizontalTextPosition(SwingConstants.CENTER); - titlePanel.add(title); - buttonPanel.add(ok); - buttonPanel.add(cancel); - content.add(titlePanel); - content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); - - content.add(new JLabel("")); - content.add(delimiterPanel); - content.add(buttonPanel); - content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); - - delimiterPanel.add(new JLabel("Delimiter: ")); - delimiterPanel.add(delimiter); - getContentPane().add(titlePanel, "North"); - getContentPane().add(content, "Center"); - ok.addActionListener(al); - cancel.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - fmInstance.setEnabled(true); - setVisible(false); - // thread.stop(); - } - - }); - pack(); - setLocationRelativeTo(fmInstance); - } - public String parseDelimiter(Object o) - { - String str = o.toString(); - StringBuffer sbuff = new StringBuffer(); - int length = str.length(); - for (int i = 0; i < length; ++i) - { - - if (str.charAt(i) == '\\') - { - System.out.println(str.charAt(i)); - if (str.charAt(i + 1) == 'r') - { - sbuff.append("\r"); - } - if (str.charAt(i + 1) == 't') - { - sbuff.append("\t"); - } - if (str.charAt(i + 1) == 'n') - { - sbuff.append("\n"); - } - if (str.charAt(i + 1) == '\\') - { - sbuff.append("\\"); - } - - if (i < length - 1) - ++i; - - } - else - sbuff.append(str.charAt(i)); - } - - return sbuff.toString(); - } - } - - public static class PasswordDialog extends JDialog - { - JLabel table = new JLabel(" "); - JLabel status = new JLabel(" "); - JLabel title = new JLabel(" "); - JPanel content = new JPanel(); - JPanel titlePanel = new JPanel(); - JPanel userPanel = new JPanel(); - JPanel passwordPanel = new JPanel(); - JPanel buttonPanel = new JPanel(); - JTextField user = new JTextField(10); - JTextField passwd = new JPasswordField(10); - - JButton cancel = new JButton("Cancel"); - JButton ok = new JButton("Ok"); - DBBean bean = null; - Thread thread; - public PasswordDialog(JFrame frame, DBBean localBean) - { - super(frame); - setTitle("PasswordDialog"); - setModal(true); - content = new JPanel(true); - this.bean = localBean; - // content.setBorder(BorderFactory.createRaisedBevelBorder()); - ActionListener al = new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - bean.setUserAndPasswd(user.getText(), passwd.getText()); - setVisible(false); - } - - }; - this.addWindowListener(new WindowAdapter() - { - public void windowClosing(WindowEvent e) - { - cancel.doClick(); - } - }); - - user.setText(localBean.user); - passwd.setText(localBean.passwd); - user.addActionListener(al); - passwd.addActionListener(al); - content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); - title = new JLabel("Enter user and password "); - title.setHorizontalTextPosition(SwingConstants.CENTER); - titlePanel.add(title); - buttonPanel.add(ok); - buttonPanel.add(cancel); - content.add(titlePanel); - content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); - // content.add(labelPanel); - content.add(new JLabel("")); - content.add(userPanel); - content.add(passwordPanel); - content.add(buttonPanel); - content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); - // labelPanel.add(table); - userPanel.add(new JLabel("Username: ")); - userPanel.add(user); - passwordPanel.add(new JLabel("Password: ")); - passwordPanel.add(passwd); - passwd.setPreferredSize(user.getPreferredSize()); - passwd.setMinimumSize(passwd.getPreferredSize()); - passwd.setMaximumSize(passwd.getPreferredSize()); - passwd.setSize(passwd.getPreferredSize()); - getContentPane().add(titlePanel, "North"); - getContentPane().add(content, "Center"); - ok.addActionListener(al); - cancel.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - fmInstance.setEnabled(true); - setVisible(false); - thread.stop(); - } - - }); - pack(); - - } - - } - public void fillTable() - { - noDBUpdate = true; - bean.setUseNormanToUnicodeMapper(useNormanToUnicodeMapper.isSelected()); - Vector tableNames = bean.getTableNames(); - Collections.sort(tableNames, String.CASE_INSENSITIVE_ORDER); - Vector[] data = new Vector[2]; - data[1] = new Vector(6); - data[1].setSize(6); - data[1].set(STATUS_INDEX, " "); - data[1].set(NAME_INDEX, " source Tablename "); - data[1].set(LAYOUT_INDEX, "Layouts"); - data[1].set(SELECT_INDEX, "select"); - data[1].set(CREATE_INDEX, "create"); - data[1].set(ID_INDEX, " id "); - data[0] = new Vector(); - for (int i = 0; i < tableNames.size(); i++) - { - String name = tableNames.get(i).toString(); - Vector layouts = new Vector(); - Vector idVec = new Vector(); - - try - { - bean.makeQuery("select * from" + bean.getQC() + name + bean.getQC(), 1); - layouts = bean.getLayoutNames(name); - } - catch (SQLException e) - { - layouts = new Vector(); - } - catch (Exception e) - { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - idVec = bean.getColumnNames(); - if (idVec == null) - idVec = new Vector(); - idVec.add(0, ""); - Vector dataRow = new Vector(6); - - dataRow.setSize(6); - dataRow.set(STATUS_INDEX, Boolean.FALSE); - dataRow.set(NAME_INDEX, name); - - dataRow.set(SELECT_INDEX, new TableComponent.SQLCommand("select * from " + bean.getQC() + name + bean.getQC())); - if (!layouts.isEmpty()) - dataRow.set(LAYOUT_INDEX, new JComboBox(layouts)); - else - dataRow.set(LAYOUT_INDEX, null); - - // create row - dataRow.set(CREATE_INDEX, new TableComponent.SQLCommand("")); - // id row - dataRow.set(ID_INDEX, new TableComponent.IDComboBox(idVec));// new - // TableComponent.SQLCommand("")); - bean.ids.add(""); - data[0].add(dataRow); - - // System.out.println(dataRow); - } - - tC.booleanRenderer.renderFalseEmpty = true; - tC.tableModel.setDataVector(data[0], data[1]); - // @TODO new sizeToFit method needed - // tC.sizeToFit(450, 250); - Dimension dim = listPanel.getPreferredSize(); - tC.sizeToFit(dim.width, dim.height); - tC.revalidate(); - tC.tableModel.fireTableDataChanged(); - noDBUpdate = false; - - } - public Vector[] getListFromTable() - { - Vector[] vec = new Vector[5]; - vec[0] = new Vector(); - vec[1] = new Vector(); - vec[2] = new Vector(); - vec[3] = new Vector(); - vec[4] = new Vector(); - for (int i = 0; i < tC.tableModel.getRowCount(); ++i) - { - } - int[] rows = tC.table.getSelectedRows(); - for (int i = 0; i < tC.tableModel.getRowCount(); i++) - { - if (((Boolean) tC.tableModel.getValueAt(i, STATUS_INDEX)) == Boolean.FALSE) - { - System.out.println("skipped row " + i); - continue; - } - - // System.out.println(tC.tableModel.getValueAt(rows[i],1)); - vec[0].add(tC.tableModel.getValueAt(i, NAME_INDEX)); - JComboBox box = ((JComboBox) tC.tableModel.getValueAt(i, LAYOUT_INDEX)); - String layoutName = (box != null) ? box.getSelectedItem().toString() : ""; - - String idName = ((JComboBox) tC.tableModel.getValueAt(i, ID_INDEX)).getSelectedItem().toString(); - vec[1].add(layoutName); - vec[2].add(tC.tableModel.getValueAt(i, SELECT_INDEX).toString()); - vec[3].add(tC.tableModel.getValueAt(i, CREATE_INDEX).toString()); - vec[4].add(idName); - - } - return vec; - } - public void setEnabled(boolean state) - { - showTables.setEnabled(state); - showTables1.setEnabled(state); - convert.setEnabled(state); - dropTables.setEnabled(state); - sourceURLBox.setEnabled(state); - destURLBox.setEnabled(state); - - } - public TableComponent.SQLCommand createStatement(String table, DBBean beanDest, String layout, String query) throws SQLException, ParseException, Exception - { - fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - - if (beanDest.url.equals("")) - beanDest.url = destURLBox.getSelectedItem().toString(); - StringBuffer command = new StringBuffer(50); - command.append("\n CREATE TABLE "); - command.append(beanDest.getQC()); - command.append(Convert.convertText(table)); - command.append(beanDest.getQC()); - command.append("\n ( "); - String type = null; - // String query = "select * from " + bean.getQC() +table + bean.getQC(); - if (!layout.equals("")) - { - layout = " layout " + bean.getQC() + layout + bean.getQC(); - StringBuffer queryLayout = new StringBuffer(query); - queryLayout.insert(queryLayout.indexOf(table) + table.length() + 1, " " + layout); - query = queryLayout.toString(); - System.out.println("added layout " + query); - - } - Vector[] result = bean.getQueryData(query, 1); - for (int i = 0; i < result[1].size() - 1; ++i) - { - type = bean.metaData.getColumnTypeName(i + 1); - // System.out.println(i+" "+result[1].get(i)+" "+type); - type = (type.equals("NUMBER")) ? "INT4" : type; - type = (type.equals("CONTAINER")) ? "TEXT" : type; - type = type.toUpperCase(); - if (i == 0) - command.append(beanDest.getQC() + Convert.convertText((String) result[1].get(i)) + beanDest.getQC() + " " + type + ", "); - else - command.append(" " + beanDest.getQC() + Convert.convertText((String) result[1].get(i)) + beanDest.getQC() + " " + type + ", "); - command.append("\n"); - } - type = bean.metaData.getColumnTypeName(result[1].size()); - type = (type.equals("NUMBER")) ? "INT4" : type; - type = (type.equals("CONTAINER")) ? "TEXT" : type; - type = type.toUpperCase(); - command.append(" " + beanDest.getQC() + Convert.convertText((String) result[1].get(result[1].size() - 1)) + beanDest.getQC() + " " + type); - command.append("\n )\n"); - fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - - return new TableComponent.SQLCommand(command.toString()); - } - static class XMLFilter extends javax.swing.filechooser.FileFilter - { - public boolean accept(java.io.File file) - { - if (file.getName().toLowerCase().endsWith(".xml") || file.isDirectory()) - return true; - else - return false; - } - public String getDescription() - { - return "Batch Convert XML File"; - } - - } - public static int showDialog(String message, String title, Object[] options) - { - int option = JOptionPane.showOptionDialog(null, message, title, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]); - return option; + private JMenuItem delimiterItem; + private JCheckBoxMenuItem convertItem; + private JCheckBoxMenuItem appendItem; + private JCheckBoxMenuItem updateItem; + private JCheckBoxMenuItem deleteItem; + private JCheckBoxMenuItem useNormanToUnicodeMapper; + private JMenuItem aboutBox; + 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" }); + 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 enume = prop.keys(); + // Enumeration enum2 = prop.elements(); + // + // while (enume.hasMoreElements()) + // System.out.println(enume.nextElement() + " " + enum2.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); + + } 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.setVisible(true); + } + } + + public void actionPerformed(ActionEvent e) + { + String command = e.getActionCommand(); + if (debug) + System.out.println("command " + command); + if (command.equals(aboutBox.getText())) + { + JOptionPane.showMessageDialog(fmInstance,Convert.versionID, "About FM2SQL",JOptionPane.INFORMATION_MESSAGE); + } + + if (command == "comboBoxEdited") + { + Object src = e.getSource(); + if (src == sourceURLBox) + { + if (debug) + System.out.println("hey" + sourceURLBox.getSelectedItem()); + Object insObj = sourceURLBox.getSelectedItem(); + ((DefaultComboBoxModel) sourceURLBox.getModel()).removeElement(insObj); + + ((DefaultComboBoxModel) sourceURLBox.getModel()).insertElementAt(insObj, 0); + sourceURLBox.setSelectedItem(insObj); + } else if (src == destURLBox) + { + if (debug) + System.out.println("hey" + destURLBox.getSelectedItem()); + // ((DefaultComboBoxModel) + // box4.getModel()).insertElementAt(box4.getSelectedItem(), 0); + try + { + String selected = (String) destURLBox.getSelectedItem(); + destBean.setConnection(selected); + Vector catalogs = destBean.getCatalogs(); + Vector urls = new Vector(); + for (int i = 0; i < catalogs.size(); ++i) + { + urls + .add(destBean.url.substring(0, destBean.url.lastIndexOf("/") + 1) + catalogs.get(i)); + } + destURLBox.setModel(new DefaultComboBoxModel(urls)); + destURLBox.setSelectedItem(selected); + } catch (Exception e5) + { + } + } + } + if (command == "comboBoxChanged") + { + try + { + // System.out.println("hallo " + (e.getSource() == box3)); + Object src = e.getSource(); + if (src == sourceURLBox && !noUserUpdate) + { + Thread thread = new Thread() { + public void run() + { + + try + { + PasswordDialog dialog = new PasswordDialog(fmInstance, bean); + dialog.setLocationRelativeTo(sourceURLBox); + dialog.thread = Thread.currentThread(); + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + fmInstance.setEnabled(false); + dialog.setVisible(true); + String url = sourceURLBox.getSelectedItem().toString(); + bean.url = (url != null) ? url : bean.url; + bean.connection = null; + bean.getConnection(); + tables = bean.getTableNames(); + fillTable(); + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + fmInstance.setEnabled(true); + // System.out.println("hallo" + tables + " "); + } catch (Exception e5) + { + ByteArrayOutputStream b = new ByteArrayOutputStream(); + PrintStream stream = new PrintStream(b); + e5.printStackTrace(stream); + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + fmInstance.setEnabled(true); + Vector header = new Vector(); + header.add("no database"); + header.add("connection"); + Vector rows = new Vector(); + // rows.add(header); + noDBUpdate = true; + tC.tableModel.setDataVector(rows, header); + tC.tableModel.setRowCount(20); + tC.revalidate(); + tC.tableModel.fireTableDataChanged(); + noDBUpdate = false; + showErrorDialog(b.toString(), "Error occured !"); + } + } + }; + thread.start(); + } else if (src == destURLBox && !noUserUpdate) + { + Thread thread = new Thread() { + public void run() + { + + try + { + + PasswordDialog dialog = new PasswordDialog(fmInstance, destBean); + dialog.setLocationRelativeTo(destURLBox); + dialog.thread = Thread.currentThread(); + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + fmInstance.setEnabled(false); + dialog.setVisible(true); + destBean.setConnection((String) destURLBox.getSelectedItem()); + DefaultListModel model = new DefaultListModel(); + Vector tables = destBean.getTableNames(); + for (int j = 0; j < tables.size(); ++j) + model.addElement(tables.get(j)); + // System.out.println("hallo" + tables + " "); + tListDest.setModel(model); + // System.out.println("hallo" + tables + " "); + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + fmInstance.setEnabled(true); + } catch (Exception e5) + { + ByteArrayOutputStream b = new ByteArrayOutputStream(); + PrintStream stream = new PrintStream(b); + e5.printStackTrace(stream); + fmInstance.setEnabled(true); + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + DefaultListModel model = new DefaultListModel(); + model.addElement("no database connection"); + tListDest.setModel(model); + + showErrorDialog(b.toString(), "Error occured !"); + } + } + }; + thread.start(); + + } + setTitle("Filemaker 2 SQL Conversion Tool "); + // pack(); + + } catch (Exception e4) + { + ByteArrayOutputStream b = new ByteArrayOutputStream(); + PrintStream stream = new PrintStream(b); + e4.printStackTrace(stream); + showErrorDialog(b.toString(), "Open of table failed"); + + } + } + if (command == "show Driver features") + { + ResultWindow result = new ResultWindow(this); + try + { + Vector[] vecs = bean.TestDB(bean.getConnection().getMetaData()); + result.updateResult(vecs[0], vecs[1]); + // result.pack(); + result.title = "Database features"; + result.setVisible(true); + String name = result.writeResult(); + } catch (Exception e2) + { + } + } + if (command.equals("Delimiter")) + { + new DelimiterDialog(fmInstance).setVisible(true); + // delimiter = JOptionPane.showInputDialog(fmInstance,"Enter delimiter + // String",delimiter); + + } + + if (command == "Convert Mode") + { + System.out.println("Convert Mode selected"); + convert.setText("Convert Tables"); + convert.setActionCommand("Convert Tables"); + convert.setToolTipText("Normal table conversion existing table will be deleted"); + mode = Convert.DataBase.CONVERT_MODE; + } + if (command == "Append Mode") + { + System.out.println("Append Mode selected"); + convert.setText("Append Tables"); + convert.setActionCommand("Append Tables"); + convert.setToolTipText("Appends data to an existing table"); + + mode = Convert.DataBase.APPEND_MODE; + } + if (command == "Update Mode") + { + System.out.println("Update Mode selected"); + convert.setText("Update Tables"); + convert.setActionCommand("Update Tables"); + convert.setToolTipText("Updates data that has been changed in source"); + mode = Convert.DataBase.UPDATE_MODE; + } + if (command == "Delete Mode") + { + System.out.println("Delete Mode selected"); + convert.setText("Delete Tables"); + convert.setActionCommand("Delete Tables"); + convert.setToolTipText("Deletes data that has been deleted in source"); + mode = Convert.DataBase.DELETE_MODE; + } + if (command == "Synchronize Mode") + { + System.out.println("Synchronize Mode selected"); + convert.setText("Synchronize Tables"); + convert.setActionCommand("Synchronize Tables"); + convert.setToolTipText("Synchronize data with destination table"); + mode = Convert.DataBase.SYNCHRONIZE_MODE; + } + + if (command.equals("use NormanToUnicodeMapper")) + { + if (bean != null) + bean.setUseNormanToUnicodeMapper(useNormanToUnicodeMapper.isSelected()); + } + // writing config + if (command.equals("save XML Config")) + { + if (configExportFileChooser == null) + { + configExportFileChooser = new JFileChooser(); + configExportFileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); + configExportFileChooser.setFileFilter(new XMLFilter()); + configExportFileChooser.setDialogType(JFileChooser.SAVE_DIALOG); + configExportFileChooser.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e2) + { + System.out.println(e2.getActionCommand()); + if (!e2.getActionCommand().toString().equals("ApproveSelection")) + return; + + Thread thread = new Thread() { + public void run() + { + File configFile = configExportFileChooser.getSelectedFile(); + writeConfig(configFile.toString()); + + } + }; + thread.start(); + + } + }); + } + configExportFileChooser.rescanCurrentDirectory(); + configExportFileChooser.showDialog(fmInstance, " Save "); + + } + if (command.equals("open XML Config")) + { + if (configImportFileChooser == null) + { + configImportFileChooser = new JFileChooser(); + configImportFileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); + configImportFileChooser.setFileFilter(new XMLFilter()); + configImportFileChooser.setDialogType(JFileChooser.OPEN_DIALOG); + configImportFileChooser.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e2) + { + System.out.println(e2.getActionCommand()); + if (!e2.getActionCommand().toString().equals("ApproveSelection")) + return; + + Thread thread = new Thread() { + public void run() + { + File configFile = configImportFileChooser.getSelectedFile(); + readXMLConfig(configFile.toString()); + + } + }; + thread.start(); + + } + }); + } + configImportFileChooser.rescanCurrentDirectory(); + configImportFileChooser.showDialog(fmInstance, " Open "); + + } + + if (command.equals("Convert Tables") || command.equals("Append Tables")) + { + + Thread thread = new Thread() { + public void run() + { + setEnabled(false); + convert(); + setEnabled(true); + } + + }; + thread.start(); + } + if (command.equals("Update Tables")) + { + + Thread thread = new Thread() { + public void run() + { + setEnabled(false); + update(); + setEnabled(true); + } + + }; + thread.start(); + } + if (command.equals("Delete Tables")) + { + + Thread thread = new Thread() { + public void run() + { + setEnabled(false); + delete(); + setEnabled(true); + } + + }; + thread.start(); + } + if (command.equals("Synchronize Tables")) + { + + Thread thread = new Thread() { + public void run() + { + setEnabled(false); + synchronize(); + setEnabled(true); + } + + }; + thread.start(); + } + + if (command.equals("show Tables")) + { + Thread thread = new Thread() { + public void run() + { + fmInstance.setEnabled(false); + boolean visible = showTable(1); + window.validate(); + window.setVisible(visible); + fmInstance.setEnabled(true); + + } + }; + thread.start(); + // System.out.println("hello"); + + } + if (command.equals("show Tables source")) + { + Thread thread = new Thread() { + public void run() + { + fmInstance.setEnabled(false); + boolean visible = showTable(0); + window.validate(); + window.setVisible(visible); + fmInstance.setEnabled(true); + } + }; + thread.start(); + // System.out.println("hello"+thread); + + } + + if (command.equals("drop Tables")) + { + Thread thread = new Thread() { + public void run() + { + dropTable(); + } + }; + thread.start(); + } + if (command.equals("Quit")) + { + bean.closeAllConnections(); + destBean.closeAllConnections(); + fmInstance.dispose(); + System.exit(0); + + } + + } + + /** + * + */ + protected void synchronize() + { + Vector vectors[] = getListFromTable(); + Convert.user = bean.user; + Convert.passwd = bean.passwd; + Convert.userDest = destBean.user; + Convert.passwdDest = destBean.passwd; + try + { + + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + fmInstance.setEnabled(false); + // TODO indexList vector weiter reichen + Convert.synchronize(bean.url, destURLBox.getSelectedItem().toString(), vectors[0], + vectors[1], vectors[2], vectors[3], vectors[4], mode, delimiter, new Vector()); + + destBean.setConnection((String) destURLBox.getSelectedItem()); + DefaultListModel model = new DefaultListModel(); + tables = destBean.getTableNames(); + for (int j = 0; j < tables.size(); ++j) + model.addElement(tables.get(j)); + if (debug) + System.out.println("hallo" + tables + " "); + tListDest.setModel(model); + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } catch (Exception e4) + { + ByteArrayOutputStream b = new ByteArrayOutputStream(); + PrintStream stream = new PrintStream(b); + e4.printStackTrace(stream); + showErrorDialog(b.toString(), "Synchronize of table failed"); + fmInstance.setEnabled(true); + } + + } + + /** + * Updates the content of source to destination and makes new table if + * necessary + */ + + public void update() + { + Vector vectors[] = getListFromTable(); + Convert.user = bean.user; + Convert.passwd = bean.passwd; + Convert.userDest = destBean.user; + Convert.passwdDest = destBean.passwd; + try + { + + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + fmInstance.setEnabled(false); + Convert.update(bean.url, destURLBox.getSelectedItem().toString(), vectors[0], vectors[1], + vectors[2], vectors[3], vectors[4], mode); + + destBean.setConnection((String) destURLBox.getSelectedItem()); + DefaultListModel model = new DefaultListModel(); + tables = destBean.getTableNames(); + for (int j = 0; j < tables.size(); ++j) + model.addElement(tables.get(j)); + if (debug) + System.out.println("hallo" + tables + " "); + tListDest.setModel(model); + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } catch (Exception e4) + { + ByteArrayOutputStream b = new ByteArrayOutputStream(); + PrintStream stream = new PrintStream(b); + e4.printStackTrace(stream); + showErrorDialog(b.toString(), "Update of table failed"); + fmInstance.setEnabled(true); + } + + } + + public void delete() + { + Vector vectors[] = getListFromTable(); + Convert.user = bean.user; + Convert.passwd = bean.passwd; + Convert.userDest = destBean.user; + Convert.passwdDest = destBean.passwd; + try + { + + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + fmInstance.setEnabled(false); + Convert.delete(bean.url, destURLBox.getSelectedItem().toString(), vectors[0], vectors[1], + vectors[2], vectors[3], vectors[4], mode); + + destBean.setConnection((String) destURLBox.getSelectedItem()); + DefaultListModel model = new DefaultListModel(); + tables = destBean.getTableNames(); + for (int j = 0; j < tables.size(); ++j) + model.addElement(tables.get(j)); + if (debug) + System.out.println("hallo" + tables + " "); + tListDest.setModel(model); + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } catch (Exception e4) + { + ByteArrayOutputStream b = new ByteArrayOutputStream(); + PrintStream stream = new PrintStream(b); + e4.printStackTrace(stream); + showErrorDialog(b.toString(), "Delete of table failed"); + fmInstance.setEnabled(true); + } + + } + + /** + * Copys the content of source to destination and makes new table if necessary + */ + public void convert() + { + + Vector vectors[] = getListFromTable(); + Convert.user = bean.user; + Convert.passwd = bean.passwd; + Convert.userDest = destBean.user; + Convert.passwdDest = destBean.passwd; + try + { + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + fmInstance.setEnabled(false); + Convert.convert(bean.url, destURLBox.getSelectedItem().toString(), vectors[0], vectors[1], + vectors[2], vectors[3], vectors[4], mode, delimiter); + destBean.setConnection((String) destURLBox.getSelectedItem()); + DefaultListModel model = new DefaultListModel(); + tables = destBean.getTableNames(); + for (int j = 0; j < tables.size(); ++j) + model.addElement(tables.get(j)); + if (debug) + System.out.println("hallo" + tables + " "); + tListDest.setModel(model); + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } catch (Exception e4) + { + ByteArrayOutputStream b = new ByteArrayOutputStream(); + PrintStream stream = new PrintStream(b); + e4.printStackTrace(stream); + showErrorDialog(b.toString(), "Conversion of table failed"); + fmInstance.setEnabled(true); + } + } + + public void writeConfig(String file) + { + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + fmInstance.setEnabled(false); + + Vector vectors[] = getListFromTable(); + if (convertItem.isSelected()) + mode = Convert.DataBase.CONVERT_MODE; + else if (appendItem.isSelected()) + mode = Convert.DataBase.APPEND_MODE; + else if (updateItem.isSelected()) + mode = Convert.DataBase.UPDATE_MODE; + else if (deleteItem.isSelected()) + mode = Convert.DataBase.DELETE_MODE; + else if (synchronizeItem.isSelected()) + mode = Convert.DataBase.SYNCHRONIZE_MODE; + + // TODO add id vector in table and write it out + Convert.DataBase source = new Convert.DataBase(bean, vectors[0], vectors[1], vectors[2], + vectors[3], vectors[4], mode); + Convert.DataBase destination = new Convert.DataBase(destBean, new Vector(), new Vector(), + new Vector(), new Vector(), new Vector(), -1); + source.delimiter = delimiter; + source.useNormanToUnicodeMapper = useNormanToUnicodeMapper.isSelected(); + try + { + Convert.writeConfig(file, source, destination); + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + fmInstance.setEnabled(true); + + } catch (Exception e) + { + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + fmInstance.setEnabled(true); + + ByteArrayOutputStream b = new ByteArrayOutputStream(); + PrintStream stream = new PrintStream(b); + e.printStackTrace(stream); + showErrorDialog(b.toString(), "Error while writing xml config !"); + } + + } + + public void readXMLConfig(String file) + { + + try + { + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + fmInstance.setEnabled(false); + StringBuffer sb = Convert.readXMLFile(file); + Vector databases = Convert.getXMLConfig(sb); + 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.setVisible(true); + dialog.title.setText("Preparing tables to be diplayed"); + for (int i = 0; i < tables.size(); ++i) + { + dialog.table.setText("Getting table " + tables.get(i)); + dialog.status.setText("Table " + (i + 1) + " of " + tables.size()); + + if (list == 0) + query = "select * from " + bean.getQC() + tables.get(i).toString() + bean.getQC(); + else + query = "select * from " + destBean.getQC() + tables.get(i).toString() + destBean.getQC(); + if (list == 0) + query = vectors[2].get(i).toString(); + if (list == 0 && vectors[1].get(i) != null) + if (vectors[1].get(i).toString() != "") + { + String layout = " layout " + bean.getQC() + vectors[1].get(i).toString() + bean.getQC(); + String name = tables.get(i).toString(); + StringBuffer queryLayout = new StringBuffer(query); + queryLayout.insert(queryLayout.indexOf(name) + name.length() + 1, " " + layout); + query = queryLayout.toString(); + } + if (debug) + showErrorDialog("query in show tables is " + query, "Hello"); + window.title = " Table ;-) " + (String) tables.get(i); + // break; + // } else + // window.title = "Error! - No valid tablename found"; + + try + { + if ((query.toLowerCase().indexOf("insert") >= 0) + || (query.toLowerCase().indexOf("delete") >= 0) + || (query.toLowerCase().indexOf("alter") >= 0) + || (query.toLowerCase().indexOf("update") >= 0)) + { + Statement stm = (list > 0) ? destBean.getConnection().createStatement() : bean + .getConnection().createStatement(); + stm.executeUpdate(query); + Vector vec = new Vector(); + Vector vec2 = new Vector(); + Vector vec3 = new Vector(); + vec2.add(query); + vec3.add(vec2); + vec.add("Insert, update, etc done! No results available"); + // vec.add("no Results were produced"); + + window.updateResult(vec3, vec); + // window.pack(); + // window.setVisible(true); + + } else + { + Vector[] vecs = (list > 0) ? destBean.getQueryData(query, dialog, 50) : bean + .getQueryData(query, dialog, 50); + if (vecs[1].isEmpty()) + throw new Exception("Wrong columnname or Empty Layout"); + window.updateResult(vecs[0], vecs[1]); + + // window.pack(); + // String name = window.writeResult(); + // appendLog(window.title, name); + } + + // window.setVisible(true); + + } catch (Exception e) + { + System.out.println("Exception occured"); + e.printStackTrace(); + Vector vec = new Vector(); + Vector vec2 = new Vector(); + Vector vec3 = new Vector(); + vec2.add(e.getMessage()); + vec3.add(vec2); + vec.add("Exception occured! No results available"); + // vec.add("no Results were produced"); + + window.updateResult(vec3, vec); + // window.pack(); + // window.setVisible(true); + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + + } + } // to for + window.pack(); + window.setSize(700, 600); + + window.oldTabCount = 10000; + dialog.dispose(); + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + + return !tables.isEmpty(); + + } + + public void dropTable() + { + String query = new String(); + Object[] objs = tListDest.getSelectedValues(); + Vector tables = new Vector(); + for (int i = 0; i < objs.length; ++i) + { + System.out.println(objs[i]); + tables.add(objs[i]); + } + + for (int i = 0; i < tables.size(); ++i) + { + + query = "drop table " + destBean.getQC() + tables.get(i) + destBean.getQC(); + + try + { + Statement stm = destBean.getConnection().createStatement(); + stm.executeUpdate(query); + } catch (Exception e) + { + ByteArrayOutputStream b = new ByteArrayOutputStream(); + PrintStream stream = new PrintStream(b); + e.printStackTrace(stream); + showErrorDialog(b.toString(), "Open of table failed"); + + } + } // to for + try + { + destBean.setConnection((String) destURLBox.getSelectedItem()); + DefaultListModel model = new DefaultListModel(); + tables = destBean.getTableNames(); + for (int j = 0; j < tables.size(); ++j) + model.addElement(tables.get(j)); + System.out.println("hallo" + tables + " "); + tListDest.setModel(model); + } catch (Exception e4) + { + } + + } + + /** + * invoked then the user changes the table or the tableModel changes + */ + public void tableChanged(TableModelEvent e) + { + // if (e.getType() == e.INSERT) + // System.out.println("Insert done"); + // if (e.getType() == e.UPDATE) + // System.out.println("Update done"); + // if (e.getType() == e.DELETE) + // System.out.println("Delete done"); + if (e.getType() == TableModelEvent.UPDATE && !noDBUpdate) + { + int row = e.getFirstRow(), col = e.getColumn(); + System.out.println("Got in " + row + " " + col); + TableModel model = (TableModel) e.getSource(); + String columnName = model.getColumnName(col); + Object test = model.getValueAt(row, col); + String idVal = (test == null) ? "" : test.toString(); + String value = (test == null) ? "" : test.toString(); + ; + + System.out.println("Got in " + columnName + " " + idVal); + try + { + if (columnName.equals("select") || columnName.equals("Layouts")) + { + String table = model.getValueAt(row, NAME_INDEX).toString(); + String layout = (model.getValueAt(row, LAYOUT_INDEX) != null) ? ((JComboBox) model + .getValueAt(row, LAYOUT_INDEX)).getSelectedItem().toString() : ""; + String query = model.getValueAt(row, SELECT_INDEX).toString(); + String create = model.getValueAt(row, CREATE_INDEX).toString(); + String id = (model.getValueAt(row, ID_INDEX) != null) ? ((JComboBox) model.getValueAt( + row, ID_INDEX)).getSelectedItem().toString() : ""; + + System.out.println("table" + table + " layout " + layout + " query " + query); + if (!create.equals("")) + { + Object[] options = + { "Yes", "No" }; + int option = showDialog("Create Statement not empty! Do you want to overwrite?", + "create statement", options); + if (option == 0) + model.setValueAt(createStatement(table, destBean, layout, query), row, CREATE_INDEX); + } + if (columnName.equals("Layouts")) + { + + bean.makeQuery("select * from" + bean.getQC() + table + bean.getQC() + " layout " + + bean.getQC() + layout + bean.getQC(), 1); + + Vector idVec = bean.getColumnNames(); + if (idVec == null) + idVec = new Vector(); + idVec.add(0, ""); + JComboBox box = ((JComboBox) model.getValueAt(row, ID_INDEX)); + box.setModel(new DefaultComboBoxModel(idVec)); + box.setSelectedItem(id); + + tC.tableModel.fireTableCellUpdated(row, ID_INDEX); + } + + } + /* + * Statement stm = bean.getConnection().createStatement(); // + * stm.executeUpdate("DELETE FROM \""+fm.tables.get(0)+"\" WHERE + * \"erstellt von\"='rogo') "); + * + * if (idVal == "") stm.executeUpdate("INSERT INTO " + DBBean.quoteChar + + * box.getSelectedItem() + DBBean.quoteChar + " (" + DBBean.quoteChar + + * columnName + DBBean.quoteChar + ") VALUES ('" + value + "') "); else + * stm.executeUpdate( "UPDATE " + DBBean.quoteChar + + * box.getSelectedItem() + DBBean.quoteChar + " SET " + DBBean.quoteChar + + * columnName + DBBean.quoteChar + "='" + value + "' WHERE ID='" + idVal + "' + * "); + */ + } catch (Exception e2) + { + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + ByteArrayOutputStream b = new ByteArrayOutputStream(); + PrintStream stream = new PrintStream(b); + e2.printStackTrace(stream); + showErrorDialog(b.toString(), "Error while updating table !"); + } + } + } + + /** + * initialize the menubar + */ + private void setMenu() + { + JMenuBar menubar = new JMenuBar(); + JMenu menu = new JMenu("File"); + menu.setMnemonic('F'); + JMenuItem item = new JMenuItem("open XML Config"); + item.setToolTipText("opens a XML config file for batch conversion"); + item.setMnemonic('i'); + item.setAccelerator(KeyStroke.getKeyStroke('O', InputEvent.CTRL_DOWN_MASK)); + + item.addActionListener(fm); + menu.add(item); + item = new JMenuItem("save XML Config"); + item.setToolTipText("saves the current selections in an XML config file for batch conversion"); + item.setAccelerator(KeyStroke.getKeyStroke('S', InputEvent.CTRL_DOWN_MASK)); + item.setMnemonic('x'); + + item.addActionListener(fm); + menu.add(item); + item = new JMenuItem("Quit"); + item.setMnemonic('Q'); + item.setToolTipText("Quits the application"); + item.setAccelerator(KeyStroke.getKeyStroke('Q', InputEvent.CTRL_DOWN_MASK)); + item.addActionListener(fm); + menu.add(item); + + menubar.add(menu); + menu = new JMenu("Options"); + menu.setMnemonic('O'); + + ButtonGroup bgrp = new ButtonGroup(); + convertItem = new JCheckBoxMenuItem("Convert Mode"); + convertItem.setToolTipText("Normal table conversion existing table will be deleted"); + convertItem.addActionListener(fm); + + bgrp.add(convertItem); + + menu.add(convertItem); + menubar.add(menu); + + appendItem = new JCheckBoxMenuItem("Append Mode"); + appendItem.setToolTipText("Appends data to an existing table"); + appendItem.addActionListener(fm); + + bgrp.add(appendItem); + + menu.add(appendItem); + menubar.add(menu); + + updateItem = new JCheckBoxMenuItem("Update Mode"); + updateItem.setToolTipText("Updates data in an existing table"); + updateItem.addActionListener(fm); + + bgrp.add(updateItem); + + menu.add(updateItem); + deleteItem = new JCheckBoxMenuItem("Delete Mode"); + deleteItem + .setToolTipText("Deletes data in an existing table \n that has been deleted in source table"); + deleteItem.addActionListener(fm); + + bgrp.add(deleteItem); + + menu.add(deleteItem); + synchronizeItem = new JCheckBoxMenuItem("Synchronize Mode"); + synchronizeItem + .setToolTipText("Synchronizes data with an existing table \n Data wich has been added or removed will be deleted or addded to the destination table. The rest will be updated"); + synchronizeItem.addActionListener(fm); + + bgrp.add(synchronizeItem); + + menu.add(synchronizeItem); + useNormanToUnicodeMapper = new JCheckBoxMenuItem("use NormanToUnicodeMapper"); + useNormanToUnicodeMapper + .setToolTipText("maps characters in norman encoding to unicode characters"); + useNormanToUnicodeMapper.addActionListener(fm); + menu.add(useNormanToUnicodeMapper); + + menubar.add(menu); + item = new JMenuItem("show Driver features"); + item.setToolTipText("shows the features of the selected driver"); + item.addActionListener(fm); + menu.add(item); + menubar.add(menu); + delimiterItem = new JMenuItem("Delimiter"); + delimiterItem.setToolTipText("Delimiter for FM Arrayfields"); + delimiterItem.addActionListener(fm); + menu.add(delimiterItem); + menubar.add(menu); + + // item.addActionListener(fm); + // menu.add(item); + + menubar.add(menu); + + menu = new JMenu("About"); + menu.setMnemonic('A'); + aboutBox = new JMenuItem("about FM2SQL"); + aboutBox.addActionListener(fm); + menu.add(aboutBox); + 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.setVisible(true); + // JOptionPane.showMessageDialog(null, message, title, + // JOptionPane.ERROR_MESSAGE); + } + + public static class ProgressDialog extends JDialog + { + JLabel table = new JLabel(" "); + JLabel status = new JLabel(" "); + JLabel title = new JLabel(" "); + JPanel content = new JPanel(); + JPanel titlePanel = new JPanel(); + JPanel labelPanel = new JPanel(); + JPanel statusPanel = new JPanel(); + JPanel buttonPanel = new JPanel(); + + JProgressBar progress = new JProgressBar(); + JButton cancel = new JButton("Cancel"); + Thread thread; + DBBean bean; + + public ProgressDialog(JFrame frame, DBBean bean) + { + super(frame); + this.bean = bean; + + content = new JPanel(true); + // content.setBorder(BorderFactory.createRaisedBevelBorder()); + content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); + title = new JLabel("Progress of conversion"); + title.setHorizontalTextPosition(SwingConstants.CENTER); + titlePanel.add(title); + buttonPanel.add(cancel); + // content.add(titlePanel); + content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); + content.add(labelPanel); + content.add(new JLabel("")); + content.add(progress); + content.add(statusPanel); + content.add(buttonPanel); + content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); + labelPanel.add(table); + statusPanel.add(status); + getContentPane().add(titlePanel, "North"); + getContentPane().add(content, "Center"); + this.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) + { + cancel.doClick(); + } + }); + + cancel.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) + { + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + fmInstance.setEnabled(true); + setVisible(false); + try + { + ProgressDialog.this.bean.getConnection().close(); + } catch (SQLException e1) + { + // TODO Auto-generated catch block + e1.printStackTrace(); + } catch (Exception e1) + { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + thread.stop(); + } + }); + pack(); + + } + + } + + public static class DelimiterDialog extends JDialog + { + JLabel table = new JLabel(" "); + JLabel status = new JLabel(" "); + JLabel title = new JLabel(" "); + JPanel content = new JPanel(); + JPanel titlePanel = new JPanel(); + JPanel delimiterPanel = new JPanel(); + JPanel buttonPanel = new JPanel(); + JTextField delimiter = new JTextField(10); + + JButton cancel = new JButton("Cancel"); + JButton ok = new JButton("Ok"); + Thread thread; + + public DelimiterDialog(JFrame frame) + { + super(frame); + setTitle("Delimiter Editor"); + setModal(true); + content = new JPanel(true); + delimiter.setText(fmInstance.delimiter); + ActionListener al = new ActionListener() { + public void actionPerformed(ActionEvent e) + { + fmInstance.delimiter = parseDelimiter(delimiter.getText()); + setVisible(false); + } + + }; + this.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) + { + cancel.doClick(); + } + }); + + // delimiter.setText(fmInstance.delimiter); + delimiter.addActionListener(al); + content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); + title = new JLabel("Enter Delimiter "); + title.setHorizontalTextPosition(SwingConstants.CENTER); + titlePanel.add(title); + buttonPanel.add(ok); + buttonPanel.add(cancel); + content.add(titlePanel); + content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); + + content.add(new JLabel("")); + content.add(delimiterPanel); + content.add(buttonPanel); + content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); + + delimiterPanel.add(new JLabel("Delimiter: ")); + delimiterPanel.add(delimiter); + getContentPane().add(titlePanel, "North"); + getContentPane().add(content, "Center"); + ok.addActionListener(al); + cancel.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) + { + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + fmInstance.setEnabled(true); + setVisible(false); + // thread.stop(); + } + + }); + pack(); + setLocationRelativeTo(fmInstance); + } + + public String parseDelimiter(Object o) + { + String str = o.toString(); + StringBuffer sbuff = new StringBuffer(); + int length = str.length(); + for (int i = 0; i < length; ++i) + { + + if (str.charAt(i) == '\\') + { + System.out.println(str.charAt(i)); + if (str.charAt(i + 1) == 'r') + { + sbuff.append("\r"); + } + if (str.charAt(i + 1) == 't') + { + sbuff.append("\t"); + } + if (str.charAt(i + 1) == 'n') + { + sbuff.append("\n"); + } + if (str.charAt(i + 1) == '\\') + { + sbuff.append("\\"); + } + + if (i < length - 1) + ++i; + + } else + sbuff.append(str.charAt(i)); + } + + return sbuff.toString(); + } + } + + public static class PasswordDialog extends JDialog + { + JLabel table = new JLabel(" "); + JLabel status = new JLabel(" "); + JLabel title = new JLabel(" "); + JPanel content = new JPanel(); + JPanel titlePanel = new JPanel(); + JPanel userPanel = new JPanel(); + JPanel passwordPanel = new JPanel(); + JPanel buttonPanel = new JPanel(); + JTextField user = new JTextField(10); + JTextField passwd = new JPasswordField(10); + + JButton cancel = new JButton("Cancel"); + JButton ok = new JButton("Ok"); + DBBean bean = null; + Thread thread; + + public PasswordDialog(JFrame frame, DBBean localBean) + { + super(frame); + setTitle("PasswordDialog"); + setModal(true); + content = new JPanel(true); + this.bean = localBean; + // content.setBorder(BorderFactory.createRaisedBevelBorder()); + ActionListener al = new ActionListener() { + public void actionPerformed(ActionEvent e) + { + bean.setUserAndPasswd(user.getText(), passwd.getText()); + setVisible(false); + } + + }; + this.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) + { + cancel.doClick(); + } + }); + + user.setText(localBean.user); + passwd.setText(localBean.passwd); + user.addActionListener(al); + passwd.addActionListener(al); + content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); + title = new JLabel("Enter user and password "); + title.setHorizontalTextPosition(SwingConstants.CENTER); + titlePanel.add(title); + buttonPanel.add(ok); + buttonPanel.add(cancel); + content.add(titlePanel); + content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); + // content.add(labelPanel); + content.add(new JLabel("")); + content.add(userPanel); + content.add(passwordPanel); + content.add(buttonPanel); + content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); + // labelPanel.add(table); + userPanel.add(new JLabel("Username: ")); + userPanel.add(user); + passwordPanel.add(new JLabel("Password: ")); + passwordPanel.add(passwd); + passwd.setPreferredSize(user.getPreferredSize()); + passwd.setMinimumSize(passwd.getPreferredSize()); + passwd.setMaximumSize(passwd.getPreferredSize()); + passwd.setSize(passwd.getPreferredSize()); + getContentPane().add(titlePanel, "North"); + getContentPane().add(content, "Center"); + ok.addActionListener(al); + cancel.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) + { + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + fmInstance.setEnabled(true); + setVisible(false); + thread.stop(); + } + + }); + pack(); + + } + + } + + public void fillTable() + { + noDBUpdate = true; + bean.setUseNormanToUnicodeMapper(useNormanToUnicodeMapper.isSelected()); + Vector tableNames = bean.getTableNames(); + Collections.sort(tableNames, String.CASE_INSENSITIVE_ORDER); + Vector[] data = new Vector[2]; + data[1] = new Vector(6); + data[1].setSize(6); + data[1].set(STATUS_INDEX, " "); + data[1].set(NAME_INDEX, " source Tablename "); + data[1].set(LAYOUT_INDEX, "Layouts"); + data[1].set(SELECT_INDEX, "select"); + data[1].set(CREATE_INDEX, "create"); + data[1].set(ID_INDEX, " id "); + data[0] = new Vector(); + for (int i = 0; i < tableNames.size(); i++) + { + String name = tableNames.get(i).toString(); + Vector layouts = new Vector(); + Vector idVec = new Vector(); + + try + { + bean.makeQuery("select * from" + bean.getQC() + name + bean.getQC(), 1); + layouts = bean.getLayoutNames(name); + } catch (SQLException e) + { + layouts = new Vector(); + } catch (Exception e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + idVec = bean.getColumnNames(); + if (idVec == null) + idVec = new Vector(); + idVec.add(0, ""); + Vector dataRow = new Vector(6); + + dataRow.setSize(6); + dataRow.set(STATUS_INDEX, Boolean.FALSE); + dataRow.set(NAME_INDEX, name); + + dataRow.set(SELECT_INDEX, new TableComponent.SQLCommand("select * from " + bean.getQC() + + name + bean.getQC())); + if (!layouts.isEmpty()) + dataRow.set(LAYOUT_INDEX, new JComboBox(layouts)); + else + dataRow.set(LAYOUT_INDEX, null); + + // create row + dataRow.set(CREATE_INDEX, new TableComponent.SQLCommand("")); + // id row + dataRow.set(ID_INDEX, new TableComponent.IDComboBox(idVec));// new + // TableComponent.SQLCommand("")); + bean.ids.add(""); + data[0].add(dataRow); + + // System.out.println(dataRow); + } + + tC.booleanRenderer.renderFalseEmpty = true; + tC.tableModel.setDataVector(data[0], data[1]); + // @TODO new sizeToFit method needed + // tC.sizeToFit(450, 250); + Dimension dim = listPanel.getPreferredSize(); + tC.sizeToFit(dim.width, dim.height); + tC.revalidate(); + tC.tableModel.fireTableDataChanged(); + noDBUpdate = false; + + } + + public Vector[] getListFromTable() + { + Vector[] vec = new Vector[5]; + vec[0] = new Vector(); + vec[1] = new Vector(); + vec[2] = new Vector(); + vec[3] = new Vector(); + vec[4] = new Vector(); + for (int i = 0; i < tC.tableModel.getRowCount(); ++i) + { + } + int[] rows = tC.table.getSelectedRows(); + for (int i = 0; i < tC.tableModel.getRowCount(); i++) + { + if (((Boolean) tC.tableModel.getValueAt(i, STATUS_INDEX)) == Boolean.FALSE) + { + System.out.println("skipped row " + i); + continue; + } + + // System.out.println(tC.tableModel.getValueAt(rows[i],1)); + vec[0].add(tC.tableModel.getValueAt(i, NAME_INDEX)); + JComboBox box = ((JComboBox) tC.tableModel.getValueAt(i, LAYOUT_INDEX)); + String layoutName = (box != null) ? box.getSelectedItem().toString() : ""; + + String idName = ((JComboBox) tC.tableModel.getValueAt(i, ID_INDEX)).getSelectedItem() + .toString(); + vec[1].add(layoutName); + vec[2].add(tC.tableModel.getValueAt(i, SELECT_INDEX).toString()); + vec[3].add(tC.tableModel.getValueAt(i, CREATE_INDEX).toString()); + vec[4].add(idName); + + } + return vec; + } + + public void setEnabled(boolean state) + { + showTables.setEnabled(state); + showTables1.setEnabled(state); + convert.setEnabled(state); + dropTables.setEnabled(state); + sourceURLBox.setEnabled(state); + destURLBox.setEnabled(state); + + } + + public TableComponent.SQLCommand createStatement(String table, DBBean beanDest, String layout, + String query) throws SQLException, ParseException, Exception + { + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + + if (beanDest.url.equals("")) + beanDest.url = destURLBox.getSelectedItem().toString(); + StringBuffer command = new StringBuffer(50); + command.append("\n CREATE TABLE "); + command.append(beanDest.getQC()); + command.append(Convert.convertText(table)); + command.append(beanDest.getQC()); + command.append("\n ( "); + String type = null; + // String query = "select * from " + bean.getQC() +table + bean.getQC(); + if (!layout.equals("")) + { + layout = " layout " + bean.getQC() + layout + bean.getQC(); + StringBuffer queryLayout = new StringBuffer(query); + queryLayout.insert(queryLayout.indexOf(table) + table.length() + 1, " " + layout); + query = queryLayout.toString(); + System.out.println("added layout " + query); + + } + Vector[] result = bean.getQueryData(query, 1); + for (int i = 0; i < result[1].size() - 1; ++i) + { + type = bean.metaData.getColumnTypeName(i + 1); + // System.out.println(i+" "+result[1].get(i)+" "+type); + type = (type.equals("NUMBER")) ? "INT4" : type; + type = (type.equals("CONTAINER")) ? "TEXT" : type; + type = type.toUpperCase(); + if (i == 0) + command.append(beanDest.getQC() + Convert.convertText((String) result[1].get(i)) + + beanDest.getQC() + " " + type + ", "); + else + command + .append(" " + beanDest.getQC() + + Convert.convertText((String) result[1].get(i)) + beanDest.getQC() + " " + type + + ", "); + command.append("\n"); + } + type = bean.metaData.getColumnTypeName(result[1].size()); + type = (type.equals("NUMBER")) ? "INT4" : type; + type = (type.equals("CONTAINER")) ? "TEXT" : type; + type = type.toUpperCase(); + command.append(" " + beanDest.getQC() + + Convert.convertText((String) result[1].get(result[1].size() - 1)) + beanDest.getQC() + + " " + type); + command.append("\n )\n"); + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + + return new TableComponent.SQLCommand(command.toString()); + } + + static class XMLFilter extends javax.swing.filechooser.FileFilter + { + public boolean accept(java.io.File file) + { + if (file.getName().toLowerCase().endsWith(".xml") || file.isDirectory()) + return true; + else + return false; + } + + public String getDescription() + { + return "Batch Convert XML File"; + } + + } + + public static int showDialog(String message, String title, Object[] options) + { + int option = JOptionPane.showOptionDialog(null, message, title, JOptionPane.DEFAULT_OPTION, + JOptionPane.WARNING_MESSAGE, null, options, options[0]); + return option; - } + } } \ No newline at end of file