KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > mondrian > gui > Workbench


1 /*
2 // $Id: //open/mondrian/src/main/mondrian/gui/Workbench.java#17 $
3 // This software is subject to the terms of the Common Public License
4 // Agreement, available at the following URL:
5 // http://www.opensource.org/licenses/cpl.html.
6 // Copyright (C) 1999-2002 Kana Software, Inc.
7 // Copyright (C) 2001-2005 Julian Hyde and others
8 // All Rights Reserved.
9 // You must accept the terms of that agreement to use this software.
10 //
11 // Created on September 26, 2002, 11:28 AM
12 // Modified on 15-Jun-2003 by ebengtso
13 //
14  */

15 /**
16    * Copyright (C) 2006, 2007 CINCOM SYSTEMS, INC.
17    * All Rights Reserved
18    */

19
20 package mondrian.gui;
21
22 import java.awt.Dimension JavaDoc;
23 import java.awt.event.ActionEvent JavaDoc;
24 import java.awt.event.ActionListener JavaDoc;
25 import java.awt.event.FocusAdapter JavaDoc;
26 import java.awt.event.FocusEvent JavaDoc;
27 import java.util.Iterator JavaDoc;
28 import java.util.Map JavaDoc;
29 import javax.swing.event.InternalFrameAdapter JavaDoc;
30 import javax.swing.filechooser.FileSystemView JavaDoc;
31 import mondrian.olap.Connection;
32 import mondrian.olap.DriverManager;
33 import mondrian.olap.MondrianProperties;
34
35 import javax.swing.*;
36
37 import java.io.*;
38 import java.net.MalformedURLException JavaDoc;
39 import java.net.URI JavaDoc;
40 import java.net.URISyntaxException JavaDoc;
41 import java.util.HashMap JavaDoc;
42 import java.util.Locale JavaDoc;
43 import java.util.Properties JavaDoc;
44 import java.util.ResourceBundle JavaDoc;
45 import java.util.MissingResourceException JavaDoc;
46 import java.util.Vector JavaDoc;
47 import javax.swing.event.InternalFrameEvent JavaDoc;
48 import javax.swing.plaf.basic.BasicArrowButton JavaDoc;
49 import javax.swing.text.DefaultEditorKit JavaDoc;
50
51 import org.eigenbase.xom.XMLOutput;
52
53 /**
54  *
55  * @author sean
56  */

57 public class Workbench extends javax.swing.JFrame JavaDoc {
58
59     private static final String JavaDoc LAST_USED1 = "lastUsed1";
60     private static final String JavaDoc LAST_USED1_URL = "lastUsedUrl1";
61     private static final String JavaDoc LAST_USED2 = "lastUsed2";
62     private static final String JavaDoc LAST_USED2_URL = "lastUsedUrl2";
63     private static final String JavaDoc LAST_USED3 = "lastUsed3";
64     private static final String JavaDoc LAST_USED3_URL = "lastUsedUrl3";
65     private static final String JavaDoc LAST_USED4 = "lastUsed4";
66     private static final String JavaDoc LAST_USED4_URL = "lastUsedUrl4";
67
68     private Connection connection;
69     private String JavaDoc jdbcDriverClassName;
70     private String JavaDoc jdbcConnectionUrl;
71
72     private JDBCMetaData jdbcMetaData;
73
74     private final ClassLoader JavaDoc myClassLoader;
75     private final ResourceBundle JavaDoc resources;
76     private Properties workbenchProperties;
77     private static int newSchema = 1;
78
79     private String JavaDoc openFile=null;
80
81     private Map JavaDoc schemaWindowMap = new HashMap JavaDoc(); // map of schema frames and its menu items (JInternalFrame -> JMenuItem)
82
private Vector JavaDoc mdxWindows = new Vector JavaDoc();
83     private int windowMenuMapIndex = 1;
84
85     private static ResourceBundle JavaDoc resBundle = null;
86
87     /** Creates new form Workbench */
88     public Workbench() {
89         myClassLoader = this.getClass().getClassLoader();
90
91         loadWorkbenchProperties();
92         initDataSource();
93         initComponents();
94
95         //ResourceBundle resources = ResourceBundle.getBundle("mondrian.gui.resources.gui", Locale.getDefault(), myClassLoader);
96
resources = ResourceBundle.getBundle("mondrian.gui.resources.gui", Locale.getDefault(), myClassLoader);
97
98         ImageIcon icon = new javax.swing.ImageIcon JavaDoc(myClassLoader.getResource(resources.getString("cube")));
99
100         this.setIconImage(icon.getImage());
101         //openSchemaFrame(new File("C:/Documents and Settings/sarora/My Documents/Inventory.xml"), false); //===
102
}
103
104     /**
105      * load properties
106      */

107     private void loadWorkbenchProperties() {
108         workbenchProperties = new Properties();
109         try {
110             workbenchProperties.load(new FileInputStream(new File("workbench.properties")));
111             String JavaDoc resourceName = "mondrian.gui.resources.workbenchInfo";
112             resBundle = ResourceBundle.getBundle(resourceName);
113         } catch (Exception JavaDoc e) {
114             //e.printStackTrace();
115

116             // TODO deal with exception
117
}
118     }
119
120     /**
121      * save properties
122      */

123     private void storeWorkbenchProperties() {
124         //save properties to file
125
OutputStream out = null;
126         try {
127             out = (OutputStream) new FileOutputStream(new File("workbench.properties"));
128             workbenchProperties.store(out, "Workbench configuration");
129         } catch (Exception JavaDoc e) {
130             //TODO deal with exception
131
} finally {
132             try {
133                 out.close();
134             } catch (IOException eIO) {
135                 //TODO deal with exception
136
}
137         }
138     }
139
140     /**
141      * Initialize the data source from a property file
142      */

143     private void initDataSource() {
144         jdbcDriverClassName = workbenchProperties.getProperty("jdbcDriverClassName");
145         jdbcConnectionUrl = workbenchProperties.getProperty("jdbcConnectionUrl");
146     }
147
148     /** This method is called from within the constructor to
149      * initialize the form.
150      */

151     private void initComponents() {
152         desktopPane = new javax.swing.JDesktopPane JavaDoc();
153         jToolBar1 = new javax.swing.JToolBar JavaDoc();
154         jToolBar2 = new javax.swing.JToolBar JavaDoc();
155         toolbarNewPopupMenu = new JPopupMenu();
156         toolbarNewButton = new javax.swing.JButton JavaDoc();
157         toolbarOpenButton = new javax.swing.JButton JavaDoc();
158         toolbarSaveButton = new javax.swing.JButton JavaDoc();
159         toolbarSaveAsButton = new javax.swing.JButton JavaDoc();
160         jPanel1 = new javax.swing.JPanel JavaDoc();
161         jPanel2 = new javax.swing.JPanel JavaDoc();
162         toolbarPreferencesButton = new javax.swing.JButton JavaDoc();
163         menuBar = new javax.swing.JMenuBar JavaDoc();
164         fileMenu = new javax.swing.JMenu JavaDoc();
165         newMenu = new javax.swing.JMenu JavaDoc();
166         newSchemaMenuItem = new javax.swing.JMenuItem JavaDoc();
167         newQueryMenuItem = new javax.swing.JMenuItem JavaDoc();
168         newJDBCExplorerMenuItem = new javax.swing.JMenuItem JavaDoc();
169         newSchemaMenuItem2 = new javax.swing.JMenuItem JavaDoc();
170         newQueryMenuItem2 = new javax.swing.JMenuItem JavaDoc();
171         newJDBCExplorerMenuItem2 = new javax.swing.JMenuItem JavaDoc();
172         openMenuItem = new javax.swing.JMenuItem JavaDoc();
173         preferencesMenuItem = new javax.swing.JMenuItem JavaDoc();
174         lastUsed1MenuItem = new javax.swing.JMenuItem JavaDoc();
175         lastUsed2MenuItem = new javax.swing.JMenuItem JavaDoc();
176         lastUsed3MenuItem = new javax.swing.JMenuItem JavaDoc();
177         lastUsed4MenuItem = new javax.swing.JMenuItem JavaDoc();
178         saveMenuItem = new javax.swing.JMenuItem JavaDoc();
179         saveAsMenuItem = new javax.swing.JMenuItem JavaDoc();
180         jSeparator1 = new javax.swing.JSeparator JavaDoc();
181         jSeparator2 = new javax.swing.JSeparator JavaDoc();
182         jSeparator3 = new javax.swing.JSeparator JavaDoc();
183         jSeparator4 = new javax.swing.JSeparator JavaDoc();
184         exitMenuItem = new javax.swing.JMenuItem JavaDoc();
185         windowMenu = new javax.swing.JMenu JavaDoc();
186         helpMenu = new javax.swing.JMenu JavaDoc();
187         editMenu = new javax.swing.JMenu JavaDoc();
188         cutMenuItem = new javax.swing.JMenuItem JavaDoc(new DefaultEditorKit.CutAction JavaDoc());
189         copyMenuItem = new javax.swing.JMenuItem JavaDoc(new DefaultEditorKit.CopyAction JavaDoc());
190         pasteMenuItem = new javax.swing.JMenuItem JavaDoc(new DefaultEditorKit.PasteAction JavaDoc());
191         deleteMenuItem = new javax.swing.JMenuItem JavaDoc();
192         aboutMenuItem = new javax.swing.JMenuItem JavaDoc();
193         toolsMenu = new javax.swing.JMenu JavaDoc();
194         viewMenu = new javax.swing.JMenu JavaDoc();
195         viewDimensionsMenuItem = new javax.swing.JCheckBoxMenuItem JavaDoc();
196         viewMeasuresMenuItem = new javax.swing.JCheckBoxMenuItem JavaDoc();
197         viewCubesMenuItem = new javax.swing.JCheckBoxMenuItem JavaDoc();
198         viewXMLMenuItem = new javax.swing.JCheckBoxMenuItem JavaDoc();
199
200         setTitle("Schema Workbench");
201         setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
202         addWindowListener(new java.awt.event.WindowAdapter JavaDoc() {
203             public void windowClosing(java.awt.event.WindowEvent JavaDoc evt) {
204                 closeAllSchemaFrames(true);
205             }
206         });
207
208         getContentPane().add(desktopPane, java.awt.BorderLayout.CENTER);
209
210
211         newSchemaMenuItem2.setText("Schema");
212         newSchemaMenuItem2.addActionListener(new java.awt.event.ActionListener JavaDoc() {
213             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
214                 newSchemaMenuItemActionPerformed(evt);
215             }
216         });
217
218
219         newQueryMenuItem2.setText("MDX Query");
220         newQueryMenuItem2.addActionListener(new java.awt.event.ActionListener JavaDoc() {
221             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
222                 newQueryMenuItemActionPerformed(evt);
223             }
224         });
225
226
227         newJDBCExplorerMenuItem2.setText("JDBC Explorer");
228         newJDBCExplorerMenuItem2.addActionListener(new java.awt.event.ActionListener JavaDoc() {
229             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
230                 newJDBCExplorerMenuItemActionPerformed(evt);
231             }
232         });
233
234
235         toolbarNewPopupMenu.add(newSchemaMenuItem2);
236         toolbarNewPopupMenu.add(newQueryMenuItem2);
237         toolbarNewPopupMenu.add(newJDBCExplorerMenuItem2);
238
239
240         jPanel2.setLayout(new java.awt.BorderLayout JavaDoc());
241         jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
242         jPanel2.setMaximumSize(new java.awt.Dimension JavaDoc(50, 28) ); // old width=18
243

