File:  [Repository] / FM2SQL / Attic / FM2SQL.java
Revision 1.3: download - view: text, annotated - select for diffs - revision graph
Thu Dec 11 11:36:55 2003 UTC (20 years, 6 months ago) by rogo
Branches: MAIN
CVS tags: HEAD
selection status beim laden + layout verbessert

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

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