Annotation of FM2SQL/FM2SQL.java, revision 1.42

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

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