Annotation of FM2SQL/src/FM.java, revision 1.1

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

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