Annotation of FM2SQL/FM2SQL.java, revision 1.10

1.1       rogo        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
1.7       rogo       20:  *  @version 0.3( first stable release)
1.1       rogo       21:  *  @author rogo
                     22:  *
                     23:  */
                     24: public class FM2SQL extends JFrame implements ActionListener, TableModelListener
                     25: {
1.9       rogo       26:   private JCheckBoxMenuItem convertItem;
                     27:   private JCheckBoxMenuItem appendItem;
                     28:   private JCheckBoxMenuItem updateItem;
1.10    ! rogo       29:   int mode = -1;
1.1       rogo       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;
1.2       rogo       71:   JPanel topPanel,topPanel2, contentPanel;
                     72:   JScrollPane paneDest;
1.1       rogo       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:   {
1.2       rogo      107:     
1.3       rogo      108:     initializeGUI();
1.1       rogo      109:   }
1.2       rogo      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);
1.5       rogo      139:    // tListDest.setPreferredSize(paneDest.getPreferredSize());
1.2       rogo      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);
1.4       rogo      204:    // gbc.fill = GridBagConstraints.VERTICAL;
1.2       rogo      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;
1.3       rogo      215:    // topPanel.add(showTables1, gbc);
1.2       rogo      216:     JPanel buttonPanel = new JPanel();
                    217:     buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));
1.5       rogo      218:     buttonPanel.setMinimumSize(new Dimension(380, 30));
1.2       rogo      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: 
1.3       rogo      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);
1.2       rogo      245:     topPanel2.add(buttonPanel, gbc);
1.3       rogo      246:    
1.2       rogo      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();
1.3       rogo      307:         tC.tableScroller.setMinimumSize(new Dimension(dim.width-400, dim.height - topPanel.getPreferredSize().height - 100));
1.2       rogo      308:         tC.tableScroller.setMaximumSize(getSize());
1.3       rogo      309:         tC.tableScroller.setPreferredSize(tC.tableScroller.getMinimumSize());
                    310:      
                    311:         paneDest.setMinimumSize(new Dimension(400, dim.height - topPanel2.getPreferredSize().height - 100));
1.2       rogo      312:         paneDest.setMaximumSize(tC.tableScroller.getMaximumSize());
1.3       rogo      313:         paneDest.setPreferredSize(new Dimension(400, dim.height - topPanel2.getPreferredSize().height - 100));
                    314:     
1.2       rogo      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:   }
1.1       rogo      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:         }
1.2       rogo      525:         setTitle("Filemaker 2 SQL Conversion Tool ");
1.1       rogo      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:     }
1.9       rogo      552:     if (command == "Convert Mode")
                    553:     {
                    554:       System.out.println("Convert Mode selected");
                    555:            convert.setText("Convert Tables");
                    556:            convert.setActionCommand("Convert Tables");
1.10    ! rogo      557:       mode = Convert.DataBase.CONVERT_MODE;
1.9       rogo      558:     }
                    559:     if (command == "Append Mode")
                    560:     {
                    561:       System.out.println("Append Mode selected");
                    562:            convert.setText("Append Tables");
                    563:            convert.setActionCommand("Append Tables");
1.10    ! rogo      564:       mode = Convert.DataBase.APPEND_MODE; 
1.9       rogo      565:     }
                    566:     if (command == "Update Mode")
                    567:     {
                    568:       System.out.println("Update Mode selected");
                    569:            convert.setText("Update Tables");
                    570:            convert.setActionCommand("Update Tables");
1.10    ! rogo      571:       mode = Convert.DataBase.UPDATE_MODE; 
1.9       rogo      572:     }
1.1       rogo      573:    //writing config
1.6       rogo      574:     if (command.equals("save XML Config"))
1.1       rogo      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:     }
1.6       rogo      608:     if (command.equals("open XML Config"))
1.1       rogo      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"))
                    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("show Tables"))
                    660:     {
                    661:       Thread thread = new Thread()
                    662:       {
                    663:         public void run()
                    664:         {
                    665:                    fmInstance.setEnabled(false);
                    666:           boolean visible = showTable(1);
                    667:           window.validate();
                    668:           window.setVisible(visible);
                    669:                    fmInstance.setEnabled(true);
                    670: 
                    671:         }
                    672:       };
                    673:       thread.start();
                    674:       //  System.out.println("hello");
                    675: 
                    676:     }
                    677:     if (command.equals("show Tables source"))
                    678:     {
                    679:       Thread thread = new Thread()
                    680:       {
                    681:         public void run()
                    682:         {
                    683:                    fmInstance.setEnabled(false);
                    684:           boolean visible = showTable(0);
                    685:           window.validate();
                    686:           window.setVisible(visible);
                    687:                    fmInstance.setEnabled(true);
                    688:         }
                    689:       };
                    690:       thread.start();
                    691:       //       System.out.println("hello"+thread);
                    692: 
                    693:     }
                    694: 
                    695:     if (command.equals("drop Tables"))
                    696:     {
                    697:       Thread thread = new Thread()
                    698:       {
                    699:         public void run()
                    700:         {
                    701:           dropTable();
                    702:         }
                    703:       };
                    704:       thread.start();
                    705:     }
1.6       rogo      706:   if(command.equals("Quit"))
                    707:    {
                    708:      fmInstance.dispose();
                    709:      System.exit(0);
                    710:   
                    711:    }
                    712:    