244         toolbarNewButton.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/toolbarButtonGraphics/general/New16.gif")));
245         toolbarNewButton.setToolTipText("New");
246         toolbarNewButton.setBorderPainted(false);
247         toolbarNewButton.addActionListener(new ActionListener JavaDoc() {
248             public void actionPerformed(ActionEvent JavaDoc e) {
249                 toolbarNewPopupMenu.show(jPanel2,0,jPanel2.getSize().height);
250             }
251         });
252
253         jToolBar2.setFloatable(false);
254         jToolBar2.add(toolbarNewButton);
255
256         jPanel2.add(jToolBar2,java.awt.BorderLayout.CENTER);
257
258         toolbarNewArrowButton = new BasicArrowButton JavaDoc(SwingConstants.SOUTH);
259         toolbarNewArrowButton.setToolTipText("New");
260         toolbarNewArrowButton.setBorderPainted(false);
261         toolbarNewArrowButton.addActionListener(new ActionListener JavaDoc() {
262             public void actionPerformed(ActionEvent JavaDoc e) {
263                 toolbarNewPopupMenu.show(jPanel2,0,jPanel2.getSize().height);
264             }
265         });
266
267         jPanel2.add(toolbarNewArrowButton,java.awt.BorderLayout.EAST);
268
269         // toolbarNewButton.add(select); // error:none of the toolbar buttons are displayed
270
// jToolBar1.add(select,1); //error: arrow button is so wide it takes all remaining space on toolbar
271
jToolBar1.add(jPanel2,0);
272
273
274
275
276         toolbarOpenButton.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/toolbarButtonGraphics/general/Open16.gif")));
277         toolbarOpenButton.setToolTipText("Open");
278         toolbarOpenButton.addActionListener(new java.awt.event.ActionListener JavaDoc() {
279             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
280                 openMenuItemActionPerformed(evt);
281             }
282         });
283
284         jToolBar1.add(toolbarOpenButton);
285
286         toolbarSaveButton.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/toolbarButtonGraphics/general/Save16.gif")));
287         toolbarSaveButton.setToolTipText("Save");
288         toolbarSaveButton.addActionListener(new java.awt.event.ActionListener JavaDoc() {
289             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
290                 saveMenuItemActionPerformed(evt);
291             }
292         });
293
294         jToolBar1.add(toolbarSaveButton);
295
296         toolbarSaveAsButton.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/toolbarButtonGraphics/general/SaveAs16.gif")));
297         toolbarSaveAsButton.setToolTipText("Save As");
298         toolbarSaveAsButton.addActionListener(new java.awt.event.ActionListener JavaDoc() {
299             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
300                 saveAsMenuItemActionPerformed(evt);
301             }
302         });
303
304         jToolBar1.add(toolbarSaveAsButton);
305
306         jPanel1.setMaximumSize(new java.awt.Dimension JavaDoc(8, 8)); //8, 32767
307
jToolBar1.add(jPanel1);
308
309         toolbarPreferencesButton.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/toolbarButtonGraphics/general/Preferences16.gif")));
310         toolbarPreferencesButton.setToolTipText("Preferences");
311         toolbarPreferencesButton.addActionListener(new java.awt.event.ActionListener JavaDoc() {
312             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
313                 toolbarPreferencesButtonActionPerformed(evt);
314             }
315         });
316
317         jToolBar1.add(toolbarPreferencesButton);
318
319
320         getContentPane().add(jToolBar1, java.awt.BorderLayout.NORTH);
321
322         fileMenu.setText("File");
323         newMenu.setText("New");
324
325         newSchemaMenuItem.setText("Schema");
326         newSchemaMenuItem.addActionListener(new java.awt.event.ActionListener JavaDoc() {
327             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
328                 newSchemaMenuItemActionPerformed(evt);
329             }
330         });
331
332         newMenu.add(newSchemaMenuItem);
333
334         newQueryMenuItem.setText("MDX Query");
335         newQueryMenuItem.addActionListener(new java.awt.event.ActionListener JavaDoc() {
336             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
337                 newQueryMenuItemActionPerformed(evt);
338             }
339         });
340
341         newMenu.add(newQueryMenuItem);
342
343         newJDBCExplorerMenuItem.setText("JDBC Explorer");
344         newJDBCExplorerMenuItem.addActionListener(new java.awt.event.ActionListener JavaDoc() {
345             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
346                 newJDBCExplorerMenuItemActionPerformed(evt);
347             }
348         });
349
350         newMenu.add(newJDBCExplorerMenuItem);
351
352         fileMenu.add(newMenu);
353
354         openMenuItem.setText("Open");
355         openMenuItem.addActionListener(new java.awt.event.ActionListener JavaDoc() {
356             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
357                 openMenuItemActionPerformed(evt);
358             }
359         });
360
361         fileMenu.add(openMenuItem);
362
363         saveMenuItem.setText("Save");
364         saveMenuItem.addActionListener(new java.awt.event.ActionListener JavaDoc() {
365             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
366                 saveMenuItemActionPerformed(evt);
367             }
368         });
369
370         fileMenu.add(saveMenuItem);
371
372         saveAsMenuItem.setText("Save As ...");
373         saveAsMenuItem.addActionListener(new java.awt.event.ActionListener JavaDoc() {
374             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
375                 saveAsMenuItemActionPerformed(evt);
376             }
377         });
378
379         fileMenu.add(saveAsMenuItem);
380
381         //add last used
382
fileMenu.add(jSeparator2);
383
384         lastUsed1MenuItem.setText(workbenchProperties.getProperty("lastUsed1"));
385         lastUsed1MenuItem.addActionListener(new java.awt.event.ActionListener JavaDoc() {
386             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
387                 lastUsed1MenuItemActionPerformed(evt);
388             }
389         });
390         fileMenu.add(lastUsed1MenuItem);
391
392         lastUsed2MenuItem.setText(workbenchProperties.getProperty("lastUsed2"));
393         lastUsed2MenuItem.addActionListener(new java.awt.event.ActionListener JavaDoc() {
394             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
395                 lastUsed2MenuItemActionPerformed(evt);
396             }
397         });
398         fileMenu.add(lastUsed2MenuItem);
399
400         lastUsed3MenuItem.setText(workbenchProperties.getProperty("lastUsed3"));
401         lastUsed3MenuItem.addActionListener(new java.awt.event.ActionListener JavaDoc() {
402             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
403                 lastUsed3MenuItemActionPerformed(evt);
404             }
405         });
406         fileMenu.add(lastUsed3MenuItem);
407
408         lastUsed4MenuItem.setText(workbenchProperties.getProperty("lastUsed4"));
409         lastUsed4MenuItem.addActionListener(new java.awt.event.ActionListener JavaDoc() {
410             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
411                 lastUsed4MenuItemActionPerformed(evt);
412             }
413         });
414         fileMenu.add(lastUsed4MenuItem);
415
416         updateLastUsedMenu();
417         fileMenu.add(jSeparator1);
418
419         exitMenuItem.setText("Exit");
420         exitMenuItem.addActionListener(new java.awt.event.ActionListener JavaDoc() {
421             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
422                 exitMenuItemActionPerformed(evt);
423             }
424         });
425
426         fileMenu.add(exitMenuItem);
427
428         menuBar.add(fileMenu);
429
430         editMenu.setText("Edit");
431         cutMenuItem.setText("Cut");
432         editMenu.add(cutMenuItem);
433
434         copyMenuItem.setText("Copy");
435         editMenu.add(copyMenuItem);
436
437         pasteMenuItem.setText("Paste");
438         editMenu.add(pasteMenuItem);
439
440         deleteMenuItem.setText("Delete");
441         editMenu.add(deleteMenuItem);
442
443         menuBar.add(editMenu);
444         editMenu.add(pasteMenuItem);
445
446         viewMenu.setText("View");
447         viewXMLMenuItem.setText("View XML");
448         viewXMLMenuItem.addActionListener(new java.awt.event.ActionListener JavaDoc() {
449             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
450                 viewXMLMenuItemActionPerformed(evt);
451             }
452         });
453         viewMenu.add(viewXMLMenuItem);
454         menuBar.add(viewMenu);
455
456         toolsMenu.setText("Tools");
457         preferencesMenuItem.setText("Preferences");
458         preferencesMenuItem.addActionListener(new java.awt.event.ActionListener JavaDoc() {
459             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
460                 toolbarPreferencesButtonActionPerformed(evt);
461             }
462         });
463         toolsMenu.add(preferencesMenuItem);
464         menuBar.add(toolsMenu);
465
466
467         windowMenu.setText("Windows");
468
469         cascadeMenuItem = new javax.swing.JMenuItem JavaDoc();
470         cascadeMenuItem.setText("Cascade Windows");
471         cascadeMenuItem.addActionListener(new java.awt.event.ActionListener JavaDoc() {
472             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
473                 cascadeMenuItemActionPerformed(evt);
474             }
475         });
476
477         tileMenuItem = new javax.swing.JMenuItem JavaDoc();
478         tileMenuItem.setText("Tile Windows");
479         tileMenuItem.addActionListener(new java.awt.event.ActionListener JavaDoc() {
480             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
481                 tileMenuItemActionPerformed(evt);
482             }
483         });
484
485         closeAllMenuItem = new javax.swing.JMenuItem JavaDoc();
486         closeAllMenuItem.setText("Close All");
487         closeAllMenuItem.addActionListener(new java.awt.event.ActionListener JavaDoc() {
488             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
489                 closeAllMenuItemActionPerformed(evt);
490             }
491         });
492
493         minimizeMenuItem = new javax.swing.JMenuItem JavaDoc();
494         minimizeMenuItem.setText("Minimize All");
495         minimizeMenuItem.addActionListener(new java.awt.event.ActionListener JavaDoc() {
496             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
497                 minimizeMenuItemActionPerformed(evt);
498             }
499         });
500
501         maximizeMenuItem = new javax.swing.JMenuItem JavaDoc();
502         maximizeMenuItem.setText("Maximize All");
503         maximizeMenuItem.addActionListener(new java.awt.event.ActionListener JavaDoc() {
504             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
505                 maximizeMenuItemActionPerformed(evt);
506             }
507         });
508
509         menuBar.add(windowMenu);
510
511         aboutMenuItem.setText("About");
512         aboutMenuItem.addActionListener(new java.awt.event.ActionListener JavaDoc() {
513             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
514                 aboutMenuItemActionPerformed(evt);
515             }
516         });
517
518         helpMenu.add(aboutMenuItem);
519
520         helpMenu.setText("Help");
521         menuBar.add(helpMenu);
522
523         setJMenuBar(menuBar);
524
525         pack();
526     }
527
528     private void tileMenuItemActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
529         Dimension JavaDoc dsize = desktopPane.getSize();
530         int desktopW = (int) dsize.getWidth();
531         int desktopH = (int) dsize.getHeight();
532         int darea = (int) (desktopW*desktopH);
533
534         double eacharea= darea/(schemaWindowMap.size()+mdxWindows.size());
535         int wh = (int) Math.sqrt(eacharea);
536
537         Iterator JavaDoc []its = new Iterator JavaDoc[2];
538
539         its[0] = schemaWindowMap.keySet().iterator(); // keys = schemaframes
540
its[1] = mdxWindows.iterator();
541
542         JInternalFrame sf=null;
543         int x=0, y=0;
544
545         try {
546             for (int i=0; i<its.length; i++) {
547                 Iterator JavaDoc it = its[i];
548                 while (it.hasNext()) {
549                     sf = (JInternalFrame) it.next();
550                     if (sf != null) {
551                         if (sf.isIcon()) {
552                             //sf.setIcon(false);
553
} else {
554                             sf.setMaximum(false);
555                             sf.moveToFront();
556                             if ((x >= desktopW) || (((desktopW-x)*wh) < (eacharea/2))) {
557                                 // move to next row of windows
558
y+=wh;
559                                 x=0;
560                             }
561                             int sfwidth = ((x+wh) < desktopW ? wh : desktopW-x);
562                             int sfheight = ((y+wh) < desktopH ? wh : desktopH-y);
563                             sf.setBounds(x, y, sfwidth, sfheight);
564                             x += sfwidth;
565                         }
566                     }
567                 }
568             }
569         } catch (Exception JavaDoc ex) {
570             ex.printStackTrace();
571             //do nothing
572
}
573     }
574     // cascade all the indows open in schema workbench
575
private void cascadeMenuItemActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
576         Iterator JavaDoc []its = new Iterator JavaDoc[2];
577
578         its[0] = schemaWindowMap.keySet().iterator(); // keys = schemaframes
579
its[1] = mdxWindows.iterator();
580         int sfi = 1;
581         JInternalFrame sf=null;
582
583         try {
584             for (int i=0; i<its.length; i++) {
585                 Iterator JavaDoc it = its[i];
586                 while (it.hasNext()) {
587                     sf = (JInternalFrame) it.next();
588                     if (sf != null) {
589                         if (sf.isIcon()) {
590                             //sf.setIcon(false);
591
} else {
592                             sf.setMaximum(false);
593                             sf.setLocation(30*sfi, 30*sfi);
594                             sf.moveToFront();
595                             sf.setSelected(true);
596                             sfi++;
597                         }
598                     }
599                 }
600             }
601         } catch (Exception JavaDoc ex) {
602             ex.printStackTrace();
603             //do nothing
604
}
605     }
606
607     // close all the windows open in schema workbench
608
private void closeAllMenuItemActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
609         closeAllSchemaFrames(false);
610     }
611
612     private void closeAllSchemaFrames(boolean exitAfterClose) {
613         Object JavaDoc [][] its = new Object JavaDoc[2][]; // initialize row dimension
614
its[0] = schemaWindowMap.keySet().toArray(); // keys = schemaframes
615
its[1] = mdxWindows.toArray();
616         JInternalFrame sf=null;
617
618         try {
619             for (int i=0; i<its.length; i++) {
620                 for (int j=0; j<its[i].length; j++) {
621                     sf = (JInternalFrame) its[i][j];
622                     if (sf != null) {
623                         if (sf.getContentPane().getComponent(0) instanceof SchemaExplorer) {
624                             SchemaExplorer se = (SchemaExplorer) sf.getContentPane().getComponent(0);
625                             sf.setSelected(true);
626                             int response = confirmFrameClose(sf, se);
627                             if (response == 2) { // cancel
628
return;
629                             }
630                             if (response == 3) { // not dirty
631
sf.setClosed(true);
632                             }
633                         }
634                     }
635                 }
636             }
637             // exit Schema Workbench if no files are open
638
if (((schemaWindowMap.keySet().size()) == 0) && exitAfterClose) {
639                 System.exit(0);
640             }
641         } catch (Exception JavaDoc ex) {
642             ex.printStackTrace();
643         }
644     }
645
646     private int confirmFrameClose(JInternalFrame schemaFrame, SchemaExplorer se) {
647         if (se.isDirty()) {
648             JMenuItem schemaMenuItem = (JMenuItem) schemaWindowMap.get(desktopPane.getSelectedFrame());
649             int answer = JOptionPane.showConfirmDialog(null,
650                                 "Save changes to "+se.getSchemaFile()+"?" ,
651                                 "Schema", JOptionPane.YES_NO_CANCEL_OPTION);
652             switch(answer) { // yes=0 ;no=1 ;cancel=2
653
case 0:
654                 saveMenuItemActionPerformed(null);
655                 schemaWindowMap.remove(schemaFrame); //schemaWindowMap.remove(se.getSchemaFile());
656
updateMDXCatalogList();
657                 schemaFrame.dispose();
658                 windowMenu.remove(schemaMenuItem); // follow this by removing file from schemaWindowMap
659
break;
660             case 1:
661                 schemaFrame.dispose();
662                 schemaWindowMap.remove(schemaFrame);
663                 windowMenu.remove(schemaMenuItem);
664                 break;
665             case 2:
666                 try {
667                     schemaFrame.setClosed(false);
668                     schemaFrame.show();
669                 } catch (Exception JavaDoc ex) {
670                     ex.printStackTrace();
671                 }
672             }
673             return answer;
674         }
675         return 3;
676     }
677
678     private void minimizeMenuItemActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
679         Iterator JavaDoc []its = new Iterator JavaDoc[2];
680
681         its[0] = schemaWindowMap.keySet().iterator(); // values = schemaframes
682
its[1] = mdxWindows.iterator();
683         JInternalFrame sf;
684
685         try {
686             for (int i=0; i<its.length; i++) {
687                 Iterator JavaDoc it = its[i];
688                 while (it.hasNext()) {
689                     sf = (JInternalFrame) it.next();
690                     if (sf != null) {
691                         if (sf.isIcon()) {
692                             //sf.setIcon(false);
693
} else {
694                             sf.setIcon(true);
695                         }
696                     }
697                 }
698             }
699         } catch (Exception JavaDoc ex) {
700             ex.printStackTrace();
701             //do nothing
702
}
703     }
704
705     private void maximizeMenuItemActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
706         Iterator JavaDoc []its = new Iterator JavaDoc[2];
707
708         its[0] = schemaWindowMap.keySet().iterator(); // values = schemaframes
709
its[1] = mdxWindows.iterator();
710         JInternalFrame sf;
711
712         try {
713             for (int i=0; i<its.length; i++) {
714                 Iterator JavaDoc it = its[i];
715                 while (it.hasNext()) {
716                     sf = (JInternalFrame) it.next();
717                     if (sf != null) {
718                         sf.setIcon(false);
719                         sf.setMaximum(true);
720                     }
721                 }
722             }
723         } catch (Exception JavaDoc ex) {
724             ex.printStackTrace();
725             //do nothing
726
}
727     }
728
729     private void aboutMenuItemActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
730         try {
731             JEditorPane jEditorPane = new JEditorPane(myClassLoader.getResource(resources.getString("version")).toString());
732             jEditorPane.setEditable(false);
733             JScrollPane jScrollPane = new JScrollPane(jEditorPane);
734             JPanel jPanel = new JPanel();
735             jPanel.setLayout(new java.awt.BorderLayout JavaDoc());
736             jPanel.add(jScrollPane, java.awt.BorderLayout.CENTER);
737
738             JInternalFrame jf = new JInternalFrame();
739             jf.setTitle("About");
740             jf.getContentPane().add(jPanel);
741
742             Dimension JavaDoc screenSize = this.getSize();
743             int aboutW = 400;
744             int aboutH = 300;
745             int width = (screenSize.width / 2) - (aboutW/2);
746             int height = (screenSize.height / 2) - (aboutH/2) - 100; ;
747             jf.setBounds(width, height, aboutW, aboutH);
748             jf.setClosable(true);
749
750             desktopPane.add(jf);
751
752             jf.setVisible(true);
753             jf.show();
754         } catch (Exception JavaDoc ex) {
755             ex.printStackTrace();
756         }
757
758     }
759     private void newJDBCExplorerMenuItemActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
760         try {
761             if (this.jdbcDriverClassName==null || this.jdbcConnectionUrl==null) {
762                 throw new Exception JavaDoc("Driver="+this.jdbcDriverClassName+"\nConn Url="+this.jdbcConnectionUrl);
763             }
764
765             JInternalFrame jf = new JInternalFrame();
766             jf.setTitle("JDBC Explorer - " + this.jdbcConnectionUrl);
767
768             Class.forName(this.jdbcDriverClassName);
769             java.sql.Connection JavaDoc con = java.sql.DriverManager.getConnection(this.jdbcConnectionUrl);
770
771             JDBCExplorer jdbce = new JDBCExplorer(con);
772
773             jf.getContentPane().add(jdbce);
774             jf.setBounds(0, 0, 500, 480);
775             jf.setClosable(true);
776             jf.setIconifiable(true);
777             jf.setMaximizable(true);
778             jf.setResizable(true);
779             jf.setVisible(true);
780
781             desktopPane.add(jf);
782
783             jf.show();
784         } catch (Exception JavaDoc ex) {
785             JOptionPane.showMessageDialog(this, "Database connection could not be done.\n"+ex.getMessage(), "Database Connection Error" , JOptionPane.ERROR_MESSAGE);
786             //ex.printStackTrace();
787
}
788     }
789
790     private void toolbarPreferencesButtonActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
791         PreferencesDialog pd = new PreferencesDialog(this, true);
792         pd.setJDBCConnectionUrl(jdbcConnectionUrl);
793         pd.setJDBCDriverClassName(jdbcDriverClassName);
794
795         pd.show();
796
797         if (pd.accepted()) {
798             jdbcConnectionUrl = pd.getJDBCConnectionUrl();
799             jdbcDriverClassName = pd.getJDBCDriverClassName();
800
801             workbenchProperties.setProperty("jdbcDriverClassName", jdbcDriverClassName);
802             workbenchProperties.setProperty("jdbcConnectionUrl", jdbcConnectionUrl);
803
804         }
805
806     }
807
808
809     private void newSchemaMenuItemActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
810         MondrianProperties.instance();
811         /* user's default directory. This default depends on the operating system.
812          * It is typically the "My Documents" folder on Windows, and the
813          * user's home directory on Unix.
814          */

