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>