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>