Annotation of FM2SQL/FM2SQL.java, revision 1.2
1.1 rogo 1: import javax.swing.*;
2: import javax.swing.event.*;
3: import javax.swing.table.TableModel;
4:
5: import Convert.DataBase;
6:
7: import java.awt.event.*;
8: import java.awt.Dimension;
9: import java.awt.FlowLayout;
10: import java.awt.*;
11: import java.sql.*;
12: import java.util.*;
13: import java.io.*;
14: /**
15: *
16: * <br>
17: * <h2>FileMaker Test (JDBC Database Driver Test)</h2>
18: * Main class :
19: * contains the main Frame, all event handlers etc
20: * <br>
21: * The Database access is made over DBBean class
22: * all other classes are just for the visualization of the data
23: * @version 0.2( first stable release)
24: * @author rogo
25: *
26: */
27: public class FM2SQL extends JFrame implements ActionListener, TableModelListener
28: {
29: /**
30: * The database Bean instance.
31: *
32: */
33: DBBean bean;
34: /**
35: * The database destination Bean instance.
36: *
37: */
38: DBBean destBean;
39:
40: /**
41: * box - Tablenames
42: */
43:
44: JComboBox box;
45: /**
46: * tList - Tablenames to choose from
47: */
48:
49: JList tList = new JList(new String[] { "no database", "connection", "" });
50: JList tListDest = new JList(new String[] { "no database connection", "", "" });
51:
52: /**
53: * box2 - Layout names
54: */
55:
56: JComboBox box2;
57: /**
58: * box3 - Database URLs
59: */
60: JComboBox box3;
61: /**
62: * box4 - Database URLs
63: */
64: JComboBox box4;
65:
66: TableComponent table, tC;
67: Vector tables = new Vector();
68: Vector layouts = new Vector();
69: JPanel listPanel;
1.2 ! rogo 70: JPanel topPanel,topPanel2, contentPanel;
! 71: JScrollPane paneDest;
1.1 rogo 72: FM2SQL fm = this;
73: boolean noDBUpdate = false;
74: boolean noUserUpdate = false;
75: int id = 0;
76: static boolean debug = false;
77: /**
78: * The result window used for query results
79: */
80: MultiResultWindow window;
81: /**
82: * The result window used for query results
83: */
84: MultiResultWindow windowDest;
85:
86: static FM2SQL fmInstance;
87: static String url = "jdbc:fmpro:http://141.14.237.42";
88: JButton showTables = new JButton(), showTables1 = new JButton();
89: JButton convert = new JButton();
90: JButton dropTables = new JButton();
91:
92: int oldWidth = 0, oldHeight = 0;
93: boolean resize = true;
94: static FileWriter logFile;
95: Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
96: JFileChooser configExportFileChooser;
97: JFileChooser configImportFileChooser;
98:
99: /**
100: * tries to connect to database specified in url-Variable.
101: * initializes all GUI components, then fails throws an exception
102: *
103: */
104: public FM2SQL() throws Exception
105: {
1.2 ! rogo 106:
! 107: initializeGUI();if(true)return;
1.1 rogo 108: Image local = getToolkit().getImage(getClass().getResource("icons/fm.jpg"));
109: if (local != null);
110: setIconImage(local);
111: bean = new DBBean();
112: destBean = new DBBean();
113: box2 = new JComboBox();
114: box3 = new JComboBox(new String[] { "jdbc:fmpro:http://141.14.237.74:8050", "jdbc:fmpro:http://localhost", "jdbc:postgresql://foxridge/test" });
115: box3.setEditable(true);
116: box4 = new JComboBox(new String[] {"jdbc:postgresql://foxridge/test","jdbc:postgresql://erebos/test1" });
117: box4.setEditable(true);
118: box4.addActionListener(this);
119: table = new TableComponent();
120: box = new JComboBox(tables);
121: box.addActionListener(this);
122: box2.addActionListener(this);
123: box3.addActionListener(this);
124:
125: contentPanel = new JPanel();
126: contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));
127: topPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 5));
128: topPanel.add(Box.createRigidArea(new Dimension(10, 0)));
129: topPanel.add(new JLabel("FileMaker DB "));
130: topPanel.add(new JLabel("PostgresSQL "));
131: //tListDest.setMinimumSize(new Dimension(120, 250));
132: //tListDest.setMaximumSize(new Dimension(230, 250));
133: //tListDest.setPreferredSize(new Dimension(230, 250));
134:
135: box3.setMinimumSize(new Dimension(200, 20));
136: box3.setMaximumSize(new Dimension(320, 20));
137: box3.setPreferredSize(new Dimension(320, 20));
138: box4.setMinimumSize(new Dimension(200, 20));
139: box4.setMaximumSize(new Dimension(320, 20));
140: box4.setPreferredSize(new Dimension(330, 20));
141:
142: tC = new TableComponent();
143: tC.sizeToFit(450, 250);
144: tC.tableModel.addTableModelListener(this);
145: JPanel dataBasePanel = new JPanel();
1.2 ! rogo 146: dataBasePanel.setLayout(new BoxLayout(dataBasePanel,BoxLayout.LINE_AXIS));
1.1 rogo 147: dataBasePanel.add(Box.createRigidArea(new Dimension(10, 0)));
148: dataBasePanel.add(new JLabel("Choose src database: "));
149: dataBasePanel.add(box3);
150: dataBasePanel.add(Box.createRigidArea(new Dimension(10, 0)));
151: dataBasePanel.add(new JLabel("Choose dest database : "));
152: dataBasePanel.add(Box.createRigidArea(new Dimension(5, 0)));
153:
154: dataBasePanel.add(box4);
155: dataBasePanel.add(Box.createRigidArea(new Dimension(10, 0)));
156: listPanel = new JPanel();
157: listPanel.setLayout(new java.awt.GridBagLayout());
158: java.awt.GridBagConstraints gbc = new java.awt.GridBagConstraints();
159: JScrollPane pane = new JScrollPane(tList);
160: tC.tableScroller.setPreferredSize(new Dimension(450, 265));
161: tC.table.revalidate();
162: tC.setMinimumSize(tC.tableScroller.getPreferredSize());
163: tC.setMaximumSize(tC.tableScroller.getPreferredSize());
164:
165: //gbc.gridx=GridBagConstraints.RELATIVE;
166: gbc.gridx = 0;
167: gbc.weightx = 1.0;
168: gbc.weighty = 0.0;
169: gbc.gridwidth = 2;
170: gbc.gridheight = 1;
171: gbc.anchor = GridBagConstraints.NORTHWEST;
172: listPanel.add(new JLabel(" select Tables to Convert ", JLabel.LEFT), gbc);
173: gbc.gridx = 2;
174: listPanel.add(new JLabel(" Tables in database ", JLabel.CENTER), gbc);
175:
176: gbc.anchor = GridBagConstraints.WEST;
177: gbc.gridy = 1;
178: gbc.gridx = 0;
179: gbc.gridwidth = 1;
180: gbc.weightx = 0.0;
181: listPanel.add(tC, gbc);
182: JScrollPane paneDest = new JScrollPane(tListDest);
183: showTables1 = new JButton("show Tables");
184: showTables1.setActionCommand("show Tables source");
185: gbc.anchor = GridBagConstraints.NORTH;
186: gbc.weightx = 0.0;
187: gbc.gridx = 1;
188: listPanel.add(showTables1, gbc);
189: paneDest.setPreferredSize(new Dimension(250, 265));
190: paneDest.setMinimumSize(paneDest.getPreferredSize());
191: paneDest.setMaximumSize(paneDest.getPreferredSize());
192: gbc.anchor = GridBagConstraints.WEST;
193: gbc.gridy = 1;
194: gbc.gridx = 2;
195: gbc.weightx = 0.2;
196: listPanel.add(paneDest, gbc);
197: JPanel buttonPanel = new JPanel();
198: buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.Y_AXIS));
199: convert = new JButton("Convert Tables");
200: showTables = new JButton("show Tables");
201: dropTables = new JButton("drop Tables");
202: // System.out.println(convert.getPreferredSize());
203: showTables.setMinimumSize(convert.getPreferredSize());
204: dropTables.setMinimumSize(convert.getPreferredSize());
205: showTables.setMaximumSize(convert.getPreferredSize());
206: dropTables.setMaximumSize(convert.getPreferredSize());
207: showTables.setPreferredSize(convert.getPreferredSize());
208: dropTables.setPreferredSize(convert.getPreferredSize());
209:
210: showTables.addActionListener(fm);
211: showTables1.addActionListener(fm);
212:
213: buttonPanel.add(showTables);
214: buttonPanel.add(convert);
215: convert.addActionListener(fm);
216: dropTables.addActionListener(fm);
217: buttonPanel.add(dropTables);
218: gbc.gridx = 3;
219: gbc.anchor = GridBagConstraints.NORTHWEST;
220: gbc.gridy = 1;
221: gbc.weightx = 1.0;
222: listPanel.add(buttonPanel, gbc);
223: contentPanel.add(dataBasePanel);
224: contentPanel.add(listPanel);
225: listPanel.setMaximumSize(new Dimension(getPreferredSize().width, 550));
226: listPanel.setMinimumSize(new Dimension(getPreferredSize().width, 150));
227: listPanel.setPreferredSize(new Dimension(getPreferredSize().width, 350));
228:
229: getContentPane().add(contentPanel, "Center");
230: this.addWindowListener(new WindowAdapter()
231: {
232: public void windowClosing(WindowEvent e)
233: {
234: System.exit(0);
235: }
236: });
237: addComponentListener(new ComponentAdapter()
238: {
239: public void componentResized(ComponentEvent e)
240: {
241:
242: if (oldWidth != getWidth() || oldHeight != getHeight())
243: {
244: table.sizeToFit(getWidth(), getHeight());
245:
246: Dimension dim = table.table.getPreferredSize();
247: int size = contentPanel.getPreferredSize().height + new JScrollBar().getPreferredSize().height + new JMenuBar().getPreferredSize().height + 10;
248:
249: table.tableScroller.setPreferredSize(new Dimension(getWidth() - 15, getHeight() - size));
250: Dimension d2 = table.tableScroller.getPreferredSize();
251:
252: oldWidth = getWidth();
253: oldHeight = getHeight();
254:
255: table.setPreferredSize(new Dimension(d2.width + 15, d2.height + 5));
256: table.table.revalidate();
257: table.tableScroller.revalidate();
258: table.revalidate();
259: if (getHeight() > table.table.getPreferredSize().height + (2 * size))
260: setSize(getWidth(), table.table.getPreferredSize().height + 2 * size);
261: // System.out.println("size" + size);
262: }
263: listPanel.setMaximumSize(new Dimension(getPreferredSize().width - 5, 550));
264: listPanel.setMinimumSize(new Dimension(getPreferredSize().width - 5, 200));
265: listPanel.setPreferredSize(new Dimension(getPreferredSize().width - 5, 370));
266:
267: ((JPanel) getContentPane()).revalidate();
268: repaint();
269: setTitle("Filemaker To Postgres Conversion Tool ");
270:
271: }
272: });
273:
274: setMenu();
275: //setSize(800, 600);
276: pack();
277: setLocation((screenSize.width - getWidth()) / 2, (screenSize.height - getHeight()) / 2);
278: //setVisible(true);
279: validate();
280:
281: // repaint();
282:
283: }
1.2 ! rogo 284: public void initializeGUI() throws Exception
! 285: {
! 286: Image local = getToolkit().getImage(getClass().getResource("icons/fm.jpg"));
! 287: if (local != null);
! 288: setIconImage(local);
! 289: bean = new DBBean();
! 290: destBean = new DBBean();
! 291: box2 = new JComboBox();
! 292: box3 = new JComboBox(new String[] { "jdbc:fmpro:http://141.14.237.74:8050", "jdbc:fmpro:http://localhost", "jdbc:postgresql://foxridge/test" });
! 293: box3.setEditable(true);
! 294: box4 = new JComboBox(new String[] { "jdbc:postgresql://foxridge/test", "jdbc:postgresql://erebos/test1" });
! 295: box4.setEditable(true);
! 296: box4.addActionListener(this);
! 297: table = new TableComponent();
! 298: box = new JComboBox(tables);
! 299: box.addActionListener(this);
! 300: box2.addActionListener(this);
! 301: box3.addActionListener(this);
! 302:
! 303: contentPanel = new JPanel();
! 304: contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));
! 305:
! 306: box3.setMinimumSize(new Dimension(450, 20));
! 307: box3.setMaximumSize(new Dimension(550, 20));
! 308: box3.setPreferredSize(new Dimension(450, 20));
! 309: box4.setMinimumSize(new Dimension(450, 20));
! 310: box4.setMaximumSize(new Dimension(550, 20));
! 311: box4.setPreferredSize(new Dimension(450, 20));
! 312: paneDest = new JScrollPane(tListDest);
! 313: tListDest.setPreferredSize(paneDest.getPreferredSize());
! 314: // paneDest.setPreferredSize(new Dimension(350, 365));
! 315: Dimension dim = paneDest.getPreferredSize();
! 316: paneDest.setMinimumSize(dim);
! 317: //paneDest.setMaximumSize(new Dimension(dim.width + 50, dim.height + 50));
! 318:
! 319: tC = new TableComponent();
! 320: tC.sizeToFit(450, 250);
! 321: tC.tableModel.addTableModelListener(this);
! 322: JPanel destPanel = new JPanel();
! 323: destPanel.setLayout(new java.awt.GridBagLayout());
! 324:
! 325: listPanel = new JPanel();
! 326: listPanel.setLayout(new java.awt.GridBagLayout());
! 327: java.awt.GridBagConstraints gbc = new java.awt.GridBagConstraints();
! 328: JScrollPane pane = new JScrollPane(tList);
! 329: tC.tableScroller.setPreferredSize(new Dimension(450, 365));
! 330: //tC.table.revalidate();
! 331: tC.tableScroller.setMinimumSize(new Dimension(450, 250));
! 332: // tC.tableScroller.setMaximumSize(tC.tableScroller.getPreferredSize());
! 333: topPanel = new JPanel();
! 334: topPanel.setLayout(new GridBagLayout());
! 335: topPanel2 = new JPanel();
! 336: topPanel2.setLayout(new GridBagLayout());
! 337:
! 338: gbc.gridx = 0;
! 339: gbc.gridy = 0;
! 340: gbc.weightx = 0.1;
! 341: gbc.weighty = 0.1;
! 342: gbc.gridwidth = 1;
! 343: gbc.gridheight = 1;
! 344: gbc.insets = new Insets(2, 2, 5, 5);
! 345: gbc.ipadx = 1;
! 346: gbc.ipady = 1;
! 347:
! 348: gbc.anchor = GridBagConstraints.WEST;
! 349: listPanel.add(topPanel, gbc);
! 350: destPanel.add(topPanel2, gbc);
! 351:
! 352: topPanel.add(new JLabel("Choose src database: ", JLabel.CENTER), gbc);
! 353: topPanel2.add(new JLabel("Choose dest database : ", JLabel.CENTER), gbc);
! 354:
! 355: gbc.anchor = GridBagConstraints.NORTHWEST;
! 356: gbc.gridy = 1;
! 357: topPanel.add(box3, gbc);
! 358:
! 359: topPanel2.add(box4, gbc);
! 360:
! 361: //gbc.gridx=GridBagConstraints.RELATIVE;
! 362: //dataBasePanel.add(new JLabel(" select Tables to Convert ", JLabel.LEFT));
! 363: gbc.gridy = 1;
! 364: gbc.anchor = GridBagConstraints.SOUTHWEST;
! 365:
! 366: listPanel.add(new JLabel(" select Tables to Convert ", JLabel.LEFT), gbc);
! 367: destPanel.add(new JLabel(" Tables in database ", JLabel.LEFT), gbc);
! 368:
! 369: // gbc.anchor = GridBagConstraints.WEST;
! 370: gbc.gridy = 2;
! 371: gbc.gridx = 0;
! 372: // gbc.weightx = 0.0;
! 373: //dataBasePanel.add(tC);
! 374: gbc.anchor = GridBagConstraints.NORTHWEST;
! 375: gbc.gridheight = 1;
! 376: gbc.fill = GridBagConstraints.BOTH;
! 377: listPanel.add(tC.tableScroller, gbc);
! 378: gbc.fill = GridBagConstraints.VERTICAL;
! 379: destPanel.add(paneDest, gbc);
! 380: showTables1 = new JButton("show Tables");
! 381: showTables1.setActionCommand("show Tables source");
! 382: // gbc.anchor = GridBagConstraints.NORTH;
! 383: // gbc.weightx = 0.0;
! 384: gbc.fill = GridBagConstraints.NONE;
! 385: gbc.gridheight = 1;
! 386:
! 387: gbc.gridx = 0;
! 388: gbc.gridy = 2;
! 389: topPanel.add(showTables1, gbc);
! 390: JPanel buttonPanel = new JPanel();
! 391: buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));
! 392: buttonPanel.setMinimumSize(new Dimension(200, 20));
! 393: convert = new JButton("Convert Tables");
! 394: showTables = new JButton("show Tables");
! 395: dropTables = new JButton("drop Tables");
! 396: // System.out.println(convert.getPreferredSize());
! 397: showTables.setMinimumSize(convert.getPreferredSize());
! 398: dropTables.setMinimumSize(convert.getPreferredSize());
! 399: showTables.setMaximumSize(convert.getPreferredSize());
! 400: dropTables.setMaximumSize(convert.getPreferredSize());
! 401: showTables.setPreferredSize(convert.getPreferredSize());
! 402: dropTables.setPreferredSize(convert.getPreferredSize());
! 403:
! 404: showTables.addActionListener(fm);
! 405: showTables1.addActionListener(fm);
! 406:
! 407: buttonPanel.add(showTables);
! 408: buttonPanel.add(convert);
! 409: convert.addActionListener(fm);
! 410: dropTables.addActionListener(fm);
! 411: buttonPanel.add(dropTables);
! 412:
! 413: topPanel2.add(buttonPanel, gbc);
! 414: // gbc.anchor = GridBagConstraints.WEST;
! 415: // gbc.gridy = 1;
! 416: // gbc.gridx = 2;
! 417: // gbc.weightx = 0.2;
! 418:
! 419: // gbc.gridx = 3;
! 420: // gbc.anchor = GridBagConstraints.NORTHWEST;
! 421: // gbc.gridy = 1;
! 422: // gbc.weightx = 1.0;
! 423: //listPanel.add(buttonPanel, gbc);
! 424: JSplitPane splitter = new JSplitPane();
! 425: splitter.setTopComponent(listPanel);
! 426: splitter.setBottomComponent(destPanel);
! 427:
! 428: // contentPanel.add(dataBasePanel);
! 429: // contentPanel.add(listPanel);
! 430: listPanel.setMaximumSize(new Dimension(660, 750));
! 431: listPanel.setMinimumSize(new Dimension(660, 250));
! 432: listPanel.setPreferredSize(new Dimension(480, 500));
! 433: paneDest.setPreferredSize(new Dimension(250, 285));
! 434:
! 435: getContentPane().add(splitter, "Center");
! 436: this.addWindowListener(new WindowAdapter()
! 437: {
! 438: public void windowClosing(WindowEvent e)
! 439: {
! 440: System.exit(0);
! 441: }
! 442: });
! 443: addComponentListener(new ComponentAdapter()
! 444: {
! 445: public void componentResized(ComponentEvent e)
! 446: {
! 447:
! 448: if (oldWidth != getWidth() || oldHeight != getHeight())
! 449: {
! 450: table.sizeToFit(getWidth(), getHeight());
! 451:
! 452: Dimension dim = table.table.getPreferredSize();
! 453: int size = contentPanel.getPreferredSize().height + new JScrollBar().getPreferredSize().height + new JMenuBar().getPreferredSize().height + 10;
! 454:
! 455: table.tableScroller.setPreferredSize(new Dimension(getWidth() - 15, getHeight() - size));
! 456: Dimension d2 = table.tableScroller.getPreferredSize();
! 457:
! 458: oldWidth = getWidth();
! 459: oldHeight = getHeight();
! 460:
! 461: table.setPreferredSize(new Dimension(d2.width + 15, d2.height + 5));
! 462: table.table.revalidate();
! 463: table.tableScroller.revalidate();
! 464: table.revalidate();
! 465: if (getHeight() > table.table.getPreferredSize().height + (2 * size))
! 466: setSize(getWidth(), table.table.getPreferredSize().height + 2 * size);
! 467: // System.out.println("size" + size);
! 468: }
! 469: // listPanel.setMaximumSize(new Dimension(getPreferredSize().width - 5, 550));
! 470: // listPanel.setMinimumSize(new Dimension(getPreferredSize().width - 5, 200));
! 471: // listPanel.setPreferredSize(new Dimension(getPreferredSize().width - 5, 370));
! 472: tC.tableScroller.revalidate();
! 473: Dimension dim = getSize();
! 474: tC.tableScroller.setMinimumSize(new Dimension(dim.width, dim.height - topPanel.getPreferredSize().height - 100));
! 475: tC.tableScroller.setMaximumSize(getSize());
! 476: paneDest.setMinimumSize(new Dimension(dim.width, dim.height - topPanel2.getPreferredSize().height - 100));
! 477: paneDest.setMaximumSize(tC.tableScroller.getMaximumSize());
! 478: paneDest.validate();
! 479: // tC.tableScroller.setPreferredSize(getSize());
! 480: tC.sizeToFit(getWidth(), getHeight());
! 481: ((JPanel) getContentPane()).revalidate();
! 482: repaint();
! 483: setTitle("Filemaker 2 SQL Conversion Tool ");
! 484:
! 485: }
! 486: });
! 487:
! 488: setMenu();
! 489: //setSize(800, 600);
! 490: pack();
! 491: setLocation((screenSize.width - getWidth()) / 2, (screenSize.height - getHeight()) / 2);
! 492: //setVisible(true);
! 493: validate();
! 494:
! 495: // repaint();
! 496:
! 497: }
1.1 rogo 498:
499: /**
500: *
501: */
502: public static void main(String[] args)
503: {
504: try
505: {
506: System.setErr(System.out);
507: // Properties prop = System.getProperties();
508: // Enumeration enum= prop.keys();
509: // while(enum.hasMoreElements())
510: //System.out.println(enum.nextElement());
511:
512: if (System.getProperty("os.name").startsWith("W"))
513: // javax.swing.UIManager.setLookAndFeel(
514: // new com.sun.java.swing.plaf.windows.WindowsLookAndFeel());
515: javax.swing.UIManager.put("Table.focusCellHighlightBorder", new javax.swing.border.LineBorder(java.awt.Color.black));
516: javax.swing.UIManager.put("Table.focusCellBackground", new java.awt.Color(227, 227, 227, 127));
517:
518: fmInstance = new FM2SQL();
519: fmInstance.table.tableModel.addTableModelListener(fmInstance);
520: fmInstance.setVisible(true);
521: /* if (!new File("./html").exists())
522: new File("./html").mkdirs();
523: logFile = new FileWriter("./html/index.html");
524: openLog();
525: */
526: } catch (Exception e)
527: {
528: JOptionPane pane = new JOptionPane(e.getMessage() + " \n URL: " + url, JOptionPane.ERROR_MESSAGE);
529:
530: JDialog dialog = pane.createDialog(null, " Exception occured while connecting");
531: e.printStackTrace();
532: dialog.addWindowListener(new WindowAdapter()
533: {
534: public void windowClosing(WindowEvent e)
535: {
536: System.exit(0);
537: }
538: });
539: dialog.addComponentListener(new ComponentAdapter()
540: {
541:
542: public void componentHidden(ComponentEvent e)
543: {
544:
545: System.exit(0);
546: }
547: });
548: dialog.show();
549: }
550: }
551: public void actionPerformed(ActionEvent e)
552: {
553: String command = e.getActionCommand();
554: if (debug)
555: System.out.println("command " + command);
556: if (command == "comboBoxEdited")
557: {
558: Object src = e.getSource();
559: if (src == box3)
560: {
561: if (debug)
562: System.out.println("hey" + box3.getSelectedItem());
563: Object insObj =box3.getSelectedItem();
564: ((DefaultComboBoxModel) box3.getModel()).removeElement(insObj);
565:
566: ((DefaultComboBoxModel) box3.getModel()).insertElementAt(insObj, 0);
567: box3.setSelectedItem(insObj);
568: } else if (src == box4)
569: {
570: if (debug)
571: System.out.println("hey" + box4.getSelectedItem());
572: //((DefaultComboBoxModel) box4.getModel()).insertElementAt(box4.getSelectedItem(), 0);
573: try
574: {
575: String selected = (String) box4.getSelectedItem();
576: destBean.setConnection(selected);
577: Vector catalogs = destBean.getCatalogs();
578: Vector urls = new Vector();
579: for (int i = 0; i < catalogs.size(); ++i)
580: {
581: urls.add(destBean.url.substring(0, destBean.url.lastIndexOf("/") + 1) + catalogs.get(i));
582: }
583: box4.setModel(new DefaultComboBoxModel(urls));
584: box4.setSelectedItem(selected);
585: } catch (Exception e5)
586: {
587: }
588: }
589: }
590: if (command == "comboBoxChanged")
591: {
592: try
593: {
594: //System.out.println("hallo " + (e.getSource() == box3));
595:
596: Object src = e.getSource();
597: if (src == box3&&!noUserUpdate)
598: {
599: Thread thread = new Thread()
600: {
601: public void run()
602: {
603:
604: try
605: {
606: PasswordDialog dialog = new PasswordDialog(fmInstance, bean);
607: dialog.setLocationRelativeTo(box3);
608: dialog.thread = Thread.currentThread();
609: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
610: fmInstance.setEnabled(false);
611: dialog.setVisible(true);
612: String url = box3.getSelectedItem().toString();
613: bean.url = (url != null) ? url : bean.url;
614: bean.connection = null;
615: bean.getConnection();
616: tables = bean.getTableNames();
617: fillTable();
618: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
619: fmInstance.setEnabled(true);
620: // System.out.println("hallo" + tables + " ");
621: } catch (Exception e5)
622: {
623: ByteArrayOutputStream b = new ByteArrayOutputStream();
624: PrintStream stream = new PrintStream(b);
625: e5.printStackTrace(stream);
626: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
627: fmInstance.setEnabled(true);
628: Vector header = new Vector();
629: header.add("no database");
630: header.add("connection");
631: Vector rows = new Vector();
632: //rows.add(header);
633: noDBUpdate=true;
634: tC.tableModel.setDataVector(rows, header);
635: tC.tableModel.setRowCount(20);
636: tC.revalidate();
637: tC.tableModel.fireTableDataChanged();
638: noDBUpdate=false;
639: showErrorDialog(b.toString(), "Error occured !");
640: }
641: }
642: };
643: thread.start();
644: } else if (src == box4&&!noUserUpdate)
645: {
646: Thread thread = new Thread()
647: {
648: public void run()
649: {
650:
651: try
652: {
653:
654: PasswordDialog dialog = new PasswordDialog(fmInstance, destBean);
655: dialog.setLocationRelativeTo(box4);
656: dialog.thread = Thread.currentThread();
657: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
658: fmInstance.setEnabled(false);
659: dialog.setVisible(true);
660: destBean.setConnection((String) box4.getSelectedItem());
661: DefaultListModel model = new DefaultListModel();
662: Vector tables = destBean.getTableNames();
663: for (int j = 0; j < tables.size(); ++j)
664: model.addElement(tables.get(j));
665: // System.out.println("hallo" + tables + " ");
666: tListDest.setModel(model);
667: // System.out.println("hallo" + tables + " ");
668: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
669: fmInstance.setEnabled(true);
670: } catch (Exception e5)
671: {
672: ByteArrayOutputStream b = new ByteArrayOutputStream();
673: PrintStream stream = new PrintStream(b);
674: e5.printStackTrace(stream);
675: fmInstance.setEnabled(true);
676: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
677: DefaultListModel model = new DefaultListModel();
678: model.addElement("no database connection");
679: tListDest.setModel(model);
680:
681: showErrorDialog(b.toString(), "Error occured !");
682: }
683: }
684: };
685: thread.start();
686:
687: }
1.2 ! rogo 688: setTitle("Filemaker 2 SQL Conversion Tool ");
1.1 rogo 689: // pack();
690:
691: } catch (Exception e4)
692: {
693: ByteArrayOutputStream b = new ByteArrayOutputStream();
694: PrintStream stream = new PrintStream(b);
695: e4.printStackTrace(stream);
696: showErrorDialog(b.toString(), "Open of table failed");
697:
698: }
699: }
700: if (command == "show Driver features")
701: {
702: ResultWindow result = new ResultWindow(this);
703: try
704: {
705: Vector[] vecs = bean.TestDB(bean.getConnection().getMetaData());
706: result.updateResult(vecs[0], vecs[1]);
707: // result.pack();
708: result.title = "Database features";
709: result.setVisible(true);
710: String name = result.writeResult();
711: } catch (Exception e2)
712: {
713: }
714: }
715: //writing config
716: if (command.equals("export XML Config"))
717: {
718: if (configExportFileChooser == null)
719: {
720: configExportFileChooser = new JFileChooser();
721: configExportFileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
722: configExportFileChooser.setFileFilter(new XMLFilter());
723: configExportFileChooser.setDialogType(JFileChooser.SAVE_DIALOG);
724: configExportFileChooser.addActionListener(new ActionListener()
725: {
726: public void actionPerformed(ActionEvent e2)
727: {
728: System.out.println(e2.getActionCommand());
729: if (!e2.getActionCommand().toString().equals("ApproveSelection"))
730: return;
731:
732: Thread thread = new Thread()
733: {
734: public void run()
735: {
736: File configFile = configExportFileChooser.getSelectedFile();
737: writeConfig(configFile.toString());
738:
739: }
740: };
741: thread.start();
742:
743: }
744: });
745: }
746: configExportFileChooser.rescanCurrentDirectory();
747: configExportFileChooser.showDialog(fmInstance, " Save ");
748:
749: }
750: if (command.equals("import XML Config"))
751: {
752: if (configImportFileChooser == null)
753: {
754: configImportFileChooser = new JFileChooser();
755: configImportFileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
756: configImportFileChooser.setFileFilter(new XMLFilter());
757: configImportFileChooser.setDialogType(JFileChooser.OPEN_DIALOG);
758: configImportFileChooser.addActionListener(new ActionListener()
759: {
760: public void actionPerformed(ActionEvent e2)
761: {
762: System.out.println(e2.getActionCommand());
763: if (!e2.getActionCommand().toString().equals("ApproveSelection"))
764: return;
765:
766: Thread thread = new Thread()
767: {
768: public void run()
769: {
770: File configFile = configImportFileChooser.getSelectedFile();
771: readXMLConfig(configFile.toString());
772:
773: }
774: };
775: thread.start();
776:
777: }
778: });
779: }
780: configImportFileChooser.rescanCurrentDirectory();
781: configImportFileChooser.showDialog(fmInstance, " Open ");
782:
783: }
784:
785:
786: if (command.equals("Convert Tables"))
787: {
788:
789: Thread thread = new Thread()
790: {
791: public void run()
792: {
793: setEnabled(false);
794: convert();
795: setEnabled(true);
796: }
797:
798: };
799: thread.start();
800: }
801: if (command.equals("show Tables"))
802: {
803: Thread thread = new Thread()
804: {
805: public void run()
806: {
807: fmInstance.setEnabled(false);
808: boolean visible = showTable(1);
809: window.validate();
810: window.setVisible(visible);
811: fmInstance.setEnabled(true);
812:
813: }
814: };
815: thread.start();
816: // System.out.println("hello");
817:
818: }
819: if (command.equals("show Tables source"))
820: {
821: Thread thread = new Thread()
822: {
823: public void run()
824: {
825: fmInstance.setEnabled(false);
826: boolean visible = showTable(0);
827: window.validate();
828: window.setVisible(visible);
829: fmInstance.setEnabled(true);
830: }
831: };
832: thread.start();
833: // System.out.println("hello"+thread);
834:
835: }
836:
837: if (command.equals("drop Tables"))
838: {
839: Thread thread = new Thread()
840: {
841: public void run()
842: {
843: dropTable();
844: }
845: };
846: thread.start();
847: }
848: }
849: /**
850: * Copys the content of source to destination and makes new table if necessary
851: */
852: public void convert()
853: {
854:
855: Vector vectors[] = getListFromTable();
856: Convert.user = bean.user;
857: Convert.passwd = bean.passwd;
858: Convert.userDest = destBean.user;
859: Convert.passwdDest = destBean.passwd;
860: try
861: {
862: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
863: fmInstance.setEnabled(false);
864: Convert.convert(bean.url, box4.getSelectedItem().toString(), vectors[0], vectors[1],vectors[2],vectors[3]);
865:
866: destBean.setConnection((String) box4.getSelectedItem());
867: DefaultListModel model = new DefaultListModel();
868: tables = destBean.getTableNames();
869: for (int j = 0; j < tables.size(); ++j)
870: model.addElement(tables.get(j));
871: if (debug)
872: System.out.println("hallo" + tables + " ");
873: tListDest.setModel(model);
874: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
875: } catch (Exception e4)
876: {
877: ByteArrayOutputStream b = new ByteArrayOutputStream();
878: PrintStream stream = new PrintStream(b);
879: e4.printStackTrace(stream);
880: showErrorDialog(b.toString(), "Conversion of table failed");
881: fmInstance.setEnabled(true);
882: }
883: }
884: public void writeConfig(String file)
885: {
886: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
887: fmInstance.setEnabled(false);
888:
889: Vector vectors[] = getListFromTable();
890: Convert.DataBase source = new Convert.DataBase(bean,vectors[0],vectors[1],vectors[2],vectors[3]);
891: Convert.DataBase destination = new Convert.DataBase(destBean,new Vector(),new Vector(),new Vector(),new Vector());
892:
893: try
894: {
895: Convert.writeConfig(file,source,destination);
896: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
897: fmInstance.setEnabled(true);
898:
899: } catch (Exception e)
900: {
901: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
902: fmInstance.setEnabled(true);
903:
904: ByteArrayOutputStream b = new ByteArrayOutputStream();
905: PrintStream stream = new PrintStream(b);
906: e.printStackTrace(stream);
907: showErrorDialog(b.toString(), "Error while writing xml config !");
908: }
909:
910: }
911: public void readXMLConfig(String file)
912: {
913:
914: try
915: {
916: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
917: fmInstance.setEnabled(false);
918: Vector databases = Convert.getXMLConfig(file);
919: DataBase destBase = (DataBase) databases.lastElement();
920: //destBase.bean.getConnection();
921: noUserUpdate = true;
922: destBean=destBase.bean;
923: Object destObj =destBean.url;
924: ((DefaultComboBoxModel) box4.getModel()).removeElement(destObj);
925: ((DefaultComboBoxModel) box4.getModel()).insertElementAt(destObj,0);
926: box4.setSelectedItem(destObj);
927: databases.remove(destBase);
928: for (Iterator iter = databases.iterator(); iter.hasNext();)
929: {
930: Convert.DataBase database = (Convert.DataBase) iter.next();
931: database.bean.getConnection();
932: bean = database.bean;
933: Object obj =bean.url;
934: ((DefaultComboBoxModel) box3.getModel()).removeElement(obj);
935: ((DefaultComboBoxModel) box3.getModel()).insertElementAt(obj,0);
936: box3.setSelectedItem(obj);
937: fillTable();
938: Vector tables=database.bean.getTableNames();
939: Collections.sort(tables,String.CASE_INSENSITIVE_ORDER);
940: for (int i =0;i<database.tables.size();++i)
941: {
942: String table = (String) database.tables.get(i);
943: int index=tables.indexOf(table);
944: if(index<0) throw new RuntimeException("Error table \""+table+"\" does no longer exist\n at server "+bean.url +"\n or you mispelled the tablename.");
945: noDBUpdate = true;
946: tC.tableModel.setValueAt(new TableComponent.SQLCommand(database.selects.get(i).toString()),index,2);
947: String create =database.creates.get(i).toString();
948: tC.tableModel.setValueAt(new TableComponent.SQLCommand(create.equals("") ? create:" "+create),index,3);
949: Object comboBox=tC.tableModel.getValueAt(index,1);
1.2 ! rogo 950: //@TODO load old selection Status
1.1 rogo 951: if(comboBox!=null) ((JComboBox)comboBox).setSelectedItem(database.layouts.get(i));
952: tC.tableModel.fireTableDataChanged();
953: noDBUpdate = false;
954: noUserUpdate = false;
955:
956: }
957: destBean.getConnection();
958:
959: DefaultListModel model = new DefaultListModel();
960: tables = destBean.getTableNames();
961: for (int j = 0; j < tables.size(); ++j)
962: model.addElement(tables.get(j));
963: // System.out.println("hallo" + tables + " ");
964: tListDest.setModel(model);
965: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
966: fmInstance.setEnabled(true);
967:
968: }
969:
970: } catch (Exception e)
971: {
972: noUserUpdate = false;
973: noDBUpdate = false;
974: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
975: fmInstance.setEnabled(true);
976:
977: ByteArrayOutputStream b = new ByteArrayOutputStream();
978: PrintStream stream = new PrintStream(b);
979: e.printStackTrace(stream);
980: showErrorDialog(b.toString(), "Error while reading xml config !");
981: }
982:
983: }
984: public boolean showTable(int list)
985: {
986: ProgressDialog dialog = new ProgressDialog(fm);
987: dialog.setTitle("Preparing tables to be displayed");
988: dialog.thread = Thread.currentThread();
989: dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
990: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
991: String query = new String();
992: Object[] objs = tListDest.getSelectedValues();
993: Vector[] vectors = getListFromTable();
994: Vector tables = (list == 0) ? vectors[0] : new Vector();
995: if (list > 0)
996: for (int i = 0; i < objs.length; ++i)
997: {
998: if (debug)
999: System.out.println(objs[i]);
1000: tables.add(objs[i]);
1001: }
1002: if (window != null)
1003: window.dispose();
1004: if (windowDest != null)
1005: windowDest.dispose();
1006:
1007: window = new MultiResultWindow(fm);
1008: if (list > 0)
1009: {
1010: windowDest = new MultiResultWindow(fm);
1011: window = windowDest;
1012: }
1013: dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x + (FM2SQL.fmInstance.getWidth() - 500) / 2, FM2SQL.fmInstance.getLocationOnScreen().y + (FM2SQL.fmInstance.getHeight() - 250) / 2);
1014: dialog.setSize(500, 250);
1015: if (!tables.isEmpty())
1016: dialog.show();
1017: dialog.title.setText("Preparing tables to be diplayed");
1018: for (int i = 0; i < tables.size(); ++i)
1019: {
1020: dialog.table.setText("Getting table " + tables.get(i));
1021: dialog.status.setText("Table " + (i + 1) + " of " + tables.size());
1022:
1023: if(list==0)
1024: query = "select * from " + bean.getQC() +tables.get(i).toString() + bean.getQC();
1025: else
1026: query = "select * from " + destBean.getQC() +tables.get(i).toString() + destBean.getQC();
1027: if(list==0) query = vectors[2].get(i).toString();
1028: if (list == 0 && vectors[1].get(i) != null)
1029: if (vectors[1].get(i).toString() != "")
1030: {
1031: String layout =" layout " + bean.getQC() + vectors[1].get(i).toString() + bean.getQC();
1032: String name = tables.get(i).toString();
1033: StringBuffer queryLayout=new StringBuffer(query);
1034: queryLayout.insert(queryLayout.indexOf(name)+name.length()+1," "+layout);
1035: query=queryLayout.toString();
1036: }
1037: if(debug)
1038: showErrorDialog("query in show tables is "+query,"Hello");
1039: window.title = " Table ;-) " + (String) tables.get(i);
1040: // break;
1041: // } else
1042: // window.title = "Error! - No valid tablename found";
1043:
1044: try
1045: {
1046: if ((query.toLowerCase().indexOf("insert") >= 0)
1047: || (query.toLowerCase().indexOf("delete") >= 0)
1048: || (query.toLowerCase().indexOf("alter") >= 0)
1049: || (query.toLowerCase().indexOf("update") >= 0))
1050: {
1051: Statement stm = (list > 0) ? destBean.getConnection().createStatement() : bean.getConnection().createStatement();
1052: stm.executeUpdate(query);
1053: Vector vec = new Vector();
1054: Vector vec2 = new Vector();
1055: Vector vec3 = new Vector();
1056: vec2.add(query);
1057: vec3.add(vec2);
1058: vec.add("Insert, update, etc done! No results available");
1059: // vec.add("no Results were produced");
1060:
1061: window.updateResult(vec3, vec);
1062: //window.pack();
1063: // window.setVisible(true);
1064:
1065: } else
1066: {
1067: Vector[] vecs = (list > 0) ? destBean.getQueryData(query, dialog, 50) : bean.getQueryData(query, dialog, 50);
1068: if (vecs[1].isEmpty())
1069: throw new Exception("Wrong columnname or Empty Layout");
1070: window.updateResult(vecs[0], vecs[1]);
1071:
1072: //window.pack();
1073: //String name = window.writeResult();
1074: //appendLog(window.title, name);
1075: }
1076:
1077: //window.setVisible(true);
1078:
1079: } catch (Exception e)
1080: {
1081: System.out.println("Exception occured");
1082: e.printStackTrace();
1083: Vector vec = new Vector();
1084: Vector vec2 = new Vector();
1085: Vector vec3 = new Vector();
1086: vec2.add(e.getMessage());
1087: vec3.add(vec2);
1088: vec.add("Exception occured! No results available");
1089: //vec.add("no Results were produced");
1090:
1091: window.updateResult(vec3, vec);
1092: //window.pack();
1093: // window.setVisible(true);
1094: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
1095:
1096: }
1097: } // to for
1098: window.pack();
1099: window.setSize(700, 600);
1100:
1101: window.oldTabCount = 10000;
1102: dialog.dispose();
1103: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
1104:
1105: return !tables.isEmpty();
1106:
1107: }
1108:
1109: public void dropTable()
1110: {
1111: String query = new String();
1112: Object[] objs = tListDest.getSelectedValues();
1113: Vector tables = new Vector();
1114: for (int i = 0; i < objs.length; ++i)
1115: {
1116: System.out.println(objs[i]);
1117: tables.add(objs[i]);
1118: }
1119:
1120: for (int i = 0; i < tables.size(); ++i)
1121: {
1122:
1123: query = "drop table "+destBean.getQC() + tables.get(i) + destBean.getQC();
1124:
1125: try
1126: {
1127: Statement stm = destBean.getConnection().createStatement();
1128: stm.executeUpdate(query);
1129: } catch (Exception e)
1130: {
1131: ByteArrayOutputStream b = new ByteArrayOutputStream();
1132: PrintStream stream = new PrintStream(b);
1133: e.printStackTrace(stream);
1134: showErrorDialog(b.toString(), "Open of table failed");
1135:
1136: }
1137: } // to for
1138: try
1139: {
1140: destBean.setConnection((String) box4.getSelectedItem());
1141: DefaultListModel model = new DefaultListModel();
1142: tables = destBean.getTableNames();
1143: for (int j = 0; j < tables.size(); ++j)
1144: model.addElement(tables.get(j));
1145: System.out.println("hallo" + tables + " ");
1146: tListDest.setModel(model);
1147: } catch (Exception e4)
1148: {
1149: }
1150:
1151: }
1152: /**
1153: * invoked then the user changes the table or the tableModel changes
1154: */
1155: public void tableChanged(TableModelEvent e)
1156: {
1157: // if (e.getType() == e.INSERT)
1158: //System.out.println("Insert done");
1159: // if (e.getType() == e.UPDATE)
1160: // System.out.println("Update done");
1161: //if (e.getType() == e.DELETE)
1162: // System.out.println("Delete done");
1163: if (e.getType() == e.UPDATE && !noDBUpdate)
1164: {
1165: int row = e.getFirstRow(), col = e.getColumn();
1166: System.out.println("Got in " + row + " " + col );
1167: TableModel model = (TableModel)e.getSource();
1168: String columnName = model.getColumnName(col);
1169: Object test = model.getValueAt(row, col);
1170: String idVal = (test == null) ? "" : test.toString();
1171: String value = (test == null) ? "" : test.toString();;
1172:
1173: System.out.println("Got in " + columnName +" "+idVal);
1174: try
1175: {
1176: if(columnName.equals("select")||columnName.equals("Layouts"))
1177: {
1178: String table = model.getValueAt(row,0).toString();
1179: String layout = (model.getValueAt(row,1)!=null) ?((JComboBox)model.getValueAt(row,1)).getSelectedItem().toString():"";
1180: String query = model.getValueAt(row,2).toString();
1181: String create = model.getValueAt(row,3).toString();
1182: System.out.println("table" +table+" layout "+layout+" query "+query);
1183: if(!create.equals(""))
1184: {
1185: Object[] options = { "Yes","No"};
1186: int option=showDialog("Create Statement not empty! Do you want to overwrite?","create statement",options );
1187: if(option==0)
1188: model.setValueAt(createStatement(table,destBean,layout,query),row,3);
1189: }
1190:
1191:
1192: }
1193: /* Statement stm = bean.getConnection().createStatement();
1194: // stm.executeUpdate("DELETE FROM \""+fm.tables.get(0)+"\" WHERE \"erstellt von\"='rogo') ");
1195:
1196: if (idVal == "")
1197: stm.executeUpdate("INSERT INTO " + DBBean.quoteChar + box.getSelectedItem() + DBBean.quoteChar + " (" + DBBean.quoteChar + columnName + DBBean.quoteChar + ") VALUES ('" + value + "') ");
1198: else
1199: stm.executeUpdate(
1200: "UPDATE " + DBBean.quoteChar + box.getSelectedItem() + DBBean.quoteChar + " SET " + DBBean.quoteChar + columnName + DBBean.quoteChar + "='" + value + "' WHERE ID='" + idVal + "' ");
1201: */
1202: } catch (Exception e2)
1203: {
1204: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
1205: ByteArrayOutputStream b = new ByteArrayOutputStream();
1206: PrintStream stream = new PrintStream(b);
1207: e2.printStackTrace(stream);
1208: showErrorDialog(b.toString(), "Error while updating table !");
1209: }
1210: }
1211: }
1212:
1213: /**
1214: * initialize the menubar
1215: */
1216: private void setMenu()
1217: {
1218: JMenuBar menubar = new JMenuBar();
1219: JMenu menu = new JMenu("File");
1220:
1221: JMenuItem item = new JMenuItem("import XML Config");
1222: item.addActionListener(fm);
1223: menu.add(item);
1224: item = new JMenuItem("export XML Config");
1225: item.addActionListener(fm);
1226: menu.add(item);
1227: menubar.add(menu);
1228: menu = new JMenu("Options");
1229:
1230: item = new JMenuItem("show Driver features");
1231: item.addActionListener(fm);
1232: menu.add(item);
1233: menubar.add(menu);
1234:
1235: item.addActionListener(fm);
1236: menu.add(item);
1237:
1238: menubar.add(menu);
1239:
1240: menu.setBackground(fm.getBackground());
1241: menubar.setBackground(fm.getBackground());
1242: setJMenuBar(menubar);
1243: }
1244: /**
1245: * open the log file (index.html)
1246: */
1247:
1248: public static void openLog() throws Exception
1249: {
1250:
1251: StringBuffer buff = new StringBuffer();
1252: buff.append("<html>");
1253: buff.append("<head>");
1254: buff.append("\n<title>");
1255: buff.append("FileMaker Test");
1256: buff.append("</title>\n");
1257: buff.append("</head>\n");
1258:
1259: buff.append("<body>\n");
1260: buff.append("<center>\n");
1261: buff.append("\n<h3>");
1262: buff.append("FileMaker Test");
1263: buff.append("</h3>\n");
1264:
1265: logFile.write(TableComponent.convertUml(buff).toString());
1266: logFile.flush();
1267: }
1268: /**
1269: * Append one entry to the log file(index.html)
1270: */
1271: public static void appendLog(String entry, String name) throws Exception
1272: {
1273: logFile.write("<a href=\"./" + name.substring(name.lastIndexOf("/") + 1) + "\">");
1274: logFile.write(entry + "</a>");
1275: logFile.write("<br>\n<br>\n");
1276: logFile.flush();
1277: }
1278: /**
1279: * closes the log file invoked then the application closes
1280: */
1281: public static void closeLog() throws Exception
1282: {
1283: logFile.write("\n</body>");
1284: logFile.write("\n</html>");
1285:
1286: logFile.close();
1287: }
1288: public static void showErrorDialog(String message, String title)
1289: {
1290: JDialog dialog = new JDialog(fmInstance);
1291: dialog.setTitle(title);
1292: JTextArea text = new JTextArea();
1293: JScrollPane scroller = new JScrollPane(text);
1294: dialog.getContentPane().add(scroller);
1295: text.append(message);
1296: dialog.setSize(600, 300);
1297: dialog.setLocationRelativeTo(fmInstance);
1298: dialog.show();
1299: //JOptionPane.showMessageDialog(null, message, title, JOptionPane.ERROR_MESSAGE);
1300: }
1301: public static class ProgressDialog extends JDialog
1302: {
1303: JLabel table = new JLabel(" ");
1304: JLabel status = new JLabel(" ");
1305: JLabel title = new JLabel(" ");
1306: JPanel content = new JPanel();
1307: JPanel titlePanel = new JPanel();
1308: JPanel labelPanel = new JPanel();
1309: JPanel statusPanel = new JPanel();
1310: JPanel buttonPanel = new JPanel();
1311:
1312: JProgressBar progress = new JProgressBar();
1313: JButton cancel = new JButton("Cancel");
1314: Thread thread;
1315: public ProgressDialog(JFrame frame)
1316: {
1317: super(frame);
1318: content = new JPanel(true);
1319: //content.setBorder(BorderFactory.createRaisedBevelBorder());
1320: content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
1321: title = new JLabel("Progress of conversion");
1322: title.setHorizontalTextPosition(title.CENTER);
1323: titlePanel.add(title);
1324: buttonPanel.add(cancel);
1325: // content.add(titlePanel);
1326: content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
1327: content.add(labelPanel);
1328: content.add(new JLabel(""));
1329: content.add(progress);
1330: content.add(statusPanel);
1331: content.add(buttonPanel);
1332: content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
1333: labelPanel.add(table);
1334: statusPanel.add(status);
1335: getContentPane().add(titlePanel, "North");
1336: getContentPane().add(content, "Center");
1337: this.addWindowListener(new WindowAdapter()
1338: {
1339: public void windowClosing(WindowEvent e)
1340: {
1341: cancel.doClick();
1342: }
1343: });
1344:
1345: cancel.addActionListener(new ActionListener()
1346: {
1347: public void actionPerformed(ActionEvent e)
1348: {
1349: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
1350: fmInstance.setEnabled(true);
1351: setVisible(false);
1352: thread.stop();
1353: }
1354: });
1355: pack();
1356:
1357: }
1358:
1359: }
1360: public static class PasswordDialog extends JDialog
1361: {
1362: JLabel table = new JLabel(" ");
1363: JLabel status = new JLabel(" ");
1364: JLabel title = new JLabel(" ");
1365: JPanel content = new JPanel();
1366: JPanel titlePanel = new JPanel();
1367: JPanel userPanel = new JPanel();
1368: JPanel passwordPanel = new JPanel();
1369: JPanel buttonPanel = new JPanel();
1370: JTextField user = new JTextField(10);
1371: JTextField passwd = new JPasswordField(10);
1372:
1373: JButton cancel = new JButton("Cancel");
1374: JButton ok = new JButton("Ok");
1375: DBBean bean = null;
1376: Thread thread;
1377: public PasswordDialog(JFrame frame, DBBean localBean)
1378: {
1379: super(frame);
1380: setTitle("PasswordDialog");
1381: setModal(true);
1382: content = new JPanel(true);
1383: this.bean = localBean;
1384: //content.setBorder(BorderFactory.createRaisedBevelBorder());
1385: ActionListener al = new ActionListener()
1386: {
1387: public void actionPerformed(ActionEvent e)
1388: {
1389: bean.setUserAndPasswd(user.getText(), passwd.getText());
1390: setVisible(false);
1391: }
1392:
1393: };
1394: this.addWindowListener(new WindowAdapter()
1395: {
1396: public void windowClosing(WindowEvent e)
1397: {
1398: cancel.doClick();
1399: }
1400: });
1401:
1402: user.setText(localBean.user);
1403: passwd.setText(localBean.passwd);
1404: user.addActionListener(al);
1405: passwd.addActionListener(al);
1406: content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
1407: title = new JLabel("Enter user and password ");
1408: title.setHorizontalTextPosition(title.CENTER);
1409: titlePanel.add(title);
1410: buttonPanel.add(ok);
1411: buttonPanel.add(cancel);
1412: content.add(titlePanel);
1413: content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
1414: // content.add(labelPanel);
1415: content.add(new JLabel(""));
1416: content.add(userPanel);
1417: content.add(passwordPanel);
1418: content.add(buttonPanel);
1419: content.add(Box.createRigidArea(new java.awt.Dimension(0, 15)));
1420: //labelPanel.add(table);
1421: userPanel.add(new JLabel("Username: "));
1422: userPanel.add(user);
1423: passwordPanel.add(new JLabel("Password: "));
1424: passwordPanel.add(passwd);
1425: passwd.setPreferredSize(user.getPreferredSize());
1426: passwd.setMinimumSize(passwd.getPreferredSize());
1427: passwd.setMaximumSize(passwd.getPreferredSize());
1428: passwd.setSize(passwd.getPreferredSize());
1429: getContentPane().add(titlePanel, "North");
1430: getContentPane().add(content, "Center");
1431: ok.addActionListener(al);
1432: cancel.addActionListener(new ActionListener()
1433: {
1434: public void actionPerformed(ActionEvent e)
1435: {
1436: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
1437: fmInstance.setEnabled(true);
1438: setVisible(false);
1439: thread.stop();
1440: }
1441:
1442: });
1443: pack();
1444:
1445: }
1446:
1447: }
1448: public void fillTable()
1449: {
1450: noDBUpdate = true;
1451: Vector tableNames = bean.getTableNames();
1452: Collections.sort(tableNames, String.CASE_INSENSITIVE_ORDER);
1453: Vector[] data = new Vector[2];
1454: data[1] = new Vector();
1455: data[1].add("Table");
1456: data[1].add("Layouts");
1457: data[1].add("select");
1458: data[1].add("create");
1459:
1460: data[0] = new Vector();
1461:
1462: for (int i = 0; i < tableNames.size(); i++)
1463: {
1464: String name = tableNames.get(i).toString();
1465: Vector layouts = new Vector();
1466: try
1467: {
1468: layouts = bean.getLayoutNames(name);
1469: } catch (SQLException e)
1470: {
1471: layouts = new Vector();
1472: }
1473: Vector dataRow = new Vector();
1474: dataRow.add(name);
1475: if (!layouts.isEmpty())
1476: dataRow.add(new JComboBox(layouts));
1477: else
1478: dataRow.add(null);
1479: dataRow.add(new TableComponent.SQLCommand("select * from "+bean.getQC()+name+bean.getQC()));
1480:
1481: data[0].add(dataRow);
1482: dataRow.add(new TableComponent.SQLCommand(""));
1483: //System.out.println(dataRow);
1484: }
1485: tC.tableModel.setDataVector(data[0], data[1]);
1486: tC.revalidate();
1487: tC.tableModel.fireTableDataChanged();
1488: noDBUpdate = false;
1489:
1490: }
1491: public Vector[] getListFromTable()
1492: {
1493: Vector[] vec = new Vector[4];
1494: vec[0] = new Vector();
1495: vec[1] = new Vector();
1496: vec[2] = new Vector();
1497: vec[3] = new Vector();
1498: int[] rows = tC.table.getSelectedRows();
1499: for (int i = 0; i < rows.length; i++)
1500: {
1501: //System.out.println(tC.tableModel.getValueAt(rows[i],1));
1502: vec[0].add(tC.tableModel.getValueAt(rows[i], 0));
1503: JComboBox box = ((JComboBox) tC.tableModel.getValueAt(rows[i], 1));
1504: String layoutName = (box != null) ? box.getSelectedItem().toString() : "";
1505: vec[1].add(layoutName);
1506: vec[2].add(tC.tableModel.getValueAt(rows[i], 2).toString());
1507: vec[3].add(tC.tableModel.getValueAt(rows[i], 3).toString());
1508:
1509: }
1510: return vec;
1511: }
1512: public void setEnabled(boolean state)
1513: {
1514: showTables.setEnabled(state);
1515: showTables1.setEnabled(state);
1516: convert.setEnabled(state);
1517: dropTables.setEnabled(state);
1518: box3.setEnabled(state);
1519: box4.setEnabled(state);
1520:
1521: }
1522: public TableComponent.SQLCommand createStatement(String table,DBBean beanDest,String layout,String query) throws SQLException
1523: {
1524: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
1525:
1526: if(beanDest.url.equals("")) beanDest.url=box4.getSelectedItem().toString();
1527: StringBuffer command = new StringBuffer(50);
1528: command.append("\n CREATE TABLE ");
1529: command.append(beanDest.getQC());
1530: command.append(Convert.convertText(table));
1531: command.append(beanDest.getQC());
1532: command.append("\n ( ");
1533: String type = null;
1534: // String query = "select * from " + bean.getQC() +table + bean.getQC();
1535: if (!layout.equals(""))
1536: {
1537: layout = " layout " + bean.getQC() + layout + bean.getQC();
1538: StringBuffer queryLayout = new StringBuffer(query);
1539: queryLayout.insert(queryLayout.indexOf(table) + table.length() + 1, " " + layout);
1540: query = queryLayout.toString();
1541: System.out.println("added layout "+ query);
1542:
1543: }
1544: Vector[] result=bean.getQueryData(query,1);
1545: for (int i = 0; i < result[1].size() - 1; ++i)
1546: {
1547: type = bean.metaData.getColumnTypeName(i + 1);
1548: // System.out.println(i+" "+result[1].get(i)+" "+type);
1549: type = (type.equals("NUMBER")) ? "INT4" : type;
1550: type = (type.equals("CONTAINER")) ? "TEXT" : type;
1551: type = type.toUpperCase();
1552: if(i==0)
1553: command.append(beanDest.getQC() + Convert.convertText((String) result[1].get(i)) + beanDest.getQC() + " " + type + ", ");
1554: else
1555: command.append(" "+beanDest.getQC() + Convert.convertText((String) result[1].get(i)) + beanDest.getQC() + " " + type + ", ");
1556: command.append("\n");
1557: }
1558: type = bean.metaData.getColumnTypeName(result[1].size());
1559: type = (type.equals("NUMBER")) ? "INT4" : type;
1560: type = (type.equals("CONTAINER")) ? "TEXT" : type;
1561: type = type.toUpperCase();
1562: command.append(" "+beanDest.getQC() + Convert.convertText((String) result[1].get(result[1].size() - 1)) + beanDest.getQC() + " " + type);
1563: command.append("\n )\n");
1564: fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
1565:
1566: return new TableComponent.SQLCommand(command.toString());
1567: }
1568: static class XMLFilter extends javax.swing.filechooser.FileFilter
1569: {
1570: public boolean accept(java.io.File file)
1571: {
1572: if (file.getName().toLowerCase().endsWith(".xml") || file.isDirectory())
1573: return true;
1574: else
1575: return false;
1576: }
1577: public String getDescription()
1578: {
1579: return "Batch Convert XML File";
1580: }
1581:
1582: }
1583: public static int showDialog(String message, String title, Object[] options)
1584: {
1585: int option = JOptionPane.showOptionDialog(null, message, title, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]);
1586: return option;
1587:
1588: }
1589:
1590: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>