Diff for /FM2SQL/Attic/FM2SQL.java between versions 1.8 and 1.45

version 1.8, 2004/01/09 12:43:00 version 1.45, 2004/10/29 10:28:10
Line 1 Line 1
 import javax.swing.*;  /*
 import javax.swing.event.*;   * FM2SQL.java -- Main program Filemaker to SQL Converter 
 import javax.swing.table.TableModel;   * Copyright (C) 2003 Robert Gordesch (rogo@mpiwg-berlin.mpg.de
    * This program is free software; you can redistribute it and/or modify it
    * under the terms of the GNU General Public License as published by the Free
    * Software Foundation; either version 2 of the License, or (at your option)
    * any later version.  Please read license.txt for the full details. A copy of
    * the GPL may be found at http://www.gnu.org/copyleft/lgpl.html  You should
    * have received a copy of the GNU General Public License along with this
    * program; if not, write to the Free Software Foundation, Inc., 59 Temple
    * Place, Suite 330, Boston, MA 02111-1307 USA  Created on 15.09.2003 by
    * rogo  
    */
   
 import java.awt.event.*;  import java.awt.Cursor;
 import java.awt.Dimension;  import java.awt.Dimension;
 import java.awt.*;  import java.awt.Font;
 import java.sql.*;  import java.awt.GridBagConstraints;
 import java.util.*;  import java.awt.GridBagLayout;
 import java.io.*;  import java.awt.Image;
   import java.awt.Insets;
   import java.awt.event.ActionEvent;
   import java.awt.event.ActionListener;
   import java.awt.event.ComponentAdapter;
   import java.awt.event.ComponentEvent;
   import java.awt.event.InputEvent;
   import java.awt.event.WindowAdapter;
   import java.awt.event.WindowEvent;
   import java.io.ByteArrayOutputStream;
   import java.io.File;
   import java.io.FileWriter;
   import java.io.PrintStream;
   import java.sql.SQLException;
   import java.sql.Statement;
   import java.text.ParseException;
   import java.util.Collections;
   import java.util.Iterator;
   import java.util.Vector;
   
   import javax.swing.Box;
   import javax.swing.BoxLayout;
   import javax.swing.ButtonGroup;
   import javax.swing.DefaultComboBoxModel;
   import javax.swing.DefaultListModel;
   import javax.swing.JButton;
   import javax.swing.JCheckBoxMenuItem;
   import javax.swing.JComboBox;
   import javax.swing.JDialog;
   import javax.swing.JFileChooser;
   import javax.swing.JFrame;
   import javax.swing.JLabel;
   import javax.swing.JList;
   import javax.swing.JMenu;
   import javax.swing.JMenuBar;
   import javax.swing.JMenuItem;
   import javax.swing.JOptionPane;
   import javax.swing.JPanel;
   import javax.swing.JPasswordField;
   import javax.swing.JProgressBar;
   import javax.swing.JScrollBar;
   import javax.swing.JScrollPane;
   import javax.swing.JSplitPane;
   import javax.swing.JTextArea;
   import javax.swing.JTextField;
   import javax.swing.KeyStroke;
   import javax.swing.ListSelectionModel;
   import javax.swing.event.TableModelEvent;
   import javax.swing.event.TableModelListener;
   import javax.swing.table.TableModel;
 /**  /**
  *   *
  * <br>   * <br>
  * <h2>FileMaker Test (JDBC Database Driver Test)</h2>   * <h2>FileMaker Test (JDBC Database Driver Test)</h2>
  * Main class :   * Main class : contains the main Frame, all event handlers etc <br>
  * contains the main Frame, all event handlers etc   * The Database access is made over DBBean class all other classes are just for
  * <br>   * the visualization of the data
  * The Database access is made over DBBean class   * 
  * all other classes are just for the visualization of the data  
  *  @version 0.3( first stable release)   *  @version 0.3( first stable release)
  *  @author rogo   *  @author rogo
  *   *
  */   */
 public class FM2SQL extends JFrame implements ActionListener, TableModelListener  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.    * The database Bean instance.
   *    *
Line 35  public class FM2SQL extends JFrame imple Line 107  public class FM2SQL extends JFrame imple
   DBBean destBean;    DBBean destBean;
   
   /**    /**
    *  box - Tablenames  
    */  
   
   JComboBox box;  
   /**  
    *  tList - Tablenames to choose from     *  tList - Tablenames to choose from
    */     */
   
   JList tList = new JList(new String[] { "no database", "connection", "" });      JList tList = new JList(new String[]
   JList tListDest = new JList(new String[] { "no database connection", "", "" });      {"no database", "connection", ""});
       JList tListDest = new JList(new String[]
       {"no database connection", "", ""});
   
   /**    /**
    *  box2 - Layout names       * sourceUrl - Database URL ComboBox
    */     */
       JComboBox sourceURLBox;
   JComboBox box2;  
   /**    /**
   *  box3 - Database URLs       * destUrlBox - Database URL ComboBox
   */    */
   JComboBox box3;      JComboBox destURLBox;
   /**  
   *  box4 - Database URLs  
   */  
   JComboBox box4;  
   
   TableComponent table, tC;    TableComponent table, tC;
   Vector tables = new Vector();    Vector tables = new Vector();
Line 89  public class FM2SQL extends JFrame imple Line 153  public class FM2SQL extends JFrame imple
   int oldWidth = 0, oldHeight = 0;    int oldWidth = 0, oldHeight = 0;
   boolean resize = true;    boolean resize = true;
   static FileWriter logFile;    static FileWriter logFile;
       String delimiter = "";
   
   Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();    Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
   JFileChooser configExportFileChooser;    JFileChooser configExportFileChooser;
   JFileChooser configImportFileChooser;    JFileChooser configImportFileChooser;
       private JCheckBoxMenuItem synchronizeItem;
     
   /**    /**
    * tries to connect to database specified in url-Variable.       * tries to connect to database specified in url-Variable. initializes all GUI
    * initializes all GUI components, then fails throws an exception       * components, then fails throws an exception
    *     *
    */     */
   public FM2SQL() throws Exception    public FM2SQL() throws Exception
