Annotation of FM2SQL/FM2SQL.java, revision 1.1.1.1

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

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