815         File defaultDir = FileSystemView.getFileSystemView().getDefaultDirectory();
816         File outputFile ; //=new File(defaultDir, "Schema"+ newSchema +".xml");
817
do {
818             outputFile = new File(defaultDir, "Schema"+ newSchema++ +".xml");
819         } while (outputFile.exists());
820         /*
821         try {
822
823             FileWriter out = new FileWriter(outputFile);
824             out.write("<?xml version=\"1.0\"?>\n\r");
825             out.write("<Schema name=\"New Schema "+newSchema+"\">\n\r"); //name=\"FoodMart\"
826             out.write("</Schema>\n\r");
827             out.close();
828             newSchema++;
829         } catch (IOException e) {
830             e.printStackTrace();
831         }
832          */

833         openSchemaFrame(outputFile, true);
834     }
835
836     private void newQueryMenuItemActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
837
838         /*
839         System.out.println("connection.getCatalogName()==="+connection.getCatalogName());
840         System.out.println("connection.getProperty(catalog)==="+connection.getProperty("catalog"));
841         System.out.println("connection.getSchema().getName()==="+connection.getSchema().getName());
842          */

843         JMenuItem schemaMenuItem = (JMenuItem) schemaWindowMap.get(desktopPane.getSelectedFrame());
844
845         final JInternalFrame jf = new JInternalFrame();
846         jf.setTitle("MDX Query");
847         QueryPanel qp = new QueryPanel();
848
849         jf.getContentPane().add(qp);
850         jf.setBounds(0, 0, 500, 480);
851         jf.setClosable(true);
852         jf.setIconifiable(true);
853         jf.setMaximizable(true);
854         jf.setResizable(true);
855         jf.setVisible(true);
856
857         desktopPane.add(jf);
858         jf.show();
859         try {
860             jf.setSelected(true);
861         } catch(Exception JavaDoc ex) {
862             // do nothing
863
}
864
865         // add the mdx frame to this set of mdx frames for cascading method
866
mdxWindows.add(jf);
867
868         // create mdx menu item
869
final javax.swing.JMenuItem JavaDoc queryMenuItem = new javax.swing.JMenuItem JavaDoc();
870         queryMenuItem.setText(windowMenuMapIndex + " MDX"); //file.getName()
871
queryMenuItem.addActionListener(new java.awt.event.ActionListener JavaDoc() {
872             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
873                 try {
874                     if (jf.isIcon()) {
875                         jf.setIcon(false);
876                     } else {
877                         jf.setSelected(true);
878                     }
879                 } catch (Exception JavaDoc ex) {
880                     ex.printStackTrace();
881                 }
882             }
883         });
884
885         // disable mdx frame close operation to provide our handler
886
// to remove frame object from mdxframeset before closing
887
jf.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
888
889         jf.addInternalFrameListener(new InternalFrameAdapter JavaDoc() {
890             public void internalFrameClosing(InternalFrameEvent JavaDoc e) {
891                 mdxWindows.remove(jf);
892                 jf.dispose();
893                 windowMenu.remove(queryMenuItem); // follow this by removing file from schemaWindowMap
894
return;
895             }
896         });
897
898         windowMenu.add(queryMenuItem,-1);
899         windowMenu.add(jSeparator3,-1);
900         windowMenu.add(cascadeMenuItem,-1);
901         windowMenu.add(tileMenuItem,-1);
902         windowMenu.add(minimizeMenuItem, -1);
903         windowMenu.add(maximizeMenuItem, -1);
904         windowMenu.add(closeAllMenuItem,-1);
905
906         qp.setMenuItem(queryMenuItem);
907         qp.setSchemaWindowMap(schemaWindowMap);
908         //===qp.setConnection(connection);
909
qp.setWindowMenuIndex(windowMenuMapIndex++);
910         if (schemaMenuItem != null) {
911             qp.initConnection(schemaMenuItem.getText());
912         } else {
913             JOptionPane.showMessageDialog(this,"No Mondrian connection. Select a Schema to connect.", "Alert", JOptionPane.WARNING_MESSAGE);
914         }
915     }
916
917     // inform all opened mdx query windows about the list of opened schema files
918
private void updateMDXCatalogList() {
919         Iterator JavaDoc it = mdxWindows.iterator();
920         while (it.hasNext()) {
921             JInternalFrame elem = (JInternalFrame) it.next();
922             QueryPanel qp = (QueryPanel) elem.getContentPane().getComponent(0);
923             qp.setSchemaWindowMap(schemaWindowMap);
924         }
925     }
926
927
928     private void saveAsMenuItemActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
929         JInternalFrame jf = desktopPane.getSelectedFrame();
930         if (jf.getContentPane().getComponent(0) instanceof SchemaExplorer) {
931             SchemaExplorer se = (SchemaExplorer) jf.getContentPane().getComponent(0);
932             java.io.File JavaDoc schemaFile = se.getSchemaFile();
933             java.io.File JavaDoc oldSchemaFile = schemaFile;
934             java.io.File JavaDoc suggSchemaFile = new File(schemaFile, se.getSchema().name.trim()+".xml");
935             MondrianGuiDef.Schema schema = se.getSchema();
936             JFileChooser jfc = new JFileChooser();
937             MondrianProperties.instance();
938             //===jfc.setSelectedFile(schemaFile);
939
jfc.setSelectedFile(suggSchemaFile);
940             if (jfc.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
941                 try {
942                     schemaFile = jfc.getSelectedFile();
943                     if (!oldSchemaFile.equals(schemaFile) && schemaFile.exists()) { //new file already exists, check for overwrite
944
int answer = JOptionPane.showConfirmDialog(null, schemaFile.getAbsolutePath() + " file already exists. Do you want to replace it?", "Save As", JOptionPane.YES_NO_OPTION);
945                         if (answer == 1) { // no=1 ; yes=0
946
return;
947                         }
948                     }
949
950                     if (se.isNewFile() && !oldSchemaFile.equals(schemaFile)) {
951                         oldSchemaFile.delete();
952                     }
953
954                     if (se.isNewFile()) {
955                         se.setNewFile(false);
956                     }
957                     se.setDirty(false);
958                     se.setDirtyFlag(false);
959
960                     XMLOutput out = new XMLOutput(new java.io.FileWriter JavaDoc(jfc.getSelectedFile()));
961                     schema.displayXML(out);
962                     se.setSchemaFile(schemaFile);
963                     se.setTitle(); //sets title of iframe
964
setLastUsed(jfc.getSelectedFile().getName(), jfc.getSelectedFile().toURI().toURL().toString());
965                     // update menu item with new file name, then update catalog list for mdx queries
966
JMenuItem sMenuItem = (JMenuItem) schemaWindowMap.get(jf);
967                     String JavaDoc mtexttokens[] = sMenuItem.getText().split(" ");
968                     sMenuItem.setText(mtexttokens[0]+" "+se.getSchemaFile().getName());
969                     updateMDXCatalogList(); // schema menu item updated, now update mdx query windows with updated catallog list
970
} catch (Exception JavaDoc ex) {
971                     ex.printStackTrace();
972                 }
973             }
974         }
975     }
976
977     private void viewXMLMenuItemActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
978         JInternalFrame jf = desktopPane.getSelectedFrame();
979         boolean oldValue = viewXMLMenuItem.getState();
980         if (jf!=null && jf.getContentPane().getComponent(0) instanceof SchemaExplorer) {
981             SchemaExplorer se = (SchemaExplorer) jf.getContentPane().getComponent(0);
982             // call schema explorer's view xml event and update the workbench's view menu accordingly'
983
((JCheckBoxMenuItem) evt.getSource()).setSelected(se.editMode(evt));
984             return;
985         }
986         viewXMLMenuItem.setSelected(! oldValue);
987     }
988
989     private void saveMenuItemActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
990         JInternalFrame jf = desktopPane.getSelectedFrame();
991         if (jf.getContentPane().getComponent(0) instanceof SchemaExplorer) {
992             SchemaExplorer se = (SchemaExplorer) jf.getContentPane().getComponent(0);
993
994             java.io.File JavaDoc schemaFile = se.getSchemaFile();
995
996             if (se.isNewFile()) {
997                 saveAsMenuItemActionPerformed(evt);
998                 return;
999             }
1000
1001            se.setDirty(false);
1002            se.setDirtyFlag(false);
1003            se.setTitle(); //sets title of iframe
1004

1005            MondrianGuiDef.Schema schema = se.getSchema();
1006            MondrianProperties.instance();
1007            try {
1008                XMLOutput out = new XMLOutput(new FileWriter(schemaFile));
1009                schema.displayXML(out);
1010                setLastUsed(schemaFile.getName(), schemaFile.toURI().toURL().toString());
1011            } catch (Exception JavaDoc ex) {
1012                ex.printStackTrace();
1013            }
1014        }
1015    }
1016
1017    /**
1018     * Set last used in properties file
1019     *
1020     * @param name
1021     * @param url
1022     */

