import javax.swing.*; import javax.swing.event.*; import javax.swing.table.TableModel; import Convert.DataBase; import java.awt.event.*; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.*; import java.sql.*; import java.util.*; import java.io.*; /** * *
*

FileMaker Test (JDBC Database Driver Test)

* Main class : * contains the main Frame, all event handlers etc *
* The Database access is made over DBBean class * all other classes are just for the visualization of the data * @version 0.2( first stable release) * @author rogo * */ public class FM2SQL extends JFrame implements ActionListener, TableModelListener { /** * The database Bean instance. * */ DBBean bean; /** * The database destination Bean instance. * */ DBBean destBean; /** * box - Tablenames */ JComboBox box; /** * tList - Tablenames to choose from */ JList tList = new JList(new String[] { "no database", "connection", "" }); JList tListDest = new JList(new String[] { "no database connection", "", "" }); /** * box2 - Layout names */ JComboBox box2; /** * box3 - Database URLs */ JComboBox box3; /** * box4 - Database URLs */ JComboBox box4; TableComponent table, tC; Vector tables = new Vector(); Vector layouts = new Vector(); JPanel listPanel; JPanel topPanel, contentPanel; FM2SQL fm = this; boolean noDBUpdate = false; boolean noUserUpdate = false; int id = 0; static boolean debug = false; /** * The result window used for query results */ MultiResultWindow window; /** * The result window used for query results */ MultiResultWindow windowDest; static FM2SQL fmInstance; static String url = "jdbc:fmpro:http://141.14.237.42"; JButton showTables = new JButton(), showTables1 = new JButton(); JButton convert = new JButton(); JButton dropTables = new JButton(); int oldWidth = 0, oldHeight = 0; boolean resize = true; static FileWriter logFile; Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); JFileChooser configExportFileChooser; JFileChooser configImportFileChooser; /** * tries to connect to database specified in url-Variable. * initializes all GUI components, then fails throws an exception * */ public FM2SQL() throws Exception { Image local = getToolkit().getImage(getClass().getResource("icons/fm.jpg")); if (local != null); setIconImage(local); bean = new DBBean(); destBean = new DBBean(); box2 = new JComboBox(); box3 = new JComboBox(new String[] { "jdbc:fmpro:http://141.14.237.74:8050", "jdbc:fmpro:http://localhost", "jdbc:postgresql://foxridge/test" }); box3.setEditable(true); box4 = new JComboBox(new String[] {"jdbc:postgresql://foxridge/test","jdbc:postgresql://erebos/test1" }); box4.setEditable(true); box4.addActionListener(this); table = new TableComponent(); box = new JComboBox(tables); box.addActionListener(this); box2.addActionListener(this); box3.addActionListener(this); contentPanel = new JPanel(); contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS)); topPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 5)); topPanel.add(Box.createRigidArea(new Dimension(10, 0))); topPanel.add(new JLabel("FileMaker DB ")); topPanel.add(new JLabel("PostgresSQL ")); //tListDest.setMinimumSize(new Dimension(120, 250)); //tListDest.setMaximumSize(new Dimension(230, 250)); //tListDest.setPreferredSize(new Dimension(230, 250)); box3.setMinimumSize(new Dimension(200, 20)); box3.setMaximumSize(new Dimension(320, 20)); box3.setPreferredSize(new Dimension(320, 20)); box4.setMinimumSize(new Dimension(200, 20)); box4.setMaximumSize(new Dimension(320, 20)); box4.setPreferredSize(new Dimension(330, 20)); tC = new TableComponent(); tC.sizeToFit(450, 250); tC.tableModel.addTableModelListener(this); JPanel dataBasePanel = new JPanel(); dataBasePanel.setLayout(new FlowLayout(FlowLayout.LEFT, 2, 2)); dataBasePanel.add(Box.createRigidArea(new Dimension(10, 0))); dataBasePanel.add(new JLabel("Choose src database: ")); dataBasePanel.add(box3); dataBasePanel.add(Box.createRigidArea(new Dimension(10, 0))); dataBasePanel.add(new JLabel("Choose dest database : ")); dataBasePanel.add(Box.createRigidArea(new Dimension(5, 0))); dataBasePanel.add(box4); dataBasePanel.add(Box.createRigidArea(new Dimension(10, 0))); listPanel = new JPanel(); listPanel.setLayout(new java.awt.GridBagLayout()); java.awt.GridBagConstraints gbc = new java.awt.GridBagConstraints(); JScrollPane pane = new JScrollPane(tList); tC.tableScroller.setPreferredSize(new Dimension(450, 265)); tC.table.revalidate(); tC.setMinimumSize(tC.tableScroller.getPreferredSize()); tC.setMaximumSize(tC.tableScroller.getPreferredSize()); //gbc.gridx=GridBagConstraints.RELATIVE; gbc.gridx = 0; gbc.weightx = 1.0; gbc.weighty = 0.0; gbc.gridwidth = 2; gbc.gridheight = 1; gbc.anchor = GridBagConstraints.NORTHWEST; listPanel.add(new JLabel(" select Tables to Convert ", JLabel.LEFT), gbc); gbc.gridx = 2; listPanel.add(new JLabel(" Tables in database ", JLabel.CENTER), gbc); gbc.anchor = GridBagConstraints.WEST; gbc.gridy = 1; gbc.gridx = 0; gbc.gridwidth = 1; gbc.weightx = 0.0; listPanel.add(tC, gbc); JScrollPane paneDest = new JScrollPane(tListDest); showTables1 = new JButton("show Tables"); showTables1.setActionCommand("show Tables source"); gbc.anchor = GridBagConstraints.NORTH; gbc.weightx = 0.0; gbc.gridx = 1; listPanel.add(showTables1, gbc); paneDest.setPreferredSize(new Dimension(250, 265)); paneDest.setMinimumSize(paneDest.getPreferredSize()); paneDest.setMaximumSize(paneDest.getPreferredSize()); gbc.anchor = GridBagConstraints.WEST; gbc.gridy = 1; gbc.gridx = 2; gbc.weightx = 0.2; listPanel.add(paneDest, gbc); JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.Y_AXIS)); convert = new JButton("Convert Tables"); showTables = new JButton("show Tables"); dropTables = new JButton("drop Tables"); // System.out.println(convert.getPreferredSize()); showTables.setMinimumSize(convert.getPreferredSize()); dropTables.setMinimumSize(convert.getPreferredSize()); showTables.setMaximumSize(convert.getPreferredSize()); dropTables.setMaximumSize(convert.getPreferredSize()); showTables.setPreferredSize(convert.getPreferredSize()); dropTables.setPreferredSize(convert.getPreferredSize()); showTables.addActionListener(fm); showTables1.addActionListener(fm); buttonPanel.add(showTables); buttonPanel.add(convert); convert.addActionListener(fm); dropTables.addActionListener(fm); buttonPanel.add(dropTables); gbc.gridx = 3; gbc.anchor = GridBagConstraints.NORTHWEST; gbc.gridy = 1; gbc.weightx = 1.0; listPanel.add(buttonPanel, gbc); contentPanel.add(dataBasePanel); contentPanel.add(listPanel); listPanel.setMaximumSize(new Dimension(getPreferredSize().width, 550)); listPanel.setMinimumSize(new Dimension(getPreferredSize().width, 150)); listPanel.setPreferredSize(new Dimension(getPreferredSize().width, 350)); getContentPane().add(contentPanel, "Center"); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); addComponentListener(new ComponentAdapter() { public void componentResized(ComponentEvent e) { if (oldWidth != getWidth() || oldHeight != getHeight()) { table.sizeToFit(getWidth(), getHeight()); Dimension dim = table.table.getPreferredSize(); int size = contentPanel.getPreferredSize().height + new JScrollBar().getPreferredSize().height + new JMenuBar().getPreferredSize().height + 10; table.tableScroller.setPreferredSize(new Dimension(getWidth() - 15, getHeight() - size)); Dimension d2 = table.tableScroller.getPreferredSize(); oldWidth = getWidth(); oldHeight = getHeight(); table.setPreferredSize(new Dimension(d2.width + 15, d2.height + 5)); table.table.revalidate(); table.tableScroller.revalidate(); table.revalidate(); if (getHeight() > table.table.getPreferredSize().height + (2 * size)) setSize(getWidth(), table.table.getPreferredSize().height + 2 * size); // System.out.println("size" + size); } listPanel.setMaximumSize(new Dimension(getPreferredSize().width - 5, 550)); listPanel.setMinimumSize(new Dimension(getPreferredSize().width - 5, 200)); listPanel.setPreferredSize(new Dimension(getPreferredSize().width - 5, 370)); ((JPanel) getContentPane()).revalidate(); repaint(); setTitle("Filemaker To Postgres Conversion Tool "); } }); setMenu(); //setSize(800, 600); pack(); setLocation((screenSize.width - getWidth()) / 2, (screenSize.height - getHeight()) / 2); //setVisible(true); validate(); // repaint(); } /** * */ public static void main(String[] args) { try { System.setErr(System.out); // Properties prop = System.getProperties(); // Enumeration enum= prop.keys(); // while(enum.hasMoreElements()) //System.out.println(enum.nextElement()); if (System.getProperty("os.name").startsWith("W")) // javax.swing.UIManager.setLookAndFeel( // new com.sun.java.swing.plaf.windows.WindowsLookAndFeel()); javax.swing.UIManager.put("Table.focusCellHighlightBorder", new javax.swing.border.LineBorder(java.awt.Color.black)); javax.swing.UIManager.put("Table.focusCellBackground", new java.awt.Color(227, 227, 227, 127)); fmInstance = new FM2SQL(); fmInstance.table.tableModel.addTableModelListener(fmInstance); fmInstance.setVisible(true); /* if (!new File("./html").exists()) new File("./html").mkdirs(); logFile = new FileWriter("./html/index.html"); openLog(); */ } catch (Exception e) { JOptionPane pane = new JOptionPane(e.getMessage() + " \n URL: " + url, JOptionPane.ERROR_MESSAGE); JDialog dialog = pane.createDialog(null, " Exception occured while connecting"); e.printStackTrace(); dialog.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); dialog.addComponentListener(new ComponentAdapter() { public void componentHidden(ComponentEvent e) { System.exit(0); } }); dialog.show(); } } public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if (debug) System.out.println("command " + command); if (command == "comboBoxEdited") { Object src = e.getSource(); if (src == box3) { if (debug) System.out.println("hey" + box3.getSelectedItem()); Object insObj =box3.getSelectedItem(); ((DefaultComboBoxModel) box3.getModel()).removeElement(insObj); ((DefaultComboBoxModel) box3.getModel()).insertElementAt(insObj, 0); box3.setSelectedItem(insObj); } else if (src == box4) { if (debug) System.out.println("hey" + box4.getSelectedItem()); //((DefaultComboBoxModel) box4.getModel()).insertElementAt(box4.getSelectedItem(), 0); try { String selected = (String) box4.getSelectedItem(); destBean.setConnection(selected); Vector catalogs = destBean.getCatalogs(); Vector urls = new Vector(); for (int i = 0; i < catalogs.size(); ++i) { urls.add(destBean.url.substring(0, destBean.url.lastIndexOf("/") + 1) + catalogs.get(i)); } box4.setModel(new DefaultComboBoxModel(urls)); box4.setSelectedItem(selected); } catch (Exception e5) { } } } if (command == "comboBoxChanged") { try { //System.out.println("hallo " + (e.getSource() == box3)); Object src = e.getSource(); if (src == box3&&!noUserUpdate) { Thread thread = new Thread() { public void run() { try { PasswordDialog dialog = new PasswordDialog(fmInstance, bean); dialog.setLocationRelativeTo(box3); dialog.thread = Thread.currentThread(); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); fmInstance.setEnabled(false); dialog.setVisible(true); String url = box3.getSelectedItem().toString(); bean.url = (url != null) ? url : bean.url; bean.connection = null; bean.getConnection(); tables = bean.getTableNames(); fillTable(); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); fmInstance.setEnabled(true); // System.out.println("hallo" + tables + " "); } catch (Exception e5) { ByteArrayOutputStream b = new ByteArrayOutputStream(); PrintStream stream = new PrintStream(b); e5.printStackTrace(stream); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); fmInstance.setEnabled(true); Vector header = new Vector(); header.add("no database"); header.add("connection"); Vector rows = new Vector(); //rows.add(header); noDBUpdate=true; tC.tableModel.setDataVector(rows, header); tC.tableModel.setRowCount(20); tC.revalidate(); tC.tableModel.fireTableDataChanged(); noDBUpdate=false; showErrorDialog(b.toString(), "Error occured !"); } } }; thread.start(); } else if (src == box4&&!noUserUpdate) { Thread thread = new Thread() { public void run() { try { PasswordDialog dialog = new PasswordDialog(fmInstance, destBean); dialog.setLocationRelativeTo(box4); dialog.thread = Thread.currentThread(); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); fmInstance.setEnabled(false); dialog.setVisible(true); destBean.setConnection((String) box4.getSelectedItem()); DefaultListModel model = new DefaultListModel(); Vector tables = destBean.getTableNames(); for (int j = 0; j < tables.size(); ++j) model.addElement(tables.get(j)); // System.out.println("hallo" + tables + " "); tListDest.setModel(model); // System.out.println("hallo" + tables + " "); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); fmInstance.setEnabled(true); } catch (Exception e5) { ByteArrayOutputStream b = new ByteArrayOutputStream(); PrintStream stream = new PrintStream(b); e5.printStackTrace(stream); fmInstance.setEnabled(true); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); DefaultListModel model = new DefaultListModel(); model.addElement("no database connection"); tListDest.setModel(model); showErrorDialog(b.toString(), "Error occured !"); } } }; thread.start(); } setTitle("Filemaker To Postgres Conversion Tool "); // pack(); } catch (Exception e4) { ByteArrayOutputStream b = new ByteArrayOutputStream(); PrintStream stream = new PrintStream(b); e4.printStackTrace(stream); showErrorDialog(b.toString(), "Open of table failed"); } } if (command == "show Driver features") { ResultWindow result = new ResultWindow(this); try { Vector[] vecs = bean.TestDB(bean.getConnection().getMetaData()); result.updateResult(vecs[0], vecs[1]); // result.pack(); result.title = "Database features"; result.setVisible(true); String name = result.writeResult(); } catch (Exception e2) { } } //writing config if (command.equals("export XML Config")) { if (configExportFileChooser == null) { configExportFileChooser = new JFileChooser(); configExportFileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); configExportFileChooser.setFileFilter(new XMLFilter()); configExportFileChooser.setDialogType(JFileChooser.SAVE_DIALOG); configExportFileChooser.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e2) { System.out.println(e2.getActionCommand()); if (!e2.getActionCommand().toString().equals("ApproveSelection")) return; Thread thread = new Thread() { public void run() { File configFile = configExportFileChooser.getSelectedFile(); writeConfig(configFile.toString()); } }; thread.start(); } }); } configExportFileChooser.rescanCurrentDirectory(); configExportFileChooser.showDialog(fmInstance, " Save "); } if (command.equals("import XML Config")) { if (configImportFileChooser == null) { configImportFileChooser = new JFileChooser(); configImportFileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); configImportFileChooser.setFileFilter(new XMLFilter()); configImportFileChooser.setDialogType(JFileChooser.OPEN_DIALOG); configImportFileChooser.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e2) { System.out.println(e2.getActionCommand()); if (!e2.getActionCommand().toString().equals("ApproveSelection")) return; Thread thread = new Thread() { public void run() { File configFile = configImportFileChooser.getSelectedFile(); readXMLConfig(configFile.toString()); } }; thread.start(); } }); } configImportFileChooser.rescanCurrentDirectory(); configImportFileChooser.showDialog(fmInstance, " Open "); } if (command.equals("Convert Tables")) { Thread thread = new Thread() { public void run() { setEnabled(false); convert(); setEnabled(true); } }; thread.start(); } if (command.equals("show Tables")) { Thread thread = new Thread() { public void run() { fmInstance.setEnabled(false); boolean visible = showTable(1); window.validate(); window.setVisible(visible); fmInstance.setEnabled(true); } }; thread.start(); // System.out.println("hello"); } if (command.equals("show Tables source")) { Thread thread = new Thread() { public void run() { fmInstance.setEnabled(false); boolean visible = showTable(0); window.validate(); window.setVisible(visible); fmInstance.setEnabled(true); } }; thread.start(); // System.out.println("hello"+thread); } if (command.equals("drop Tables")) { Thread thread = new Thread() { public void run() { dropTable(); } }; thread.start(); } } /** * Copys the content of source to destination and makes new table if necessary */ public void convert() { Vector vectors[] = getListFromTable(); Convert.user = bean.user; Convert.passwd = bean.passwd; Convert.userDest = destBean.user; Convert.passwdDest = destBean.passwd; try { fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); fmInstance.setEnabled(false); Convert.convert(bean.url, box4.getSelectedItem().toString(), vectors[0], vectors[1],vectors[2],vectors[3]); destBean.setConnection((String) box4.getSelectedItem()); DefaultListModel model = new DefaultListModel(); tables = destBean.getTableNames(); for (int j = 0; j < tables.size(); ++j) model.addElement(tables.get(j)); if (debug) System.out.println("hallo" + tables + " "); tListDest.setModel(model); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } catch (Exception e4) { ByteArrayOutputStream b = new ByteArrayOutputStream(); PrintStream stream = new PrintStream(b); e4.printStackTrace(stream); showErrorDialog(b.toString(), "Conversion of table failed"); fmInstance.setEnabled(true); } } public void writeConfig(String file) { fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); fmInstance.setEnabled(false); Vector vectors[] = getListFromTable(); Convert.DataBase source = new Convert.DataBase(bean,vectors[0],vectors[1],vectors[2],vectors[3]); Convert.DataBase destination = new Convert.DataBase(destBean,new Vector(),new Vector(),new Vector(),new Vector()); try { Convert.writeConfig(file,source,destination); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); fmInstance.setEnabled(true); } catch (Exception e) { fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); fmInstance.setEnabled(true); ByteArrayOutputStream b = new ByteArrayOutputStream(); PrintStream stream = new PrintStream(b); e.printStackTrace(stream); showErrorDialog(b.toString(), "Error while writing xml config !"); } } public void readXMLConfig(String file) { try { fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); fmInstance.setEnabled(false); Vector databases = Convert.getXMLConfig(file); DataBase destBase = (DataBase) databases.lastElement(); //destBase.bean.getConnection(); noUserUpdate = true; destBean=destBase.bean; Object destObj =destBean.url; ((DefaultComboBoxModel) box4.getModel()).removeElement(destObj); ((DefaultComboBoxModel) box4.getModel()).insertElementAt(destObj,0); box4.setSelectedItem(destObj); //@TODO comboBox action Events should do nothing on config file read+combox in table should be updated databases.remove(destBase); for (Iterator iter = databases.iterator(); iter.hasNext();) { Convert.DataBase database = (Convert.DataBase) iter.next(); database.bean.getConnection(); bean = database.bean; Object obj =bean.url; ((DefaultComboBoxModel) box3.getModel()).removeElement(obj); ((DefaultComboBoxModel) box3.getModel()).insertElementAt(obj,0); box3.setSelectedItem(obj); fillTable(); Vector tables=database.bean.getTableNames(); Collections.sort(tables,String.CASE_INSENSITIVE_ORDER); for (int i =0;i 0) for (int i = 0; i < objs.length; ++i) { if (debug) System.out.println(objs[i]); tables.add(objs[i]); } if (window != null) window.dispose(); if (windowDest != null) windowDest.dispose(); window = new MultiResultWindow(fm); if (list > 0) { windowDest = new MultiResultWindow(fm); window = windowDest; } dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x + (FM2SQL.fmInstance.getWidth() - 500) / 2, FM2SQL.fmInstance.getLocationOnScreen().y + (FM2SQL.fmInstance.getHeight() - 250) / 2); dialog.setSize(500, 250); if (!tables.isEmpty()) dialog.show(); dialog.title.setText("Preparing tables to be diplayed"); for (int i = 0; i < tables.size(); ++i) { dialog.table.setText("Getting table " + tables.get(i)); dialog.status.setText("Table " + (i + 1) + " of " + tables.size()); if(list==0) query = "select * from " + bean.getQC() +tables.get(i).toString() + bean.getQC(); else query = "select * from " + destBean.getQC() +tables.get(i).toString() + destBean.getQC(); if(list==0) query = vectors[2].get(i).toString(); if (list == 0 && vectors[1].get(i) != null) if (vectors[1].get(i).toString() != "") { String layout =" layout " + bean.getQC() + vectors[1].get(i).toString() + bean.getQC(); String name = tables.get(i).toString(); StringBuffer queryLayout=new StringBuffer(query); queryLayout.insert(queryLayout.indexOf(name)+name.length()+1," "+layout); query=queryLayout.toString(); } if(debug) showErrorDialog("query in show tables is "+query,"Hello"); window.title = " Table ;-) " + (String) tables.get(i); // break; // } else // window.title = "Error! - No valid tablename found"; try { if ((query.toLowerCase().indexOf("insert") >= 0) || (query.toLowerCase().indexOf("delete") >= 0) || (query.toLowerCase().indexOf("alter") >= 0) || (query.toLowerCase().indexOf("update") >= 0)) { Statement stm = (list > 0) ? destBean.getConnection().createStatement() : bean.getConnection().createStatement(); stm.executeUpdate(query); Vector vec = new Vector(); Vector vec2 = new Vector(); Vector vec3 = new Vector(); vec2.add(query); vec3.add(vec2); vec.add("Insert, update, etc done! No results available"); // vec.add("no Results were produced"); window.updateResult(vec3, vec); //window.pack(); // window.setVisible(true); } else { Vector[] vecs = (list > 0) ? destBean.getQueryData(query, dialog, 50) : bean.getQueryData(query, dialog, 50); if (vecs[1].isEmpty()) throw new Exception("Wrong columnname or Empty Layout"); window.updateResult(vecs[0], vecs[1]); //window.pack(); //String name = window.writeResult(); //appendLog(window.title, name); } //window.setVisible(true); } catch (Exception e) { System.out.println("Exception occured"); e.printStackTrace(); Vector vec = new Vector(); Vector vec2 = new Vector(); Vector vec3 = new Vector(); vec2.add(e.getMessage()); vec3.add(vec2); vec.add("Exception occured! No results available"); //vec.add("no Results were produced"); window.updateResult(vec3, vec); //window.pack(); // window.setVisible(true); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } } // to for window.pack(); window.setSize(700, 600); window.oldTabCount = 10000; dialog.dispose(); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); return !tables.isEmpty(); } public void dropTable() { String query = new String(); Object[] objs = tListDest.getSelectedValues(); Vector tables = new Vector(); for (int i = 0; i < objs.length; ++i) { System.out.println(objs[i]); tables.add(objs[i]); } for (int i = 0; i < tables.size(); ++i) { query = "drop table "+destBean.getQC() + tables.get(i) + destBean.getQC(); try { Statement stm = destBean.getConnection().createStatement(); stm.executeUpdate(query); } catch (Exception e) { ByteArrayOutputStream b = new ByteArrayOutputStream(); PrintStream stream = new PrintStream(b); e.printStackTrace(stream); showErrorDialog(b.toString(), "Open of table failed"); } } // to for try { destBean.setConnection((String) box4.getSelectedItem()); DefaultListModel model = new DefaultListModel(); tables = destBean.getTableNames(); for (int j = 0; j < tables.size(); ++j) model.addElement(tables.get(j)); System.out.println("hallo" + tables + " "); tListDest.setModel(model); } catch (Exception e4) { } } /** * invoked then the user changes the table or the tableModel changes */ public void tableChanged(TableModelEvent e) { // if (e.getType() == e.INSERT) //System.out.println("Insert done"); // if (e.getType() == e.UPDATE) // System.out.println("Update done"); //if (e.getType() == e.DELETE) // System.out.println("Delete done"); if (e.getType() == e.UPDATE && !noDBUpdate) { int row = e.getFirstRow(), col = e.getColumn(); System.out.println("Got in " + row + " " + col ); TableModel model = (TableModel)e.getSource(); String columnName = model.getColumnName(col); Object test = model.getValueAt(row, col); String idVal = (test == null) ? "" : test.toString(); String value = (test == null) ? "" : test.toString();; System.out.println("Got in " + columnName +" "+idVal); try { if(columnName.equals("select")||columnName.equals("Layouts")) { String table = model.getValueAt(row,0).toString(); String layout = (model.getValueAt(row,1)!=null) ?((JComboBox)model.getValueAt(row,1)).getSelectedItem().toString():""; String query = model.getValueAt(row,2).toString(); String create = model.getValueAt(row,3).toString(); System.out.println("table" +table+" layout "+layout+" query "+query); if(!create.equals("")) { Object[] options = { "Yes","No"}; int option=showDialog("Create Statement not empty! Do you want to overwrite?","create statement",options ); if(option==0) model.setValueAt(createStatement(table,destBean,layout,query),row,3); } } /* Statement stm = bean.getConnection().createStatement(); // stm.executeUpdate("DELETE FROM \""+fm.tables.get(0)+"\" WHERE \"erstellt von\"='rogo') "); if (idVal == "") stm.executeUpdate("INSERT INTO " + DBBean.quoteChar + box.getSelectedItem() + DBBean.quoteChar + " (" + DBBean.quoteChar + columnName + DBBean.quoteChar + ") VALUES ('" + value + "') "); else stm.executeUpdate( "UPDATE " + DBBean.quoteChar + box.getSelectedItem() + DBBean.quoteChar + " SET " + DBBean.quoteChar + columnName + DBBean.quoteChar + "='" + value + "' WHERE ID='" + idVal + "' "); */ } catch (Exception e2) { fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); ByteArrayOutputStream b = new ByteArrayOutputStream(); PrintStream stream = new PrintStream(b); e2.printStackTrace(stream); showErrorDialog(b.toString(), "Error while updating table !"); } } } /** * initialize the menubar */ private void setMenu() { JMenuBar menubar = new JMenuBar(); JMenu menu = new JMenu("File"); JMenuItem item = new JMenuItem("import XML Config"); item.addActionListener(fm); menu.add(item); item = new JMenuItem("export XML Config"); item.addActionListener(fm); menu.add(item); menubar.add(menu); menu = new JMenu("Options"); item = new JMenuItem("show Driver features"); item.addActionListener(fm); menu.add(item); menubar.add(menu); item.addActionListener(fm); menu.add(item); menubar.add(menu); menu.setBackground(fm.getBackground()); menubar.setBackground(fm.getBackground()); setJMenuBar(menubar); } /** * open the log file (index.html) */ public static void openLog() throws Exception { StringBuffer buff = new StringBuffer(); buff.append(""); buff.append(""); buff.append("\n"); buff.append("FileMaker Test"); buff.append("\n"); buff.append("\n"); buff.append("\n"); buff.append("
\n"); buff.append("\n

