File:  [Repository] / FM2SQL / Attic / FM2SQL.java
Revision 1.41: download - view: text, annotated - select for diffs - revision graph
Mon Jul 19 11:01:29 2004 UTC (19 years, 11 months ago) by rogo
Branches: MAIN
CVS tags: HEAD
closeAllConnections added

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

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