1023    private void setLastUsed(String JavaDoc name, String JavaDoc url) {
1024        int match = 4;
1025        String JavaDoc luName = null;
1026        String JavaDoc propname = null;
1027        String JavaDoc lastUsed = "lastUsed";
1028        String JavaDoc lastUsedUrl = "lastUsedUrl";
1029        for( int i=1; i<=4; i++) {
1030            propname = lastUsed+i;
1031            luName = workbenchProperties.getProperty(propname) ;
1032
1033            if ( luName != null && luName.equals(name)) {
1034                match=i;
1035                break;
1036            }
1037        }
1038
1039        for(int i=match; i>1; i--) {
1040            if (workbenchProperties.getProperty(lastUsed+(i-1)) != null) {
1041                workbenchProperties.setProperty(lastUsed+i, workbenchProperties.getProperty(lastUsed+(i-1)));
1042                workbenchProperties.setProperty(lastUsedUrl+i, workbenchProperties.getProperty(lastUsedUrl+(i-1)));
1043            }
1044        }
1045        /*
1046        if ( workbenchProperties.getProperty(LAST_USED1) == null ||
1047                (! name.equals(workbenchProperties.getProperty(LAST_USED1))) ) {
1048
1049            if (workbenchProperties.getProperty(LAST_USED3) != null) {
1050                workbenchProperties.setProperty(LAST_USED4, workbenchProperties.getProperty(LAST_USED3));
1051                workbenchProperties.setProperty(LAST_USED4_URL, workbenchProperties.getProperty(LAST_USED3_URL));
1052            }
1053            if (workbenchProperties.getProperty(LAST_USED2) != null) {
1054                workbenchProperties.setProperty(LAST_USED3, workbenchProperties.getProperty(LAST_USED2));
1055                workbenchProperties.setProperty(LAST_USED3_URL, workbenchProperties.getProperty(LAST_USED2_URL));
1056            }
1057            if (workbenchProperties.getProperty(LAST_USED1) != null) {
1058                workbenchProperties.setProperty(LAST_USED2, workbenchProperties.getProperty(LAST_USED1));
1059                workbenchProperties.setProperty(LAST_USED2_URL, workbenchProperties.getProperty(LAST_USED1_URL));
1060            }
1061        }
1062         */

1063        workbenchProperties.setProperty(LAST_USED1, name);
1064        workbenchProperties.setProperty(LAST_USED1_URL, url);
1065        updateLastUsedMenu();
1066        storeWorkbenchProperties();
1067    }
1068
1069    private void updateLastUsedMenu() {
1070        if (workbenchProperties.getProperty(LAST_USED1) == null) {
1071            jSeparator2.setVisible(false); } else {
1072            jSeparator2.setVisible(true); }
1073
1074        if (workbenchProperties.getProperty(LAST_USED1) != null) {
1075            lastUsed1MenuItem.setVisible(true);} else {
1076            lastUsed1MenuItem.setVisible(false); }
1077        if (workbenchProperties.getProperty(LAST_USED2) != null) {
1078            lastUsed2MenuItem.setVisible(true); } else {
1079            lastUsed2MenuItem.setVisible(false); }
1080        if (workbenchProperties.getProperty(LAST_USED3) != null) {
1081            lastUsed3MenuItem.setVisible(true); } else {
1082            lastUsed3MenuItem.setVisible(false); }
1083        if (workbenchProperties.getProperty(LAST_USED4) != null) {
1084            lastUsed4MenuItem.setVisible(true); } else {
1085            lastUsed4MenuItem.setVisible(false); }
1086
1087        lastUsed1MenuItem.setText(workbenchProperties.getProperty(LAST_USED1));
1088        lastUsed2MenuItem.setText(workbenchProperties.getProperty(LAST_USED2));
1089        lastUsed3MenuItem.setText(workbenchProperties.getProperty(LAST_USED3));
1090        lastUsed4MenuItem.setText(workbenchProperties.getProperty(LAST_USED4));
1091    }
1092
1093    private void lastUsed1MenuItemActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
1094        try {
1095            openSchemaFrame(new File(new URI JavaDoc(workbenchProperties.getProperty(LAST_USED1_URL))), false);
1096        } catch (Exception JavaDoc e) //catch (URISyntaxException e)
1097
{
1098            e.printStackTrace();
1099        }
1100    }
1101
1102    private void lastUsed2MenuItemActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
1103        try {
1104            /*
1105                workbenchProperties.setProperty(LAST_USED2, workbenchProperties.getProperty(LAST_USED1));
1106                workbenchProperties.setProperty(LAST_USED2_URL, workbenchProperties.getProperty(LAST_USED1_URL));
1107             */

1108            openSchemaFrame(new File(new URI JavaDoc(workbenchProperties.getProperty(LAST_USED2_URL))), false);
1109            setLastUsed(workbenchProperties.getProperty(LAST_USED2), workbenchProperties.getProperty(LAST_USED2_URL));
1110        } catch (URISyntaxException JavaDoc e) {
1111            e.printStackTrace();
1112        }
1113    }
1114
1115    private void lastUsed3MenuItemActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
1116        try {
1117            openSchemaFrame(new File(new URI JavaDoc(workbenchProperties.getProperty(LAST_USED3_URL))), false);
1118            setLastUsed(workbenchProperties.getProperty(LAST_USED3), workbenchProperties.getProperty(LAST_USED3_URL));
1119        } catch (URISyntaxException JavaDoc e) {
1120            e.printStackTrace();
1121        }
1122    }
1123
1124    private void lastUsed4MenuItemActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
1125        try {
1126            openSchemaFrame(new File(new URI JavaDoc(workbenchProperties.getProperty(LAST_USED4_URL))), false);
1127            setLastUsed(workbenchProperties.getProperty(LAST_USED4), workbenchProperties.getProperty(LAST_USED4_URL));
1128        } catch (URISyntaxException JavaDoc e) {
1129            e.printStackTrace();
1130        }
1131    }
1132
1133    /**
1134     *
1135     * @param file
1136     */

