--- FM2SQL/Attic/FM2SQL.java 2003/12/11 11:55:05 1.4 +++ FM2SQL/Attic/FM2SQL.java 2004/03/03 12:14:47 1.24 @@ -1,16 +1,57 @@ -import javax.swing.*; -import javax.swing.event.*; -import javax.swing.table.TableModel; - -import Convert.DataBase; - -import java.awt.event.*; +import java.awt.Cursor; import java.awt.Dimension; -import java.awt.FlowLayout; -import java.awt.*; -import java.sql.*; -import java.util.*; -import java.io.*; +import java.awt.Font; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Image; +import java.awt.Insets; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import java.awt.event.InputEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileWriter; +import java.io.PrintStream; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Collections; +import java.util.Iterator; +import java.util.Vector; + +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.ButtonGroup; +import javax.swing.DefaultComboBoxModel; +import javax.swing.DefaultListModel; +import javax.swing.JButton; +import javax.swing.JCheckBoxMenuItem; +import javax.swing.JComboBox; +import javax.swing.JDialog; +import javax.swing.JFileChooser; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JPasswordField; +import javax.swing.JProgressBar; +import javax.swing.JScrollBar; +import javax.swing.JScrollPane; +import javax.swing.JSplitPane; +import javax.swing.JTextArea; +import javax.swing.JTextField; +import javax.swing.KeyStroke; +import javax.swing.ListSelectionModel; +import javax.swing.event.TableModelEvent; +import javax.swing.event.TableModelListener; +import javax.swing.table.TableModel; /** * *
@@ -20,12 +61,25 @@ import java.io.*; *
* 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) + * @version 0.3( first stable release) * @author rogo * */ public class FM2SQL extends JFrame implements ActionListener, TableModelListener { + 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; + final static int CREATE_INDEX = 3; + final static int LAYOUT_INDEX = 4; + + + /** * The database Bean instance. * @@ -37,12 +91,7 @@ public class FM2SQL extends JFrame imple */ DBBean destBean; - /** - * box - Tablenames - */ - - JComboBox box; - /** + /** * tList - Tablenames to choose from */ @@ -50,18 +99,13 @@ public class FM2SQL extends JFrame imple JList tListDest = new JList(new String[] { "no database connection", "", "" }); /** - * box2 - Layout names - */ - - JComboBox box2; - /** - * box3 - Database URLs + * sourceUrl - Database URL ComboBox */ - JComboBox box3; + JComboBox sourceURLBox; /** - * box4 - Database URLs + * destUrlBox - Database URL ComboBox */ - JComboBox box4; + JComboBox destURLBox; TableComponent table, tC; Vector tables = new Vector(); @@ -92,6 +136,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; @@ -108,34 +154,35 @@ public class FM2SQL extends JFrame imple } public void initializeGUI() throws Exception { - Image local = getToolkit().getImage(getClass().getResource("icons/fm.jpg")); + Image local = getToolkit().getImage(FM2SQL.class.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); + sourceURLBox = new JComboBox(new String[] { "jdbc:fmpro:http://141.14.237.74:8050", "jdbc:fmpro:http://localhost", "jdbc:postgresql://foxridge/test" }); + sourceURLBox.setEditable(true); + sourceURLBox.setFont(new Font("Times New Roman",Font.PLAIN,14)); + destURLBox = new JComboBox(new String[] { "jdbc:postgresql://foxridge/test", "jdbc:postgresql://erebos/test1" }); + destURLBox.setEditable(true); + destURLBox.addActionListener(this); + destURLBox.setFont(new Font("Times New Roman",Font.PLAIN,14)); table = new TableComponent(); - box = new JComboBox(tables); - box.addActionListener(this); - box2.addActionListener(this); - box3.addActionListener(this); + //box = new JComboBox(tables); + // box.addActionListener(this); + // box2.addActionListener(this); + sourceURLBox.addActionListener(this); contentPanel = new JPanel(); contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS)); - box3.setMinimumSize(new Dimension(450, 20)); - box3.setMaximumSize(new Dimension(550, 20)); - box3.setPreferredSize(new Dimension(450, 20)); - box4.setMinimumSize(new Dimension(450, 20)); - box4.setMaximumSize(new Dimension(550, 20)); - box4.setPreferredSize(new Dimension(450, 20)); + sourceURLBox.setMinimumSize(new Dimension(450, 25)); + sourceURLBox.setMaximumSize(new Dimension(550, 25)); + sourceURLBox.setPreferredSize(new Dimension(450, 25)); + destURLBox.setMinimumSize(new Dimension(450, 25)); + destURLBox.setMaximumSize(new Dimension(550, 25)); + destURLBox.setPreferredSize(new Dimension(450, 25)); paneDest = new JScrollPane(tListDest); - tListDest.setPreferredSize(paneDest.getPreferredSize()); + // tListDest.setPreferredSize(paneDest.getPreferredSize()); // paneDest.setPreferredSize(new Dimension(350, 365)); Dimension dim = paneDest.getPreferredSize(); paneDest.setMinimumSize(dim); @@ -179,9 +226,9 @@ public class FM2SQL extends JFrame imple gbc.anchor = GridBagConstraints.NORTHWEST; gbc.gridy = 1; - topPanel.add(box3, gbc); + topPanel.add(sourceURLBox, gbc); - topPanel2.add(box4, gbc); + topPanel2.add(destURLBox, gbc); //gbc.gridx=GridBagConstraints.RELATIVE; //dataBasePanel.add(new JLabel(" select Tables to Convert ", JLabel.LEFT)); @@ -214,7 +261,7 @@ public class FM2SQL extends JFrame imple // topPanel.add(showTables1, gbc); JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS)); - buttonPanel.setMinimumSize(new Dimension(350, 30)); + buttonPanel.setMinimumSize(new Dimension(380, 30)); convert = new JButton("Convert Tables"); showTables = new JButton("show Tables"); dropTables = new JButton("drop Tables"); @@ -279,7 +326,7 @@ public class FM2SQL extends JFrame imple if (oldWidth != getWidth() || oldHeight != getHeight()) { - table.sizeToFit(getWidth(), getHeight()); + //table.sizeToFit(getWidth(), getHeight()); Dimension dim = table.table.getPreferredSize(); int size = contentPanel.getPreferredSize().height + new JScrollBar().getPreferredSize().height + new JMenuBar().getPreferredSize().height + 10; @@ -313,6 +360,7 @@ public class FM2SQL extends JFrame imple paneDest.validate(); // tC.tableScroller.setPreferredSize(getSize()); + // @TODO new sizeToFit method for listPanel table!!! tC.sizeToFit(getWidth(), getHeight()); ((JPanel) getContentPane()).revalidate(); repaint(); @@ -392,23 +440,23 @@ public class FM2SQL extends JFrame imple if (command == "comboBoxEdited") { Object src = e.getSource(); - if (src == box3) + if (src == sourceURLBox) { if (debug) - System.out.println("hey" + box3.getSelectedItem()); - Object insObj =box3.getSelectedItem(); - ((DefaultComboBoxModel) box3.getModel()).removeElement(insObj); + System.out.println("hey" + sourceURLBox.getSelectedItem()); + Object insObj =sourceURLBox.getSelectedItem(); + ((DefaultComboBoxModel) sourceURLBox.getModel()).removeElement(insObj); - ((DefaultComboBoxModel) box3.getModel()).insertElementAt(insObj, 0); - box3.setSelectedItem(insObj); - } else if (src == box4) + ((DefaultComboBoxModel) sourceURLBox.getModel()).insertElementAt(insObj, 0); + sourceURLBox.setSelectedItem(insObj); + } else if (src == destURLBox) { if (debug) - System.out.println("hey" + box4.getSelectedItem()); + System.out.println("hey" + destURLBox.getSelectedItem()); //((DefaultComboBoxModel) box4.getModel()).insertElementAt(box4.getSelectedItem(), 0); try { - String selected = (String) box4.getSelectedItem(); + String selected = (String) destURLBox.getSelectedItem(); destBean.setConnection(selected); Vector catalogs = destBean.getCatalogs(); Vector urls = new Vector(); @@ -416,8 +464,8 @@ public class FM2SQL extends JFrame imple { urls.add(destBean.url.substring(0, destBean.url.lastIndexOf("/") + 1) + catalogs.get(i)); } - box4.setModel(new DefaultComboBoxModel(urls)); - box4.setSelectedItem(selected); + destURLBox.setModel(new DefaultComboBoxModel(urls)); + destURLBox.setSelectedItem(selected); } catch (Exception e5) { } @@ -430,7 +478,7 @@ public class FM2SQL extends JFrame imple //System.out.println("hallo " + (e.getSource() == box3)); Object src = e.getSource(); - if (src == box3&&!noUserUpdate) + if (src == sourceURLBox&&!noUserUpdate) { Thread thread = new Thread() { @@ -440,12 +488,12 @@ public class FM2SQL extends JFrame imple try { PasswordDialog dialog = new PasswordDialog(fmInstance, bean); - dialog.setLocationRelativeTo(box3); + dialog.setLocationRelativeTo(sourceURLBox); dialog.thread = Thread.currentThread(); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); fmInstance.setEnabled(false); dialog.setVisible(true); - String url = box3.getSelectedItem().toString(); + String url = sourceURLBox.getSelectedItem().toString(); bean.url = (url != null) ? url : bean.url; bean.connection = null; bean.getConnection(); @@ -477,7 +525,7 @@ public class FM2SQL extends JFrame imple } }; thread.start(); - } else if (src == box4&&!noUserUpdate) + } else if (src == destURLBox&&!noUserUpdate) { Thread thread = new Thread() { @@ -488,12 +536,12 @@ public class FM2SQL extends JFrame imple { PasswordDialog dialog = new PasswordDialog(fmInstance, destBean); - dialog.setLocationRelativeTo(box4); + dialog.setLocationRelativeTo(destURLBox); dialog.thread = Thread.currentThread(); fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); fmInstance.setEnabled(false); dialog.setVisible(true); - destBean.setConnection((String) box4.getSelectedItem()); + destBean.setConnection((String) destURLBox.getSelectedItem()); DefaultListModel model = new DefaultListModel(); Vector tables = destBean.getTableNames(); for (int j = 0; j < tables.size(); ++j) @@ -548,8 +596,42 @@ public class FM2SQL extends JFrame imple { } } + 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") + { + 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") + { + 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("export XML Config")) + if (command.equals("save XML Config")) { if (configExportFileChooser == null) { @@ -583,7 +665,7 @@ public class FM2SQL extends JFrame imple configExportFileChooser.showDialog(fmInstance, " Save "); } - if (command.equals("import XML Config")) + if (command.equals("open XML Config")) { if (configImportFileChooser == null) { @@ -619,7 +701,7 @@ public class FM2SQL extends JFrame imple } - if (command.equals("Convert Tables")) + if (command.equals("Convert Tables")||command.equals("Append Tables")) { Thread thread = new Thread() @@ -634,6 +716,22 @@ public class FM2SQL extends JFrame imple }; thread.start(); } + if (command.equals("Update Tables")) + { + + Thread thread = new Thread() + { + public void run() + { + setEnabled(false); + update(); + setEnabled(true); + } + + }; + thread.start(); + } + if (command.equals("show Tables")) { Thread thread = new Thread() @@ -681,6 +779,50 @@ public class FM2SQL extends JFrame imple }; thread.start(); } + if(command.equals("Quit")) + { + fmInstance.dispose(); + System.exit(0); + + } + + } + /** + * Updates the content of source to destination and makes new table if necessary + */ + + public void update() + { + 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.update(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(), "Update of table failed"); + fmInstance.setEnabled(true); + } + } /** * Copys the content of source to destination and makes new table if necessary @@ -697,9 +839,8 @@ public class FM2SQL extends JFrame imple { 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()); + 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(); for (int j = 0; j < tables.size(); ++j) @@ -723,9 +864,15 @@ public class FM2SQL extends JFrame imple 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()); - + if(convertItem.isSelected()) mode = Convert.DataBase.CONVERT_MODE; + else + if(appendItem.isSelected()) mode = Convert.DataBase.APPEND_MODE; + else + if(updateItem.isSelected()) mode = Convert.DataBase.UPDATE_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); @@ -752,24 +899,46 @@ public class FM2SQL extends JFrame imple fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); fmInstance.setEnabled(false); Vector databases = Convert.getXMLConfig(file); - DataBase destBase = (DataBase) databases.lastElement(); + Convert.DataBase destBase = (Convert.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); + ((DefaultComboBoxModel) destURLBox.getModel()).removeElement(destObj); + ((DefaultComboBoxModel) destURLBox.getModel()).insertElementAt(destObj,0); + destURLBox.setSelectedItem(destObj); databases.remove(destBase); for (Iterator iter = databases.iterator(); iter.hasNext();) { Convert.DataBase database = (Convert.DataBase) iter.next(); + + if (database.mode == Convert.DataBase.CONVERT_MODE) + { + convertItem.setSelected(true); + convert.setText("Convert Tables"); + convert.setActionCommand("Convert Tables"); + mode = Convert.DataBase.CONVERT_MODE; + } else if (database.mode == Convert.DataBase.APPEND_MODE) + { + appendItem.setSelected(true); + convert.setText("Append Tables"); + convert.setActionCommand("Append Tables"); + mode = Convert.DataBase.APPEND_MODE; + } else if (database.mode == Convert.DataBase.UPDATE_MODE) + { + updateItem.setSelected(true); + convert.setText("Update Tables"); + convert.setActionCommand("Update Tables"); + mode = Convert.DataBase.UPDATE_MODE; + } + delimiter=database.delimiter; database.bean.getConnection(); + bean = database.bean; Object obj =bean.url; - ((DefaultComboBoxModel) box3.getModel()).removeElement(obj); - ((DefaultComboBoxModel) box3.getModel()).insertElementAt(obj,0); - box3.setSelectedItem(obj); + ((DefaultComboBoxModel) sourceURLBox.getModel()).removeElement(obj); + ((DefaultComboBoxModel) sourceURLBox.getModel()).insertElementAt(obj,0); + sourceURLBox.setSelectedItem(obj); fillTable(); Vector tables=database.bean.getTableNames(); Collections.sort(tables,String.CASE_INSENSITIVE_ORDER); @@ -780,12 +949,18 @@ public class FM2SQL extends JFrame imple int index=tables.indexOf(table); if(index<0) throw new RuntimeException("Error table \""+table+"\" does no longer exist\n at server "+bean.url +"\n or you mispelled the tablename."); noDBUpdate = true; - tC.tableModel.setValueAt(new TableComponent.SQLCommand(database.selects.get(i).toString()),index,2); + tC.tableModel.setValueAt(new TableComponent.SQLCommand(database.selects.get(i).toString()),index,SELECT_INDEX); + String create =database.creates.get(i).toString(); - tC.tableModel.setValueAt(new TableComponent.SQLCommand(create.equals("") ? create:" "+create),index,3); - Object comboBox=tC.tableModel.getValueAt(index,1); + 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); + + 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(idcomboBox!=null)((JComboBox)idcomboBox).setSelectedItem(bean.ids.get(i)); tC.tableModel.fireTableDataChanged(); noDBUpdate = false; noUserUpdate = false; @@ -979,7 +1154,7 @@ public class FM2SQL extends JFrame imple } // to for try { - destBean.setConnection((String) box4.getSelectedItem()); + destBean.setConnection((String) destURLBox.getSelectedItem()); DefaultListModel model = new DefaultListModel(); tables = destBean.getTableNames(); for (int j = 0; j < tables.size(); ++j) @@ -1018,18 +1193,32 @@ public class FM2SQL extends JFrame imple 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(); + 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("")) { 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); + model.setValueAt(createStatement(table,destBean,layout,query),row,CREATE_INDEX); + } + if (columnName.equals("Layouts")) + { + + bean.makeQuery("select * from"+bean.getQC()+table+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); } - } /* Statement stm = bean.getConnection().createStatement(); @@ -1059,20 +1248,73 @@ public class FM2SQL extends JFrame imple { JMenuBar menubar = new JMenuBar(); JMenu menu = new JMenu("File"); - - JMenuItem item = new JMenuItem("import XML Config"); + menu.setMnemonic('F'); + JMenuItem item = new JMenuItem("open XML Config"); + item.setToolTipText("opens a XML config file for batch conversion"); + item.setMnemonic('i'); + item.setAccelerator(KeyStroke.getKeyStroke('O',InputEvent.CTRL_DOWN_MASK)); + item.addActionListener(fm); menu.add(item); - item = new JMenuItem("export XML Config"); + item = new JMenuItem("save XML Config"); + item.setToolTipText("saves the current selections in an XML config file for batch conversion"); + item.setAccelerator(KeyStroke.getKeyStroke('S',InputEvent.CTRL_DOWN_MASK)); + item.setMnemonic('x'); + item.addActionListener(fm); menu.add(item); + item = new JMenuItem("Quit"); + item.setMnemonic('Q'); + item.setToolTipText("Quits the application"); + item.setAccelerator(KeyStroke.getKeyStroke('Q',InputEvent.CTRL_DOWN_MASK)); + item.addActionListener(fm); + menu.add(item); + menubar.add(menu); 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"); + convertItem.addActionListener(fm); + + bgrp.add(convertItem); + + menu.add(convertItem); + menubar.add(menu); + + appendItem = new JCheckBoxMenuItem("Append Mode"); + appendItem.setToolTipText("Appends data to an existing table"); + appendItem.addActionListener(fm); + + bgrp.add(appendItem); + + menu.add(appendItem); + menubar.add(menu); + + updateItem = new JCheckBoxMenuItem("Update Mode"); + updateItem.setToolTipText("Updates data in an existing table"); + updateItem.addActionListener(fm); + + 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.addActionListener(fm); menu.add(item); @@ -1081,6 +1323,7 @@ public class FM2SQL extends JFrame imple menu.setBackground(fm.getBackground()); menubar.setBackground(fm.getBackground()); + convertItem.doClick(); setJMenuBar(menubar); } /** @@ -1293,38 +1536,59 @@ public class FM2SQL extends JFrame imple 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[1] = new Vector(5); + data[1].setSize(5); + data[1].set(0," source Tablename "); + data[1].set(LAYOUT_INDEX,"Layouts"); + data[1].set(SELECT_INDEX,"select"); + data[1].set(CREATE_INDEX,"create"); + data[1].set(ID_INDEX," id "); data[0] = new Vector(); - for (int i = 0; i < tableNames.size(); i++) { String name = tableNames.get(i).toString(); Vector layouts = new Vector(); + Vector idVec = new Vector(); + try { + bean.makeQuery("select * from"+bean.getQC()+name+bean.getQC(),1); layouts = bean.getLayoutNames(name); } catch (SQLException e) { layouts = new Vector(); } - Vector dataRow = new Vector(); - dataRow.add(name); + + idVec = bean.getColumnNames(); + if(idVec==null) idVec=new Vector(); + idVec.add(0,""); + Vector dataRow = new Vector(5); + + dataRow.setSize(5); + dataRow.set(0,name); + + dataRow.set(SELECT_INDEX,new TableComponent.SQLCommand("select * from " + bean.getQC() + name + bean.getQC())); if (!layouts.isEmpty()) - dataRow.add(new JComboBox(layouts)); - else - dataRow.add(null); - dataRow.add(new TableComponent.SQLCommand("select * from "+bean.getQC()+name+bean.getQC())); + dataRow.set(LAYOUT_INDEX,new JComboBox(layouts)); + else + dataRow.set(LAYOUT_INDEX,null); - data[0].add(dataRow); - dataRow.add(new TableComponent.SQLCommand("")); + + // create row + dataRow.set(CREATE_INDEX,new TableComponent.SQLCommand("")); + // id row + dataRow.set(ID_INDEX,new TableComponent.IDComboBox(idVec));//new TableComponent.SQLCommand("")); + bean.ids.add(""); + data[0].add(dataRow); + //System.out.println(dataRow); } + tC.tableModel.setDataVector(data[0], data[1]); + //@TODO new sizeToFit method needed + //tC.sizeToFit(450, 250); + Dimension dim=listPanel.getPreferredSize(); + tC.sizeToFit(dim.width,dim.height); tC.revalidate(); tC.tableModel.fireTableDataChanged(); noDBUpdate = false; @@ -1332,21 +1596,25 @@ public class FM2SQL extends JFrame imple } public Vector[] getListFromTable() { - Vector[] vec = new Vector[4]; + Vector[] vec = new Vector[5]; vec[0] = new Vector(); vec[1] = new Vector(); vec[2] = new Vector(); vec[3] = new Vector(); + vec[4] = 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)); + JComboBox box = ((JComboBox) tC.tableModel.getValueAt(rows[i], LAYOUT_INDEX)); String layoutName = (box != null) ? box.getSelectedItem().toString() : ""; + + String idName = ((JComboBox)tC.tableModel.getValueAt(rows[i], ID_INDEX)).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()); + vec[2].add(tC.tableModel.getValueAt(rows[i],SELECT_INDEX ).toString()); + vec[3].add(tC.tableModel.getValueAt(rows[i], CREATE_INDEX).toString()); + vec[4].add(idName); } return vec; @@ -1357,15 +1625,15 @@ public class FM2SQL extends JFrame imple showTables1.setEnabled(state); convert.setEnabled(state); dropTables.setEnabled(state); - box3.setEnabled(state); - box4.setEnabled(state); + sourceURLBox.setEnabled(state); + destURLBox.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(); + if(beanDest.url.equals("")) beanDest.url=destURLBox.getSelectedItem().toString(); StringBuffer command = new StringBuffer(50); command.append("\n CREATE TABLE "); command.append(beanDest.getQC());