File:  [Repository] / FM2SQL / Attic / FM2SQL.java
Revision 1.24: download - view: text, annotated - select for diffs - revision graph
Wed Mar 3 12:14:47 2004 UTC (20 years, 4 months ago) by rogo
Branches: MAIN
CVS tags: HEAD
*** empty log message ***

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

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