Annotation of FM2SQL/FM.java, revision 1.1.1.1

1.1       rogo        1: import javax.swing.*;
                      2: import javax.swing.event.*;
                      3: import java.awt.event.*;
                      4: import java.awt.Dimension;
                      5: import java.awt.FlowLayout;
                      6: import java.awt.Image;
                      7: import java.sql.*;
                      8: import java.util.*;
                      9: import java.io.*;
                     10: /**
                     11:  *
                     12:  * <br> 
                     13:  * <h2>FileMaker Test (JDBC Database Driver Test)</h2>
                     14:  * Main class :  
                     15:  * contains the main Frame, all event handlers etc
                     16:  * <br>
                     17:  * The Database access is made over DBBean class
                     18:  * all other classes are just for the visualization of the data
                     19:  *  @version 0.1( first stable release)
                     20:  *  @author rogo
                     21:  * 
                     22:  */
                     23: public class FM extends JFrame implements ActionListener, TableModelListener
                     24: {
                     25:   /**
                     26:   * The database Bean instance.
                     27:   * 
                     28:   */
                     29:   DBBean bean;
                     30: 
                     31:   /**
                     32:    *  box - Tablenames
                     33:    */
                     34: 
                     35:   JComboBox box;
                     36: 
                     37:   /**
                     38:    *  box2 - Layout names
                     39:    */
                     40: 
                     41:   JComboBox box2;
                     42:   /**
                     43:   *  box3 - Database URLs 
                     44:   */
                     45: 
                     46:   JComboBox box3;
                     47:   TableComponent table;
                     48:   JTextField queryField = new JTextField("select titel from HowTos", 60);
                     49:   Vector tables = new Vector();
                     50:   Vector layouts = new Vector();
                     51: 
                     52:   FM fm = this;
                     53:   boolean noDBUpdate = false;
                     54:   int id = 0;
                     55:   /**
                     56:   * The result window used for query results
                     57:   */
                     58:   ResultWindow window;
                     59:   static FM fmInstance;
                     60:   static String url =  "jdbc:fmpro:http://141.14.237.42";//"jdbc:odbc:rogo2";
                     61:   static String url2 = "jdbc:postgresql://chrysantheme2/postgres";
                     62: 
                     63:   JPanel topPanel, contentPanel;
                     64:   int oldWidth = 0, oldHeight = 0;
                     65:   boolean resize = true;
                     66:   static FileWriter logFile;
                     67:   /**
                     68:    * tries to connect to database specified in url-Variable.
                     69:    * initializes all GUI components, then fails throws an exception
                     70:    * 
                     71:    */
                     72:   public FM() throws Exception
                     73:   {
                     74: 
                     75:    /* DBFront rock = new DBFront();
                     76:     rock.setURL("jdbc:odbc:rogo2");
                     77:     rock.setQuery("select productname,groupid from products");
                     78:     rock.query();
                     79:     System.out.println(rock.getNextRow());
                     80:     System.out.println(rock.getNextRow());
                     81:     System.out.println(rock.getNextRow());
                     82:     System.out.println(rock.getNextRow());
                     83:     System.out.println(rock.getColumnNames());
                     84:     rock.setQuery("select productname from products");  
                     85:     rock.query();
                     86:     System.out.println(rock.getNextRow());
                     87:     System.out.println(rock.getNextRow());
                     88:     System.out.println(rock.getNextRow());
                     89:     System.out.println(rock.getNextRow());
                     90:     System.out.println(rock.getColumnNames());
                     91:     */
                     92:     Image local = getToolkit().getImage(getClass().getResource("icons/fm.jpg"));
                     93:     if (local != null);
                     94:     setIconImage(local);
                     95:     bean = new DBBean();
                     96:     //tables = bean.getTableNames();
                     97:     //Collections.sort(tables);
                     98:     //layouts = bean.getLayoutNames((String) tables.get(0));
                     99:     //Collections.sort(layouts);
                    100:     box2 = new JComboBox();
                    101:     box3 = new JComboBox(new String[] { "jdbc:fmpro:http://localhost", "jdbc:fmpro:http://141.14.237.42","jdbc:fmpro:http://141.14.237.74:8050", "jdbc:odbc:rogo","jdbc:postgresql://erebos/test" });
                    102:     box3.setEditable(true);
                    103:     
                    104:    // Vector[] data = bean.getQueryData((String) tables.get(0));
                    105:     table = new TableComponent();
                    106:    // table.tableModel.setDataVector(data[0], data[1]);
                    107:    // table.tableModel.setRowCount((table.screenSize.height) / 20);
                    108:    // table.enlarge(getWidth(), getHeight());
                    109: 
                    110:     //id = table.tableModel.findColumn("ID");
                    111:     
                    112:     //System.out.println("ID is at " + id);
                    113: 
                    114:     box = new JComboBox(tables);
                    115:     box.addActionListener(this);
                    116:     box2.addActionListener(this);
                    117:     box3.addActionListener(this);
                    118: 
                    119:     contentPanel = new JPanel();
                    120:     contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));
                    121:     topPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 5));
                    122:     topPanel.add(Box.createRigidArea(new Dimension(10, 0)));
                    123:     topPanel.add(new JLabel("Choose table: "));
                    124:     topPanel.add(box);
                    125:     topPanel.add(Box.createRigidArea(new Dimension(10, 0)));
                    126:     topPanel.add(new JLabel("Choose layout: "));
                    127:     topPanel.add(box2);
                    128:     topPanel.add(Box.createRigidArea(new Dimension(10, 0)));
                    129:     topPanel.add(new JLabel("Choose dbURL: "));
                    130:     topPanel.add(box3);
                    131: 
                    132:     JPanel queryPanel = new JPanel();
                    133:     queryPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));
                    134:     //topPanel.add(Box.createRigidArea(new Dimension(10, 0)));
                    135:     queryPanel.add(new JLabel("Enter query: "));
                    136:     queryPanel.add(Box.createRigidArea(new Dimension(5, 0)));
                    137: 
                    138:     queryPanel.add(queryField);
                    139:     queryPanel.add(Box.createRigidArea(new Dimension(10, 0)));
                    140:     JButton makeQuery = new JButton("make Query");
                    141:     queryPanel.add(makeQuery);
                    142:     makeQuery.addActionListener(fm);
                    143:     queryField.addActionListener(fm);
                    144:     contentPanel.add(topPanel);
                    145:     contentPanel.add(queryPanel);
                    146:     //System.out.println(contentPanel.getPreferredSize());
                    147:     getContentPane().add(contentPanel, "North");
                    148:     getContentPane().add(table);
                    149:     this.addWindowListener(new WindowAdapter()
                    150:     {
                    151:       public void windowClosing(WindowEvent e)
                    152:       {
                    153:         try
                    154:         {
                    155:           closeLog();
                    156:         } catch (Exception e5)
                    157:         {
                    158:           System.out.println("Error while closing logfile " + e5);
                    159:         }
                    160:         System.exit(0);
                    161:       }
                    162:     });
                    163:     addComponentListener(new ComponentAdapter()
                    164:     {
                    165:       public void componentResized(ComponentEvent e)
                    166:       {
                    167: 
                    168:         // System.out.println("Window resized " + getWidth() + " " + getHeight());
                    169:         //Dimension size=table.tableScroller.getPreferredSize();
                    170:         //table.setAutoResizeMode(table.AUTO_RESIZE_OFF);
                    171:         // if (table.tableScroller.getPreferredSize().width < getWidth() && fm.isVisible())
                    172:         // table.sizeToFit(getWidth(), getHeight());
                    173:         if (oldWidth != getWidth() || oldHeight != getHeight())
                    174:         {
                    175:           table.enlarge(getWidth(), getHeight());
                    176: 
                    177:           Dimension dim = table.table.getPreferredSize();
                    178:           int size = contentPanel.getPreferredSize().height + new JScrollBar().getPreferredSize().height + new JMenuBar().getPreferredSize().height + 10;
                    179:           table.tableScroller.setPreferredSize(new Dimension(getWidth() - 15, getHeight() - size));
                    180:           Dimension d2 = table.tableScroller.getPreferredSize();
                    181: 
                    182:           oldWidth = getWidth();
                    183:           oldHeight = getHeight();
                    184:           //   System.out.println("fit" + getWidth() + " " + oldWidth);
                    185:           //table.table.setPreferredScrollableViewportSize(dim);
                    186: 
                    187:           table.setPreferredSize(new Dimension(d2.width + 15, d2.height + 5));
                    188:           table.table.revalidate();
                    189:           table.tableScroller.revalidate();
                    190:           table.revalidate();
                    191:           if (getHeight() > table.table.getPreferredSize().height + (2 * size))
                    192:             setSize(getWidth(), table.table.getPreferredSize().height + 2 * size);
                    193:           // System.out.println("size" + size);
                    194:         }
                    195:         repaint();
                    196:         setTitle("Filemaker Database Test - Table " + fm.box.getSelectedItem());
                    197: 
                    198:       }
                    199:     });
                    200:     setMenu();
                    201:     setSize(700, 600);
                    202:     pack();
                    203: 
                    204:     setVisible(true);
                    205: 
                    206:     // repaint();
                    207: 
                    208:   }
                    209: 
                    210:   /**
                    211:    *  
                    212:    */
                    213:   public static void main(String[] args)
                    214:   {
                    215:     try
                    216:     {
                    217:       System.setErr(System.out);
                    218:       if (System.getProperty("os.name").startsWith("W"))
                    219:         javax.swing.UIManager.setLookAndFeel(new com.sun.java.swing.plaf.windows.WindowsLookAndFeel());
                    220: 
                    221:       fmInstance = new FM();
                    222:       fmInstance.table.tableModel.addTableModelListener(fmInstance);
                    223:       if (!new File("./html").exists())
                    224:         new File("./html").mkdirs();
                    225:       logFile = new FileWriter("./html/index.html");
                    226:       openLog();
                    227:       // Statement stm = fm.bean.getConnection().createStatement();
                    228:       // stm.executeUpdate("DELETE FROM \""+fm.tables.get(0)+"\" WHERE \"erstellt von\"='rogo') ");
                    229:       // stm.executeUpdate("INSERT  INTO \""+fm.tables.get(0)+"\" (TITLE,)  VALUES ('Hier kommt Rogo') ");
                    230:       // stm.executeUpdate("UPDATE   \""+fm.tables.get(1)+"\" SET  \"Year\"='2001' WHERE ID='IT00002' ");
                    231: 
                    232:       // this.setDataVector(tableData, columnNames);
                    233:       // System.out.println(tableData + " " + columnNames);
                    234: 
                    235:     } catch (Exception e)
                    236:     {
                    237:       JOptionPane pane = new JOptionPane(e.getMessage() + "  \n URL: " + url, JOptionPane.ERROR_MESSAGE);
                    238: 
                    239:       JDialog dialog = pane.createDialog(null, " Exception occured while connecting");
                    240:       e.printStackTrace();
                    241:       dialog.addWindowListener(new WindowAdapter()
                    242:       {
                    243:         public void windowClosing(WindowEvent e)
                    244:         {
                    245:           System.exit(0);
                    246:         }
                    247:       });
                    248:       dialog.addComponentListener(new ComponentAdapter()
                    249:       {
                    250: 
                    251:         public void componentHidden(ComponentEvent e)
                    252:         {
                    253: 
                    254:           System.exit(0);
                    255:         }
                    256:       });
                    257:       dialog.show();
                    258:     }
                    259:   }
                    260:   public void actionPerformed(ActionEvent e)
                    261:   {
                    262:     String command = e.getActionCommand();
                    263:     //   System.out.println("command " + command);
                    264:     if (command == "comboBoxEdited")
                    265:     {
                    266:       System.out.println("hey" + box3.getSelectedItem());
                    267:       ((DefaultComboBoxModel) box3.getModel()).insertElementAt(box3.getSelectedItem(), 0);
                    268:     }
                    269:     if (command == "comboBoxChanged")
                    270:     {
                    271:       try
                    272:       {
                    273: 
                    274:         if (e.getSource() == box3)
                    275:         {
                    276:           String url = box3.getSelectedItem().toString();
                    277:           bean.url = (url != null) ? url : bean.url;
                    278:           bean.connection = null;
                    279:           bean.getConnection();
                    280:           tables = bean.getTableNames();
                    281:           Collections.sort(tables);
                    282:           layouts = bean.getLayoutNames((String) tables.get(0));
                    283:           Collections.sort(layouts);
                    284:           box.setModel(new DefaultComboBoxModel(tables));
                    285:           box2.setModel(new DefaultComboBoxModel(layouts));
                    286: 
                    287:         }
                    288:         if (e.getSource() != box2)
                    289:           box2.setModel(new DefaultComboBoxModel(bean.getLayoutNames(box.getSelectedItem().toString())));
                    290:         String query = "select * from " + bean.getQC() + box.getSelectedItem() + bean.getQC();
                    291:         if (box2.getSelectedItem() != "")
                    292:           query += " layout " + bean.getQC() + box2.getSelectedItem() + bean.getQC();
                    293: 
                    294:         Vector[] data = bean.getQueryData(query, bean.getMaxHits());
                    295:         noDBUpdate = true;
                    296:         if (data[0].isEmpty() || data[1].isEmpty())
                    297:         {
                    298:           if (!data[0].isEmpty())
                    299:           {
                    300:             data[0] = new Vector();
                    301:             Vector row = new Vector();
                    302:             row.add("Error empty layout!!!");
                    303:             data[0].addElement(row);
                    304:           }
                    305:           // if (data[1].isEmpty())
                    306:           {
                    307:             data[1] = new Vector();
                    308: 
                    309:             data[1].addElement("Error empty layout!!!");
                    310:           }
                    311:         }
                    312:         table.tableModel.setDataVector(data[0], data[1]);
                    313:         int numRows = table.screenSize.height / 20;
                    314:         table.tableModel.setRowCount((numRows > table.tableModel.getRowCount()) ? numRows : table.tableModel.getRowCount());
                    315:         noDBUpdate = false;
                    316:         //table.vergroessern(getWidth(),getHeight());
                    317:         id = table.tableModel.findColumn("ID");
                    318:         //  System.out.println("ID is at " + id);
                    319:         setTitle("Filemaker Database Test - Table " + fm.box.getSelectedItem());
                    320:         pack();
                    321: 
                    322:       } catch (Exception e2)
                    323:       {
                    324:       }
                    325:     }
                    326:     if (command == "show Driver features")
                    327:     {
                    328:       ResultWindow result = new ResultWindow(this);
                    329:       try
                    330:       {
                    331:         Vector[] vecs = bean.TestDB(bean.getConnection().getMetaData());
                    332:         result.updateResult(vecs[0], vecs[1]);
                    333:         // result.pack();
                    334:         result.title = "Database features";
                    335:         result.setVisible(true);
                    336:         String name = result.writeResult();
                    337:         if (result.counter == 1)
                    338:           appendLog(result.title, name);
                    339:       } catch (Exception e2)
                    340:       {
                    341:       }
                    342:     }
                    343:     if (command.equals("make Query"))
                    344:       testQuery(queryField.getText());
                    345:     if (e.getSource() == queryField)
                    346:       testQuery(queryField.getText());
                    347: 
                    348:   }
                    349:   /**
                    350:    * Test the specified Query and display the result
                    351:    */
                    352:   public void testQuery(String query)
                    353:   {
                    354:     if (query == "")
                    355:       query = "select Titel,Standort,id from HowTos";
                    356: 
                    357:     if (window == null)
                    358:       window = new ResultWindow(fm);
                    359:     for (int i = 0; i < tables.size(); ++i)
                    360:       if (query.toLowerCase().indexOf(((String) tables.get(i)).toLowerCase()) >= 0)
                    361:       {
                    362:         window.title = " Table " + (String) tables.get(i) + " -  Query done: " + query;
                    363:         break;
                    364:       } else
                    365:         window.title = "Error! - No valid tablename found";
                    366: 
                    367:     try
                    368:     {
                    369:       if ((query.toLowerCase().indexOf("insert") >= 0) || (query.toLowerCase().indexOf("delete") >= 0) || (query.toLowerCase().indexOf("alter") >= 0) || (query.toLowerCase().indexOf("update") >= 0))
                    370:       {
                    371:         Statement stm = fm.bean.getConnection().createStatement();
                    372:         stm.executeUpdate(query);
                    373:         Vector vec = new Vector();
                    374:         Vector vec2 = new Vector();
                    375:         Vector vec3 = new Vector();
                    376:         vec2.add(query);
                    377:         vec3.add(vec2);
                    378:         vec.add("Insert, update, etc done! No results available");
                    379:         // vec.add("no Results were produced");
                    380: 
                    381:         window.updateResult(vec3, vec);
                    382:         window.pack();
                    383:         window.setVisible(true);
                    384: 
                    385:       } else
                    386:       {
                    387:         Vector[] vecs = bean.getQueryData(query, bean.getMaxHits());
                    388:         if (vecs[1].isEmpty())
                    389:           throw new Exception("Wrong columnname");
                    390:         window.updateResult(vecs[0], vecs[1]);
                    391:         window.pack();
                    392:         String name = window.writeResult();
                    393:         appendLog(window.title, name);
                    394:       }
                    395:       window.setVisible(true);
                    396:     } catch (Exception e)
                    397:     {
                    398:       System.out.println("Exception occured");
                    399:       System.out.println(e.getMessage());
                    400:       Vector vec = new Vector();
                    401:       Vector vec2 = new Vector();
                    402:       Vector vec3 = new Vector();
                    403:       vec2.add(e.getMessage());
                    404:       vec3.add(vec2);
                    405:       vec.add("Exception occured! No results available");
                    406:       //vec.add("no Results were produced");
                    407: 
                    408:       window.updateResult(vec3, vec);
                    409:       window.pack();
                    410:       window.setVisible(true);
                    411: 
                    412:     }
                    413: 
                    414:   }
                    415:   /**
                    416:    * invoked then the user changes the table or the tableModel changes
                    417:    */
                    418:   public void tableChanged(TableModelEvent e)
                    419:   {
                    420:     //  if (e.getType() == e.INSERT)
                    421:     //System.out.println("Insert done");
                    422:     // if (e.getType() == e.UPDATE)
                    423:     // System.out.println("Update done");
                    424:     //if (e.getType() == e.DELETE)
                    425:     //System.out.println("Delete done");
                    426:     if (e.getType() == e.UPDATE && !noDBUpdate)
                    427:     {
                    428:       int row = e.getFirstRow(), col = e.getColumn();
                    429:       String columnName = table.tableModel.getColumnName(col);
                    430:       if (id == -1)
                    431:         return;
                    432:       Object test = table.tableModel.getValueAt(row, id);
                    433:       String idVal = (test == null) ? "" : test.toString();
                    434:       String value = table.tableModel.getValueAt(row, col).toString();
                    435: 
                    436:       System.out.println("Got in " + columnName + " " + idVal + " " + box.getSelectedItem());
                    437:       if (table.tableModel.getValueAt(row, col) instanceof Vector)
                    438:       {
                    439:         System.out.println("found a Vector");
                    440:         return;
                    441:       }
                    442:       try
                    443:       {
                    444:         Statement stm = bean.getConnection().createStatement();
                    445:         //  stm.executeUpdate("DELETE FROM \""+fm.tables.get(0)+"\" WHERE \"erstellt von\"='rogo') ");
                    446: 
                    447:         if (idVal == "")
                    448:           stm.executeUpdate("INSERT  INTO " + bean.getQC() + box.getSelectedItem() + bean.getQC() + " (" + bean.getQC() + columnName + bean.getQC() + ")  VALUES ('" + value + "') ");
                    449:         else
                    450:           stm.executeUpdate("UPDATE   " + bean.getQC() + box.getSelectedItem() + bean.getQC() + " SET  " + bean.getQC() + columnName + bean.getQC() + "='" + value + "' WHERE ID='" + idVal + "' ");
                    451:       } catch (Exception e2)
                    452:       {
                    453:         System.out.println(e2.getMessage());
                    454:       }
                    455:     }
                    456:   }
                    457: 
                    458:   /**
                    459:    * initialize the menubar
                    460:    */
                    461:   private void setMenu()
                    462:   {
                    463:     JMenuBar menubar = new JMenuBar();
                    464:     JMenu menu = new JMenu("Options");
                    465:     JMenuItem item = new JMenuItem("show Driver features");
                    466:     item.addActionListener(fm);
                    467:     menu.add(item);
                    468:     menubar.add(menu);
                    469:     menu.setBackground(fm.getBackground());
                    470:     menubar.setBackground(fm.getBackground());
                    471:     setJMenuBar(menubar);
                    472:   }
                    473:   /**
                    474:    *  open the log  file (index.html)
                    475:    */
                    476: 
                    477:   public static void openLog() throws Exception
                    478:   {
                    479: 
                    480:     StringBuffer buff = new StringBuffer();
                    481:     buff.append("<html>");
                    482:     buff.append("<head>");
                    483:     buff.append("\n<title>");
                    484:     buff.append("FileMaker Test");
                    485:     buff.append("</title>\n");
                    486:     buff.append("</head>\n");
                    487: 
                    488:     buff.append("<body>\n");
                    489:     buff.append("<center>\n");
                    490:     buff.append("\n<h3>");
                    491:     buff.append("FileMaker Test");
                    492:     buff.append("</h3>\n");
                    493: 
                    494:     logFile.write(TableComponent.convertUml(buff).toString());
                    495:     logFile.flush();
                    496:   }
                    497:   /**
                    498:    * Append one entry to the log file(index.html)
                    499:    */
                    500:   public static void appendLog(String entry, String name) throws Exception
                    501:   {
                    502:     logFile.write("<a href=\"./" + name.substring(name.lastIndexOf("/") + 1) + "\">");
                    503:     logFile.write(entry + "</a>");
                    504:     logFile.write("<br>\n<br>\n");
                    505:     logFile.flush();
                    506:   }
                    507:   /**
                    508:    * closes the log file invoked then the application closes
                    509:    */
                    510:   public static void closeLog() throws Exception
                    511:   {
                    512:     logFile.write("\n</body>");
                    513:     logFile.write("\n</html>");
                    514: 
                    515:     logFile.close();
                    516:   }
                    517: }

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