--- FM2SQL/Attic/FM2SQL.java 2004/02/18 13:25:24 1.18 +++ FM2SQL/Attic/FM2SQL.java 2004/04/05 10:14:01 1.34 @@ -1,3 +1,17 @@ +/* + * FM2SQL.java -- Main program Filemaker to SQL Converter + * Copyright (C) 2003 Robert Gordesch (rogo@mpiwg-berlin.mpg.de) + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. Please read license.txt for the full details. A copy of + * the GPL may be found at http://www.gnu.org/copyleft/lgpl.html You should + * have received a copy of the GNU General Public License along with this + * program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place, Suite 330, Boston, MA 02111-1307 USA Created on 15.09.2003 by + * rogo + */ + import java.awt.Cursor; import java.awt.Dimension; import java.awt.Font; @@ -67,9 +81,12 @@ import javax.swing.table.TableModel; */ public class FM2SQL extends JFrame implements ActionListener, TableModelListener { + private JMenuItem delimiterItem; private JCheckBoxMenuItem convertItem; private JCheckBoxMenuItem appendItem; private JCheckBoxMenuItem updateItem; + private JCheckBoxMenuItem deleteItem; + int mode = -1; final static int ID_INDEX = 1; final static int SELECT_INDEX = 2; @@ -134,6 +151,8 @@ public class FM2SQL extends JFrame imple int oldWidth = 0, oldHeight = 0; boolean resize = true; static FileWriter logFile; + String delimiter = ""; + Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); JFileChooser configExportFileChooser; JFileChooser configImportFileChooser; @@ -592,11 +611,19 @@ public class FM2SQL extends JFrame imple { } } + if (command.equals("Delimiter")) + { + new DelimiterDialog(fmInstance).setVisible(true); + //delimiter = JOptionPane.showInputDialog(fmInstance,"Enter delimiter String",delimiter); + + } + if (command == "Convert Mode") { System.out.println("Convert Mode selected"); convert.setText("Convert Tables"); convert.setActionCommand("Convert Tables"); + convert.setToolTipText("Normal table conversion existing table will be deleted"); mode = Convert.DataBase.CONVERT_MODE; } if (command == "Append Mode") @@ -604,6 +631,8 @@ public class FM2SQL extends JFrame imple System.out.println("Append Mode selected"); convert.setText("Append Tables"); convert.setActionCommand("Append Tables"); + convert.setToolTipText("Appends data to an existing table"); + mode = Convert.DataBase.APPEND_MODE; } if (command == "Update Mode") @@ -611,8 +640,18 @@ public class FM2SQL extends JFrame imple System.out.println("Update Mode selected"); convert.setText("Update Tables"); convert.setActionCommand("Update Tables"); + convert.setToolTipText("Updates data that has been changed in source"); mode = Convert.DataBase.UPDATE_MODE; } + if (command == "Delete Mode") + { + System.out.println("Delete Mode selected"); + convert.setText("Delete Tables"); + convert.setActionCommand("Delete Tables"); + convert.setToolTipText("Deletes data that has been deleted in source"); + mode = Convert.DataBase.DELETE_MODE; + } + //writing config if (command.equals("save XML Config")) { @@ -714,6 +753,21 @@ public class FM2SQL extends JFrame imple }; thread.start(); } + if (command.equals("Delete Tables")) + { + + Thread thread = new Thread() + { + public void run() + { + setEnabled(false); + delete(); + setEnabled(true); + } + + }; + thread.start(); + } if (command.equals("show Tables")) { @@ -783,6 +837,7 @@ public class FM2SQL extends JFrame imple Convert.passwdDest = destBean.passwd; try { + fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); fmInstance.setEnabled(false); Convert.update(bean.url, destURLBox.getSelectedItem().toString(), vectors[0], vectors[1], vectors[2], vectors[3],vectors[4], mode); @@ -806,6 +861,40 @@ public class FM2SQL extends JFrame imple } } + public void delete() + { + 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.delete(bean.url, destURLBox.getSelectedItem().toString(), vectors[0], vectors[1], vectors[2], vectors[3],vectors[4], mode); + + destBean.setConnection((String) destURLBox.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(), "Delete of table failed"); + fmInstance.setEnabled(true); + } + + } + /** * Copys the content of source to destination and makes new table if necessary */ @@ -821,8 +910,7 @@ public class FM2SQL extends JFrame imple { fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); fmInstance.setEnabled(false); - Convert.convert(bean.url, destURLBox.getSelectedItem().toString(), vectors[0], vectors[1],vectors[2],vectors[3],vectors[4],mode); - + Convert.convert(bean.url, destURLBox.getSelectedItem().toString(), vectors[0], vectors[1],vectors[2],vectors[3],vectors[4],mode,delimiter); destBean.setConnection((String) destURLBox.getSelectedItem()); DefaultListModel model = new DefaultListModel(); tables = destBean.getTableNames(); @@ -852,10 +940,13 @@ public class FM2SQL extends JFrame imple if(appendItem.isSelected()) mode = Convert.DataBase.APPEND_MODE; else if(updateItem.isSelected()) mode = Convert.DataBase.UPDATE_MODE; + else + if(deleteItem.isSelected()) mode = Convert.DataBase.DELETE_MODE; + // TODO add id vector in table and write it out Convert.DataBase source = new Convert.DataBase(bean,vectors[0],vectors[1],vectors[2],vectors[3],vectors[4],mode); Convert.DataBase destination = new Convert.DataBase(destBean,new Vector(),new Vector(),new Vector(),new Vector(),new Vector(),-1); - + source.delimiter =delimiter; try { Convert.writeConfig(file,source,destination); @@ -897,25 +988,20 @@ public class FM2SQL extends JFrame imple if (database.mode == Convert.DataBase.CONVERT_MODE) { - convertItem.setSelected(true); - convert.setText("Convert Tables"); - convert.setActionCommand("Convert Tables"); - mode = Convert.DataBase.CONVERT_MODE; + convertItem.doClick(); } else if (database.mode == Convert.DataBase.APPEND_MODE) { - appendItem.setSelected(true); - convert.setText("Append Tables"); - convert.setActionCommand("Append Tables"); - mode = Convert.DataBase.APPEND_MODE; + appendItem.doClick(); } else if (database.mode == Convert.DataBase.UPDATE_MODE) { - updateItem.setSelected(true); - convert.setText("Update Tables"); - convert.setActionCommand("Update Tables"); - mode = Convert.DataBase.UPDATE_MODE; + updateItem.doClick(); + } else if (database.mode == Convert.DataBase.DELETE_MODE) + { + deleteItem.doClick(); } + delimiter=database.delimiter; database.bean.getConnection(); - + bean = database.bean; Object obj =bean.url; ((DefaultComboBoxModel) sourceURLBox.getModel()).removeElement(obj); @@ -935,11 +1021,29 @@ public class FM2SQL extends JFrame imple String create =database.creates.get(i).toString(); tC.tableModel.setValueAt(new TableComponent.SQLCommand(create.equals("") ? create:" "+create),index,CREATE_INDEX); - tC.tableModel.setValueAt(new TableComponent.SQLCommand(bean.ids.get(i).toString()),index,ID_INDEX); + // tC.tableModel.setValueAt(new TableComponent.SQLCommand(bean.ids.get(i).toString()),index,ID_INDEX); Object comboBox=tC.tableModel.getValueAt(index,LAYOUT_INDEX); + Object idcomboBox=tC.tableModel.getValueAt(index,ID_INDEX); + indices[i] = index; - if(comboBox!=null) ((JComboBox)comboBox).setSelectedItem(database.layouts.get(i)); + if (comboBox != null) + { + String layout = database.layouts.get(i).toString(); + ((JComboBox) comboBox).setSelectedItem(layout); + if (layout != "") + { + bean.makeQuery("select * from" + bean.getQC() + table + bean.getQC() + " layout " + bean.getQC() + layout + bean.getQC(), 1); + + Vector idVec = bean.getColumnNames(); + if (idVec == null) + idVec = new Vector(); + idVec.add(0, ""); + ((JComboBox) idcomboBox).setModel(new DefaultComboBoxModel(idVec)); + } + + } + if(idcomboBox!=null)((JComboBox)idcomboBox).setSelectedItem(bean.ids.get(i)); tC.tableModel.fireTableDataChanged(); noDBUpdate = false; noUserUpdate = false; @@ -979,7 +1083,7 @@ public class FM2SQL extends JFrame imple } public boolean showTable(int list) { - ProgressDialog dialog = new ProgressDialog(fm); + ProgressDialog dialog = new ProgressDialog(fm,bean); dialog.setTitle("Preparing tables to be displayed"); dialog.thread = Thread.currentThread(); dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); @@ -1175,6 +1279,8 @@ public class FM2SQL extends JFrame imple String layout = (model.getValueAt(row,LAYOUT_INDEX)!=null) ?((JComboBox)model.getValueAt(row,LAYOUT_INDEX)).getSelectedItem().toString():""; String query = model.getValueAt(row,SELECT_INDEX).toString(); String create = model.getValueAt(row,CREATE_INDEX).toString(); + String id = (model.getValueAt(row,ID_INDEX)!=null) ?((JComboBox)model.getValueAt(row,ID_INDEX)).getSelectedItem().toString():""; + System.out.println("table" +table+" layout "+layout+" query "+query); if(!create.equals("")) { @@ -1183,7 +1289,21 @@ public class FM2SQL extends JFrame imple if(option==0) model.setValueAt(createStatement(table,destBean,layout,query),row,CREATE_INDEX); } - + if (columnName.equals("Layouts")) + { + + bean.makeQuery("select * from"+bean.getQC()+table+bean.getQC()+" layout "+bean.getQC()+layout+bean.getQC(),1); + + Vector idVec = bean.getColumnNames(); + if (idVec == null) + idVec = new Vector(); + idVec.add(0, ""); + JComboBox box = ((JComboBox) model.getValueAt(row, ID_INDEX)); + box.setModel(new DefaultComboBoxModel(idVec)); + box.setSelectedItem(id); + + tC.tableModel.fireTableCellUpdated(row,ID_INDEX); + } } /* Statement stm = bean.getConnection().createStatement(); @@ -1239,12 +1359,6 @@ public class FM2SQL extends JFrame imple menu = new JMenu("Options"); menu.setMnemonic('O'); - item = new JMenuItem("show Driver features"); - item.setToolTipText("shows the features of the selected driver"); - item.addActionListener(fm); - menu.add(item); - menubar.add(menu); - ButtonGroup bgrp = new ButtonGroup(); convertItem = new JCheckBoxMenuItem("Convert Mode"); convertItem.setToolTipText("Normal table conversion existing table will be deleted"); @@ -1271,10 +1385,28 @@ public class FM2SQL extends JFrame imple bgrp.add(updateItem); menu.add(updateItem); + deleteItem = new JCheckBoxMenuItem("Delete Mode"); + deleteItem.setToolTipText("Deletes data in an existing table \n that has been deleted in source table"); + deleteItem.addActionListener(fm); + + bgrp.add(deleteItem); + + menu.add(deleteItem); + menubar.add(menu); - + item = new JMenuItem("show Driver features"); + item.setToolTipText("shows the features of the selected driver"); item.addActionListener(fm); menu.add(item); + menubar.add(menu); + delimiterItem = new JMenuItem("Delimiter"); + delimiterItem.setToolTipText("Delimiter for FM Arrayfields"); + delimiterItem.addActionListener(fm); + menu.add(delimiterItem); + menubar.add(menu); + + // item.addActionListener(fm); +// menu.add(item); menubar.add(menu); @@ -1354,9 +1486,12 @@ public class FM2SQL extends JFrame imple JProgressBar progress = new JProgressBar(); JButton cancel = new JButton("Cancel"); Thread thread; - public ProgressDialog(JFrame frame) + DBBean bean; + public ProgressDialog(JFrame frame,DBBean bean) { super(frame); + this.bean = bean; + content = new JPanel(true); //content.setBorder(BorderFactory.createRaisedBevelBorder()); content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); @@ -1391,6 +1526,18 @@ public class FM2SQL extends JFrame imple fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); fmInstance.setEnabled(true); setVisible(false); + try + { + ProgressDialog.this.bean.getConnection().close(); + } catch (SQLException e1) + { + // TODO Auto-generated catch block + e1.printStackTrace(); + } catch (Exception e1) + { + // TODO Auto-generated catch block + e1.printStackTrace(); + } thread.stop(); } }); @@ -1399,6 +1546,117 @@ public class FM2SQL extends JFrame imple } } + public static class DelimiterDialog extends JDialog + { + JLabel table = new JLabel(" "); + JLabel status = new JLabel(" "); + JLabel title = new JLabel(" "); + JPanel content = new JPanel(); + JPanel titlePanel = new JPanel(); + JPanel delimiterPanel = new JPanel(); + JPanel buttonPanel = new JPanel(); + JTextField delimiter = new JTextField(10); + + JButton cancel = new JButton("Cancel"); + JButton ok = new JButton("Ok"); + Thread thread; + public DelimiterDialog(JFrame frame) + { + super(frame); + setTitle("Delimiter Editor"); + setModal(true); + content = new JPanel(true); + delimiter.setText(fmInstance.delimiter); + ActionListener al = new ActionListener() + { + public void actionPerformed(ActionEvent e) + { + fmInstance.delimiter=parseDelimiter(delimiter.getText()); + setVisible(false); + } + + }; + this.addWindowListener(new WindowAdapter() + { + public void windowClosing(WindowEvent e) + { + cancel.doClick(); + } + }); + + //delimiter.setText(fmInstance.delimiter); + delimiter.addActionListener(al); + content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); + title = new JLabel("Enter Delimiter "); + 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(new JLabel("")); + content.add(delimiterPanel); + content.add(buttonPanel); + content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); + + delimiterPanel.add(new JLabel("Delimiter: ")); + delimiterPanel.add(delimiter); + 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(); + setLocationRelativeTo(fmInstance); + } + public String parseDelimiter(Object o) + { + String str = o.toString(); + StringBuffer sbuff = new StringBuffer(); + int length = str.length(); + for(int i = 0;i