File:  [Repository] / FM2SQL / Attic / FM2SQL.java
Revision 1.8: download - view: text, annotated - select for diffs - revision graph
Fri Jan 9 12:43:00 2004 UTC (20 years, 6 months ago) by rogo
Branches: MAIN
CVS tags: HEAD
*** empty log message ***

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

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