Line 105  public class FM2SQL extends JFrame imple Line 172  public class FM2SQL extends JFrame imple
   }    }
   public void initializeGUI() throws Exception    public void initializeGUI() throws Exception
   {    {
     Image local = getToolkit().getImage(getClass().getResource("icons/fm.jpg"));          Image local = getToolkit().getImage(FM2SQL.class.getResource("icons/fm.jpg"));
     if (local != null);          if (local != null)
               ;
     setIconImage(local);      setIconImage(local);
     bean = new DBBean();      bean = new DBBean();
     destBean = new DBBean();      destBean = new DBBean();
     box2 = new JComboBox();          sourceURLBox = new JComboBox(new String[]
     box3 = new JComboBox(new String[] { "jdbc:fmpro:http://141.14.237.74:8050", "jdbc:fmpro:http://localhost", "jdbc:postgresql://foxridge/test" });          {"jdbc:fmpro:http://141.14.237.74:8050", "jdbc:fmpro:http://localhost", "jdbc:postgresql://foxridge/test", "jdbc:sequelink://r583-3:2399"});
     box3.setEditable(true);          sourceURLBox.setEditable(true);
     box4 = new JComboBox(new String[] { "jdbc:postgresql://foxridge/test", "jdbc:postgresql://erebos/test1" });          sourceURLBox.setFont(new Font("Times New Roman", Font.PLAIN, 14));
     box4.setEditable(true);          destURLBox = new JComboBox(new String[]
     box4.addActionListener(this);          {"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();      table = new TableComponent();
     box = new JComboBox(tables);          //box = new JComboBox(tables);
     box.addActionListener(this);          // box.addActionListener(this);
     box2.addActionListener(this);          // box2.addActionListener(this);
     box3.addActionListener(this);          sourceURLBox.addActionListener(this);
   
     contentPanel = new JPanel();      contentPanel = new JPanel();
     contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));      contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));
   
     box3.setMinimumSize(new Dimension(450, 20));          sourceURLBox.setMinimumSize(new Dimension(450, 25));
     box3.setMaximumSize(new Dimension(550, 20));          sourceURLBox.setMaximumSize(new Dimension(550, 25));
     box3.setPreferredSize(new Dimension(450, 20));          sourceURLBox.setPreferredSize(new Dimension(450, 25));
     box4.setMinimumSize(new Dimension(450, 20));          destURLBox.setMinimumSize(new Dimension(450, 25));
     box4.setMaximumSize(new Dimension(550, 20));          destURLBox.setMaximumSize(new Dimension(550, 25));
     box4.setPreferredSize(new Dimension(450, 20));          destURLBox.setPreferredSize(new Dimension(450, 25));
     paneDest = new JScrollPane(tListDest);      paneDest = new JScrollPane(tListDest);
    // tListDest.setPreferredSize(paneDest.getPreferredSize());     // tListDest.setPreferredSize(paneDest.getPreferredSize());
    // paneDest.setPreferredSize(new Dimension(350, 365));     // paneDest.setPreferredSize(new Dimension(350, 365));
Line 176  public class FM2SQL extends JFrame imple Line 247  public class FM2SQL extends JFrame imple
   
     gbc.anchor = GridBagConstraints.NORTHWEST;      gbc.anchor = GridBagConstraints.NORTHWEST;
     gbc.gridy = 1;      gbc.gridy = 1;
     topPanel.add(box3, gbc);          topPanel.add(sourceURLBox, gbc);
   
     topPanel2.add(box4, gbc);          topPanel2.add(destURLBox, gbc);
   
     //gbc.gridx=GridBagConstraints.RELATIVE;         //gbc.gridx=GridBagConstraints.RELATIVE;   
     //dataBasePanel.add(new JLabel("  select Tables to Convert  ", JLabel.LEFT));      //dataBasePanel.add(new JLabel("  select Tables to Convert  ", JLabel.LEFT));
Line 266  public class FM2SQL extends JFrame imple Line 337  public class FM2SQL extends JFrame imple
     {      {
       public void windowClosing(WindowEvent e)        public void windowClosing(WindowEvent e)
       {        {
                   bean.closeAllConnections();
                   destBean.closeAllConnections();
         System.exit(0);          System.exit(0);
       }        }
     });      });
Line 276  public class FM2SQL extends JFrame imple Line 349  public class FM2SQL extends JFrame imple
   
         if (oldWidth != getWidth() || oldHeight != getHeight())          if (oldWidth != getWidth() || oldHeight != getHeight())
         {          {
           table.sizeToFit(getWidth(), getHeight());                      //table.sizeToFit(getWidth(), getHeight());
   
           Dimension dim = table.table.getPreferredSize();            Dimension dim = table.table.getPreferredSize();
           int size = contentPanel.getPreferredSize().height + new JScrollBar().getPreferredSize().height + new JMenuBar().getPreferredSize().height + 10;            int size = contentPanel.getPreferredSize().height + new JScrollBar().getPreferredSize().height + new JMenuBar().getPreferredSize().height + 10;
Line 295  public class FM2SQL extends JFrame imple Line 368  public class FM2SQL extends JFrame imple
             setSize(getWidth(), table.table.getPreferredSize().height + 2 * size);              setSize(getWidth(), table.table.getPreferredSize().height + 2 * size);
           // System.out.println("size" + size);            // System.out.println("size" + size);
         }          }
         //   listPanel.setMaximumSize(new Dimension(getPreferredSize().width - 5, 550));                  //   listPanel.setMaximumSize(new Dimension(getPreferredSize().width - 5,
         //   listPanel.setMinimumSize(new Dimension(getPreferredSize().width - 5, 200));                  // 550));
         //    listPanel.setPreferredSize(new Dimension(getPreferredSize().width - 5, 370));                  //   listPanel.setMinimumSize(new Dimension(getPreferredSize().width - 5,
                   // 200));
                   //    listPanel.setPreferredSize(new Dimension(getPreferredSize().width -
                   // 5, 370));
         tC.tableScroller.revalidate();          tC.tableScroller.revalidate();
         Dimension dim = getSize();          Dimension dim = getSize();
         tC.tableScroller.setMinimumSize(new Dimension(dim.width-400, dim.height - topPanel.getPreferredSize().height - 100));          tC.tableScroller.setMinimumSize(new Dimension(dim.width-400, dim.height - topPanel.getPreferredSize().height - 100));
