File:  [Repository] / FM2SQL / Attic / FM.java
Revision 1.1: download - view: text, annotated - select for diffs - revision graph
Fri Dec 5 11:46:39 2003 UTC (20 years, 7 months ago) by rogo
Branches: MAIN
CVS tags: HEAD
Initial revision

    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>