File:  [Repository] / FM2SQL / Attic / FM2SQL.java
Revision 1.30: download - view: text, annotated - select for diffs - revision graph
Mon Mar 15 12:30:51 2004 UTC (20 years, 3 months ago) by rogo
Branches: MAIN
CVS tags: HEAD
delete works!!

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

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