1137    private void openSchemaFrame(File file, boolean newFile) {
1138        try {
1139
1140            if (! newFile) {
1141                // check if file not already open
1142
if (checkFileOpen(file)) {
1143                    return;
1144                }
1145                // check if schema file exists
1146
if (! file.exists()) {
1147                    JOptionPane.showMessageDialog(this, file.getAbsolutePath() + " File not found.", "Alert", JOptionPane.WARNING_MESSAGE);
1148                    return;
1149                }
1150                // check if file is writable
1151
if (! file.canWrite()) {
1152                    JOptionPane.showMessageDialog(this, file.getAbsolutePath() + " File is locked by another application.", "Alert", JOptionPane.WARNING_MESSAGE);
1153                    return;
1154                }
1155                // check if schema file is valid by initiating a mondrian connection
1156
try {
1157                    // this connection parses the catalog file which if invalid will throw exception
1158
String JavaDoc connectString = "Provider=mondrian;" + "Jdbc=" + jdbcConnectionUrl + ";" + "Catalog=" + file.toURL().toString();
1159                    connection = DriverManager.getConnection(connectString, null, false);
1160                } catch (Exception JavaDoc ex) {
1161                    System.out.println("Exception : Schema file is invalid."+ex.getMessage());
1162                    //ex.printStackTrace(); //====
1163
} catch (Error JavaDoc err) {
1164                    System.out.println("Error : Schema file is invalid."+err.getMessage());
1165                    //err.printStackTrace(); //====
1166
}
1167            }
1168
1169            final JInternalFrame schemaFrame = new JInternalFrame();
1170            schemaFrame.setTitle("Schema - " + file.getName());
1171            //===Class.forName(jdbcDriverClassName);
1172
jdbcMetaData = new JDBCMetaData(jdbcDriverClassName, jdbcConnectionUrl);
1173
1174            schemaFrame.getContentPane().add(new SchemaExplorer(file, jdbcMetaData, newFile, schemaFrame));
1175
1176            String JavaDoc errorOpening = ((SchemaExplorer) schemaFrame.getContentPane().getComponent(0)).getErrMsg() ;
1177            if (errorOpening != null) {
1178                JOptionPane.showMessageDialog(this,errorOpening, "Error", JOptionPane.ERROR_MESSAGE);
1179                schemaFrame.setClosed(true);
1180                return;
1181            }
1182
1183            schemaFrame.setBounds(0, 0, 1000, 650);
1184            schemaFrame.setClosable(true);
1185            schemaFrame.setIconifiable(true);
1186            schemaFrame.setMaximizable(true);
1187            schemaFrame.setResizable(true);
1188            schemaFrame.setVisible(true);
1189
1190            desktopPane.add(schemaFrame, javax.swing.JLayeredPane.DEFAULT_LAYER);
1191            schemaFrame.show();
1192            schemaFrame.setMaximum(true);
1193
1194            // display jdbc connection status warning, if connection is uncsuccessful
1195
if (jdbcMetaData.getErrMsg() != null) {
1196                JOptionPane.showMessageDialog(this, "Database connection could not be done.\n"+jdbcMetaData.getErrMsg()+"\n All validations related to database will be ignored.", "Alert" , JOptionPane.WARNING_MESSAGE);
1197            }
1198
1199            final javax.swing.JMenuItem JavaDoc schemaMenuItem = new javax.swing.JMenuItem JavaDoc();
1200            schemaMenuItem.setText(windowMenuMapIndex++ + " " +file.getName());
1201            schemaMenuItem.addActionListener(new java.awt.event.ActionListener JavaDoc() {
1202                public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
1203                    try {
1204                        if (schemaFrame.isIcon()) {
1205                            schemaFrame.setIcon(false);
1206                        } else {
1207                            schemaFrame.setSelected(true);
1208                        }
1209                    } catch (Exception JavaDoc ex) {
1210                        ex.printStackTrace();
1211                    }
1212                }
1213            });
1214
1215            windowMenu.add(schemaMenuItem,0);
1216            windowMenu.setEnabled(true);
1217
1218            windowMenu.add(jSeparator3,-1);
1219            windowMenu.add(cascadeMenuItem,-1);
1220            windowMenu.add(tileMenuItem,-1);
1221            windowMenu.add(minimizeMenuItem, -1);
1222            windowMenu.add(maximizeMenuItem, -1);
1223            windowMenu.add(closeAllMenuItem,-1);
1224
1225            // add the file details in menu map
1226
schemaWindowMap.put(schemaFrame, schemaMenuItem);
1227            updateMDXCatalogList();
1228
1229            schemaFrame.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
1230
1231            schemaFrame.addInternalFrameListener(new InternalFrameAdapter JavaDoc() {
1232                public void internalFrameClosing(InternalFrameEvent JavaDoc e) {
1233                    if (schemaFrame.getContentPane().getComponent(0) instanceof SchemaExplorer) {
1234                        SchemaExplorer se = (SchemaExplorer) schemaFrame.getContentPane().getComponent(0);
1235                        int response = confirmFrameClose(schemaFrame, se);
1236                        if (response == 3) { // not dirty
1237
if (se.isNewFile()) {
1238                            //System.out.println("File ==="+se.getSchemaFile()+" deleted=="+se.getSchemaFile().delete());
1239
se.getSchemaFile().delete();
1240                            }
1241                            // default case for no save and not dirty
1242
schemaWindowMap.remove(schemaFrame); //schemaWindowMap.remove(se.getSchemaFile());
1243
updateMDXCatalogList();
1244                            schemaFrame.dispose();
1245                            windowMenu.remove(schemaMenuItem);
1246                        }
1247                    }
1248                }
1249            });
1250
1251            schemaFrame.setFocusable(true);
1252            schemaFrame.addFocusListener(new FocusAdapter JavaDoc() {
1253                public void focusGained(FocusEvent JavaDoc e) {
1254                    if (schemaFrame.getContentPane().getComponent(0) instanceof SchemaExplorer) {
1255                        SchemaExplorer se = (SchemaExplorer) schemaFrame.getContentPane().getComponent(0);
1256                        viewXMLMenuItem.setSelected(se.isEditModeXML()); // update view menu based on schemaframe who gained focus
1257
}
1258                }
1259
1260                public void focusLost(FocusEvent JavaDoc e) {
1261                    if (schemaFrame.getContentPane().getComponent(0) instanceof SchemaExplorer) {
1262                        SchemaExplorer se = (SchemaExplorer) schemaFrame.getContentPane().getComponent(0);
1263                        viewXMLMenuItem.setSelected(se.isEditModeXML()); // update view menu based on
1264
}
1265                }
1266
1267            });
1268            viewXMLMenuItem.setSelected(false);
1269        } catch (Exception JavaDoc ex) {
1270            ex.printStackTrace();
1271        }
1272
1273    }
1274    private void openMenuItemActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
1275        JFileChooser jfc = new JFileChooser();
1276        try {
1277            jfc.setFileSelectionMode(JFileChooser.FILES_ONLY) ;
1278            jfc.setFileFilter(new javax.swing.filechooser.FileFilter JavaDoc() {
1279                public boolean accept(File pathname) {
1280                    return pathname.getName().toLowerCase().endsWith(".xml")
1281                    || pathname.isDirectory();
1282                }
1283                public String JavaDoc getDescription() {
1284                    return "Mondrian Schema files (*.xml)";
1285                }
1286
1287            });
1288            jfc.setCurrentDirectory(new File(new URI JavaDoc(workbenchProperties.getProperty(LAST_USED1_URL))));
1289        } catch (Exception JavaDoc ex) {
1290            //ex.printStackTrace();
1291
//System.out.println("==Could not set file chooser. last used file does not exist");
1292
}
1293        MondrianProperties.instance();
1294        if (jfc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
1295            try {
1296                //setLastUsed(jfc.getSelectedFile().getName(), jfc.getSelectedFile().toURL().toString());
1297
setLastUsed(jfc.getSelectedFile().getName(), jfc.getSelectedFile().toURI().toURL().toString());
1298            } catch (MalformedURLException JavaDoc e) {
1299                e.printStackTrace();
1300            }
1301
1302            openSchemaFrame(jfc.getSelectedFile(), false);
1303        }
1304    }
1305
1306    // checks if file already open in schema explorer
1307
private boolean checkFileOpen(File file) {
1308
1309        Iterator JavaDoc it = schemaWindowMap.keySet().iterator(); // keys=schemaframes
1310
while (it.hasNext()) {
1311            JInternalFrame elem = (JInternalFrame) it.next();
1312            File f = ((SchemaExplorer) elem.getContentPane().getComponent(0)).getSchemaFile();
1313            if (f.equals(file)) {
1314                try {
1315                    elem.setSelected(true); // make the schema file active
1316
return true;
1317                } catch(Exception JavaDoc ex) {
1318                    schemaWindowMap.remove(elem); // remove file from map as schema frame does not exist
1319
break;
1320                }
1321            }
1322        }
1323        return false;
1324
1325
1326        /* // file->schema frame
1327        JInternalFrame elem = (JInternalFrame) schemaWindowMap.get(file);
1328        if (elem != null) {
1329            try {
1330                elem.setSelected(true); // make the schema file active
1331                return true;
1332            } catch(Exception ex) {
1333                schemaWindowMap.remove(file); // remove file from map as schema frame does not exist
1334            }
1335        }
1336        return false;
1337         */

1338        /*
1339        Iterator it = schemaWindowMap.entrySet().iterator();
1340        while (it.hasNext()) {
1341            Map.Entry elem = (Map.Entry) it.next();
1342            File value = (File)elem.getValue();
1343            JInternalFrame key = (JInternalFrame)elem.getKey() ;
1344
1345            if ( value.equals(file) && (key.getContentPane().getComponent(0) instanceof SchemaExplorer) ) {
1346                try {
1347                    key.setSelected(true); // make the schema file active
1348                    return true;
1349                } catch(Exception ex) {
1350                    schemaWindowMap.remove(key); // remove file from map as schema frame does not exist
1351                    break;
1352                }
1353            }
1354        }
1355        return false;
1356         */

1357    }
1358
1359
1360    private void exitMenuItemActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
1361        storeWorkbenchProperties();
1362        closeAllSchemaFrames(true);
1363    }
1364
1365    /**
1366     * parseArgs - parse arguments passed into Workbench.
1367     *
1368     * @param args the command line arguments
1369     *
1370     * Right now, it's very simple. Just search through the list
1371     * of arguments. If it begins with -f=, then the rest is a file name.
1372     * Ignore any others. We can make this more complicated later if we
1373     * need to.
1374     */

