File:  [Repository] / FM2SQL / Attic / FM2SQL.java
Revision 1.19: download - view: text, annotated - select for diffs - revision graph
Thu Feb 19 10:35:06 2004 UTC (20 years, 4 months ago) by rogo
Branches: MAIN
CVS tags: HEAD
added comboBox for ID field

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

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