Line 310  public class FM2SQL extends JFrame imple Line 386  public class FM2SQL extends JFrame imple
           
         paneDest.validate();          paneDest.validate();
         // tC.tableScroller.setPreferredSize(getSize());          // tC.tableScroller.setPreferredSize(getSize());
                   // @TODO new sizeToFit method for listPanel table!!!
         tC.sizeToFit(getWidth(), getHeight());          tC.sizeToFit(getWidth(), getHeight());
         ((JPanel) getContentPane()).revalidate();          ((JPanel) getContentPane()).revalidate();
         repaint();          repaint();
Line 351  public class FM2SQL extends JFrame imple Line 428  public class FM2SQL extends JFrame imple
       fmInstance = new FM2SQL();        fmInstance = new FM2SQL();
       fmInstance.table.tableModel.addTableModelListener(fmInstance);        fmInstance.table.tableModel.addTableModelListener(fmInstance);
       fmInstance.setVisible(true);        fmInstance.setVisible(true);
       /*   if (!new File("./html").exists())              /*
            new File("./html").mkdirs();               * if (!new File("./html").exists()) new File("./html").mkdirs(); logFile =
          logFile = new FileWriter("./html/index.html");               * new FileWriter("./html/index.html"); openLog();
          openLog();  
       */        */
     } catch (Exception e)          }
           catch (Exception e)
     {      {
       JOptionPane pane = new JOptionPane(e.getMessage() + "  \n URL: " + url, JOptionPane.ERROR_MESSAGE);        JOptionPane pane = new JOptionPane(e.getMessage() + "  \n URL: " + url, JOptionPane.ERROR_MESSAGE);
   
Line 389  public class FM2SQL extends JFrame imple Line 466  public class FM2SQL extends JFrame imple
     if (command == "comboBoxEdited")      if (command == "comboBoxEdited")
     {      {
       Object src = e.getSource();        Object src = e.getSource();
       if (src == box3)              if (src == sourceURLBox)
       {        {
         if (debug)          if (debug)
           System.out.println("hey" + box3.getSelectedItem());                      System.out.println("hey" + sourceURLBox.getSelectedItem());
         Object insObj =box3.getSelectedItem();                  Object insObj = sourceURLBox.getSelectedItem();
         ((DefaultComboBoxModel) box3.getModel()).removeElement(insObj);                  ((DefaultComboBoxModel) sourceURLBox.getModel()).removeElement(insObj);
      
         ((DefaultComboBoxModel) box3.getModel()).insertElementAt(insObj, 0);                  ((DefaultComboBoxModel) sourceURLBox.getModel()).insertElementAt(insObj, 0);
         box3.setSelectedItem(insObj);                  sourceURLBox.setSelectedItem(insObj);
       } else if (src == box4)              }
               else if (src == destURLBox)
       {        {
         if (debug)          if (debug)
           System.out.println("hey" + box4.getSelectedItem());                      System.out.println("hey" + destURLBox.getSelectedItem());
         //((DefaultComboBoxModel) box4.getModel()).insertElementAt(box4.getSelectedItem(), 0);                  //((DefaultComboBoxModel)
                   // box4.getModel()).insertElementAt(box4.getSelectedItem(), 0);
         try          try
         {          {
           String selected = (String) box4.getSelectedItem();                      String selected = (String) destURLBox.getSelectedItem();
           destBean.setConnection(selected);            destBean.setConnection(selected);
           Vector catalogs = destBean.getCatalogs();            Vector catalogs = destBean.getCatalogs();
           Vector urls = new Vector();            Vector urls = new Vector();
Line 413  public class FM2SQL extends JFrame imple Line 492  public class FM2SQL extends JFrame imple
           {            {
             urls.add(destBean.url.substring(0, destBean.url.lastIndexOf("/") + 1) + catalogs.get(i));              urls.add(destBean.url.substring(0, destBean.url.lastIndexOf("/") + 1) + catalogs.get(i));
           }            }
           box4.setModel(new DefaultComboBoxModel(urls));                      destURLBox.setModel(new DefaultComboBoxModel(urls));
           box4.setSelectedItem(selected);                      destURLBox.setSelectedItem(selected);
         } catch (Exception e5)                  }
                   catch (Exception e5)
         {          {
         }          }
       }        }
Line 427  public class FM2SQL extends JFrame imple Line 507  public class FM2SQL extends JFrame imple
         //System.out.println("hallo " + (e.getSource() == box3));          //System.out.println("hallo " + (e.getSource() == box3));
   
         Object src = e.getSource();          Object src = e.getSource();
         if (src == box3&&!noUserUpdate)                  if (src == sourceURLBox && !noUserUpdate)
         {          {
           Thread thread = new Thread()            Thread thread = new Thread()
           {            {
Line 437  public class FM2SQL extends JFrame imple Line 517  public class FM2SQL extends JFrame imple
               try                try
               {                {
                 PasswordDialog dialog = new PasswordDialog(fmInstance, bean);                  PasswordDialog dialog = new PasswordDialog(fmInstance, bean);
                 dialog.setLocationRelativeTo(box3);                                  dialog.setLocationRelativeTo(sourceURLBox);
                 dialog.thread = Thread.currentThread();                  dialog.thread = Thread.currentThread();
                 fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));                  fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
                 fmInstance.setEnabled(false);                  fmInstance.setEnabled(false);
                 dialog.setVisible(true);                  dialog.setVisible(true);
                 String url = box3.getSelectedItem().toString();                                  String url = sourceURLBox.getSelectedItem().toString();
                 bean.url = (url != null) ? url : bean.url;                  bean.url = (url != null) ? url : bean.url;
                 bean.connection = null;                  bean.connection = null;
                 bean.getConnection();                  bean.getConnection();
Line 451  public class FM2SQL extends JFrame imple Line 531  public class FM2SQL extends JFrame imple
                 fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));                  fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                                 fmInstance.setEnabled(true);                                  fmInstance.setEnabled(true);
                 //  System.out.println("hallo" + tables + " ");                  //  System.out.println("hallo" + tables + " ");
               } catch (Exception e5)                              }
                               catch (Exception e5)
               {                {
                 ByteArrayOutputStream b = new ByteArrayOutputStream();                  ByteArrayOutputStream b = new ByteArrayOutputStream();
                 PrintStream stream = new PrintStream(b);                  PrintStream stream = new PrintStream(b);
Line 474  public class FM2SQL extends JFrame imple Line 555  public class FM2SQL extends JFrame imple
             }              }
           };            };
           thread.start();            thread.start();
         } else if (src == box4&&!noUserUpdate)                  }
                   else if (src == destURLBox && !noUserUpdate)
         {          {
           Thread thread = new Thread()            Thread thread = new Thread()
           {            {
Line 485  public class FM2SQL extends JFrame imple Line 567  public class FM2SQL extends JFrame imple
               {                {
   
                 PasswordDialog dialog = new PasswordDialog(fmInstance, destBean);                  PasswordDialog dialog = new PasswordDialog(fmInstance, destBean);
                 dialog.setLocationRelativeTo(box4);                                  dialog.setLocationRelativeTo(destURLBox);
                 dialog.thread = Thread.currentThread();                  dialog.thread = Thread.currentThread();
                 fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));                  fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
                                 fmInstance.setEnabled(false);                                  fmInstance.setEnabled(false);
                 dialog.setVisible(true);                  dialog.setVisible(true);
                 destBean.setConnection((String) box4.getSelectedItem());                                  destBean.setConnection((String) destURLBox.getSelectedItem());
                 DefaultListModel model = new DefaultListModel();                  DefaultListModel model = new DefaultListModel();
                 Vector tables = destBean.getTableNames();                  Vector tables = destBean.getTableNames();
                 for (int j = 0; j < tables.size(); ++j)                  for (int j = 0; j < tables.size(); ++j)
Line 500  public class FM2SQL extends JFrame imple Line 582  public class FM2SQL extends JFrame imple
                 //  System.out.println("hallo" + tables + " ");                  //  System.out.println("hallo" + tables + " ");
                 fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));                  fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                                 fmInstance.setEnabled(true);                                  fmInstance.setEnabled(true);
               } catch (Exception e5)                              }
                               catch (Exception e5)
               {                {
                 ByteArrayOutputStream b = new ByteArrayOutputStream();                  ByteArrayOutputStream b = new ByteArrayOutputStream();
                 PrintStream stream = new PrintStream(b);                  PrintStream stream = new PrintStream(b);
Line 521  public class FM2SQL extends JFrame imple Line 604  public class FM2SQL extends JFrame imple
         setTitle("Filemaker 2 SQL Conversion Tool ");          setTitle("Filemaker 2 SQL Conversion Tool ");
         // pack();          // pack();
   
       } catch (Exception e4)              }
               catch (Exception e4)
       {        {
         ByteArrayOutputStream b = new ByteArrayOutputStream();          ByteArrayOutputStream b = new ByteArrayOutputStream();
         PrintStream stream = new PrintStream(b);          PrintStream stream = new PrintStream(b);
Line 541  public class FM2SQL extends JFrame imple Line 625  public class FM2SQL extends JFrame imple
         result.title = "Database features";          result.title = "Database features";
         result.setVisible(true);          result.setVisible(true);
         String name = result.writeResult();          String name = result.writeResult();
       } catch (Exception e2)              }
               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     //writing config
     if (command.equals("save XML Config"))      if (command.equals("save XML Config"))
     {      {
Line 615  public class FM2SQL extends JFrame imple Line 755  public class FM2SQL extends JFrame imple
         
     }      }
               
                if (command.equals("Convert Tables") || command.equals("Append Tables"))
     if (command.equals("Convert Tables"))  
     {      {
   
       Thread thread = new Thread()        Thread thread = new Thread()
Line 631  public class FM2SQL extends JFrame imple Line 770  public class FM2SQL extends JFrame imple
       };        };
       thread.start();        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"))      if (command.equals("show Tables"))
     {      {
       Thread thread = new Thread()        Thread thread = new Thread()
Line 680  public class FM2SQL extends JFrame imple Line 865  public class FM2SQL extends JFrame imple
     }      }
   if(command.equals("Quit"))    if(command.equals("Quit"))
    {     {
               bean.closeAllConnections();
               destBean.closeAllConnections();
      fmInstance.dispose();       fmInstance.dispose();
      System.exit(0);       System.exit(0);
       
Line 687  public class FM2SQL extends JFrame imple Line 874  public class FM2SQL extends JFrame imple
         
   }    }
   /**    /**
        *  
        */
       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     * Copys the content of source to destination and makes new table if necessary
    */     */
   public void convert()    public void convert()
