File:  [Repository] / FM2SQL / Attic / FM2SQL.java
Revision 1.17: download - view: text, annotated - select for diffs - revision graph
Tue Feb 17 13:16:00 2004 UTC (20 years, 4 months ago) by rogo
Branches: MAIN
CVS tags: HEAD
clean up of source code

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

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