"); buff.append("FileMaker Test"); buff.append("

\n"); logFile.write(TableComponent.convertUml(buff).toString()); logFile.flush(); } /** * Append one entry to the log file(index.html) */ public static void appendLog(String entry, String name) throws Exception { logFile.write(""); logFile.write(entry + ""); logFile.write("
\n
\n"); logFile.flush(); } /** * closes the log file invoked then the application closes */ public static void closeLog() throws Exception { logFile.write("\n"); logFile.write("\n"); logFile.close(); } public static void showErrorDialog(String message, String title) { JDialog dialog = new JDialog(fmInstance); dialog.setTitle(title); JTextArea text = new JTextArea(); JScrollPane scroller = new JScrollPane(text); dialog.getContentPane().add(scroller); text.append(message); dialog.setSize(600, 300); dialog.setLocationRelativeTo(fmInstance); dialog.show(); //JOptionPane.showMessageDialog(null, message, title, JOptionPane.ERROR_MESSAGE); } public static class ProgressDialog extends JDialog { JLabel table = new JLabel(" "); JLabel status = new JLabel(" "); JLabel title = new JLabel(" "); JPanel content = new JPanel(); JPanel titlePanel = new JPanel(); JPanel labelPanel = new JPanel(); JPanel statusPanel = new JPanel(); JPanel buttonPanel = new JPanel(); JProgressBar progress = new JProgressBar(); JButton cancel = new JButton("Cancel"); Thread thread; public ProgressDialog(JFrame frame) { super(frame); content = new JPanel(true); //content.setBorder(BorderFactory.createRaisedBevelBorder()); content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); title = new JLabel("Progress of conversion"); title.setHorizontalTextPosition(title.CENTER); titlePanel.add(title); buttonPanel.add(cancel); // content.add(titlePanel); content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); content.add(labelPanel); content.add(new JLabel("")); content.add(progress); content.add(statusPanel); content.add(buttonPanel); content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); labelPanel.add(table); statusPanel.add(status); getContentPane().add(titlePanel, "North"); getContentPane().add(content, "Center"); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { cancel.doClick(); } }); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); fmInstance.setEnabled(true); setVisible(false); thread.stop(); } }); pack(); } } public static class PasswordDialog extends JDialog { JLabel table = new JLabel(" "); JLabel status = new JLabel(" "); JLabel title = new JLabel(" "); JPanel content = new JPanel(); JPanel titlePanel = new JPanel(); JPanel userPanel = new JPanel(); JPanel passwordPanel = new JPanel(); JPanel buttonPanel = new JPanel(); JTextField user = new JTextField(10); JTextField passwd = new JPasswordField(10); JButton cancel = new JButton("Cancel"); JButton ok = new JButton("Ok"); DBBean bean = null; Thread thread; public PasswordDialog(JFrame frame, DBBean localBean) { super(frame); setTitle("PasswordDialog"); setModal(true); content = new JPanel(true); this.bean = localBean; //content.setBorder(BorderFactory.createRaisedBevelBorder()); ActionListener al = new ActionListener() { public void actionPerformed(ActionEvent e) { bean.setUserAndPasswd(user.getText(), passwd.getText()); setVisible(false); } }; this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { cancel.doClick(); } }); user.setText(localBean.user); passwd.setText(localBean.passwd); user.addActionListener(al); passwd.addActionListener(al); content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); title = new JLabel("Enter user and password "); title.setHorizontalTextPosition(title.CENTER); titlePanel.add(title); buttonPanel.add(ok); buttonPanel.add(cancel); content.add(titlePanel); content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); // content.add(labelPanel); content.add(new JLabel("")); content.add(userPanel); content.add(passwordPanel); content.add(buttonPanel); content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); //labelPanel.add(table); userPanel.add(new JLabel("Username: ")); userPanel.add(user); passwordPanel.add(new JLabel("Password: ")); passwordPanel.add(passwd); passwd.setPreferredSize(user.getPreferredSize()); passwd.setMinimumSize(passwd.getPreferredSize()); passwd.setMaximumSize(passwd.getPreferredSize()); passwd.setSize(passwd.getPreferredSize()); getContentPane().add(titlePanel, "North"); getContentPane().add(content, "Center"); ok.addActionListener(al); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); fmInstance.setEnabled(true); setVisible(false); thread.stop(); } }); pack(); } } public void fillTable() { noDBUpdate = true; Vector tableNames = bean.getTableNames(); Collections.sort(tableNames, String.CASE_INSENSITIVE_ORDER); Vector[] data = new Vector[2]; data[1] = new Vector(); data[1].add("Table"); data[1].add("Layouts"); data[1].add("select"); data[1].add("create"); data[0] = new Vector(); for (int i = 0; i < tableNames.size(); i++) { String name = tableNames.get(i).toString(); Vector layouts = new Vector(); try { layouts = bean.getLayoutNames(name); } catch (SQLException e) { layouts = new Vector(); } Vector dataRow = new Vector(); dataRow.add(name); if (!layouts.isEmpty()) dataRow.add(new JComboBox(layouts)); else dataRow.add(null); dataRow.add(new TableComponent.SQLCommand("select * from "+bean.getQC()+name+bean.getQC())); data[0].add(dataRow); dataRow.add(new TableComponent.SQLCommand("")); //System.out.println(dataRow); } tC.tableModel.setDataVector(data[0], data[1]); tC.revalidate(); tC.tableModel.fireTableDataChanged(); noDBUpdate = false; } public Vector[] getListFromTable() { Vector[] vec = new Vector[4]; vec[0] = new Vector(); vec[1] = new Vector(); vec[2] = new Vector(); vec[3] = new Vector(); int[] rows = tC.table.getSelectedRows(); for (int i = 0; i < rows.length; i++) { //System.out.println(tC.tableModel.getValueAt(rows[i],1)); vec[0].add(tC.tableModel.getValueAt(rows[i], 0)); JComboBox box = ((JComboBox) tC.tableModel.getValueAt(rows[i], 1)); String layoutName = (box != null) ? box.getSelectedItem().toString() : ""; vec[1].add(layoutName); vec[2].add(tC.tableModel.getValueAt(rows[i], 2).toString()); vec[3].add(tC.tableModel.getValueAt(rows[i], 3).toString()); } return vec; } public void setEnabled(boolean state) { showTables.setEnabled(state); showTables1.setEnabled(state); convert.setEnabled(state); dropTables.setEnabled(state); box3.setEnabled(state); box4.setEnabled(state); } public TableComponent.SQLCommand createStatement(String table,DBBean beanDest,String layout,String query) throws SQLException { fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); if(beanDest.url.equals("")) beanDest.url=box4.getSelectedItem().toString(); StringBuffer command = new StringBuffer(50); command.append("\n CREATE TABLE "); command.append(beanDest.getQC()); command.append(Convert.convertText(table)); command.append(beanDest.getQC()); command.append("\n ( "); String type = null; // String query = "select * from " + bean.getQC() +table + bean.getQC(); if (!layout.equals("")) { layout = " layout " + bean.getQC() + layout + bean.getQC(); StringBuffer queryLayout = new StringBuffer(query); queryLayout.insert(queryLayout.indexOf(table) + table.length() + 1, " " + layout); query = queryLayout.toString(); System.out.println("added layout "+ query); } Vector[] result=bean.getQueryData(query,1); for (int i = 0; i < result[1].size() - 1; ++i) { type = bean.metaData.getColumnTypeName(i + 1); // System.out.println(i+" "+result[1].get(i)+" "+type); type = (type.equals("NUMBER")) ? "INT4" : type; type = (type.equals("CONTAINER")) ? "TEXT" : type; type = type.toUpperCase(); if(i==0) command.append(beanDest.getQC() + Convert.convertText((String) result[1].get(i)) + beanDest.getQC() + " " + type + ", "); else command.append(" "+beanDest.getQC() + Convert.convertText((String) result[1].get(i)) + beanDest.getQC() + " " + type + ", "); command.append("\n"); } type = bean.metaData.getColumnTypeName(result[1].size()); type = (type.equals("NUMBER")) ? "INT4" : type; type = (type.equals("CONTAINER")) ? "TEXT" : type; type = type.toUpperCase(); command.append(" "+beanDest.getQC() + Convert.convertText((String) result[1].get(result[1].size() - 1)) + beanDest.getQC() + " " + type); command.append("\n )\n"); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); return new TableComponent.SQLCommand(command.toString()); } static class XMLFilter extends javax.swing.filechooser.FileFilter { public boolean accept(java.io.File file) { if (file.getName().toLowerCase().endsWith(".xml") || file.isDirectory()) return true; else return false; } public String getDescription() { return "Batch Convert XML File"; } } public static int showDialog(String message, String title, Object[] options) { int option = JOptionPane.showOptionDialog(null, message, title, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]); return option; } }