Line 701  public class FM2SQL extends JFrame imple Line 1000  public class FM2SQL extends JFrame imple
     {      {
       fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));        fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
       fmInstance.setEnabled(false);        fmInstance.setEnabled(false);
       Convert.convert(bean.url, box4.getSelectedItem().toString(), vectors[0], vectors[1],vectors[2],vectors[3]);              Convert.convert(bean.url, destURLBox.getSelectedItem().toString(), vectors[0], vectors[1], vectors[2], vectors[3], vectors[4], mode, delimiter);
               destBean.setConnection((String) destURLBox.getSelectedItem());
       destBean.setConnection((String) box4.getSelectedItem());  
       DefaultListModel model = new DefaultListModel();        DefaultListModel model = new DefaultListModel();
       tables = destBean.getTableNames();        tables = destBean.getTableNames();
       for (int j = 0; j < tables.size(); ++j)        for (int j = 0; j < tables.size(); ++j)
Line 712  public class FM2SQL extends JFrame imple Line 1010  public class FM2SQL extends JFrame imple
         System.out.println("hallo" + tables + " ");          System.out.println("hallo" + tables + " ");
       tListDest.setModel(model);        tListDest.setModel(model);
       fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));        fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
     } catch (Exception e4)          }
           catch (Exception e4)
     {      {
       ByteArrayOutputStream b = new ByteArrayOutputStream();        ByteArrayOutputStream b = new ByteArrayOutputStream();
       PrintStream stream = new PrintStream(b);        PrintStream stream = new PrintStream(b);
Line 727  public class FM2SQL extends JFrame imple Line 1026  public class FM2SQL extends JFrame imple
     fmInstance.setEnabled(false);      fmInstance.setEnabled(false);
   
     Vector vectors[] = getListFromTable();      Vector vectors[] = getListFromTable();
     Convert.DataBase source = new Convert.DataBase(bean,vectors[0],vectors[1],vectors[2],vectors[3]);          if (convertItem.isSelected())
     Convert.DataBase destination = new Convert.DataBase(destBean,new Vector(),new Vector(),new Vector(),new Vector());              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      try
     {      {
       Convert.writeConfig(file,source,destination);        Convert.writeConfig(file,source,destination);
       fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));        fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
       fmInstance.setEnabled(true);        fmInstance.setEnabled(true);
   
     } catch (Exception e)          }
           catch (Exception e)
     {      {
       fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));        fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
       fmInstance.setEnabled(true);        fmInstance.setEnabled(true);