1.1       rogo      713:   }
                    714:   /**
                    715:    * Copys the content of source to destination and makes new table if necessary
                    716:    */
                    717:   public void convert()
                    718:   {
                    719: 
                    720:     Vector vectors[] = getListFromTable();
                    721:     Convert.user = bean.user;
                    722:     Convert.passwd = bean.passwd;
                    723:     Convert.userDest = destBean.user;
                    724:     Convert.passwdDest = destBean.passwd;
                    725:     try
                    726:     {
                    727:       fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
                    728:       fmInstance.setEnabled(false);
1.10    ! rogo      729:       Convert.convert(bean.url, box4.getSelectedItem().toString(), vectors[0], vectors[1],vectors[2],vectors[3],mode);
1.1       rogo      730: 
                    731:       destBean.setConnection((String) box4.getSelectedItem());
                    732:       DefaultListModel model = new DefaultListModel();
                    733:       tables = destBean.getTableNames();
                    734:       for (int j = 0; j < tables.size(); ++j)
                    735:         model.addElement(tables.get(j));
                    736:       if (debug)
                    737:         System.out.println("hallo" + tables + " ");
                    738:       tListDest.setModel(model);
                    739:       fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                    740:     } catch (Exception e4)
                    741:     {
                    742:       ByteArrayOutputStream b = new ByteArrayOutputStream();
                    743:       PrintStream stream = new PrintStream(b);
                    744:       e4.printStackTrace(stream);
                    745:       showErrorDialog(b.toString(), "Conversion of table failed");
                    746:       fmInstance.setEnabled(true);
                    747:     }
                    748:   }
                    749:   public void writeConfig(String file)
                    750:   {
                    751:     fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
                    752:     fmInstance.setEnabled(false);
                    753: 
                    754:     Vector vectors[] = getListFromTable();
1.9       rogo      755:     if(convertItem.isSelected()) mode = Convert.DataBase.CONVERT_MODE;
                    756:     else
                    757:        if(appendItem.isSelected()) mode = Convert.DataBase.APPEND_MODE;
                    758:        else
                    759:        if(updateItem.isSelected()) mode = Convert.DataBase.UPDATE_MODE;
                    760:     
                    761:     Convert.DataBase source = new Convert.DataBase(bean,vectors[0],vectors[1],vectors[2],vectors[3],mode);
                    762:     Convert.DataBase destination = new Convert.DataBase(destBean,new Vector(),new Vector(),new Vector(),new Vector(),-1);
1.1       rogo      763:    
                    764:     try
                    765:     {
                    766:       Convert.writeConfig(file,source,destination);
                    767:       fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                    768:       fmInstance.setEnabled(true);
                    769: 
                    770:     } catch (Exception e)
                    771:     {
                    772:       fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                    773:       fmInstance.setEnabled(true);
                    774: 
                    775:       ByteArrayOutputStream b = new ByteArrayOutputStream();
                    776:       PrintStream stream = new PrintStream(b);
                    777:       e.printStackTrace(stream);
                    778:       showErrorDialog(b.toString(), "Error while writing xml config  !");
                    779:   }
                    780:   
                    781:   }
                    782:   public void readXMLConfig(String file)
                    783:   {
                    784:      
                    785:     try
                    786:     {
                    787:       fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
                    788:       fmInstance.setEnabled(false);
                    789:       Vector databases = Convert.getXMLConfig(file);
1.8       rogo      790:       Convert.DataBase destBase = (Convert.DataBase) databases.lastElement();
1.1       rogo      791:       //destBase.bean.getConnection();
                    792:       noUserUpdate = true;
                    793:       destBean=destBase.bean;
                    794:       Object destObj =destBean.url;
                    795:       ((DefaultComboBoxModel) box4.getModel()).removeElement(destObj);
                    796:       ((DefaultComboBoxModel) box4.getModel()).insertElementAt(destObj,0);
                    797:        box4.setSelectedItem(destObj);
                    798:       databases.remove(destBase);
                    799:       for (Iterator iter = databases.iterator(); iter.hasNext();)
                    800:       {
                    801:         Convert.DataBase database = (Convert.DataBase) iter.next();
1.10    ! rogo      802:         
1.9       rogo      803:         if (database.mode == Convert.DataBase.CONVERT_MODE)
                    804:         {
                    805:           convertItem.setSelected(true);
                    806:           convert.setText("Convert Tables");
                    807:           convert.setActionCommand("Convert Tables");
1.10    ! rogo      808:           mode = Convert.DataBase.CONVERT_MODE;
        !           809:         } else if (database.mode == Convert.DataBase.APPEND_MODE)
        !           810:         {
        !           811:           appendItem.setSelected(true);
        !           812:           convert.setText("Append Tables");
        !           813:           convert.setActionCommand("Append Tables");
        !           814:           mode = Convert.DataBase.APPEND_MODE;
        !           815:         } else if (database.mode == Convert.DataBase.UPDATE_MODE)
        !           816:         {
        !           817:           updateItem.setSelected(true);
        !           818:           convert.setText("Update Tables");
        !           819:           convert.setActionCommand("Update Tables");
        !           820:           mode = Convert.DataBase.UPDATE_MODE;
        !           821:         }
1.1       rogo      822:         database.bean.getConnection();
1.9       rogo      823:         
1.1       rogo      824:         bean = database.bean;
                    825:         Object obj =bean.url;
                    826:         ((DefaultComboBoxModel) box3.getModel()).removeElement(obj);
                    827:         ((DefaultComboBoxModel) box3.getModel()).insertElementAt(obj,0);
                    828:         box3.setSelectedItem(obj);
                    829:         fillTable();
                    830:         Vector tables=database.bean.getTableNames();
                    831:         Collections.sort(tables,String.CASE_INSENSITIVE_ORDER);
1.3       rogo      832:         int[] indices = new int[database.tables.size()];
1.1       rogo      833:         for (int i =0;i<database.tables.size();++i)
                    834:         {
                    835:           String table = (String) database.tables.get(i);
                    836:           int index=tables.indexOf(table);
                    837:           if(index<0) throw new RuntimeException("Error table \""+table+"\" does no longer exist\n at server "+bean.url +"\n or you mispelled the tablename.");
                    838:           noDBUpdate = true;
                    839:           tC.tableModel.setValueAt(new TableComponent.SQLCommand(database.selects.get(i).toString()),index,2);
                    840:           String create =database.creates.get(i).toString();
                    841:           tC.tableModel.setValueAt(new TableComponent.SQLCommand(create.equals("") ? create:"           "+create),index,3);
                    842:           Object comboBox=tC.tableModel.getValueAt(index,1);
1.3       rogo      843:           indices[i] = index;
1.1       rogo      844:           if(comboBox!=null) ((JComboBox)comboBox).setSelectedItem(database.layouts.get(i));  
                    845:           tC.tableModel.fireTableDataChanged();
                    846:           noDBUpdate = false;
                    847:           noUserUpdate = false;
                    848:         
                    849:         }
1.3       rogo      850:         // add Selections
                    851:         ListSelectionModel lm = tC.table.getSelectionModel();
                    852:         for(int i=0;i<indices.length;++i)
                    853:         lm.addSelectionInterval(indices[i],indices[i]);
                    854:          
1.1       rogo      855:        destBean.getConnection();
                    856:       
                    857:         DefaultListModel model = new DefaultListModel();
                    858:          tables = destBean.getTableNames();
                    859:         for (int j = 0; j < tables.size(); ++j)
                    860:           model.addElement(tables.get(j));
                    861:         //  System.out.println("hallo" + tables + " ");
                    862:         tListDest.setModel(model);
                    863:         fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                    864:         fmInstance.setEnabled(true);
                    865:              
                    866:       }
                    867:        
                    868:     } catch (Exception e)
                    869:     {
                    870:       noUserUpdate = false;
                    871:       noDBUpdate = false;
                    872:       fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                    873:       fmInstance.setEnabled(true);
                    874:    
                    875:       ByteArrayOutputStream b = new ByteArrayOutputStream();
                    876:       PrintStream stream = new PrintStream(b);
                    877:       e.printStackTrace(stream);
                    878:       showErrorDialog(b.toString(), "Error while reading xml config  !");
                    879:     }
                    880: 
                    881:   }
                    882:   public boolean showTable(int list)
                    883:   {
                    884:     ProgressDialog dialog = new ProgressDialog(fm);
                    885:     dialog.setTitle("Preparing tables to be displayed");
                    886:     dialog.thread = Thread.currentThread();
                    887:     dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
                    888:     fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
                    889:     String query = new String();
                    890:     Object[] objs = tListDest.getSelectedValues();
                    891:     Vector[] vectors = getListFromTable();
                    892:     Vector tables = (list == 0) ? vectors[0] : new Vector();
                    893:     if (list > 0)
                    894:       for (int i = 0; i < objs.length; ++i)
                    895:       {
                    896:         if (debug)
                    897:           System.out.println(objs[i]);
                    898:         tables.add(objs[i]);
                    899:       }
                    900:     if (window != null)
                    901:       window.dispose();
                    902:     if (windowDest != null)
                    903:       windowDest.dispose();
                    904: 
                    905:     window = new MultiResultWindow(fm);
                    906:     if (list > 0)
                    907:     {
                    908:       windowDest = new MultiResultWindow(fm);
                    909:       window = windowDest;
                    910:     }
                    911:     dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x + (FM2SQL.fmInstance.getWidth() - 500) / 2, FM2SQL.fmInstance.getLocationOnScreen().y + (FM2SQL.fmInstance.getHeight() - 250) / 2);
                    912:     dialog.setSize(500, 250);
                    913:     if (!tables.isEmpty())
                    914:       dialog.show();
                    915:     dialog.title.setText("Preparing tables to be diplayed");
                    916:     for (int i = 0; i < tables.size(); ++i)
                    917:     {
                    918:       dialog.table.setText("Getting table " + tables.get(i));
                    919:       dialog.status.setText("Table " + (i + 1) + " of " + tables.size());
                    920: 
                    921:        if(list==0)
                    922:        query = "select * from " + bean.getQC() +tables.get(i).toString() + bean.getQC();
                    923:     else
                    924:     query = "select * from " + destBean.getQC() +tables.get(i).toString() + destBean.getQC();
                    925:  if(list==0) query = vectors[2].get(i).toString();
                    926:       if (list == 0 && vectors[1].get(i) != null)
                    927:         if (vectors[1].get(i).toString() != "")
                    928:           {
                    929:                        String layout =" layout " + bean.getQC() + vectors[1].get(i).toString() + bean.getQC();
                    930:             String name = tables.get(i).toString();
                    931:             StringBuffer queryLayout=new StringBuffer(query);
                    932:             queryLayout.insert(queryLayout.indexOf(name)+name.length()+1," "+layout);
                    933:             query=queryLayout.toString();
                    934:           }
                    935:        if(debug)
                    936:        showErrorDialog("query in show tables is "+query,"Hello");
                    937:       window.title = " Table ;-) " + (String) tables.get(i);
                    938:       //    break;
                    939:       //  } else
                    940:       //    window.title = "Error! - No valid tablename found";
                    941: 
                    942:       try
                    943:       {
                    944:         if ((query.toLowerCase().indexOf("insert") >= 0)
                    945:           || (query.toLowerCase().indexOf("delete") >= 0)
                    946:           || (query.toLowerCase().indexOf("alter") >= 0)
                    947:           || (query.toLowerCase().indexOf("update") >= 0))
                    948:         {
                    949:           Statement stm = (list > 0) ? destBean.getConnection().createStatement() : bean.getConnection().createStatement();
                    950:           stm.executeUpdate(query);
                    951:           Vector vec = new Vector();
                    952:           Vector vec2 = new Vector();
                    953:           Vector vec3 = new Vector();
                    954:           vec2.add(query);
                    955:           vec3.add(vec2);
                    956:           vec.add("Insert, update, etc done! No results available");
                    957:           // vec.add("no Results were produced");
                    958: 
                    959:           window.updateResult(vec3, vec);
                    960:           //window.pack();
                    961:           //  window.setVisible(true);
                    962: 
                    963:         } else
                    964:         {
                    965:           Vector[] vecs = (list > 0) ? destBean.getQueryData(query, dialog, 50) : bean.getQueryData(query, dialog, 50);
                    966:           if (vecs[1].isEmpty())
                    967:             throw new Exception("Wrong columnname or Empty Layout");
                    968:           window.updateResult(vecs[0], vecs[1]);
                    969: 
                    970:           //window.pack();
                    971:           //String name = window.writeResult();
                    972:           //appendLog(window.title, name);
                    973:         }
                    974: 
                    975:         //window.setVisible(true);
                    976: 
                    977:       } catch (Exception e)
                    978:       {
                    979:         System.out.println("Exception occured");
                    980:         e.printStackTrace();
                    981:         Vector vec = new Vector();
                    982:         Vector vec2 = new Vector();
                    983:         Vector vec3 = new Vector();
                    984:         vec2.add(e.getMessage());
                    985:         vec3.add(vec2);
                    986:         vec.add("Exception occured! No results available");
                    987:         //vec.add("no Results were produced");
                    988: 
                    989:         window.updateResult(vec3, vec);
                    990:         //window.pack();
                    991:         // window.setVisible(true);
                    992:         fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                    993: 
                    994:       }
                    995:     } // to for
                    996:     window.pack();
                    997:     window.setSize(700, 600);
                    998: 
                    999:     window.oldTabCount = 10000;
                   1000:     dialog.dispose();
                   1001:     fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                   1002: 
                   1003:     return !tables.isEmpty();
                   1004: 
                   1005:   }
                   1006: 
                   1007:   public void dropTable()
                   1008:   {
                   1009:     String query = new String();
                   1010:     Object[] objs = tListDest.getSelectedValues();
                   1011:     Vector tables = new Vector();
                   1012:     for (int i = 0; i < objs.length; ++i)
                   1013:     {
                   1014:       System.out.println(objs[i]);
                   1015:       tables.add(objs[i]);
                   1016:     }
                   1017: 
                   1018:     for (int i = 0; i < tables.size(); ++i)
                   1019:     {
                   1020: 
                   1021:       query = "drop table "+destBean.getQC() + tables.get(i) + destBean.getQC();
                   1022: 
                   1023:       try
                   1024:       {
                   1025:         Statement stm = destBean.getConnection().createStatement();
                   1026:         stm.executeUpdate(query);
                   1027:       } catch (Exception e)
                   1028:       {
                   1029:         ByteArrayOutputStream b = new ByteArrayOutputStream();
                   1030:         PrintStream stream = new PrintStream(b);
                   1031:         e.printStackTrace(stream);
                   1032:         showErrorDialog(b.toString(), "Open of table failed");
                   1033: 
                   1034:       }
                   1035:     } // to for
                   1036:     try
                   1037:     {
                   1038:       destBean.setConnection((String) box4.getSelectedItem());
                   1039:       DefaultListModel model = new DefaultListModel();
                   1040:       tables = destBean.getTableNames();
                   1041:       for (int j = 0; j < tables.size(); ++j)
                   1042:         model.addElement(tables.get(j));
                   1043:       System.out.println("hallo" + tables + " ");
                   1044:       tListDest.setModel(model);
                   1045:     } catch (Exception e4)
                   1046:     {
                   1047:     }
                   1048: 
                   1049:   }
                   1050:   /**
                   1051:    * invoked then the user changes the table or the tableModel changes
                   1052:    */
                   1053:   public void tableChanged(TableModelEvent e)
                   1054:   {
                   1055:     //  if (e.getType() == e.INSERT)
                   1056:     //System.out.println("Insert done");
                   1057:     // if (e.getType() == e.UPDATE)
                   1058:     // System.out.println("Update done");
                   1059:     //if (e.getType() == e.DELETE)
                   1060:    // System.out.println("Delete done");
                   1061:     if (e.getType() == e.UPDATE && !noDBUpdate)
                   1062:     {
                   1063:       int row = e.getFirstRow(), col = e.getColumn();
                   1064:       System.out.println("Got in " + row + " " + col );
                   1065:       TableModel model =  (TableModel)e.getSource();
                   1066:       String columnName = model.getColumnName(col);
                   1067:       Object test = model.getValueAt(row, col);
                   1068:       String idVal = (test == null) ? "" : test.toString();
                   1069:       String value = (test == null) ? "" : test.toString();;
                   1070: 
                   1071:       System.out.println("Got in " + columnName +" "+idVal);
                   1072:       try
                   1073:       {
                   1074:         if(columnName.equals("select")||columnName.equals("Layouts"))
                   1075:         {
                   1076:           String table = model.getValueAt(row,0).toString();
                   1077:           String layout = (model.getValueAt(row,1)!=null) ?((JComboBox)model.getValueAt(row,1)).getSelectedItem().toString():"";
                   1078:           String query =  model.getValueAt(row,2).toString();
                   1079:           String create = model.getValueAt(row,3).toString();
                   1080:           System.out.println("table" +table+" layout "+layout+" query "+query);
                   1081:           if(!create.equals(""))
                   1082:           {
                   1083:             Object[] options = { "Yes","No"};
                   1084:             int option=showDialog("Create Statement not empty! Do you want to overwrite?","create statement",options ); 
                   1085:             if(option==0) 
                   1086:             model.setValueAt(createStatement(table,destBean,layout,query),row,3);
                   1087:           }
                   1088:        
                   1089:        
                   1090:         }
                   1091: /*        Statement stm = bean.getConnection().createStatement();
                   1092:         //  stm.executeUpdate("DELETE FROM \""+fm.tables.get(0)+"\" WHERE \"erstellt von\"='rogo') ");
                   1093: 
                   1094:         if (idVal == "")
                   1095:           stm.executeUpdate("INSERT  INTO " + DBBean.quoteChar + box.getSelectedItem() + DBBean.quoteChar + " (" + DBBean.quoteChar + columnName + DBBean.quoteChar + ")  VALUES ('" + value + "') ");
                   1096:         else
                   1097:           stm.executeUpdate(
                   1098:             "UPDATE   " + DBBean.quoteChar + box.getSelectedItem() + DBBean.quoteChar + " SET  " + DBBean.quoteChar + columnName + DBBean.quoteChar + "='" + value + "' WHERE ID='" + idVal + "' ");
                   1099:   */
                   1100:           } catch (Exception e2)
                   1101:            {
                   1102:              fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                   1103:              ByteArrayOutputStream b = new ByteArrayOutputStream();
                   1104:              PrintStream stream = new PrintStream(b);
                   1105:              e2.printStackTrace(stream);
                   1106:              showErrorDialog(b.toString(), "Error while updating table  !");
                   1107:            }
                   1108:     }
                   1109:   }
                   1110: 
                   1111:   /**
                   1112:    * initialize the menubar
                   1113:    */
                   1114:   private void setMenu()
                   1115:   {
                   1116:     JMenuBar menubar = new JMenuBar();
                   1117:     JMenu menu = new JMenu("File");
1.6       rogo     1118:      menu.setMnemonic('F');
                   1119:     JMenuItem item = new JMenuItem("open XML Config");
1.9       rogo     1120:        item.setToolTipText("opens a XML config file for batch conversion");
1.6       rogo     1121:     item.setMnemonic('i');
                   1122:     item.setAccelerator(KeyStroke.getKeyStroke('O',InputEvent.CTRL_DOWN_MASK));
                   1123:   
                   1124:     item.addActionListener(fm);
                   1125:     menu.add(item);
                   1126:     item = new JMenuItem("save XML Config");
1.9       rogo     1127:        item.setToolTipText("saves the current selections in an XML config file for batch conversion");
1.6       rogo     1128:     item.setAccelerator(KeyStroke.getKeyStroke('S',InputEvent.CTRL_DOWN_MASK));
                   1129:     item.setMnemonic('x');
1.1       rogo     1130:    
                   1131:     item.addActionListener(fm);
                   1132:     menu.add(item);
1.6       rogo     1133:     item = new JMenuItem("Quit");
                   1134:     item.setMnemonic('Q');
1.9       rogo     1135:        item.setToolTipText("Quits the application");
1.6       rogo     1136:     item.setAccelerator(KeyStroke.getKeyStroke('Q',InputEvent.CTRL_DOWN_MASK));
1.1       rogo     1137:     item.addActionListener(fm);
1.6       rogo     1138:      menu.add(item);
                   1139:  
1.1       rogo     1140:     menubar.add(menu);
                   1141:     menu = new JMenu("Options");
1.6       rogo     1142:     menu.setMnemonic('O');
                   1143:    
1.1       rogo     1144:     item = new JMenuItem("show Driver features");
1.9       rogo     1145:        item.setToolTipText("shows the features of the selected driver");
1.1       rogo     1146:     item.addActionListener(fm);
                   1147:     menu.add(item);
                   1148:     menubar.add(menu);
1.9       rogo     1149: 
                   1150:     ButtonGroup bgrp = new ButtonGroup();
                   1151:     convertItem = new JCheckBoxMenuItem("Convert Mode");
                   1152:        convertItem.setToolTipText("Normal table conversion  existing table will be deleted");
                   1153:        convertItem.addActionListener(fm);
                   1154:     
                   1155:     bgrp.add(convertItem);
                   1156:     
                   1157:     menu.add(convertItem);
                   1158:     menubar.add(menu);
                   1159:  
                   1160:        appendItem = new JCheckBoxMenuItem("Append Mode");
                   1161:        appendItem.setToolTipText("Appends data to an existing table");
                   1162:        appendItem.addActionListener(fm);
                   1163: 
                   1164:        bgrp.add(appendItem);
                   1165: 
                   1166:     menu.add(appendItem);
                   1167:     menubar.add(menu);
                   1168: 
                   1169:        updateItem = new JCheckBoxMenuItem("Update Mode");
                   1170:        updateItem.setToolTipText("Updates data in an existing table");
                   1171:        updateItem.addActionListener(fm);
                   1172: 
                   1173:        bgrp.add(updateItem);
                   1174: 
                   1175:        menu.add(updateItem);
                   1176:        menubar.add(menu);
1.1       rogo     1177:   
                   1178:     item.addActionListener(fm);
                   1179:     menu.add(item);
                   1180:   
                   1181:     menubar.add(menu);
                   1182:   
                   1183:     menu.setBackground(fm.getBackground());
                   1184:     menubar.setBackground(fm.getBackground());
1.10    ! rogo     1185:     convertItem.doClick();
1.1       rogo     1186:     setJMenuBar(menubar);
                   1187:   }
                   1188:   /**
                   1189:    *  open the log  file (index.html)
                   1190:    */
                   1191: 
                   1192:   public static void openLog() throws Exception
                   1193:   {
                   1194: 
                   1195:     StringBuffer buff = new StringBuffer();
                   1196:     buff.append("<html>");
                   1197:     buff.append("<head>");
                   1198:     buff.append("\n<title>");
                   1199:     buff.append("FileMaker Test");
                   1200:     buff.append("</title>\n");
                   1201:     buff.append("</head>\n");
                   1202: 
                   1203:     buff.append("<body>\n");
                   1204:     buff.append("<center>\n");
                   1205:     buff.append("\n<h3>");
                   1206:     buff.append("FileMaker Test");
                   1207:     buff.append("</h3>\n");
                   1208: 
                   1209:     logFile.write(TableComponent.convertUml(buff).toString());
                   1210:     logFile.flush();
                   1211:   }
                   1212:   /**
                   1213:    * Append one entry to the log file(index.html)
                   1214:    */
                   1215:   public static void appendLog(String entry, String name) throws Exception
                   1216:   {
                   1217:     logFile.write("<a href=\"./" + name.substring(name.lastIndexOf("/") + 1) + "\">");
                   1218:     logFile.write(entry + "</a>");
                   1219:     logFile.write("<br>\n<br>\n");
                   1220:     logFile.flush();
                   1221:   }
                   1222:   /**
                   1223:    * closes the log file invoked then the application closes
                   1224:    */
                   1225:   public static void closeLog() throws Exception
                   1226:   {
                   1227:     logFile.write("\n</body>");
                   1228:     logFile.write("\n</html>");
                   1229: 
                   1230:     logFile.close();
                   1231:   }
                   1232:   public static void showErrorDialog(String message, String title)
                   1233:   {
                   1234:     JDialog dialog = new JDialog(fmInstance);
                   1235:     dialog.setTitle(title);
                   1236:     JTextArea text = new JTextArea();
                   1237:     JScrollPane scroller = new JScrollPane(text);
                   1238:     dialog.getContentPane().add(scroller);
                   1239:     text.append(message);
                   1240:     dialog.setSize(600, 300);
                   1241:     dialog.setLocationRelativeTo(fmInstance);
                   1242:     dialog.show();
                   1243:     //JOptionPane.showMessageDialog(null, message, title, JOptionPane.ERROR_MESSAGE);
                   1244:   }
                   1245:   public static class ProgressDialog extends JDialog
                   1246:   {
                   1247:     JLabel table = new JLabel("    ");
                   1248:     JLabel status = new JLabel("    ");
                   1249:     JLabel title = new JLabel("     ");
                   1250:     JPanel content = new JPanel();
                   1251:     JPanel titlePanel = new JPanel();
                   1252:     JPanel labelPanel = new JPanel();
                   1253:     JPanel statusPanel = new JPanel();
                   1254:     JPanel buttonPanel = new JPanel();
                   1255: 
                   1256:     JProgressBar progress = new JProgressBar();
                   1257:     JButton cancel = new JButton("Cancel");
                   1258:     Thread thread;
                   1259:     public ProgressDialog(JFrame frame)
                   1260:     {
                   1261:       super(frame);
                   1262:       content = new JPanel(true);
                   1263:       //content.setBorder(BorderFactory.createRaisedBevelBorder());
                   1264:       content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
                   1265:       title = new JLabel("Progress of conversion");
                   1266:       title.setHorizontalTextPosition(title.CENTER);
                   1267:       titlePanel.add(title);
                   1268:       buttonPanel.add(cancel);
                   1269:       // content.add(titlePanel);
                   1270:       content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
                   1271:       content.add(labelPanel);
                   1272:       content.add(new JLabel(""));
                   1273:       content.add(progress);
                   1274:       content.add(statusPanel);
                   1275:       content.add(buttonPanel);
                   1276:       content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
                   1277:       labelPanel.add(table);
                   1278:       statusPanel.add(status);
                   1279:       getContentPane().add(titlePanel, "North");
                   1280:       getContentPane().add(content, "Center");
                   1281:       this.addWindowListener(new WindowAdapter()
                   1282:       {
                   1283:         public void windowClosing(WindowEvent e)
                   1284:         {
                   1285:           cancel.doClick();
                   1286:         }
                   1287:       });
                   1288: 
                   1289:       cancel.addActionListener(new ActionListener()
                   1290:       {
                   1291:         public void actionPerformed(ActionEvent e)
                   1292:         {
                   1293:           fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                   1294:                    fmInstance.setEnabled(true);
                   1295:           setVisible(false);
                   1296:           thread.stop();
                   1297:         }
                   1298:       });
                   1299:       pack();
                   1300: 
                   1301:     }
                   1302: 
                   1303:   }
                   1304:   public static class PasswordDialog extends JDialog
                   1305:   {
                   1306:     JLabel table = new JLabel("    ");
                   1307:     JLabel status = new JLabel("    ");
                   1308:     JLabel title = new JLabel("     ");
                   1309:     JPanel content = new JPanel();
                   1310:     JPanel titlePanel = new JPanel();
                   1311:     JPanel userPanel = new JPanel();
                   1312:     JPanel passwordPanel = new JPanel();
                   1313:     JPanel buttonPanel = new JPanel();
                   1314:     JTextField user = new JTextField(10);
                   1315:     JTextField passwd = new JPasswordField(10);
                   1316: 
                   1317:     JButton cancel = new JButton("Cancel");
                   1318:     JButton ok = new JButton("Ok");
                   1319:     DBBean bean = null;
                   1320:     Thread thread;
                   1321:     public PasswordDialog(JFrame frame, DBBean localBean)
                   1322:     {
                   1323:       super(frame);
                   1324:       setTitle("PasswordDialog");
                   1325:       setModal(true);
                   1326:       content = new JPanel(true);
                   1327:       this.bean = localBean;
                   1328:       //content.setBorder(BorderFactory.createRaisedBevelBorder());
                   1329:       ActionListener al = new ActionListener()
                   1330:       {
                   1331:         public void actionPerformed(ActionEvent e)
                   1332:         {
                   1333:           bean.setUserAndPasswd(user.getText(), passwd.getText());
                   1334:           setVisible(false);
                   1335:         }
                   1336: 
                   1337:       };
                   1338:       this.addWindowListener(new WindowAdapter()
                   1339:       {
                   1340:         public void windowClosing(WindowEvent e)
                   1341:         {
                   1342:           cancel.doClick();
                   1343:         }
                   1344:       });
                   1345: 
                   1346:       user.setText(localBean.user);
                   1347:       passwd.setText(localBean.passwd);
                   1348:       user.addActionListener(al);
                   1349:       passwd.addActionListener(al);
                   1350:       content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
                   1351:       title = new JLabel("Enter user and password ");
                   1352:       title.setHorizontalTextPosition(title.CENTER);
                   1353:       titlePanel.add(title);
                   1354:       buttonPanel.add(ok);
                   1355:       buttonPanel.add(cancel);
                   1356:       content.add(titlePanel);
                   1357:       content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
                   1358:       // content.add(labelPanel);
                   1359:       content.add(new JLabel(""));
                   1360:       content.add(userPanel);
                   1361:       content.add(passwordPanel);
                   1362:       content.add(buttonPanel);
                   1363:       content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
                   1364:       //labelPanel.add(table);
                   1365:       userPanel.add(new JLabel("Username:  "));
                   1366:       userPanel.add(user);
                   1367:       passwordPanel.add(new JLabel("Password:  "));
                   1368:       passwordPanel.add(passwd);
                   1369:       passwd.setPreferredSize(user.getPreferredSize());
                   1370:       passwd.setMinimumSize(passwd.getPreferredSize());
                   1371:       passwd.setMaximumSize(passwd.getPreferredSize());
                   1372:       passwd.setSize(passwd.getPreferredSize());
                   1373:         getContentPane().add(titlePanel, "North");
                   1374:       getContentPane().add(content, "Center");
                   1375:       ok.addActionListener(al);
                   1376:       cancel.addActionListener(new ActionListener()
                   1377:       {
                   1378:         public void actionPerformed(ActionEvent e)
                   1379:         {
                   1380:           fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                   1381:                    fmInstance.setEnabled(true);
                   1382:           setVisible(false);
                   1383:           thread.stop();
                   1384:         }
                   1385: 
                   1386:       });
                   1387:       pack();
                   1388: 
                   1389:     }
                   1390: 
                   1391:   }
                   1392:   public void fillTable()
                   1393:   {
                   1394:     noDBUpdate = true;
                   1395:     Vector tableNames = bean.getTableNames();
                   1396:     Collections.sort(tableNames, String.CASE_INSENSITIVE_ORDER);
                   1397:     Vector[] data = new Vector[2];
                   1398:     data[1] = new Vector();
                   1399:     data[1].add("Table");
                   1400:     data[1].add("Layouts");
                   1401:        data[1].add("select");
                   1402:     data[1].add("create");
                   1403:    
                   1404:     data[0] = new Vector();
                   1405: 
                   1406:     for (int i = 0; i < tableNames.size(); i++)
                   1407:     {
                   1408:       String name = tableNames.get(i).toString();
                   1409:       Vector layouts = new Vector();
                   1410:       try
                   1411:       {
                   1412:         layouts = bean.getLayoutNames(name);
                   1413:       } catch (SQLException e)
                   1414:       {
                   1415:         layouts = new Vector();
                   1416:       }
                   1417:       Vector dataRow = new Vector();
                   1418:       dataRow.add(name);
                   1419:       if (!layouts.isEmpty())
                   1420:         dataRow.add(new JComboBox(layouts));
                   1421:       else
                   1422:         dataRow.add(null);
                   1423:       dataRow.add(new TableComponent.SQLCommand("select * from "+bean.getQC()+name+bean.getQC()));
                   1424:      
                   1425:         data[0].add(dataRow);
                   1426:     dataRow.add(new TableComponent.SQLCommand(""));
                   1427:       //System.out.println(dataRow);
                   1428:     }
                   1429:     tC.tableModel.setDataVector(data[0], data[1]);
                   1430:     tC.revalidate();
                   1431:     tC.tableModel.fireTableDataChanged();
                   1432:     noDBUpdate = false;
                   1433:   
                   1434:   }
                   1435:   public Vector[] getListFromTable()
                   1436:   {
                   1437:     Vector[] vec = new Vector[4];
                   1438:     vec[0] = new Vector();
                   1439:     vec[1] = new Vector();
                   1440:        vec[2] = new Vector();
                   1441:     vec[3] = new Vector();
                   1442:     int[] rows = tC.table.getSelectedRows();
                   1443:     for (int i = 0; i < rows.length; i++)
                   1444:     {
                   1445:       //System.out.println(tC.tableModel.getValueAt(rows[i],1));
                   1446:       vec[0].add(tC.tableModel.getValueAt(rows[i], 0));
                   1447:       JComboBox box = ((JComboBox) tC.tableModel.getValueAt(rows[i], 1));
                   1448:       String layoutName = (box != null) ? box.getSelectedItem().toString() : "";
                   1449:       vec[1].add(layoutName);
                   1450:       vec[2].add(tC.tableModel.getValueAt(rows[i], 2).toString());
                   1451:       vec[3].add(tC.tableModel.getValueAt(rows[i], 3).toString());
                   1452:   
                   1453:     }
                   1454:     return vec;
                   1455:   }
                   1456:   public void setEnabled(boolean state)
                   1457:   {
                   1458:     showTables.setEnabled(state);
                   1459:     showTables1.setEnabled(state);
                   1460:     convert.setEnabled(state);
                   1461:     dropTables.setEnabled(state);
                   1462:     box3.setEnabled(state);
                   1463:     box4.setEnabled(state);
                   1464: 
                   1465:   }
                   1466:   public TableComponent.SQLCommand createStatement(String table,DBBean beanDest,String layout,String query)  throws SQLException
                   1467:   {
                   1468:     fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
                   1469:         
                   1470:     if(beanDest.url.equals("")) beanDest.url=box4.getSelectedItem().toString();
                   1471:     StringBuffer command = new StringBuffer(50);
                   1472:     command.append("\n           CREATE TABLE ");
                   1473:     command.append(beanDest.getQC());
                   1474:     command.append(Convert.convertText(table));
                   1475:     command.append(beanDest.getQC());
                   1476:     command.append("\n             ( ");
                   1477:     String type = null;
                   1478:    // String query = "select * from " + bean.getQC() +table + bean.getQC();
                   1479:    if (!layout.equals(""))
                   1480:      {
                   1481:        layout = " layout " + bean.getQC() + layout + bean.getQC();
                   1482:        StringBuffer queryLayout = new StringBuffer(query);
                   1483:        queryLayout.insert(queryLayout.indexOf(table) + table.length() + 1, " " + layout);
                   1484:        query = queryLayout.toString();
                   1485:        System.out.println("added layout  "+ query);
                   1486:         
                   1487:      }
                   1488:       Vector[] result=bean.getQueryData(query,1);
                   1489:     for (int i = 0; i < result[1].size() - 1; ++i)
                   1490:     {
                   1491:       type = bean.metaData.getColumnTypeName(i + 1);
                   1492:       //   System.out.println(i+" "+result[1].get(i)+" "+type);
                   1493:       type = (type.equals("NUMBER")) ? "INT4" : type;
                   1494:       type = (type.equals("CONTAINER")) ? "TEXT" : type;
                   1495:       type = type.toUpperCase(); 
                   1496:       if(i==0)
                   1497:       command.append(beanDest.getQC() + Convert.convertText((String) result[1].get(i)) + beanDest.getQC() + " " + type + ", ");
                   1498:       else
                   1499:       command.append("               "+beanDest.getQC() + Convert.convertText((String) result[1].get(i)) + beanDest.getQC() + " " + type + ", ");
                   1500:       command.append("\n");
                   1501:     }
                   1502:     type = bean.metaData.getColumnTypeName(result[1].size());
                   1503:     type = (type.equals("NUMBER")) ? "INT4" : type;
                   1504:     type = (type.equals("CONTAINER")) ? "TEXT" : type;
                   1505:     type = type.toUpperCase(); 
                   1506:     command.append("               "+beanDest.getQC() + Convert.convertText((String) result[1].get(result[1].size() - 1)) + beanDest.getQC() + " " + type);
                   1507:     command.append("\n             )\n");
                   1508:     fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                   1509:    
                   1510:    return new TableComponent.SQLCommand(command.toString());
                   1511:   }
                   1512:   static class XMLFilter extends javax.swing.filechooser.FileFilter
                   1513:   {
                   1514:     public boolean accept(java.io.File file)
                   1515:     {
                   1516:       if (file.getName().toLowerCase().endsWith(".xml") || file.isDirectory())
                   1517:         return true;
                   1518:       else
                   1519:         return false;
                   1520:     }
                   1521:     public String getDescription()
                   1522:     {
                   1523:       return "Batch Convert XML File";
                   1524:     }
                   1525: 
                   1526:   }
                   1527:   public static int showDialog(String message, String title, Object[] options)
                   1528:   {
                   1529:     int option = JOptionPane.showOptionDialog(null, message, title, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]);
                   1530:     return option;
                   1531:   
                   1532:   }
                   1533: 
                   1534: }

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