Annotation of FM2SQL/FM2SQL.java, revision 1.22

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

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