Line 761  public class FM2SQL extends JFrame imple Line 1074  public class FM2SQL extends JFrame imple
       noUserUpdate = true;        noUserUpdate = true;
       destBean=destBase.bean;        destBean=destBase.bean;
       Object destObj =destBean.url;        Object destObj =destBean.url;
       ((DefaultComboBoxModel) box4.getModel()).removeElement(destObj);              ((DefaultComboBoxModel) destURLBox.getModel()).removeElement(destObj);
       ((DefaultComboBoxModel) box4.getModel()).insertElementAt(destObj,0);              ((DefaultComboBoxModel) destURLBox.getModel()).insertElementAt(destObj, 0);
        box4.setSelectedItem(destObj);              destURLBox.setSelectedItem(destObj);
       databases.remove(destBase);        databases.remove(destBase);
       for (Iterator iter = databases.iterator(); iter.hasNext();)        for (Iterator iter = databases.iterator(); iter.hasNext();)
       {        {
         Convert.DataBase database = (Convert.DataBase) iter.next();          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();          database.bean.getConnection();
   
         bean = database.bean;          bean = database.bean;
                   if (bean.isUseNormanToUnicodeMapper())
                       useNormanToUnicodeMapper.setSelected(true);
         Object obj =bean.url;          Object obj =bean.url;
         ((DefaultComboBoxModel) box3.getModel()).removeElement(obj);                  ((DefaultComboBoxModel) sourceURLBox.getModel()).removeElement(obj);
         ((DefaultComboBoxModel) box3.getModel()).insertElementAt(obj,0);                  ((DefaultComboBoxModel) sourceURLBox.getModel()).insertElementAt(obj, 0);
         box3.setSelectedItem(obj);                  sourceURLBox.setSelectedItem(obj);
         fillTable();          fillTable();
         Vector tables=database.bean.getTableNames();          Vector tables=database.bean.getTableNames();
         Collections.sort(tables,String.CASE_INSENSITIVE_ORDER);          Collections.sort(tables,String.CASE_INSENSITIVE_ORDER);
Line 782  public class FM2SQL extends JFrame imple Line 1121  public class FM2SQL extends JFrame imple
         {          {
           String table = (String) database.tables.get(i);            String table = (String) database.tables.get(i);
           int index=tables.indexOf(table);            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.");                      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;            noDBUpdate = true;
           tC.tableModel.setValueAt(new TableComponent.SQLCommand(database.selects.get(i).toString()),index,2);                      tC.tableModel.setValueAt(new TableComponent.SQLCommand(database.selects.get(i).toString()), index, SELECT_INDEX);
   
           String create =database.creates.get(i).toString();            String create =database.creates.get(i).toString();
           tC.tableModel.setValueAt(new TableComponent.SQLCommand(create.equals("") ? create:"           "+create),index,3);                      tC.tableModel.setValueAt(new TableComponent.SQLCommand(create.equals("") ? create : "           " + create), index, CREATE_INDEX);
           Object comboBox=tC.tableModel.getValueAt(index,1);                      // 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;            indices[i] = index;
           if(comboBox!=null) ((JComboBox)comboBox).setSelectedItem(database.layouts.get(i));                        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();            tC.tableModel.fireTableDataChanged();
           noDBUpdate = false;            noDBUpdate = false;
           noUserUpdate = false;            noUserUpdate = false;
Line 798  public class FM2SQL extends JFrame imple Line 1161  public class FM2SQL extends JFrame imple
         // add Selections          // add Selections
         ListSelectionModel lm = tC.table.getSelectionModel();          ListSelectionModel lm = tC.table.getSelectionModel();
         for(int i=0;i<indices.length;++i)          for(int i=0;i<indices.length;++i)
                   {
         lm.addSelectionInterval(indices[i],indices[i]);          lm.addSelectionInterval(indices[i],indices[i]);
                                tC.tableModel.setValueAt(Boolean.TRUE, indices[i], STATUS_INDEX);
                   }
        destBean.getConnection();         destBean.getConnection();
               
         DefaultListModel model = new DefaultListModel();          DefaultListModel model = new DefaultListModel();
Line 813  public class FM2SQL extends JFrame imple Line 1178  public class FM2SQL extends JFrame imple
                             
       }        }
                 
     } catch (Exception e)          }
           catch (Exception e)
     {      {
       noUserUpdate = false;        noUserUpdate = false;
       noDBUpdate = false;        noDBUpdate = false;
Line 829  public class FM2SQL extends JFrame imple Line 1195  public class FM2SQL extends JFrame imple
   }    }
   public boolean showTable(int list)    public boolean showTable(int list)
   {    {
     ProgressDialog dialog = new ProgressDialog(fm);          ProgressDialog dialog = new ProgressDialog(fm, bean);
     dialog.setTitle("Preparing tables to be displayed");      dialog.setTitle("Preparing tables to be displayed");
     dialog.thread = Thread.currentThread();      dialog.thread = Thread.currentThread();
     dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));      dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
     fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));      fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
     String query = new String();      String query = new String();
     Object[] objs = tListDest.getSelectedValues();      Object[] objs = tListDest.getSelectedValues();
     Vector[] vectors = getListFromTable();          Vector[] vectors = (list == 0) ? getListFromTable() : null;
     Vector tables = (list == 0) ? vectors[0] : new Vector();      Vector tables = (list == 0) ? vectors[0] : new Vector();
     if (list > 0)      if (list > 0)
       for (int i = 0; i < objs.length; ++i)        for (int i = 0; i < objs.length; ++i)
