File:  [Repository] / FM2SQL / src / FM2SQL.java
Revision 1.3: download - view: text, annotated - select for diffs - revision graph
Wed Feb 16 13:00:48 2005 UTC (19 years, 4 months ago) by rogo
Branches: MAIN
CVS tags: HEAD
xml file parsing and reading changed only one method now for gui and batch mode

    1: /*
    2:  * FM2SQL.java -- Main program Filemaker to SQL Converter 
    3:  * Copyright (C) 2003 Robert Gordesch (rogo@mpiwg-berlin.mpg.de) 
    4:  * This program is free software; you can redistribute it and/or modify it
    5:  * under the terms of the GNU General Public License as published by the Free
    6:  * Software Foundation; either version 2 of the License, or (at your option)
    7:  * any later version.  Please read license.txt for the full details. A copy of
    8:  * the GPL may be found at http://www.gnu.org/copyleft/lgpl.html  You should
    9:  * have received a copy of the GNU General Public License along with this
   10:  * program; if not, write to the Free Software Foundation, Inc., 59 Temple
   11:  * Place, Suite 330, Boston, MA 02111-1307 USA  Created on 15.09.2003 by
   12:  * rogo  
   13:  */
   14: 
   15: import java.awt.Cursor;
   16: import java.awt.Dimension;
   17: import java.awt.Font;
   18: import java.awt.GridBagConstraints;
   19: import java.awt.GridBagLayout;
   20: import java.awt.Image;
   21: import java.awt.Insets;
   22: import java.awt.event.ActionEvent;
   23: import java.awt.event.ActionListener;
   24: import java.awt.event.ComponentAdapter;
   25: import java.awt.event.ComponentEvent;
   26: import java.awt.event.InputEvent;
   27: import java.awt.event.WindowAdapter;
   28: import java.awt.event.WindowEvent;
   29: import java.io.ByteArrayOutputStream;
   30: import java.io.File;
   31: import java.io.FileWriter;
   32: import java.io.PrintStream;
   33: import java.sql.SQLException;
   34: import java.sql.Statement;
   35: import java.text.ParseException;
   36: import java.util.Collections;
   37: import java.util.Enumeration;
   38: import java.util.Iterator;
   39: import java.util.Properties;
   40: import java.util.Vector;
   41: 
   42: import javax.swing.Box;
   43: import javax.swing.BoxLayout;
   44: import javax.swing.ButtonGroup;
   45: import javax.swing.DefaultComboBoxModel;
   46: import javax.swing.DefaultListModel;
   47: import javax.swing.JButton;
   48: import javax.swing.JCheckBoxMenuItem;
   49: import javax.swing.JComboBox;
   50: import javax.swing.JDialog;
   51: import javax.swing.JFileChooser;
   52: import javax.swing.JFrame;
   53: import javax.swing.JLabel;
   54: import javax.swing.JList;
   55: import javax.swing.JMenu;
   56: import javax.swing.JMenuBar;
   57: import javax.swing.JMenuItem;
   58: import javax.swing.JOptionPane;
   59: import javax.swing.JPanel;
   60: import javax.swing.JPasswordField;
   61: import javax.swing.JProgressBar;
   62: import javax.swing.JScrollBar;
   63: import javax.swing.JScrollPane;
   64: import javax.swing.JSplitPane;
   65: import javax.swing.JTextArea;
   66: import javax.swing.JTextField;
   67: import javax.swing.KeyStroke;
   68: import javax.swing.ListSelectionModel;
   69: import javax.swing.SwingConstants;
   70: import javax.swing.event.TableModelEvent;
   71: import javax.swing.event.TableModelListener;
   72: import javax.swing.table.TableModel;
   73: /**
   74:  * 
   75:  * <br>
   76:  * <h2>FileMaker Test (JDBC Database Driver Test)</h2>
   77:  * Main class : contains the main Frame, all event handlers etc <br>
   78:  * The Database access is made over DBBean class all other classes are just for
   79:  * the visualization of the data
   80:  * 
   81:  * @version 0.3( first stable release)
   82:  * @author rogo
   83:  * 
   84:  */
   85: public class FM2SQL extends JFrame implements ActionListener, TableModelListener
   86: {
   87: 	private JMenuItem delimiterItem;
   88: 	private JCheckBoxMenuItem convertItem;
   89: 	private JCheckBoxMenuItem appendItem;
   90: 	private JCheckBoxMenuItem updateItem;
   91: 	private JCheckBoxMenuItem deleteItem;
   92: 	private JCheckBoxMenuItem useNormanToUnicodeMapper;
   93: 	int mode = -1;
   94: 	final static int STATUS_INDEX = 0;
   95: 	final static int NAME_INDEX = 1;
   96: 	final static int ID_INDEX = 2;
   97: 	final static int SELECT_INDEX = 3;
   98: 	final static int CREATE_INDEX = 4;
   99: 	final static int LAYOUT_INDEX = 5;
  100: 
  101: 	/**
  102: 	 * The database Bean instance.
  103: 	 * 
  104: 	 */
  105: 	DBBean bean;
  106: 	/**
  107: 	 * The database destination Bean instance.
  108: 	 * 
  109: 	 */
  110: 	DBBean destBean;
  111: 
  112: 	/**
  113: 	 * tList - Tablenames to choose from
  114: 	 */
  115: 
  116: 	JList tList = new JList(new String[]
  117: 	{"no database", "connection", ""});
  118: 	JList tListDest = new JList(new String[]
  119: 	{"no database connection", "", ""});
  120: 
  121: 	/**
  122: 	 * sourceUrl - Database URL ComboBox
  123: 	 */
  124: 	JComboBox sourceURLBox;
  125: 	/**
  126: 	 * destUrlBox - Database URL ComboBox
  127: 	 */
  128: 	JComboBox destURLBox;
  129: 
  130: 	TableComponent table, tC;
  131: 	Vector tables = new Vector();
  132: 	Vector layouts = new Vector();
  133: 	JPanel listPanel;
  134: 	JPanel topPanel, topPanel2, contentPanel;
  135: 	JScrollPane paneDest;
  136: 	FM2SQL fm = this;
  137: 	boolean noDBUpdate = false;
  138: 	boolean noUserUpdate = false;
  139: 	int id = 0;
  140: 	static boolean debug = false;
  141: 	/**
  142: 	 * The result window used for query results
  143: 	 */
  144: 	MultiResultWindow window;
  145: 	/**
  146: 	 * The result window used for query results
  147: 	 */
  148: 	MultiResultWindow windowDest;
  149: 
  150: 	static FM2SQL fmInstance;
  151: 	static String url = "jdbc:fmpro:http://141.14.237.42";
  152: 	JButton showTables = new JButton(), showTables1 = new JButton();
  153: 	JButton convert = new JButton();
  154: 	JButton dropTables = new JButton();
  155: 
  156: 	int oldWidth = 0, oldHeight = 0;
  157: 	boolean resize = true;
  158: 	static FileWriter logFile;
  159: 	String delimiter = "";
  160: 
  161: 	Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
  162: 	JFileChooser configExportFileChooser;
  163: 	JFileChooser configImportFileChooser;
  164: 	private JCheckBoxMenuItem synchronizeItem;
  165: 
  166: 	/**
  167: 	 * tries to connect to database specified in url-Variable. initializes all GUI
  168: 	 * components, then fails throws an exception
  169: 	 * 
  170: 	 */
  171: 	public FM2SQL() throws Exception
  172: 	{
  173: 
  174: 		initializeGUI();
  175: 	}
  176: 	public void initializeGUI() throws Exception
  177: 	{
  178: 		Image local = getToolkit().getImage(FM2SQL.class.getResource("icons/fm.jpg"));
  179: 		if (local != null)
  180: 			;
  181: 		setIconImage(local);
  182: 		bean = new DBBean();
  183: 		destBean = new DBBean();
  184: 		sourceURLBox = new JComboBox(new String[]
  185: 		{"jdbc:fmpro:http://141.14.237.74:8050", "jdbc:fmpro:http://localhost", "jdbc:postgresql://foxridge/test", "jdbc:sequelink://r583-3:2399"});
  186: 		sourceURLBox.setEditable(true);
  187: 		sourceURLBox.setFont(new Font("Times New Roman", Font.PLAIN, 14));
  188: 		destURLBox = new JComboBox(new String[]
  189: 		{"jdbc:postgresql://foxridge/test", "jdbc:postgresql://erebos/test1"});
  190: 		destURLBox.setEditable(true);
  191: 		destURLBox.addActionListener(this);
  192: 		destURLBox.setFont(new Font("Times New Roman", Font.PLAIN, 14));
  193: 		table = new TableComponent();
  194: 		// box = new JComboBox(tables);
  195: 		// box.addActionListener(this);
  196: 		// box2.addActionListener(this);
  197: 		sourceURLBox.addActionListener(this);
  198: 
  199: 		contentPanel = new JPanel();
  200: 		contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));
  201: 
  202: 		sourceURLBox.setMinimumSize(new Dimension(450, 25));
  203: 		sourceURLBox.setMaximumSize(new Dimension(550, 25));
  204: 		sourceURLBox.setPreferredSize(new Dimension(450, 25));
  205: 		destURLBox.setMinimumSize(new Dimension(450, 25));
  206: 		destURLBox.setMaximumSize(new Dimension(550, 25));
  207: 		destURLBox.setPreferredSize(new Dimension(450, 25));
  208: 		paneDest = new JScrollPane(tListDest);
  209: 		// tListDest.setPreferredSize(paneDest.getPreferredSize());
  210: 		// paneDest.setPreferredSize(new Dimension(350, 365));
  211: 		Dimension dim = paneDest.getPreferredSize();
  212: 		paneDest.setMinimumSize(dim);
  213: 		// paneDest.setMaximumSize(new Dimension(dim.width + 50, dim.height + 50));
  214: 
  215: 		tC = new TableComponent();
  216: 		tC.sizeToFit(450, 250);
  217: 		tC.tableModel.addTableModelListener(this);
  218: 		JPanel destPanel = new JPanel();
  219: 		destPanel.setLayout(new java.awt.GridBagLayout());
  220: 
  221: 		listPanel = new JPanel();
  222: 		listPanel.setLayout(new java.awt.GridBagLayout());
  223: 		java.awt.GridBagConstraints gbc = new java.awt.GridBagConstraints();
  224: 		JScrollPane pane = new JScrollPane(tList);
  225: 		tC.tableScroller.setPreferredSize(new Dimension(450, 365));
  226: 		// tC.table.revalidate();
  227: 		tC.tableScroller.setMinimumSize(new Dimension(450, 250));
  228: 		// tC.tableScroller.setMaximumSize(tC.tableScroller.getPreferredSize());
  229: 		topPanel = new JPanel();
  230: 		topPanel.setLayout(new GridBagLayout());
  231: 		topPanel2 = new JPanel();
  232: 		topPanel2.setLayout(new GridBagLayout());
  233: 
  234: 		gbc.gridx = 0;
  235: 		gbc.gridy = 0;
  236: 		gbc.weightx = 0.1;
  237: 		gbc.weighty = 0.1;
  238: 		gbc.gridwidth = 1;
  239: 		gbc.gridheight = 1;
  240: 		gbc.insets = new Insets(2, 2, 5, 5);
  241: 		gbc.ipadx = 1;
  242: 		gbc.ipady = 1;
  243: 
  244: 		gbc.anchor = GridBagConstraints.WEST;
  245: 		listPanel.add(topPanel, gbc);
  246: 		destPanel.add(topPanel2, gbc);
  247: 
  248: 		topPanel.add(new JLabel("Choose src database: ", JLabel.CENTER), gbc);
  249: 		topPanel2.add(new JLabel("Choose dest database : ", JLabel.CENTER), gbc);
  250: 
  251: 		gbc.anchor = GridBagConstraints.NORTHWEST;
  252: 		gbc.gridy = 1;
  253: 		topPanel.add(sourceURLBox, gbc);
  254: 
  255: 		topPanel2.add(destURLBox, gbc);
  256: 
  257: 		// gbc.gridx=GridBagConstraints.RELATIVE;
  258: 		// dataBasePanel.add(new JLabel(" select Tables to Convert ", JLabel.LEFT));
  259: 		gbc.gridy = 1;
  260: 		gbc.anchor = GridBagConstraints.SOUTHWEST;
  261: 
  262: 		listPanel.add(new JLabel(" select Tables to Convert  ", JLabel.LEFT), gbc);
  263: 		destPanel.add(new JLabel("  Tables in database  ", JLabel.LEFT), gbc);
  264: 
  265: 		// gbc.anchor = GridBagConstraints.WEST;
  266: 		gbc.gridy = 2;
  267: 		gbc.gridx = 0;
  268: 		// gbc.weightx = 0.0;
  269: 		// dataBasePanel.add(tC);
  270: 		gbc.anchor = GridBagConstraints.NORTHWEST;
  271: 		gbc.gridheight = 1;
  272: 		gbc.fill = GridBagConstraints.BOTH;
  273: 		listPanel.add(tC.tableScroller, gbc);
  274: 		// gbc.fill = GridBagConstraints.VERTICAL;
  275: 		destPanel.add(paneDest, gbc);
  276: 		showTables1 = new JButton("show Tables");
  277: 		showTables1.setActionCommand("show Tables source");
  278: 		// gbc.anchor = GridBagConstraints.NORTH;
  279: 		// gbc.weightx = 0.0;
  280: 		gbc.fill = GridBagConstraints.NONE;
  281: 		gbc.gridheight = 1;
  282: 
  283: 		gbc.gridx = 0;
  284: 		gbc.gridy = 2;
  285: 		// topPanel.add(showTables1, gbc);
  286: 		JPanel buttonPanel = new JPanel();
  287: 		buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));
  288: 		buttonPanel.setMinimumSize(new Dimension(380, 30));
  289: 		convert = new JButton("Convert Tables");
  290: 		showTables = new JButton("show Tables");
  291: 		dropTables = new JButton("drop Tables");
  292: 		// System.out.println(convert.getPreferredSize());
  293: 		showTables.setMinimumSize(convert.getPreferredSize());
  294: 		dropTables.setMinimumSize(convert.getPreferredSize());
  295: 		showTables.setMaximumSize(convert.getPreferredSize());
  296: 		dropTables.setMaximumSize(convert.getPreferredSize());
  297: 		showTables.setPreferredSize(convert.getPreferredSize());
  298: 		dropTables.setPreferredSize(convert.getPreferredSize());
  299: 
  300: 		showTables.addActionListener(fm);
  301: 		showTables1.addActionListener(fm);
  302: 
  303: 		buttonPanel.add(showTables);
  304: 		buttonPanel.add(convert);
  305: 		convert.addActionListener(fm);
  306: 		dropTables.addActionListener(fm);
  307: 		buttonPanel.add(dropTables);
  308: 
  309: 		JPanel buttonPanelSrc = new JPanel();
  310: 		buttonPanelSrc.setLayout(new BoxLayout(buttonPanelSrc, BoxLayout.X_AXIS));
  311: 		buttonPanelSrc.setMinimumSize(new Dimension(200, 30));
  312: 		buttonPanelSrc.add(showTables1);
  313: 
  314: 		topPanel.add(buttonPanelSrc, gbc);
  315: 		topPanel2.add(buttonPanel, gbc);
  316: 
  317: 		// gbc.anchor = GridBagConstraints.WEST;
  318: 		// gbc.gridy = 1;
  319: 		// gbc.gridx = 2;
  320: 		// gbc.weightx = 0.2;
  321: 
  322: 		// gbc.gridx = 3;
  323: 		// gbc.anchor = GridBagConstraints.NORTHWEST;
  324: 		// gbc.gridy = 1;
  325: 		// gbc.weightx = 1.0;
  326: 		// listPanel.add(buttonPanel, gbc);
  327: 		JSplitPane splitter = new JSplitPane();
  328: 		splitter.setTopComponent(listPanel);
  329: 		splitter.setBottomComponent(destPanel);
  330: 
  331: 		// contentPanel.add(dataBasePanel);
  332: 		// contentPanel.add(listPanel);
  333: 		listPanel.setMaximumSize(new Dimension(660, 750));
  334: 		listPanel.setMinimumSize(new Dimension(660, 250));
  335: 		listPanel.setPreferredSize(new Dimension(480, 500));
  336: 		paneDest.setPreferredSize(new Dimension(250, 285));
  337: 
  338: 		getContentPane().add(splitter, "Center");
  339: 		this.addWindowListener(new WindowAdapter()
  340: 		{
  341: 			public void windowClosing(WindowEvent e)
  342: 			{
  343: 				bean.closeAllConnections();
  344: 				destBean.closeAllConnections();
  345: 				System.exit(0);
  346: 			}
  347: 		});
  348: 		addComponentListener(new ComponentAdapter()
  349: 		{
  350: 			public void componentResized(ComponentEvent e)
  351: 			{
  352: 
  353: 				if (oldWidth != getWidth() || oldHeight != getHeight())
  354: 				{
  355: 					// table.sizeToFit(getWidth(), getHeight());
  356: 
  357: 					Dimension dim = table.table.getPreferredSize();
  358: 					int size = contentPanel.getPreferredSize().height + new JScrollBar().getPreferredSize().height + new JMenuBar().getPreferredSize().height + 10;
  359: 
  360: 					table.tableScroller.setPreferredSize(new Dimension(getWidth() - 15, getHeight() - size));
  361: 					Dimension d2 = table.tableScroller.getPreferredSize();
  362: 
  363: 					oldWidth = getWidth();
  364: 					oldHeight = getHeight();
  365: 
  366: 					table.setPreferredSize(new Dimension(d2.width + 15, d2.height + 5));
  367: 					table.table.revalidate();
  368: 					table.tableScroller.revalidate();
  369: 					table.revalidate();
  370: 					if (getHeight() > table.table.getPreferredSize().height + (2 * size))
  371: 						setSize(getWidth(), table.table.getPreferredSize().height + 2 * size);
  372: 					// System.out.println("size" + size);
  373: 				}
  374: 				// listPanel.setMaximumSize(new Dimension(getPreferredSize().width - 5,
  375: 				// 550));
  376: 				// listPanel.setMinimumSize(new Dimension(getPreferredSize().width - 5,
  377: 				// 200));
  378: 				// listPanel.setPreferredSize(new Dimension(getPreferredSize().width -
  379: 				// 5, 370));
  380: 				tC.tableScroller.revalidate();
  381: 				Dimension dim = getSize();
  382: 				tC.tableScroller.setMinimumSize(new Dimension(dim.width - 400, dim.height - topPanel.getPreferredSize().height - 100));
  383: 				tC.tableScroller.setMaximumSize(getSize());
  384: 				tC.tableScroller.setPreferredSize(tC.tableScroller.getMinimumSize());
  385: 
  386: 				paneDest.setMinimumSize(new Dimension(400, dim.height - topPanel2.getPreferredSize().height - 100));
  387: 				paneDest.setMaximumSize(tC.tableScroller.getMaximumSize());
  388: 				paneDest.setPreferredSize(new Dimension(400, dim.height - topPanel2.getPreferredSize().height - 100));
  389: 
  390: 				paneDest.validate();
  391: 				// tC.tableScroller.setPreferredSize(getSize());
  392: 				// @TODO new sizeToFit method for listPanel table!!!
  393: 				tC.sizeToFit(getWidth(), getHeight());
  394: 				((JPanel) getContentPane()).revalidate();
  395: 				repaint();
  396: 				setTitle("Filemaker 2 SQL Conversion Tool ");
  397: 
  398: 			}
  399: 		});
  400: 
  401: 		setMenu();
  402: 		// setSize(800, 600);
  403: 		pack();
  404: 		setLocation((screenSize.width - getWidth()) / 2, (screenSize.height - getHeight()) / 2);
  405: 		// setVisible(true);
  406: 		validate();
  407: 
  408: 		// repaint();
  409: 
  410: 	}
  411: 
  412: 	/**
  413: 	 * 
  414: 	 */
  415: 	public static void main(String[] args)
  416: 	{
  417: 		try
  418: 		{
  419: 			System.setErr(System.out);
  420: //			Properties prop = System.getProperties();
  421: //			Enumeration enume = prop.keys();
  422: //			Enumeration enum2 = prop.elements();
  423: //
  424: //			while (enume.hasMoreElements())
  425: //				System.out.println(enume.nextElement() + " " + enum2.nextElement());
  426: //
  427: 			if (System.getProperty("os.name").startsWith("W"))
  428: 				javax.swing.UIManager.setLookAndFeel(new com.sun.java.swing.plaf.windows.WindowsLookAndFeel());
  429: 			javax.swing.UIManager.put("Table.focusCellHighlightBorder", new javax.swing.border.LineBorder(java.awt.Color.black));
  430: 			javax.swing.UIManager.put("Table.focusCellBackground", new java.awt.Color(227, 227, 227, 127));
  431: 
  432: 			fmInstance = new FM2SQL();
  433: 			fmInstance.table.tableModel.addTableModelListener(fmInstance);
  434: 			fmInstance.setVisible(true);
  435: 
  436: 		}
  437: 		catch (Exception e)
  438: 		{
  439: 			JOptionPane pane = new JOptionPane(e.getMessage() + "  \n URL: " + url, JOptionPane.ERROR_MESSAGE);
  440: 
  441: 			JDialog dialog = pane.createDialog(null, " Exception occured while connecting");
  442: 			e.printStackTrace();
  443: 			dialog.addWindowListener(new WindowAdapter()
  444: 			{
  445: 				public void windowClosing(WindowEvent e)
  446: 				{
  447: 					System.exit(0);
  448: 				}
  449: 			});
  450: 			dialog.addComponentListener(new ComponentAdapter()
  451: 			{
  452: 
  453: 				public void componentHidden(ComponentEvent e)
  454: 				{
  455: 
  456: 					System.exit(0);
  457: 				}
  458: 			});
  459: 			dialog.setVisible(true);
  460: 		}
  461: 	}
  462: 	public void actionPerformed(ActionEvent e)
  463: 	{
  464: 		String command = e.getActionCommand();
  465: 		if (debug)
  466: 			System.out.println("command " + command);
  467: 		if (command == "comboBoxEdited")
  468: 		{
  469: 			Object src = e.getSource();
  470: 			if (src == sourceURLBox)
  471: 			{
  472: 				if (debug)
  473: 					System.out.println("hey" + sourceURLBox.getSelectedItem());
  474: 				Object insObj = sourceURLBox.getSelectedItem();
  475: 				((DefaultComboBoxModel) sourceURLBox.getModel()).removeElement(insObj);
  476: 
  477: 				((DefaultComboBoxModel) sourceURLBox.getModel()).insertElementAt(insObj, 0);
  478: 				sourceURLBox.setSelectedItem(insObj);
  479: 			}
  480: 			else if (src == destURLBox)
  481: 			{
  482: 				if (debug)
  483: 					System.out.println("hey" + destURLBox.getSelectedItem());
  484: 				// ((DefaultComboBoxModel)
  485: 				// box4.getModel()).insertElementAt(box4.getSelectedItem(), 0);
  486: 				try
  487: 				{
  488: 					String selected = (String) destURLBox.getSelectedItem();
  489: 					destBean.setConnection(selected);
  490: 					Vector catalogs = destBean.getCatalogs();
  491: 					Vector urls = new Vector();
  492: 					for (int i = 0; i < catalogs.size(); ++i)
  493: 					{
  494: 						urls.add(destBean.url.substring(0, destBean.url.lastIndexOf("/") + 1) + catalogs.get(i));
  495: 					}
  496: 					destURLBox.setModel(new DefaultComboBoxModel(urls));
  497: 					destURLBox.setSelectedItem(selected);
  498: 				}
  499: 				catch (Exception e5)
  500: 				{
  501: 				}
  502: 			}
  503: 		}
  504: 		if (command == "comboBoxChanged")
  505: 		{
  506: 			try
  507: 			{
  508: 				// System.out.println("hallo " + (e.getSource() == box3));
  509: 
  510: 				Object src = e.getSource();
  511: 				if (src == sourceURLBox && !noUserUpdate)
  512: 				{
  513: 					Thread thread = new Thread()
  514: 					{
  515: 						public void run()
  516: 						{
  517: 
  518: 							try
  519: 							{
  520: 								PasswordDialog dialog = new PasswordDialog(fmInstance, bean);
  521: 								dialog.setLocationRelativeTo(sourceURLBox);
  522: 								dialog.thread = Thread.currentThread();
  523: 								fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
  524: 								fmInstance.setEnabled(false);
  525: 								dialog.setVisible(true);
  526: 								String url = sourceURLBox.getSelectedItem().toString();
  527: 								bean.url = (url != null) ? url : bean.url;
  528: 								bean.connection = null;
  529: 								bean.getConnection();
  530: 								tables = bean.getTableNames();
  531: 								fillTable();
  532: 								fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  533: 								fmInstance.setEnabled(true);
  534: 								// System.out.println("hallo" + tables + " ");
  535: 							}
  536: 							catch (Exception e5)
  537: 							{
  538: 								ByteArrayOutputStream b = new ByteArrayOutputStream();
  539: 								PrintStream stream = new PrintStream(b);
  540: 								e5.printStackTrace(stream);
  541: 								fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  542: 								fmInstance.setEnabled(true);
  543: 								Vector header = new Vector();
  544: 								header.add("no database");
  545: 								header.add("connection");
  546: 								Vector rows = new Vector();
  547: 								// rows.add(header);
  548: 								noDBUpdate = true;
  549: 								tC.tableModel.setDataVector(rows, header);
  550: 								tC.tableModel.setRowCount(20);
  551: 								tC.revalidate();
  552: 								tC.tableModel.fireTableDataChanged();
  553: 								noDBUpdate = false;
  554: 								showErrorDialog(b.toString(), "Error occured !");
  555: 							}
  556: 						}
  557: 					};
  558: 					thread.start();
  559: 				}
  560: 				else if (src == destURLBox && !noUserUpdate)
  561: 				{
  562: 					Thread thread = new Thread()
  563: 					{
  564: 						public void run()
  565: 						{
  566: 
  567: 							try
  568: 							{
  569: 
  570: 								PasswordDialog dialog = new PasswordDialog(fmInstance, destBean);
  571: 								dialog.setLocationRelativeTo(destURLBox);
  572: 								dialog.thread = Thread.currentThread();
  573: 								fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
  574: 								fmInstance.setEnabled(false);
  575: 								dialog.setVisible(true);
  576: 								destBean.setConnection((String) destURLBox.getSelectedItem());
  577: 								DefaultListModel model = new DefaultListModel();
  578: 								Vector tables = destBean.getTableNames();
  579: 								for (int j = 0; j < tables.size(); ++j)
  580: 									model.addElement(tables.get(j));
  581: 								// System.out.println("hallo" + tables + " ");
  582: 								tListDest.setModel(model);
  583: 								// System.out.println("hallo" + tables + " ");
  584: 								fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  585: 								fmInstance.setEnabled(true);
  586: 							}
  587: 							catch (Exception e5)
  588: 							{
  589: 								ByteArrayOutputStream b = new ByteArrayOutputStream();
  590: 								PrintStream stream = new PrintStream(b);
  591: 								e5.printStackTrace(stream);
  592: 								fmInstance.setEnabled(true);
  593: 								fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  594: 								DefaultListModel model = new DefaultListModel();
  595: 								model.addElement("no database connection");
  596: 								tListDest.setModel(model);
  597: 
  598: 								showErrorDialog(b.toString(), "Error occured !");
  599: 							}
  600: 						}
  601: 					};
  602: 					thread.start();
  603: 
  604: 				}
  605: 				setTitle("Filemaker 2 SQL Conversion Tool ");
  606: 				// pack();
  607: 
  608: 			}
  609: 			catch (Exception e4)
  610: 			{
  611: 				ByteArrayOutputStream b = new ByteArrayOutputStream();
  612: 				PrintStream stream = new PrintStream(b);
  613: 				e4.printStackTrace(stream);
  614: 				showErrorDialog(b.toString(), "Open of table failed");
  615: 
  616: 			}
  617: 		}
  618: 		if (command == "show Driver features")
  619: 		{
  620: 			ResultWindow result = new ResultWindow(this);
  621: 			try
  622: 			{
  623: 				Vector[] vecs = bean.TestDB(bean.getConnection().getMetaData());
  624: 				result.updateResult(vecs[0], vecs[1]);
  625: 				// result.pack();
  626: 				result.title = "Database features";
  627: 				result.setVisible(true);
  628: 				String name = result.writeResult();
  629: 			}
  630: 			catch (Exception e2)
  631: 			{
  632: 			}
  633: 		}
  634: 		if (command.equals("Delimiter"))
  635: 		{
  636: 			new DelimiterDialog(fmInstance).setVisible(true);
  637: 			// delimiter = JOptionPane.showInputDialog(fmInstance,"Enter delimiter
  638: 			// String",delimiter);
  639: 
  640: 		}
  641: 
  642: 		if (command == "Convert Mode")
  643: 		{
  644: 			System.out.println("Convert Mode selected");
  645: 			convert.setText("Convert Tables");
  646: 			convert.setActionCommand("Convert Tables");
  647: 			convert.setToolTipText("Normal table conversion  existing table will be deleted");
  648: 			mode = Convert.DataBase.CONVERT_MODE;
  649: 		}
  650: 		if (command == "Append Mode")
  651: 		{
  652: 			System.out.println("Append Mode selected");
  653: 			convert.setText("Append Tables");
  654: 			convert.setActionCommand("Append Tables");
  655: 			convert.setToolTipText("Appends data to an existing table");
  656: 
  657: 			mode = Convert.DataBase.APPEND_MODE;
  658: 		}
  659: 		if (command == "Update Mode")
  660: 		{
  661: 			System.out.println("Update Mode selected");
  662: 			convert.setText("Update Tables");
  663: 			convert.setActionCommand("Update Tables");
  664: 			convert.setToolTipText("Updates data that has been changed in source");
  665: 			mode = Convert.DataBase.UPDATE_MODE;
  666: 		}
  667: 		if (command == "Delete Mode")
  668: 		{
  669: 			System.out.println("Delete Mode selected");
  670: 			convert.setText("Delete Tables");
  671: 			convert.setActionCommand("Delete Tables");
  672: 			convert.setToolTipText("Deletes data that has been deleted in source");
  673: 			mode = Convert.DataBase.DELETE_MODE;
  674: 		}
  675: 		if (command == "Synchronize Mode")
  676: 		{
  677: 			System.out.println("Synchronize Mode selected");
  678: 			convert.setText("Synchronize Tables");
  679: 			convert.setActionCommand("Synchronize Tables");
  680: 			convert.setToolTipText("Synchronize data with destination table");
  681: 			mode = Convert.DataBase.SYNCHRONIZE_MODE;
  682: 		}
  683: 
  684: 		if (command.equals("use NormanToUnicodeMapper"))
  685: 		{
  686: 			if (bean != null)
  687: 				bean.setUseNormanToUnicodeMapper(useNormanToUnicodeMapper.isSelected());
  688: 		}
  689: 		// writing config
  690: 		if (command.equals("save XML Config"))
  691: 		{
  692: 			if (configExportFileChooser == null)
  693: 			{
  694: 				configExportFileChooser = new JFileChooser();
  695: 				configExportFileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
  696: 				configExportFileChooser.setFileFilter(new XMLFilter());
  697: 				configExportFileChooser.setDialogType(JFileChooser.SAVE_DIALOG);
  698: 				configExportFileChooser.addActionListener(new ActionListener()
  699: 				{
  700: 					public void actionPerformed(ActionEvent e2)
  701: 					{
  702: 						System.out.println(e2.getActionCommand());
  703: 						if (!e2.getActionCommand().toString().equals("ApproveSelection"))
  704: 							return;
  705: 
  706: 						Thread thread = new Thread()
  707: 						{
  708: 							public void run()
  709: 							{
  710: 								File configFile = configExportFileChooser.getSelectedFile();
  711: 								writeConfig(configFile.toString());
  712: 
  713: 							}
  714: 						};
  715: 						thread.start();
  716: 
  717: 					}
  718: 				});
  719: 			}
  720: 			configExportFileChooser.rescanCurrentDirectory();
  721: 			configExportFileChooser.showDialog(fmInstance, " Save ");
  722: 
  723: 		}
  724: 		if (command.equals("open XML Config"))
  725: 		{
  726: 			if (configImportFileChooser == null)
  727: 			{
  728: 				configImportFileChooser = new JFileChooser();
  729: 				configImportFileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
  730: 				configImportFileChooser.setFileFilter(new XMLFilter());
  731: 				configImportFileChooser.setDialogType(JFileChooser.OPEN_DIALOG);
  732: 				configImportFileChooser.addActionListener(new ActionListener()
  733: 				{
  734: 					public void actionPerformed(ActionEvent e2)
  735: 					{
  736: 						System.out.println(e2.getActionCommand());
  737: 						if (!e2.getActionCommand().toString().equals("ApproveSelection"))
  738: 							return;
  739: 
  740: 						Thread thread = new Thread()
  741: 						{
  742: 							public void run()
  743: 							{
  744: 								File configFile = configImportFileChooser.getSelectedFile();
  745: 								readXMLConfig(configFile.toString());
  746: 
  747: 							}
  748: 						};
  749: 						thread.start();
  750: 
  751: 					}
  752: 				});
  753: 			}
  754: 			configImportFileChooser.rescanCurrentDirectory();
  755: 			configImportFileChooser.showDialog(fmInstance, " Open ");
  756: 
  757: 		}
  758: 
  759: 		if (command.equals("Convert Tables") || command.equals("Append Tables"))
  760: 		{
  761: 
  762: 			Thread thread = new Thread()
  763: 			{
  764: 				public void run()
  765: 				{
  766: 					setEnabled(false);
  767: 					convert();
  768: 					setEnabled(true);
  769: 				}
  770: 
  771: 			};
  772: 			thread.start();
  773: 		}
  774: 		if (command.equals("Update Tables"))
  775: 		{
  776: 
  777: 			Thread thread = new Thread()
  778: 			{
  779: 				public void run()
  780: 				{
  781: 					setEnabled(false);
  782: 					update();
  783: 					setEnabled(true);
  784: 				}
  785: 
  786: 			};
  787: 			thread.start();
  788: 		}
  789: 		if (command.equals("Delete Tables"))
  790: 		{
  791: 
  792: 			Thread thread = new Thread()
  793: 			{
  794: 				public void run()
  795: 				{
  796: 					setEnabled(false);
  797: 					delete();
  798: 					setEnabled(true);
  799: 				}
  800: 
  801: 			};
  802: 			thread.start();
  803: 		}
  804: 		if (command.equals("Synchronize Tables"))
  805: 		{
  806: 
  807: 			Thread thread = new Thread()
  808: 			{
  809: 				public void run()
  810: 				{
  811: 					setEnabled(false);
  812: 					synchronize();
  813: 					setEnabled(true);
  814: 				}
  815: 
  816: 			};
  817: 			thread.start();
  818: 		}
  819: 
  820: 		if (command.equals("show Tables"))
  821: 		{
  822: 			Thread thread = new Thread()
  823: 			{
  824: 				public void run()
  825: 				{
  826: 					fmInstance.setEnabled(false);
  827: 					boolean visible = showTable(1);
  828: 					window.validate();
  829: 					window.setVisible(visible);
  830: 					fmInstance.setEnabled(true);
  831: 
  832: 				}
  833: 			};
  834: 			thread.start();
  835: 			// System.out.println("hello");
  836: 
  837: 		}
  838: 		if (command.equals("show Tables source"))
  839: 		{
  840: 			Thread thread = new Thread()
  841: 			{
  842: 				public void run()
  843: 				{
  844: 					fmInstance.setEnabled(false);
  845: 					boolean visible = showTable(0);
  846: 					window.validate();
  847: 					window.setVisible(visible);
  848: 					fmInstance.setEnabled(true);
  849: 				}
  850: 			};
  851: 			thread.start();
  852: 			// System.out.println("hello"+thread);
  853: 
  854: 		}
  855: 
  856: 		if (command.equals("drop Tables"))
  857: 		{
  858: 			Thread thread = new Thread()
  859: 			{
  860: 				public void run()
  861: 				{
  862: 					dropTable();
  863: 				}
  864: 			};
  865: 			thread.start();
  866: 		}
  867: 		if (command.equals("Quit"))
  868: 		{
  869: 			bean.closeAllConnections();
  870: 			destBean.closeAllConnections();
  871: 			fmInstance.dispose();
  872: 			System.exit(0);
  873: 
  874: 		}
  875: 
  876: 	}
  877: 	/**
  878: 	 * 
  879: 	 */
  880: 	protected void synchronize()
  881: 	{
  882: 		Vector vectors[] = getListFromTable();
  883: 		Convert.user = bean.user;
  884: 		Convert.passwd = bean.passwd;
  885: 		Convert.userDest = destBean.user;
  886: 		Convert.passwdDest = destBean.passwd;
  887: 		try
  888: 		{
  889: 
  890: 			fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
  891: 			fmInstance.setEnabled(false);
  892: 			// TODO indexList vector weiter reichen
  893: 			Convert.synchronize(bean.url, destURLBox.getSelectedItem().toString(), vectors[0], vectors[1], vectors[2], vectors[3], vectors[4], mode, delimiter, new Vector());
  894: 
  895: 			destBean.setConnection((String) destURLBox.getSelectedItem());
  896: 			DefaultListModel model = new DefaultListModel();
  897: 			tables = destBean.getTableNames();
  898: 			for (int j = 0; j < tables.size(); ++j)
  899: 				model.addElement(tables.get(j));
  900: 			if (debug)
  901: 				System.out.println("hallo" + tables + " ");
  902: 			tListDest.setModel(model);
  903: 			fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  904: 		}
  905: 		catch (Exception e4)
  906: 		{
  907: 			ByteArrayOutputStream b = new ByteArrayOutputStream();
  908: 			PrintStream stream = new PrintStream(b);
  909: 			e4.printStackTrace(stream);
  910: 			showErrorDialog(b.toString(), "Synchronize of table failed");
  911: 			fmInstance.setEnabled(true);
  912: 		}
  913: 
  914: 	}
  915: 	/**
  916: 	 * Updates the content of source to destination and makes new table if
  917: 	 * necessary
  918: 	 */
  919: 
  920: 	public void update()
  921: 	{
  922: 		Vector vectors[] = getListFromTable();
  923: 		Convert.user = bean.user;
  924: 		Convert.passwd = bean.passwd;
  925: 		Convert.userDest = destBean.user;
  926: 		Convert.passwdDest = destBean.passwd;
  927: 		try
  928: 		{
  929: 
  930: 			fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
  931: 			fmInstance.setEnabled(false);
  932: 			Convert.update(bean.url, destURLBox.getSelectedItem().toString(), vectors[0], vectors[1], vectors[2], vectors[3], vectors[4], mode);
  933: 
  934: 			destBean.setConnection((String) destURLBox.getSelectedItem());
  935: 			DefaultListModel model = new DefaultListModel();
  936: 			tables = destBean.getTableNames();
  937: 			for (int j = 0; j < tables.size(); ++j)
  938: 				model.addElement(tables.get(j));
  939: 			if (debug)
  940: 				System.out.println("hallo" + tables + " ");
  941: 			tListDest.setModel(model);
  942: 			fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  943: 		}
  944: 		catch (Exception e4)
  945: 		{
  946: 			ByteArrayOutputStream b = new ByteArrayOutputStream();
  947: 			PrintStream stream = new PrintStream(b);
  948: 			e4.printStackTrace(stream);
  949: 			showErrorDialog(b.toString(), "Update of table failed");
  950: 			fmInstance.setEnabled(true);
  951: 		}
  952: 
  953: 	}
  954: 	public void delete()
  955: 	{
  956: 		Vector vectors[] = getListFromTable();
  957: 		Convert.user = bean.user;
  958: 		Convert.passwd = bean.passwd;
  959: 		Convert.userDest = destBean.user;
  960: 		Convert.passwdDest = destBean.passwd;
  961: 		try
  962: 		{
  963: 
  964: 			fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
  965: 			fmInstance.setEnabled(false);
  966: 			Convert.delete(bean.url, destURLBox.getSelectedItem().toString(), vectors[0], vectors[1], vectors[2], vectors[3], vectors[4], mode);
  967: 
  968: 			destBean.setConnection((String) destURLBox.getSelectedItem());
  969: 			DefaultListModel model = new DefaultListModel();
  970: 			tables = destBean.getTableNames();
  971: 			for (int j = 0; j < tables.size(); ++j)
  972: 				model.addElement(tables.get(j));
  973: 			if (debug)
  974: 				System.out.println("hallo" + tables + " ");
  975: 			tListDest.setModel(model);
  976: 			fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  977: 		}
  978: 		catch (Exception e4)
  979: 		{
  980: 			ByteArrayOutputStream b = new ByteArrayOutputStream();
  981: 			PrintStream stream = new PrintStream(b);
  982: 			e4.printStackTrace(stream);
  983: 			showErrorDialog(b.toString(), "Delete of table failed");
  984: 			fmInstance.setEnabled(true);
  985: 		}
  986: 
  987: 	}
  988: 
  989: 	/**
  990: 	 * Copys the content of source to destination and makes new table if necessary
  991: 	 */
  992: 	public void convert()
  993: 	{
  994: 
  995: 		Vector vectors[] = getListFromTable();
  996: 		Convert.user = bean.user;
  997: 		Convert.passwd = bean.passwd;
  998: 		Convert.userDest = destBean.user;
  999: 		Convert.passwdDest = destBean.passwd;
 1000: 		try
 1001: 		{
 1002: 			fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
 1003: 			fmInstance.setEnabled(false);
 1004: 			Convert.convert(bean.url, destURLBox.getSelectedItem().toString(), vectors[0], vectors[1], vectors[2], vectors[3], vectors[4], mode, delimiter);
 1005: 			destBean.setConnection((String) destURLBox.getSelectedItem());
 1006: 			DefaultListModel model = new DefaultListModel();
 1007: 			tables = destBean.getTableNames();
 1008: 			for (int j = 0; j < tables.size(); ++j)
 1009: 				model.addElement(tables.get(j));
 1010: 			if (debug)
 1011: 				System.out.println("hallo" + tables + " ");
 1012: 			tListDest.setModel(model);
 1013: 			fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
 1014: 		}
 1015: 		catch (Exception e4)
 1016: 		{
 1017: 			ByteArrayOutputStream b = new ByteArrayOutputStream();
 1018: 			PrintStream stream = new PrintStream(b);
 1019: 			e4.printStackTrace(stream);
 1020: 			showErrorDialog(b.toString(), "Conversion of table failed");
 1021: 			fmInstance.setEnabled(true);
 1022: 		}
 1023: 	}
 1024: 	public void writeConfig(String file)
 1025: 	{
 1026: 		fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
 1027: 		fmInstance.setEnabled(false);
 1028: 
 1029: 		Vector vectors[] = getListFromTable();
 1030: 		if (convertItem.isSelected())
 1031: 			mode = Convert.DataBase.CONVERT_MODE;
 1032: 		else if (appendItem.isSelected())
 1033: 			mode = Convert.DataBase.APPEND_MODE;
 1034: 		else if (updateItem.isSelected())
 1035: 			mode = Convert.DataBase.UPDATE_MODE;
 1036: 		else if (deleteItem.isSelected())
 1037: 			mode = Convert.DataBase.DELETE_MODE;
 1038: 		else if (synchronizeItem.isSelected())
 1039: 			mode = Convert.DataBase.SYNCHRONIZE_MODE;
 1040: 
 1041: 		// TODO add id vector in table and write it out
 1042: 		Convert.DataBase source = new Convert.DataBase(bean, vectors[0], vectors[1], vectors[2], vectors[3], vectors[4], mode);
 1043: 		Convert.DataBase destination = new Convert.DataBase(destBean, new Vector(), new Vector(), new Vector(), new Vector(), new Vector(), -1);
 1044: 		source.delimiter = delimiter;
 1045: 		source.useNormanToUnicodeMapper = useNormanToUnicodeMapper.isSelected();
 1046: 		try
 1047: 		{
 1048: 			Convert.writeConfig(file, source, destination);
 1049: 			fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
 1050: 			fmInstance.setEnabled(true);
 1051: 
 1052: 		}
 1053: 		catch (Exception e)
 1054: 		{
 1055: 			fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
 1056: 			fmInstance.setEnabled(true);
 1057: 
 1058: 			ByteArrayOutputStream b = new ByteArrayOutputStream();
 1059: 			PrintStream stream = new PrintStream(b);
 1060: 			e.printStackTrace(stream);
 1061: 			showErrorDialog(b.toString(), "Error while writing xml config  !");
 1062: 		}
 1063: 
 1064: 	}
 1065: 	public void readXMLConfig(String file)
 1066: 	{
 1067: 
 1068: 		try
 1069: 		{
 1070: 			fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
 1071: 			fmInstance.setEnabled(false);
 1072: 			StringBuffer sb=Convert.readXMLFile(file);
 1073: 			Vector databases = Convert.getXMLConfig(sb);
 1074: 			Convert.DataBase destBase = (Convert.DataBase) databases.lastElement();
 1075: 			// destBase.bean.getConnection();
 1076: 			noUserUpdate = true;
 1077: 			destBean = destBase.bean;
 1078: 			Object destObj = destBean.url;
 1079: 			((DefaultComboBoxModel) destURLBox.getModel()).removeElement(destObj);
 1080: 			((DefaultComboBoxModel) destURLBox.getModel()).insertElementAt(destObj, 0);
 1081: 			destURLBox.setSelectedItem(destObj);
 1082: 			databases.remove(destBase);
 1083: 			for (Iterator iter = databases.iterator(); iter.hasNext();)
 1084: 			{
 1085: 				Convert.DataBase database = (Convert.DataBase) iter.next();
 1086: 
 1087: 				if (database.mode == Convert.DataBase.CONVERT_MODE)
 1088: 				{
 1089: 					convertItem.doClick();
 1090: 				}
 1091: 				else if (database.mode == Convert.DataBase.APPEND_MODE)
 1092: 				{
 1093: 					appendItem.doClick();
 1094: 				}
 1095: 				else if (database.mode == Convert.DataBase.UPDATE_MODE)
 1096: 				{
 1097: 					updateItem.doClick();
 1098: 				}
 1099: 				else if (database.mode == Convert.DataBase.DELETE_MODE)
 1100: 				{
 1101: 					deleteItem.doClick();
 1102: 				}
 1103: 				else if (database.mode == Convert.DataBase.SYNCHRONIZE_MODE)
 1104: 				{
 1105: 					synchronizeItem.doClick();
 1106: 				}
 1107: 
 1108: 				delimiter = database.delimiter;
 1109: 				database.bean.getConnection();
 1110: 
 1111: 				bean = database.bean;
 1112: 				if (bean.isUseNormanToUnicodeMapper())
 1113: 					useNormanToUnicodeMapper.setSelected(true);
 1114: 				Object obj = bean.url;
 1115: 				((DefaultComboBoxModel) sourceURLBox.getModel()).removeElement(obj);
 1116: 				((DefaultComboBoxModel) sourceURLBox.getModel()).insertElementAt(obj, 0);
 1117: 				sourceURLBox.setSelectedItem(obj);
 1118: 				fillTable();
 1119: 				Vector tables = database.bean.getTableNames();
 1120: 				Collections.sort(tables, String.CASE_INSENSITIVE_ORDER);
 1121: 				int[] indices = new int[database.tables.size()];
 1122: 				for (int i = 0; i < database.tables.size(); ++i)
 1123: 				{
 1124: 					String table = (String) database.tables.get(i);
 1125: 					int index = tables.indexOf(table);
 1126: 					if (index < 0)
 1127: 						throw new RuntimeException("Error table \"" + table + "\" does no longer exist\n at server " + bean.url + "\n or you mispelled the tablename.");
 1128: 					noDBUpdate = true;
 1129: 					tC.tableModel.setValueAt(new TableComponent.SQLCommand(database.selects.get(i).toString()), index, SELECT_INDEX);
 1130: 
 1131: 					String create = database.creates.get(i).toString();
 1132: 					tC.tableModel.setValueAt(new TableComponent.SQLCommand(create.equals("") ? create : "           " + create), index, CREATE_INDEX);
 1133: 					// tC.tableModel.setValueAt(new
 1134: 					// TableComponent.SQLCommand(bean.ids.get(i).toString()),index,ID_INDEX);
 1135: 
 1136: 					Object comboBox = tC.tableModel.getValueAt(index, LAYOUT_INDEX);
 1137: 					Object idcomboBox = tC.tableModel.getValueAt(index, ID_INDEX);
 1138: 
 1139: 					indices[i] = index;
 1140: 					if (comboBox != null)
 1141: 					{
 1142: 						String layout = database.layouts.get(i).toString();
 1143: 						((JComboBox) comboBox).setSelectedItem(layout);
 1144: 						if (layout != "")
 1145: 						{
 1146: 							bean.makeQuery("select * from" + bean.getQC() + table + bean.getQC() + " layout " + bean.getQC() + layout + bean.getQC(), 1);
 1147: 
 1148: 							Vector idVec = bean.getColumnNames();
 1149: 							if (idVec == null)
 1150: 								idVec = new Vector();
 1151: 							idVec.add(0, "");
 1152: 							((JComboBox) idcomboBox).setModel(new DefaultComboBoxModel(idVec));
 1153: 						}
 1154: 
 1155: 					}
 1156: 					if (idcomboBox != null)
 1157: 						((JComboBox) idcomboBox).setSelectedItem(bean.ids.get(i));
 1158: 					tC.tableModel.fireTableDataChanged();
 1159: 					noDBUpdate = false;
 1160: 					noUserUpdate = false;
 1161: 
 1162: 				}
 1163: 				// add Selections
 1164: 				ListSelectionModel lm = tC.table.getSelectionModel();
 1165: 				for (int i = 0; i < indices.length; ++i)
 1166: 				{
 1167: 					lm.addSelectionInterval(indices[i], indices[i]);
 1168: 					tC.tableModel.setValueAt(Boolean.TRUE, indices[i], STATUS_INDEX);
 1169: 				}
 1170: 				destBean.getConnection();
 1171: 
 1172: 				DefaultListModel model = new DefaultListModel();
 1173: 				tables = destBean.getTableNames();
 1174: 				for (int j = 0; j < tables.size(); ++j)
 1175: 					model.addElement(tables.get(j));
 1176: 				// System.out.println("hallo" + tables + " ");
 1177: 				tListDest.setModel(model);
 1178: 				fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
 1179: 				fmInstance.setEnabled(true);
 1180: 
 1181: 			}
 1182: 
 1183: 		}
 1184: 		catch (Exception e)
 1185: 		{
 1186: 			noUserUpdate = false;
 1187: 			noDBUpdate = false;
 1188: 			fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
 1189: 			fmInstance.setEnabled(true);
 1190: 
 1191: 			ByteArrayOutputStream b = new ByteArrayOutputStream();
 1192: 			PrintStream stream = new PrintStream(b);
 1193: 			e.printStackTrace(stream);
 1194: 			showErrorDialog(b.toString(), "Error while reading xml config  !");
 1195: 		}
 1196: 
 1197: 	}
 1198: 	public boolean showTable(int list)
 1199: 	{
 1200: 		ProgressDialog dialog = new ProgressDialog(fm, bean);
 1201: 		dialog.setTitle("Preparing tables to be displayed");
 1202: 		dialog.thread = Thread.currentThread();
 1203: 		dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
 1204: 		fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
 1205: 		String query = new String();
 1206: 		Object[] objs = tListDest.getSelectedValues();
 1207: 		Vector[] vectors = (list == 0) ? getListFromTable() : null;
 1208: 		Vector tables = (list == 0) ? vectors[0] : new Vector();
 1209: 		if (list > 0)
 1210: 			for (int i = 0; i < objs.length; ++i)
 1211: 			{
 1212: 				if (debug)
 1213: 					System.out.println(objs[i]);
 1214: 				tables.add(objs[i]);
 1215: 			}
 1216: 		if (window != null)
 1217: 			window.dispose();
 1218: 		if (windowDest != null)
 1219: 			windowDest.dispose();
 1220: 
 1221: 		window = new MultiResultWindow(fm);
 1222: 		if (list > 0)
 1223: 		{
 1224: 			windowDest = new MultiResultWindow(fm);
 1225: 			window = windowDest;
 1226: 		}
 1227: 		dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x + (FM2SQL.fmInstance.getWidth() - 500) / 2, FM2SQL.fmInstance.getLocationOnScreen().y + (FM2SQL.fmInstance.getHeight() - 250) / 2);
 1228: 		dialog.setSize(500, 250);
 1229: 		if (!tables.isEmpty())
 1230: 			dialog.setVisible(true);
 1231: 		dialog.title.setText("Preparing tables to be diplayed");
 1232: 		for (int i = 0; i < tables.size(); ++i)
 1233: 		{
 1234: 			dialog.table.setText("Getting table " + tables.get(i));
 1235: 			dialog.status.setText("Table " + (i + 1) + " of " + tables.size());
 1236: 
 1237: 			if (list == 0)
 1238: 				query = "select * from " + bean.getQC() + tables.get(i).toString() + bean.getQC();
 1239: 			else
 1240: 				query = "select * from " + destBean.getQC() + tables.get(i).toString() + destBean.getQC();
 1241: 			if (list == 0)
 1242: 				query = vectors[2].get(i).toString();
 1243: 			if (list == 0 && vectors[1].get(i) != null)
 1244: 				if (vectors[1].get(i).toString() != "")
 1245: 				{
 1246: 					String layout = " layout " + bean.getQC() + vectors[1].get(i).toString() + bean.getQC();
 1247: 					String name = tables.get(i).toString();
 1248: 					StringBuffer queryLayout = new StringBuffer(query);
 1249: 					queryLayout.insert(queryLayout.indexOf(name) + name.length() + 1, " " + layout);
 1250: 					query = queryLayout.toString();
 1251: 				}
 1252: 			if (debug)
 1253: 				showErrorDialog("query in show tables is " + query, "Hello");
 1254: 			window.title = " Table ;-) " + (String) tables.get(i);
 1255: 			// break;
 1256: 			// } else
 1257: 			// window.title = "Error! - No valid tablename found";
 1258: 
 1259: 			try
 1260: 			{
 1261: 				if ((query.toLowerCase().indexOf("insert") >= 0) || (query.toLowerCase().indexOf("delete") >= 0) || (query.toLowerCase().indexOf("alter") >= 0) || (query.toLowerCase().indexOf("update") >= 0))
 1262: 				{
 1263: 					Statement stm = (list > 0) ? destBean.getConnection().createStatement() : bean.getConnection().createStatement();
 1264: 					stm.executeUpdate(query);
 1265: 					Vector vec = new Vector();
 1266: 					Vector vec2 = new Vector();
 1267: 					Vector vec3 = new Vector();
 1268: 					vec2.add(query);
 1269: 					vec3.add(vec2);
 1270: 					vec.add("Insert, update, etc done! No results available");
 1271: 					// vec.add("no Results were produced");
 1272: 
 1273: 					window.updateResult(vec3, vec);
 1274: 					// window.pack();
 1275: 					// window.setVisible(true);
 1276: 
 1277: 				}
 1278: 				else
 1279: 				{
 1280: 					Vector[] vecs = (list > 0) ? destBean.getQueryData(query, dialog, 50) : bean.getQueryData(query, dialog, 50);
 1281: 					if (vecs[1].isEmpty())
 1282: 						throw new Exception("Wrong columnname or Empty Layout");
 1283: 					window.updateResult(vecs[0], vecs[1]);
 1284: 
 1285: 					// window.pack();
 1286: 					// String name = window.writeResult();
 1287: 					// appendLog(window.title, name);
 1288: 				}
 1289: 
 1290: 				// window.setVisible(true);
 1291: 
 1292: 			}
 1293: 			catch (Exception e)
 1294: 			{
 1295: 				System.out.println("Exception occured");
 1296: 				e.printStackTrace();
 1297: 				Vector vec = new Vector();
 1298: 				Vector vec2 = new Vector();
 1299: 				Vector vec3 = new Vector();
 1300: 				vec2.add(e.getMessage());
 1301: 				vec3.add(vec2);
 1302: 				vec.add("Exception occured! No results available");
 1303: 				// vec.add("no Results were produced");
 1304: 
 1305: 				window.updateResult(vec3, vec);
 1306: 				// window.pack();
 1307: 				// window.setVisible(true);
 1308: 				fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
 1309: 
 1310: 			}
 1311: 		} // to for
 1312: 		window.pack();
 1313: 		window.setSize(700, 600);
 1314: 
 1315: 		window.oldTabCount = 10000;
 1316: 		dialog.dispose();
 1317: 		fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
 1318: 
 1319: 		return !tables.isEmpty();
 1320: 
 1321: 	}
 1322: 
 1323: 	public void dropTable()
 1324: 	{
 1325: 		String query = new String();
 1326: 		Object[] objs = tListDest.getSelectedValues();
 1327: 		Vector tables = new Vector();
 1328: 		for (int i = 0; i < objs.length; ++i)
 1329: 		{
 1330: 			System.out.println(objs[i]);
 1331: 			tables.add(objs[i]);
 1332: 		}
 1333: 
 1334: 		for (int i = 0; i < tables.size(); ++i)
 1335: 		{
 1336: 
 1337: 			query = "drop table " + destBean.getQC() + tables.get(i) + destBean.getQC();
 1338: 
 1339: 			try
 1340: 			{
 1341: 				Statement stm = destBean.getConnection().createStatement();
 1342: 				stm.executeUpdate(query);
 1343: 			}
 1344: 			catch (Exception e)
 1345: 			{
 1346: 				ByteArrayOutputStream b = new ByteArrayOutputStream();
 1347: 				PrintStream stream = new PrintStream(b);
 1348: 				e.printStackTrace(stream);
 1349: 				showErrorDialog(b.toString(), "Open of table failed");
 1350: 
 1351: 			}
 1352: 		} // to for
 1353: 		try
 1354: 		{
 1355: 			destBean.setConnection((String) destURLBox.getSelectedItem());
 1356: 			DefaultListModel model = new DefaultListModel();
 1357: 			tables = destBean.getTableNames();
 1358: 			for (int j = 0; j < tables.size(); ++j)
 1359: 				model.addElement(tables.get(j));
 1360: 			System.out.println("hallo" + tables + " ");
 1361: 			tListDest.setModel(model);
 1362: 		}
 1363: 		catch (Exception e4)
 1364: 		{
 1365: 		}
 1366: 
 1367: 	}
 1368: 	/**
 1369: 	 * invoked then the user changes the table or the tableModel changes
 1370: 	 */
 1371: 	public void tableChanged(TableModelEvent e)
 1372: 	{
 1373: 		// if (e.getType() == e.INSERT)
 1374: 		// System.out.println("Insert done");
 1375: 		// if (e.getType() == e.UPDATE)
 1376: 		// System.out.println("Update done");
 1377: 		// if (e.getType() == e.DELETE)
 1378: 		// System.out.println("Delete done");
 1379: 		if (e.getType() == TableModelEvent.UPDATE && !noDBUpdate)
 1380: 		{
 1381: 			int row = e.getFirstRow(), col = e.getColumn();
 1382: 			System.out.println("Got in " + row + " " + col);
 1383: 			TableModel model = (TableModel) e.getSource();
 1384: 			String columnName = model.getColumnName(col);
 1385: 			Object test = model.getValueAt(row, col);
 1386: 			String idVal = (test == null) ? "" : test.toString();
 1387: 			String value = (test == null) ? "" : test.toString();
 1388: 			;
 1389: 
 1390: 			System.out.println("Got in " + columnName + " " + idVal);
 1391: 			try
 1392: 			{
 1393: 				if (columnName.equals("select") || columnName.equals("Layouts"))
 1394: 				{
 1395: 					String table = model.getValueAt(row, NAME_INDEX).toString();
 1396: 					String layout = (model.getValueAt(row, LAYOUT_INDEX) != null) ? ((JComboBox) model.getValueAt(row, LAYOUT_INDEX)).getSelectedItem().toString() : "";
 1397: 					String query = model.getValueAt(row, SELECT_INDEX).toString();
 1398: 					String create = model.getValueAt(row, CREATE_INDEX).toString();
 1399: 					String id = (model.getValueAt(row, ID_INDEX) != null) ? ((JComboBox) model.getValueAt(row, ID_INDEX)).getSelectedItem().toString() : "";
 1400: 
 1401: 					System.out.println("table" + table + " layout " + layout + " query " + query);
 1402: 					if (!create.equals(""))
 1403: 					{
 1404: 						Object[] options =
 1405: 						{"Yes", "No"};
 1406: 						int option = showDialog("Create Statement not empty! Do you want to overwrite?", "create statement", options);
 1407: 						if (option == 0)
 1408: 							model.setValueAt(createStatement(table, destBean, layout, query), row, CREATE_INDEX);
 1409: 					}
 1410: 					if (columnName.equals("Layouts"))
 1411: 					{
 1412: 
 1413: 						bean.makeQuery("select * from" + bean.getQC() + table + bean.getQC() + " layout " + bean.getQC() + layout + bean.getQC(), 1);
 1414: 
 1415: 						Vector idVec = bean.getColumnNames();
 1416: 						if (idVec == null)
 1417: 							idVec = new Vector();
 1418: 						idVec.add(0, "");
 1419: 						JComboBox box = ((JComboBox) model.getValueAt(row, ID_INDEX));
 1420: 						box.setModel(new DefaultComboBoxModel(idVec));
 1421: 						box.setSelectedItem(id);
 1422: 
 1423: 						tC.tableModel.fireTableCellUpdated(row, ID_INDEX);
 1424: 					}
 1425: 
 1426: 				}
 1427: 				/*
 1428: 				 * Statement stm = bean.getConnection().createStatement(); //
 1429: 				 * stm.executeUpdate("DELETE FROM \""+fm.tables.get(0)+"\" WHERE
 1430: 				 * \"erstellt von\"='rogo') ");
 1431: 				 * 
 1432: 				 * if (idVal == "") stm.executeUpdate("INSERT INTO " + DBBean.quoteChar +
 1433: 				 * box.getSelectedItem() + DBBean.quoteChar + " (" + DBBean.quoteChar +
 1434: 				 * columnName + DBBean.quoteChar + ") VALUES ('" + value + "') "); else
 1435: 				 * stm.executeUpdate( "UPDATE " + DBBean.quoteChar +
 1436: 				 * box.getSelectedItem() + DBBean.quoteChar + " SET " + DBBean.quoteChar +
 1437: 				 * columnName + DBBean.quoteChar + "='" + value + "' WHERE ID='" + idVal + "'
 1438: 				 * ");
 1439: 				 */
 1440: 			}
 1441: 			catch (Exception e2)
 1442: 			{
 1443: 				fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
 1444: 				ByteArrayOutputStream b = new ByteArrayOutputStream();
 1445: 				PrintStream stream = new PrintStream(b);
 1446: 				e2.printStackTrace(stream);
 1447: 				showErrorDialog(b.toString(), "Error while updating table  !");
 1448: 			}
 1449: 		}
 1450: 	}
 1451: 
 1452: 	/**
 1453: 	 * initialize the menubar
 1454: 	 */
 1455: 	private void setMenu()
 1456: 	{
 1457: 		JMenuBar menubar = new JMenuBar();
 1458: 		JMenu menu = new JMenu("File");
 1459: 		menu.setMnemonic('F');
 1460: 		JMenuItem item = new JMenuItem("open XML Config");
 1461: 		item.setToolTipText("opens a XML config file for batch conversion");
 1462: 		item.setMnemonic('i');
 1463: 		item.setAccelerator(KeyStroke.getKeyStroke('O', InputEvent.CTRL_DOWN_MASK));
 1464: 
 1465: 		item.addActionListener(fm);
 1466: 		menu.add(item);
 1467: 		item = new JMenuItem("save XML Config");
 1468: 		item.setToolTipText("saves the current selections in an XML config file for batch conversion");
 1469: 		item.setAccelerator(KeyStroke.getKeyStroke('S', InputEvent.CTRL_DOWN_MASK));
 1470: 		item.setMnemonic('x');
 1471: 
 1472: 		item.addActionListener(fm);
 1473: 		menu.add(item);
 1474: 		item = new JMenuItem("Quit");
 1475: 		item.setMnemonic('Q');
 1476: 		item.setToolTipText("Quits the application");
 1477: 		item.setAccelerator(KeyStroke.getKeyStroke('Q', InputEvent.CTRL_DOWN_MASK));
 1478: 		item.addActionListener(fm);
 1479: 		menu.add(item);
 1480: 
 1481: 		menubar.add(menu);
 1482: 		menu = new JMenu("Options");
 1483: 		menu.setMnemonic('O');
 1484: 
 1485: 		ButtonGroup bgrp = new ButtonGroup();
 1486: 		convertItem = new JCheckBoxMenuItem("Convert Mode");
 1487: 		convertItem.setToolTipText("Normal table conversion  existing table will be deleted");
 1488: 		convertItem.addActionListener(fm);
 1489: 
 1490: 		bgrp.add(convertItem);
 1491: 
 1492: 		menu.add(convertItem);
 1493: 		menubar.add(menu);
 1494: 
 1495: 		appendItem = new JCheckBoxMenuItem("Append Mode");
 1496: 		appendItem.setToolTipText("Appends data to an existing table");
 1497: 		appendItem.addActionListener(fm);
 1498: 
 1499: 		bgrp.add(appendItem);
 1500: 
 1501: 		menu.add(appendItem);
 1502: 		menubar.add(menu);
 1503: 
 1504: 		updateItem = new JCheckBoxMenuItem("Update Mode");
 1505: 		updateItem.setToolTipText("Updates data in an existing table");
 1506: 		updateItem.addActionListener(fm);
 1507: 
 1508: 		bgrp.add(updateItem);
 1509: 
 1510: 		menu.add(updateItem);
 1511: 		deleteItem = new JCheckBoxMenuItem("Delete Mode");
 1512: 		deleteItem.setToolTipText("Deletes data in an existing table \n that has been deleted in source table");
 1513: 		deleteItem.addActionListener(fm);
 1514: 
 1515: 		bgrp.add(deleteItem);
 1516: 
 1517: 		menu.add(deleteItem);
 1518: 		synchronizeItem = new JCheckBoxMenuItem("Synchronize Mode");
 1519: 		synchronizeItem.setToolTipText("Synchronizes data with an existing table \n Data wich has been added or removed will be deleted or addded to the destination table. The rest will be updated");
 1520: 		synchronizeItem.addActionListener(fm);
 1521: 
 1522: 		bgrp.add(synchronizeItem);
 1523: 
 1524: 		menu.add(synchronizeItem);
 1525: 		useNormanToUnicodeMapper = new JCheckBoxMenuItem("use NormanToUnicodeMapper");
 1526: 		useNormanToUnicodeMapper.setToolTipText("maps characters in norman encoding to unicode characters");
 1527: 		useNormanToUnicodeMapper.addActionListener(fm);
 1528: 		menu.add(useNormanToUnicodeMapper);
 1529: 
 1530: 		menubar.add(menu);
 1531: 		item = new JMenuItem("show Driver features");
 1532: 		item.setToolTipText("shows the features of the selected driver");
 1533: 		item.addActionListener(fm);
 1534: 		menu.add(item);
 1535: 		menubar.add(menu);
 1536: 		delimiterItem = new JMenuItem("Delimiter");
 1537: 		delimiterItem.setToolTipText("Delimiter for FM Arrayfields");
 1538: 		delimiterItem.addActionListener(fm);
 1539: 		menu.add(delimiterItem);
 1540: 		menubar.add(menu);
 1541: 
 1542: 		// item.addActionListener(fm);
 1543: 		// menu.add(item);
 1544: 
 1545: 		menubar.add(menu);
 1546: 
 1547: 		menu.setBackground(fm.getBackground());
 1548: 		menubar.setBackground(fm.getBackground());
 1549: 		convertItem.doClick();
 1550: 		setJMenuBar(menubar);
 1551: 	}
 1552: 	/**
 1553: 	 * open the log file (index.html)
 1554: 	 */
 1555: 
 1556: 	public static void openLog() throws Exception
 1557: 	{
 1558: 
 1559: 		StringBuffer buff = new StringBuffer();
 1560: 		buff.append("<html>");
 1561: 		buff.append("<head>");
 1562: 		buff.append("\n<title>");
 1563: 		buff.append("FileMaker Test");
 1564: 		buff.append("</title>\n");
 1565: 		buff.append("</head>\n");
 1566: 
 1567: 		buff.append("<body>\n");
 1568: 		buff.append("<center>\n");
 1569: 		buff.append("\n<h3>");
 1570: 		buff.append("FileMaker Test");
 1571: 		buff.append("</h3>\n");
 1572: 
 1573: 		logFile.write(TableComponent.convertUml(buff).toString());
 1574: 		logFile.flush();
 1575: 	}
 1576: 	/**
 1577: 	 * Append one entry to the log file(index.html)
 1578: 	 */
 1579: 	public static void appendLog(String entry, String name) throws Exception
 1580: 	{
 1581: 		logFile.write("<a href=\"./" + name.substring(name.lastIndexOf("/") + 1) + "\">");
 1582: 		logFile.write(entry + "</a>");
 1583: 		logFile.write("<br>\n<br>\n");
 1584: 		logFile.flush();
 1585: 	}
 1586: 	/**
 1587: 	 * closes the log file invoked then the application closes
 1588: 	 */
 1589: 	public static void closeLog() throws Exception
 1590: 	{
 1591: 		logFile.write("\n</body>");
 1592: 		logFile.write("\n</html>");
 1593: 
 1594: 		logFile.close();
 1595: 	}
 1596: 	public static void showErrorDialog(String message, String title)
 1597: 	{
 1598: 		JDialog dialog = new JDialog(fmInstance);
 1599: 		dialog.setTitle(title);
 1600: 		JTextArea text = new JTextArea();
 1601: 		JScrollPane scroller = new JScrollPane(text);
 1602: 		dialog.getContentPane().add(scroller);
 1603: 		text.append(message);
 1604: 		dialog.setSize(600, 300);
 1605: 		dialog.setLocationRelativeTo(fmInstance);
 1606: 		dialog.setVisible(true);
 1607: 		// JOptionPane.showMessageDialog(null, message, title,
 1608: 		// JOptionPane.ERROR_MESSAGE);
 1609: 	}
 1610: 	public static class ProgressDialog extends JDialog
 1611: 	{
 1612: 		JLabel table = new JLabel("    ");
 1613: 		JLabel status = new JLabel("    ");
 1614: 		JLabel title = new JLabel("     ");
 1615: 		JPanel content = new JPanel();
 1616: 		JPanel titlePanel = new JPanel();
 1617: 		JPanel labelPanel = new JPanel();
 1618: 		JPanel statusPanel = new JPanel();
 1619: 		JPanel buttonPanel = new JPanel();
 1620: 
 1621: 		JProgressBar progress = new JProgressBar();
 1622: 		JButton cancel = new JButton("Cancel");
 1623: 		Thread thread;
 1624: 		DBBean bean;
 1625: 		public ProgressDialog(JFrame frame, DBBean bean)
 1626: 		{
 1627: 			super(frame);
 1628: 			this.bean = bean;
 1629: 
 1630: 			content = new JPanel(true);
 1631: 			// content.setBorder(BorderFactory.createRaisedBevelBorder());
 1632: 			content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
 1633: 			title = new JLabel("Progress of conversion");
 1634: 			title.setHorizontalTextPosition(SwingConstants.CENTER);
 1635: 			titlePanel.add(title);
 1636: 			buttonPanel.add(cancel);
 1637: 			// content.add(titlePanel);
 1638: 			content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
 1639: 			content.add(labelPanel);
 1640: 			content.add(new JLabel(""));
 1641: 			content.add(progress);
 1642: 			content.add(statusPanel);
 1643: 			content.add(buttonPanel);
 1644: 			content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
 1645: 			labelPanel.add(table);
 1646: 			statusPanel.add(status);
 1647: 			getContentPane().add(titlePanel, "North");
 1648: 			getContentPane().add(content, "Center");
 1649: 			this.addWindowListener(new WindowAdapter()
 1650: 			{
 1651: 				public void windowClosing(WindowEvent e)
 1652: 				{
 1653: 					cancel.doClick();
 1654: 				}
 1655: 			});
 1656: 
 1657: 			cancel.addActionListener(new ActionListener()
 1658: 			{
 1659: 				public void actionPerformed(ActionEvent e)
 1660: 				{
 1661: 					fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
 1662: 					fmInstance.setEnabled(true);
 1663: 					setVisible(false);
 1664: 					try
 1665: 					{
 1666: 						ProgressDialog.this.bean.getConnection().close();
 1667: 					}
 1668: 					catch (SQLException e1)
 1669: 					{
 1670: 						// TODO Auto-generated catch block
 1671: 						e1.printStackTrace();
 1672: 					}
 1673: 					catch (Exception e1)
 1674: 					{
 1675: 						// TODO Auto-generated catch block
 1676: 						e1.printStackTrace();
 1677: 					}
 1678: 					thread.stop();
 1679: 				}
 1680: 			});
 1681: 			pack();
 1682: 
 1683: 		}
 1684: 
 1685: 	}
 1686: 	public static class DelimiterDialog extends JDialog
 1687: 	{
 1688: 		JLabel table = new JLabel("    ");
 1689: 		JLabel status = new JLabel("    ");
 1690: 		JLabel title = new JLabel("     ");
 1691: 		JPanel content = new JPanel();
 1692: 		JPanel titlePanel = new JPanel();
 1693: 		JPanel delimiterPanel = new JPanel();
 1694: 		JPanel buttonPanel = new JPanel();
 1695: 		JTextField delimiter = new JTextField(10);
 1696: 
 1697: 		JButton cancel = new JButton("Cancel");
 1698: 		JButton ok = new JButton("Ok");
 1699: 		Thread thread;
 1700: 		public DelimiterDialog(JFrame frame)
 1701: 		{
 1702: 			super(frame);
 1703: 			setTitle("Delimiter Editor");
 1704: 			setModal(true);
 1705: 			content = new JPanel(true);
 1706: 			delimiter.setText(fmInstance.delimiter);
 1707: 			ActionListener al = new ActionListener()
 1708: 			{
 1709: 				public void actionPerformed(ActionEvent e)
 1710: 				{
 1711: 					fmInstance.delimiter = parseDelimiter(delimiter.getText());
 1712: 					setVisible(false);
 1713: 				}
 1714: 
 1715: 			};
 1716: 			this.addWindowListener(new WindowAdapter()
 1717: 			{
 1718: 				public void windowClosing(WindowEvent e)
 1719: 				{
 1720: 					cancel.doClick();
 1721: 				}
 1722: 			});
 1723: 
 1724: 			// delimiter.setText(fmInstance.delimiter);
 1725: 			delimiter.addActionListener(al);
 1726: 			content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
 1727: 			title = new JLabel("Enter Delimiter ");
 1728: 			title.setHorizontalTextPosition(SwingConstants.CENTER);
 1729: 			titlePanel.add(title);
 1730: 			buttonPanel.add(ok);
 1731: 			buttonPanel.add(cancel);
 1732: 			content.add(titlePanel);
 1733: 			content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
 1734: 
 1735: 			content.add(new JLabel(""));
 1736: 			content.add(delimiterPanel);
 1737: 			content.add(buttonPanel);
 1738: 			content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
 1739: 
 1740: 			delimiterPanel.add(new JLabel("Delimiter:  "));
 1741: 			delimiterPanel.add(delimiter);
 1742: 			getContentPane().add(titlePanel, "North");
 1743: 			getContentPane().add(content, "Center");
 1744: 			ok.addActionListener(al);
 1745: 			cancel.addActionListener(new ActionListener()
 1746: 			{
 1747: 				public void actionPerformed(ActionEvent e)
 1748: 				{
 1749: 					fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
 1750: 					fmInstance.setEnabled(true);
 1751: 					setVisible(false);
 1752: 					// thread.stop();
 1753: 				}
 1754: 
 1755: 			});
 1756: 			pack();
 1757: 			setLocationRelativeTo(fmInstance);
 1758: 		}
 1759: 		public String parseDelimiter(Object o)
 1760: 		{
 1761: 			String str = o.toString();
 1762: 			StringBuffer sbuff = new StringBuffer();
 1763: 			int length = str.length();
 1764: 			for (int i = 0; i < length; ++i)
 1765: 			{
 1766: 
 1767: 				if (str.charAt(i) == '\\')
 1768: 				{
 1769: 					System.out.println(str.charAt(i));
 1770: 					if (str.charAt(i + 1) == 'r')
 1771: 					{
 1772: 						sbuff.append("\r");
 1773: 					}
 1774: 					if (str.charAt(i + 1) == 't')
 1775: 					{
 1776: 						sbuff.append("\t");
 1777: 					}
 1778: 					if (str.charAt(i + 1) == 'n')
 1779: 					{
 1780: 						sbuff.append("\n");
 1781: 					}
 1782: 					if (str.charAt(i + 1) == '\\')
 1783: 					{
 1784: 						sbuff.append("\\");
 1785: 					}
 1786: 
 1787: 					if (i < length - 1)
 1788: 						++i;
 1789: 
 1790: 				}
 1791: 				else
 1792: 					sbuff.append(str.charAt(i));
 1793: 			}
 1794: 
 1795: 			return sbuff.toString();
 1796: 		}
 1797: 	}
 1798: 
 1799: 	public static class PasswordDialog extends JDialog
 1800: 	{
 1801: 		JLabel table = new JLabel("    ");
 1802: 		JLabel status = new JLabel("    ");
 1803: 		JLabel title = new JLabel("     ");
 1804: 		JPanel content = new JPanel();
 1805: 		JPanel titlePanel = new JPanel();
 1806: 		JPanel userPanel = new JPanel();
 1807: 		JPanel passwordPanel = new JPanel();
 1808: 		JPanel buttonPanel = new JPanel();
 1809: 		JTextField user = new JTextField(10);
 1810: 		JTextField passwd = new JPasswordField(10);
 1811: 
 1812: 		JButton cancel = new JButton("Cancel");
 1813: 		JButton ok = new JButton("Ok");
 1814: 		DBBean bean = null;
 1815: 		Thread thread;
 1816: 		public PasswordDialog(JFrame frame, DBBean localBean)
 1817: 		{
 1818: 			super(frame);
 1819: 			setTitle("PasswordDialog");
 1820: 			setModal(true);
 1821: 			content = new JPanel(true);
 1822: 			this.bean = localBean;
 1823: 			// content.setBorder(BorderFactory.createRaisedBevelBorder());
 1824: 			ActionListener al = new ActionListener()
 1825: 			{
 1826: 				public void actionPerformed(ActionEvent e)
 1827: 				{
 1828: 					bean.setUserAndPasswd(user.getText(), passwd.getText());
 1829: 					setVisible(false);
 1830: 				}
 1831: 
 1832: 			};
 1833: 			this.addWindowListener(new WindowAdapter()
 1834: 			{
 1835: 				public void windowClosing(WindowEvent e)
 1836: 				{
 1837: 					cancel.doClick();
 1838: 				}
 1839: 			});
 1840: 
 1841: 			user.setText(localBean.user);
 1842: 			passwd.setText(localBean.passwd);
 1843: 			user.addActionListener(al);
 1844: 			passwd.addActionListener(al);
 1845: 			content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
 1846: 			title = new JLabel("Enter user and password ");
 1847: 			title.setHorizontalTextPosition(SwingConstants.CENTER);
 1848: 			titlePanel.add(title);
 1849: 			buttonPanel.add(ok);
 1850: 			buttonPanel.add(cancel);
 1851: 			content.add(titlePanel);
 1852: 			content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
 1853: 			// content.add(labelPanel);
 1854: 			content.add(new JLabel(""));
 1855: 			content.add(userPanel);
 1856: 			content.add(passwordPanel);
 1857: 			content.add(buttonPanel);
 1858: 			content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
 1859: 			// labelPanel.add(table);
 1860: 			userPanel.add(new JLabel("Username:  "));
 1861: 			userPanel.add(user);
 1862: 			passwordPanel.add(new JLabel("Password:  "));
 1863: 			passwordPanel.add(passwd);
 1864: 			passwd.setPreferredSize(user.getPreferredSize());
 1865: 			passwd.setMinimumSize(passwd.getPreferredSize());
 1866: 			passwd.setMaximumSize(passwd.getPreferredSize());
 1867: 			passwd.setSize(passwd.getPreferredSize());
 1868: 			getContentPane().add(titlePanel, "North");
 1869: 			getContentPane().add(content, "Center");
 1870: 			ok.addActionListener(al);
 1871: 			cancel.addActionListener(new ActionListener()
 1872: 			{
 1873: 				public void actionPerformed(ActionEvent e)
 1874: 				{
 1875: 					fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
 1876: 					fmInstance.setEnabled(true);
 1877: 					setVisible(false);
 1878: 					thread.stop();
 1879: 				}
 1880: 
 1881: 			});
 1882: 			pack();
 1883: 
 1884: 		}
 1885: 
 1886: 	}
 1887: 	public void fillTable()
 1888: 	{
 1889: 		noDBUpdate = true;
 1890: 		bean.setUseNormanToUnicodeMapper(useNormanToUnicodeMapper.isSelected());
 1891: 		Vector tableNames = bean.getTableNames();
 1892: 		Collections.sort(tableNames, String.CASE_INSENSITIVE_ORDER);
 1893: 		Vector[] data = new Vector[2];
 1894: 		data[1] = new Vector(6);
 1895: 		data[1].setSize(6);
 1896: 		data[1].set(STATUS_INDEX, " ");
 1897: 		data[1].set(NAME_INDEX, " source Tablename  ");
 1898: 		data[1].set(LAYOUT_INDEX, "Layouts");
 1899: 		data[1].set(SELECT_INDEX, "select");
 1900: 		data[1].set(CREATE_INDEX, "create");
 1901: 		data[1].set(ID_INDEX, " id ");
 1902: 		data[0] = new Vector();
 1903: 		for (int i = 0; i < tableNames.size(); i++)
 1904: 		{
 1905: 			String name = tableNames.get(i).toString();
 1906: 			Vector layouts = new Vector();
 1907: 			Vector idVec = new Vector();
 1908: 
 1909: 			try
 1910: 			{
 1911: 				bean.makeQuery("select * from" + bean.getQC() + name + bean.getQC(), 1);
 1912: 				layouts = bean.getLayoutNames(name);
 1913: 			}
 1914: 			catch (SQLException e)
 1915: 			{
 1916: 				layouts = new Vector();
 1917: 			}
 1918: 			catch (Exception e)
 1919: 			{
 1920: 				// TODO Auto-generated catch block
 1921: 				e.printStackTrace();
 1922: 			}
 1923: 
 1924: 			idVec = bean.getColumnNames();
 1925: 			if (idVec == null)
 1926: 				idVec = new Vector();
 1927: 			idVec.add(0, "");
 1928: 			Vector dataRow = new Vector(6);
 1929: 
 1930: 			dataRow.setSize(6);
 1931: 			dataRow.set(STATUS_INDEX, Boolean.FALSE);
 1932: 			dataRow.set(NAME_INDEX, name);
 1933: 
 1934: 			dataRow.set(SELECT_INDEX, new TableComponent.SQLCommand("select * from " + bean.getQC() + name + bean.getQC()));
 1935: 			if (!layouts.isEmpty())
 1936: 				dataRow.set(LAYOUT_INDEX, new JComboBox(layouts));
 1937: 			else
 1938: 				dataRow.set(LAYOUT_INDEX, null);
 1939: 
 1940: 			// create row
 1941: 			dataRow.set(CREATE_INDEX, new TableComponent.SQLCommand(""));
 1942: 			// id row
 1943: 			dataRow.set(ID_INDEX, new TableComponent.IDComboBox(idVec));// new
 1944: 			// TableComponent.SQLCommand(""));
 1945: 			bean.ids.add("");
 1946: 			data[0].add(dataRow);
 1947: 
 1948: 			// System.out.println(dataRow);
 1949: 		}
 1950: 
 1951: 		tC.booleanRenderer.renderFalseEmpty = true;
 1952: 		tC.tableModel.setDataVector(data[0], data[1]);
 1953: 		// @TODO new sizeToFit method needed
 1954: 		// tC.sizeToFit(450, 250);
 1955: 		Dimension dim = listPanel.getPreferredSize();
 1956: 		tC.sizeToFit(dim.width, dim.height);
 1957: 		tC.revalidate();
 1958: 		tC.tableModel.fireTableDataChanged();
 1959: 		noDBUpdate = false;
 1960: 
 1961: 	}
 1962: 	public Vector[] getListFromTable()
 1963: 	{
 1964: 		Vector[] vec = new Vector[5];
 1965: 		vec[0] = new Vector();
 1966: 		vec[1] = new Vector();
 1967: 		vec[2] = new Vector();
 1968: 		vec[3] = new Vector();
 1969: 		vec[4] = new Vector();
 1970: 		for (int i = 0; i < tC.tableModel.getRowCount(); ++i)
 1971: 		{
 1972: 		}
 1973: 		int[] rows = tC.table.getSelectedRows();
 1974: 		for (int i = 0; i < tC.tableModel.getRowCount(); i++)
 1975: 		{
 1976: 			if (((Boolean) tC.tableModel.getValueAt(i, STATUS_INDEX)) == Boolean.FALSE)
 1977: 			{
 1978: 				System.out.println("skipped row " + i);
 1979: 				continue;
 1980: 			}
 1981: 
 1982: 			// System.out.println(tC.tableModel.getValueAt(rows[i],1));
 1983: 			vec[0].add(tC.tableModel.getValueAt(i, NAME_INDEX));
 1984: 			JComboBox box = ((JComboBox) tC.tableModel.getValueAt(i, LAYOUT_INDEX));
 1985: 			String layoutName = (box != null) ? box.getSelectedItem().toString() : "";
 1986: 
 1987: 			String idName = ((JComboBox) tC.tableModel.getValueAt(i, ID_INDEX)).getSelectedItem().toString();
 1988: 			vec[1].add(layoutName);
 1989: 			vec[2].add(tC.tableModel.getValueAt(i, SELECT_INDEX).toString());
 1990: 			vec[3].add(tC.tableModel.getValueAt(i, CREATE_INDEX).toString());
 1991: 			vec[4].add(idName);
 1992: 
 1993: 		}
 1994: 		return vec;
 1995: 	}
 1996: 	public void setEnabled(boolean state)
 1997: 	{
 1998: 		showTables.setEnabled(state);
 1999: 		showTables1.setEnabled(state);
 2000: 		convert.setEnabled(state);
 2001: 		dropTables.setEnabled(state);
 2002: 		sourceURLBox.setEnabled(state);
 2003: 		destURLBox.setEnabled(state);
 2004: 
 2005: 	}
 2006: 	public TableComponent.SQLCommand createStatement(String table, DBBean beanDest, String layout, String query) throws SQLException, ParseException, Exception
 2007: 	{
 2008: 		fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
 2009: 
 2010: 		if (beanDest.url.equals(""))
 2011: 			beanDest.url = destURLBox.getSelectedItem().toString();
 2012: 		StringBuffer command = new StringBuffer(50);
 2013: 		command.append("\n           CREATE TABLE ");
 2014: 		command.append(beanDest.getQC());
 2015: 		command.append(Convert.convertText(table));
 2016: 		command.append(beanDest.getQC());
 2017: 		command.append("\n             ( ");
 2018: 		String type = null;
 2019: 		// String query = "select * from " + bean.getQC() +table + bean.getQC();
 2020: 		if (!layout.equals(""))
 2021: 		{
 2022: 			layout = " layout " + bean.getQC() + layout + bean.getQC();
 2023: 			StringBuffer queryLayout = new StringBuffer(query);
 2024: 			queryLayout.insert(queryLayout.indexOf(table) + table.length() + 1, " " + layout);
 2025: 			query = queryLayout.toString();
 2026: 			System.out.println("added layout  " + query);
 2027: 
 2028: 		}
 2029: 		Vector[] result = bean.getQueryData(query, 1);
 2030: 		for (int i = 0; i < result[1].size() - 1; ++i)
 2031: 		{
 2032: 			type = bean.metaData.getColumnTypeName(i + 1);
 2033: 			// System.out.println(i+" "+result[1].get(i)+" "+type);
 2034: 			type = (type.equals("NUMBER")) ? "INT4" : type;
 2035: 			type = (type.equals("CONTAINER")) ? "TEXT" : type;
 2036: 			type = type.toUpperCase();
 2037: 			if (i == 0)
 2038: 				command.append(beanDest.getQC() + Convert.convertText((String) result[1].get(i)) + beanDest.getQC() + " " + type + ", ");
 2039: 			else
 2040: 				command.append("               " + beanDest.getQC() + Convert.convertText((String) result[1].get(i)) + beanDest.getQC() + " " + type + ", ");
 2041: 			command.append("\n");
 2042: 		}
 2043: 		type = bean.metaData.getColumnTypeName(result[1].size());
 2044: 		type = (type.equals("NUMBER")) ? "INT4" : type;
 2045: 		type = (type.equals("CONTAINER")) ? "TEXT" : type;
 2046: 		type = type.toUpperCase();
 2047: 		command.append("               " + beanDest.getQC() + Convert.convertText((String) result[1].get(result[1].size() - 1)) + beanDest.getQC() + " " + type);
 2048: 		command.append("\n             )\n");
 2049: 		fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
 2050: 
 2051: 		return new TableComponent.SQLCommand(command.toString());
 2052: 	}
 2053: 	static class XMLFilter extends javax.swing.filechooser.FileFilter
 2054: 	{
 2055: 		public boolean accept(java.io.File file)
 2056: 		{
 2057: 			if (file.getName().toLowerCase().endsWith(".xml") || file.isDirectory())
 2058: 				return true;
 2059: 			else
 2060: 				return false;
 2061: 		}
 2062: 		public String getDescription()
 2063: 		{
 2064: 			return "Batch Convert XML File";
 2065: 		}
 2066: 
 2067: 	}
 2068: 	public static int showDialog(String message, String title, Object[] options)
 2069: 	{
 2070: 		int option = JOptionPane.showOptionDialog(null, message, title, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]);
 2071: 		return option;
 2072: 
 2073: 	}
 2074: 
 2075: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>