File:  [Repository] / FM2SQL / Attic / FM2SQL.java
Revision 1.2: download - view: text, annotated - select for diffs - revision graph
Wed Dec 10 12:24:41 2003 UTC (20 years, 7 months ago) by rogo
Branches: MAIN
CVS tags: HEAD
layout geändert

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

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