File:  [Repository] / FM2SQL / Attic / FM2SQL.java
Revision 1.14: download - view: text, annotated - select for diffs - revision graph
Wed Jan 28 12:22:35 2004 UTC (20 years, 5 months ago) by rogo
Branches: MAIN
CVS tags: HEAD
*** empty log message ***

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

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