Annotation of FM2SQL/src/FM2SQL.java, revision 1.2

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

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