1375    private void parseArgs(String JavaDoc args[]) {
1376        for (int argNum=0; argNum < args.length; argNum++) {
1377            if (args[argNum].startsWith("-f=")) {
1378                openFile = args[argNum].substring(3);
1379            }
1380        }
1381    }
1382
1383    public static String JavaDoc getTooltip(String JavaDoc titleName) {
1384        try {
1385            return resBundle.getString(titleName);
1386        } catch (MissingResourceException JavaDoc e) {
1387            return "No help available for '" + titleName + "'";
1388        }
1389    }
1390
1391    /**
1392     * @param args the command line arguments
1393     */

1394    public static void main(String JavaDoc args[]) {
1395        Workbench w = new Workbench();
1396        w.parseArgs(args);
1397        w.setSize(800, 600);
1398        // if user specified a file to open, do so now.
1399
if (w.openFile != null) {
1400            File f= new File(w.openFile);
1401            if (f.canRead()) {
1402                //w.openSchemaFrame(f.getAbsoluteFile());
1403
w.openSchemaFrame(f.getAbsoluteFile(), false); // parameter to indicate this is a new or existing catalog file
1404
}
1405        }
1406        w.show();
1407    }
1408
1409// Variables declaration - do not modify
1410
private javax.swing.JButton JavaDoc toolbarSaveAsButton;
1411    private javax.swing.JMenuItem JavaDoc openMenuItem;
1412    private javax.swing.JMenuItem JavaDoc lastUsed1MenuItem;
1413    private javax.swing.JMenuItem JavaDoc lastUsed2MenuItem;
1414    private javax.swing.JMenuItem JavaDoc lastUsed3MenuItem;
1415    private javax.swing.JMenuItem JavaDoc lastUsed4MenuItem;
1416    private javax.swing.JMenu JavaDoc fileMenu;
1417    private javax.swing.JMenuItem JavaDoc newQueryMenuItem;
1418    private javax.swing.JMenuItem JavaDoc newQueryMenuItem2;
1419    private javax.swing.JPanel JavaDoc jPanel1;
1420    private javax.swing.JPanel JavaDoc jPanel2;
1421    private javax.swing.JButton JavaDoc toolbarOpenButton;
1422    private javax.swing.JButton JavaDoc toolbarNewButton;
1423    private javax.swing.JButton JavaDoc toolbarNewArrowButton;
1424    private javax.swing.JSeparator JavaDoc jSeparator1;
1425    private javax.swing.JSeparator JavaDoc jSeparator2;
1426    private javax.swing.JSeparator JavaDoc jSeparator3;
1427    private javax.swing.JSeparator JavaDoc jSeparator4;
1428    private javax.swing.JMenuItem JavaDoc cutMenuItem;
1429    private javax.swing.JMenuBar JavaDoc menuBar;
1430    private javax.swing.JMenuItem JavaDoc saveMenuItem;
1431    private javax.swing.JMenuItem JavaDoc newJDBCExplorerMenuItem;
1432    private javax.swing.JMenuItem JavaDoc newJDBCExplorerMenuItem2;
1433    private javax.swing.JCheckBoxMenuItem JavaDoc viewCubesMenuItem;
1434    private javax.swing.JButton JavaDoc toolbarSaveButton;
1435    private javax.swing.JMenuItem JavaDoc copyMenuItem;
1436    private javax.swing.JDesktopPane JavaDoc desktopPane;
1437    private javax.swing.JMenu JavaDoc viewMenu;
1438    private javax.swing.JMenu JavaDoc toolsMenu;
1439    private javax.swing.JMenu JavaDoc newMenu;
1440    private javax.swing.JMenuItem JavaDoc deleteMenuItem;
1441    private javax.swing.JMenuItem JavaDoc newSchemaMenuItem;
1442    private javax.swing.JMenuItem JavaDoc newSchemaMenuItem2;
1443    private javax.swing.JMenuItem JavaDoc exitMenuItem;
1444    private javax.swing.JButton JavaDoc toolbarPreferencesButton;
1445    private javax.swing.JCheckBoxMenuItem JavaDoc viewMeasuresMenuItem;
1446    private javax.swing.JMenu JavaDoc editMenu;
1447    private javax.swing.JMenuItem JavaDoc pasteMenuItem;
1448    private javax.swing.JMenuItem JavaDoc preferencesMenuItem;
1449    private javax.swing.JCheckBoxMenuItem JavaDoc viewDimensionsMenuItem;
1450    private javax.swing.JCheckBoxMenuItem JavaDoc viewXMLMenuItem;
1451    private javax.swing.JMenuItem JavaDoc saveAsMenuItem;
1452    private javax.swing.JToolBar JavaDoc jToolBar1;
1453    private javax.swing.JToolBar JavaDoc jToolBar2;
1454    private javax.swing.JPopupMenu JavaDoc toolbarNewPopupMenu;
1455    private javax.swing.JMenu JavaDoc windowMenu;
1456    private javax.swing.JMenu JavaDoc helpMenu;
1457    private javax.swing.JMenuItem JavaDoc aboutMenuItem;
1458    private javax.swing.JMenuItem JavaDoc cascadeMenuItem;
1459    private javax.swing.JMenuItem JavaDoc tileMenuItem;
1460    private javax.swing.JMenuItem JavaDoc minimizeMenuItem;
1461    private javax.swing.JMenuItem JavaDoc maximizeMenuItem;
1462    private javax.swing.JMenuItem JavaDoc closeAllMenuItem;
1463// End of variables declaration
1464

1465
1466    /*
1467class SchemaFrameComp implements Comparator {
1468  public int compare (Object o1, Object o2) {
1469    return o1 == o2;
1470  }
1471}
1472     **/

1473
1474    public javax.swing.JCheckBoxMenuItem JavaDoc getViewXMLMenuItem() {
1475        return viewXMLMenuItem; // used by schema framewhen it uses 'view xml' to update view xml menu item
1476
}
1477
1478
1479}
1480
Popular Tags