Annotation of FM2SQL/FM.java, revision 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>