Line 870  public class FM2SQL extends JFrame imple Line 1236  public class FM2SQL extends JFrame imple
        query = "select * from " + bean.getQC() +tables.get(i).toString() + bean.getQC();         query = "select * from " + bean.getQC() +tables.get(i).toString() + bean.getQC();
     else      else
     query = "select * from " + destBean.getQC() +tables.get(i).toString() + destBean.getQC();      query = "select * from " + destBean.getQC() +tables.get(i).toString() + destBean.getQC();
  if(list==0) query = vectors[2].get(i).toString();              if (list == 0)
                   query = vectors[2].get(i).toString();
       if (list == 0 && vectors[1].get(i) != null)        if (list == 0 && vectors[1].get(i) != null)
         if (vectors[1].get(i).toString() != "")          if (vectors[1].get(i).toString() != "")
           {            {
Line 889  public class FM2SQL extends JFrame imple Line 1256  public class FM2SQL extends JFrame imple
   
       try        try
       {        {
         if ((query.toLowerCase().indexOf("insert") >= 0)                  if ((query.toLowerCase().indexOf("insert") >= 0) || (query.toLowerCase().indexOf("delete") >= 0) || (query.toLowerCase().indexOf("alter") >= 0) || (query.toLowerCase().indexOf("update") >= 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();            Statement stm = (list > 0) ? destBean.getConnection().createStatement() : bean.getConnection().createStatement();
           stm.executeUpdate(query);            stm.executeUpdate(query);
Line 908  public class FM2SQL extends JFrame imple Line 1272  public class FM2SQL extends JFrame imple
           //window.pack();            //window.pack();
           //  window.setVisible(true);            //  window.setVisible(true);
   
         } else                  }
                   else
         {          {
           Vector[] vecs = (list > 0) ? destBean.getQueryData(query, dialog, 50) : bean.getQueryData(query, dialog, 50);            Vector[] vecs = (list > 0) ? destBean.getQueryData(query, dialog, 50) : bean.getQueryData(query, dialog, 50);
           if (vecs[1].isEmpty())            if (vecs[1].isEmpty())
Line 922  public class FM2SQL extends JFrame imple Line 1287  public class FM2SQL extends JFrame imple
   
         //window.setVisible(true);          //window.setVisible(true);
   
       } catch (Exception e)              }
               catch (Exception e)
       {        {
         System.out.println("Exception occured");          System.out.println("Exception occured");
         e.printStackTrace();          e.printStackTrace();
Line 972  public class FM2SQL extends JFrame imple Line 1338  public class FM2SQL extends JFrame imple
       {        {
         Statement stm = destBean.getConnection().createStatement();          Statement stm = destBean.getConnection().createStatement();
         stm.executeUpdate(query);          stm.executeUpdate(query);
       } catch (Exception e)              }
               catch (Exception e)
       {        {
         ByteArrayOutputStream b = new ByteArrayOutputStream();          ByteArrayOutputStream b = new ByteArrayOutputStream();
         PrintStream stream = new PrintStream(b);          PrintStream stream = new PrintStream(b);
Line 983  public class FM2SQL extends JFrame imple Line 1350  public class FM2SQL extends JFrame imple
     } // to for      } // to for
     try      try
     {      {
       destBean.setConnection((String) box4.getSelectedItem());              destBean.setConnection((String) destURLBox.getSelectedItem());
       DefaultListModel model = new DefaultListModel();        DefaultListModel model = new DefaultListModel();
       tables = destBean.getTableNames();        tables = destBean.getTableNames();
       for (int j = 0; j < tables.size(); ++j)        for (int j = 0; j < tables.size(); ++j)
         model.addElement(tables.get(j));          model.addElement(tables.get(j));
       System.out.println("hallo" + tables + " ");        System.out.println("hallo" + tables + " ");
       tListDest.setModel(model);        tListDest.setModel(model);
     } catch (Exception e4)          }
           catch (Exception e4)
     {      {
     }      }
   
Line 1014  public class FM2SQL extends JFrame imple Line 1382  public class FM2SQL extends JFrame imple
       String columnName = model.getColumnName(col);        String columnName = model.getColumnName(col);
       Object test = model.getValueAt(row, col);        Object test = model.getValueAt(row, col);
       String idVal = (test == null) ? "" : test.toString();        String idVal = (test == null) ? "" : test.toString();
       String value = (test == null) ? "" : test.toString();;              String value = (test == null) ? "" : test.toString();
               ;
   
       System.out.println("Got in " + columnName +" "+idVal);        System.out.println("Got in " + columnName +" "+idVal);
       try        try
       {        {
         if(columnName.equals("select")||columnName.equals("Layouts"))          if(columnName.equals("select")||columnName.equals("Layouts"))
         {          {
           String table = model.getValueAt(row,0).toString();                      String table = model.getValueAt(row, NAME_INDEX).toString();
           String layout = (model.getValueAt(row,1)!=null) ?((JComboBox)model.getValueAt(row,1)).getSelectedItem().toString():"";                      String layout = (model.getValueAt(row, LAYOUT_INDEX) != null) ? ((JComboBox) model.getValueAt(row, LAYOUT_INDEX)).getSelectedItem().toString() : "";
           String query =  model.getValueAt(row,2).toString();                      String query = model.getValueAt(row, SELECT_INDEX).toString();
           String create = model.getValueAt(row,3).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);            System.out.println("table" +table+" layout "+layout+" query "+query);
           if(!create.equals(""))            if(!create.equals(""))
           {            {
             Object[] options = { "Yes","No"};                          Object[] options =
                           {"Yes", "No"};
             int option=showDialog("Create Statement not empty! Do you want to overwrite?","create statement",options );               int option=showDialog("Create Statement not empty! Do you want to overwrite?","create statement",options ); 
             if(option==0)               if(option==0) 
             model.setValueAt(createStatement(table,destBean,layout,query),row,3);                              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                   * Statement stm = bean.getConnection().createStatement(); //
           stm.executeUpdate(                   * stm.executeUpdate("DELETE FROM \""+fm.tables.get(0)+"\" WHERE
             "UPDATE   " + DBBean.quoteChar + box.getSelectedItem() + DBBean.quoteChar + " SET  " + DBBean.quoteChar + columnName + DBBean.quoteChar + "='" + value + "' WHERE ID='" + idVal + "' ");                   * \"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)              }
               catch (Exception e2)
            {             {
              fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));               fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
              ByteArrayOutputStream b = new ByteArrayOutputStream();               ByteArrayOutputStream b = new ByteArrayOutputStream();
Line 1065  public class FM2SQL extends JFrame imple Line 1456  public class FM2SQL extends JFrame imple
     JMenu menu = new JMenu("File");      JMenu menu = new JMenu("File");
      menu.setMnemonic('F');       menu.setMnemonic('F');
     JMenuItem item = new JMenuItem("open XML Config");      JMenuItem item = new JMenuItem("open XML Config");
           item.setToolTipText("opens a XML config file for batch conversion");
     item.setMnemonic('i');      item.setMnemonic('i');
     item.setAccelerator(KeyStroke.getKeyStroke('O',InputEvent.CTRL_DOWN_MASK));      item.setAccelerator(KeyStroke.getKeyStroke('O',InputEvent.CTRL_DOWN_MASK));
       
     item.addActionListener(fm);      item.addActionListener(fm);
     menu.add(item);      menu.add(item);
     item = new JMenuItem("save XML Config");      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.setAccelerator(KeyStroke.getKeyStroke('S',InputEvent.CTRL_DOWN_MASK));
     item.setMnemonic('x');      item.setMnemonic('x');
         
Line 1078  public class FM2SQL extends JFrame imple Line 1471  public class FM2SQL extends JFrame imple
     menu.add(item);      menu.add(item);
     item = new JMenuItem("Quit");      item = new JMenuItem("Quit");
     item.setMnemonic('Q');      item.setMnemonic('Q');
           item.setToolTipText("Quits the application");
     item.setAccelerator(KeyStroke.getKeyStroke('Q',InputEvent.CTRL_DOWN_MASK));      item.setAccelerator(KeyStroke.getKeyStroke('Q',InputEvent.CTRL_DOWN_MASK));
     item.addActionListener(fm);      item.addActionListener(fm);
      menu.add(item);       menu.add(item);
Line 1086  public class FM2SQL extends JFrame imple Line 1480  public class FM2SQL extends JFrame imple
     menu = new JMenu("Options");      menu = new JMenu("Options");
     menu.setMnemonic('O');      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 = new JMenuItem("show Driver features");
           item.setToolTipText("shows the features of the selected driver");
     item.addActionListener(fm);      item.addActionListener(fm);
     menu.add(item);      menu.add(item);
     menubar.add(menu);      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);          //   item.addActionListener(fm);
     menu.add(item);          //    menu.add(item);
       
     menubar.add(menu);      menubar.add(menu);
       
     menu.setBackground(fm.getBackground());      menu.setBackground(fm.getBackground());
     menubar.setBackground(fm.getBackground());      menubar.setBackground(fm.getBackground());
           convertItem.doClick();
     setJMenuBar(menubar);      setJMenuBar(menubar);
   }    }
   /**    /**
Line 1155  public class FM2SQL extends JFrame imple Line 1602  public class FM2SQL extends JFrame imple
     dialog.setSize(600, 300);      dialog.setSize(600, 300);
     dialog.setLocationRelativeTo(fmInstance);      dialog.setLocationRelativeTo(fmInstance);
     dialog.show();      dialog.show();
     //JOptionPane.showMessageDialog(null, message, title, JOptionPane.ERROR_MESSAGE);          //JOptionPane.showMessageDialog(null, message, title,
           // JOptionPane.ERROR_MESSAGE);
   }    }
   public static class ProgressDialog extends JDialog    public static class ProgressDialog extends JDialog
   {    {
Line 1171  public class FM2SQL extends JFrame imple Line 1619  public class FM2SQL extends JFrame imple
     JProgressBar progress = new JProgressBar();      JProgressBar progress = new JProgressBar();
     JButton cancel = new JButton("Cancel");      JButton cancel = new JButton("Cancel");
     Thread thread;      Thread thread;
     public ProgressDialog(JFrame frame)          DBBean bean;
           public ProgressDialog(JFrame frame, DBBean bean)
     {      {
       super(frame);        super(frame);
               this.bean = bean;
   
       content = new JPanel(true);        content = new JPanel(true);
       //content.setBorder(BorderFactory.createRaisedBevelBorder());        //content.setBorder(BorderFactory.createRaisedBevelBorder());
       content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));        content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
Line 1208  public class FM2SQL extends JFrame imple Line 1659  public class FM2SQL extends JFrame imple
           fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));            fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                     fmInstance.setEnabled(true);                      fmInstance.setEnabled(true);
           setVisible(false);            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();            thread.stop();
         }          }
       });        });
Line 1216  public class FM2SQL extends JFrame imple Line 1681  public class FM2SQL extends JFrame imple
     }      }
   
   }    }
       public static class DelimiterDialog extends JDialog
       {
           JLabel table = new JLabel("    ");
           JLabel status = new JLabel("    ");
           JLabel title = new JLabel("     ");
           JPanel content = new JPanel();
           JPanel titlePanel = new JPanel();
           JPanel delimiterPanel = new JPanel();
           JPanel buttonPanel = new JPanel();
           JTextField delimiter = new JTextField(10);
   
           JButton cancel = new JButton("Cancel");
           JButton ok = new JButton("Ok");
           Thread thread;
           public DelimiterDialog(JFrame frame)
           {
               super(frame);
               setTitle("Delimiter Editor");
               setModal(true);
               content = new JPanel(true);
               delimiter.setText(fmInstance.delimiter);
               ActionListener al = new ActionListener()
               {
                   public void actionPerformed(ActionEvent e)
                   {
                       fmInstance.delimiter = parseDelimiter(delimiter.getText());
                       setVisible(false);
                   }
   
               };
               this.addWindowListener(new WindowAdapter()
               {
                   public void windowClosing(WindowEvent e)
                   {
                       cancel.doClick();
                   }
               });
   
               //delimiter.setText(fmInstance.delimiter);
               delimiter.addActionListener(al);
               content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
               title = new JLabel("Enter Delimiter ");
               title.setHorizontalTextPosition(title.CENTER);
               titlePanel.add(title);
               buttonPanel.add(ok);
               buttonPanel.add(cancel);
               content.add(titlePanel);
               content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
   
               content.add(new JLabel(""));
               content.add(delimiterPanel);
               content.add(buttonPanel);
               content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
   
               delimiterPanel.add(new JLabel("Delimiter:  "));
               delimiterPanel.add(delimiter);
               getContentPane().add(titlePanel, "North");
               getContentPane().add(content, "Center");
               ok.addActionListener(al);
               cancel.addActionListener(new ActionListener()
               {
                   public void actionPerformed(ActionEvent e)
                   {
                       fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                       fmInstance.setEnabled(true);
                       setVisible(false);
                       //  thread.stop();
                   }
   
               });
               pack();
               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    public static class PasswordDialog extends JDialog
   {    {
     JLabel table = new JLabel("    ");      JLabel table = new JLabel("    ");
Line 1307  public class FM2SQL extends JFrame imple Line 1885  public class FM2SQL extends JFrame imple
   public void fillTable()    public void fillTable()
   {    {
     noDBUpdate = true;      noDBUpdate = true;
           bean.setUseNormanToUnicodeMapper(useNormanToUnicodeMapper.isSelected());
     Vector tableNames = bean.getTableNames();      Vector tableNames = bean.getTableNames();
     Collections.sort(tableNames, String.CASE_INSENSITIVE_ORDER);      Collections.sort(tableNames, String.CASE_INSENSITIVE_ORDER);
     Vector[] data = new Vector[2];      Vector[] data = new Vector[2];
     data[1] = new Vector();          data[1] = new Vector(6);
     data[1].add("Table");          data[1].setSize(6);
     data[1].add("Layouts");          data[1].set(STATUS_INDEX, " ");
         data[1].add("select");          data[1].set(NAME_INDEX, " source Tablename  ");
     data[1].add("create");          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();      data[0] = new Vector();
   
     for (int i = 0; i < tableNames.size(); i++)      for (int i = 0; i < tableNames.size(); i++)
     {      {
       String name = tableNames.get(i).toString();        String name = tableNames.get(i).toString();
       Vector layouts = new Vector();        Vector layouts = new Vector();
               Vector idVec = new Vector();
   
       try        try
       {        {
                   bean.makeQuery("select * from" + bean.getQC() + name + bean.getQC(), 1);
         layouts = bean.getLayoutNames(name);          layouts = bean.getLayoutNames(name);
       } catch (SQLException e)              }
               catch (SQLException e)
       {        {
         layouts = new Vector();          layouts = new Vector();
       }        }
       Vector dataRow = new Vector();              catch (Exception e)
       dataRow.add(name);              {
                   // 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())        if (!layouts.isEmpty())
         dataRow.add(new JComboBox(layouts));                  dataRow.set(LAYOUT_INDEX, new JComboBox(layouts));
       else        else
         dataRow.add(null);                  dataRow.set(LAYOUT_INDEX, null);
       dataRow.add(new TableComponent.SQLCommand("select * from "+bean.getQC()+name+bean.getQC()));  
             
               // 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);          data[0].add(dataRow);
     dataRow.add(new TableComponent.SQLCommand(""));  
       //System.out.println(dataRow);        //System.out.println(dataRow);
     }      }
   
           tC.booleanRenderer.renderFalseEmpty = true;
     tC.tableModel.setDataVector(data[0], data[1]);      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.revalidate();
     tC.tableModel.fireTableDataChanged();      tC.tableModel.fireTableDataChanged();
     noDBUpdate = false;      noDBUpdate = false;
Line 1349  public class FM2SQL extends JFrame imple Line 1959  public class FM2SQL extends JFrame imple
   }    }
   public Vector[] getListFromTable()    public Vector[] getListFromTable()
   {    {
     Vector[] vec = new Vector[4];          Vector[] vec = new Vector[5];
     vec[0] = new Vector();      vec[0] = new Vector();
     vec[1] = new Vector();      vec[1] = new Vector();
         vec[2] = new Vector();          vec[2] = new Vector();
     vec[3] = new Vector();      vec[3] = new Vector();
           vec[4] = new Vector();
           for (int i = 0; i < tC.tableModel.getRowCount(); ++i)
           {
           }
     int[] rows = tC.table.getSelectedRows();      int[] rows = tC.table.getSelectedRows();
     for (int i = 0; i < rows.length; i++)          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));        //System.out.println(tC.tableModel.getValueAt(rows[i],1));
       vec[0].add(tC.tableModel.getValueAt(rows[i], 0));              vec[0].add(tC.tableModel.getValueAt(i, NAME_INDEX));
       JComboBox box = ((JComboBox) tC.tableModel.getValueAt(rows[i], 1));              JComboBox box = ((JComboBox) tC.tableModel.getValueAt(i, LAYOUT_INDEX));
       String layoutName = (box != null) ? box.getSelectedItem().toString() : "";        String layoutName = (box != null) ? box.getSelectedItem().toString() : "";
   
               String idName = ((JComboBox) tC.tableModel.getValueAt(i, ID_INDEX)).getSelectedItem().toString();
       vec[1].add(layoutName);        vec[1].add(layoutName);
       vec[2].add(tC.tableModel.getValueAt(rows[i], 2).toString());              vec[2].add(tC.tableModel.getValueAt(i, SELECT_INDEX).toString());
       vec[3].add(tC.tableModel.getValueAt(rows[i], 3).toString());              vec[3].add(tC.tableModel.getValueAt(i, CREATE_INDEX).toString());
               vec[4].add(idName);
       
     }      }
     return vec;      return vec;
Line 1374  public class FM2SQL extends JFrame imple Line 1997  public class FM2SQL extends JFrame imple
     showTables1.setEnabled(state);      showTables1.setEnabled(state);
     convert.setEnabled(state);      convert.setEnabled(state);
     dropTables.setEnabled(state);      dropTables.setEnabled(state);
     box3.setEnabled(state);          sourceURLBox.setEnabled(state);
     box4.setEnabled(state);          destURLBox.setEnabled(state);
   
   }    }
   public TableComponent.SQLCommand createStatement(String table,DBBean beanDest,String layout,String query)  throws SQLException      public TableComponent.SQLCommand createStatement(String table, DBBean beanDest, String layout, String query) throws SQLException, ParseException, Exception
   {    {
     fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));      fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
                   
     if(beanDest.url.equals("")) beanDest.url=box4.getSelectedItem().toString();          if (beanDest.url.equals(""))
               beanDest.url = destURLBox.getSelectedItem().toString();
     StringBuffer command = new StringBuffer(50);      StringBuffer command = new StringBuffer(50);
     command.append("\n           CREATE TABLE ");      command.append("\n           CREATE TABLE ");
     command.append(beanDest.getQC());      command.append(beanDest.getQC());

Removed from v.1.8  
changed lines
  Added in v.1.45


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>