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