File:  [Repository] / FM2SQL / Attic / FM2SQL.java
Revision 1.16: download - view: text, annotated - select for diffs - revision graph
Thu Feb 12 13:02:56 2004 UTC (20 years, 4 months ago) by rogo
Branches: MAIN
CVS tags: HEAD
incremental convert +mysql driver loads now under mac osX

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

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