KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > mondrian > gui > QueryPanel


1 /*
2 // $Id: //open/mondrian/src/main/mondrian/gui/QueryPanel.java#5 $
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) 2002-2007 Julian Hyde and others
7 // All Rights Reserved.
8 // You must accept the terms of that agreement to use this software.
9 */

10 package mondrian.gui;
11
12 import java.awt.Color JavaDoc;
13 import java.awt.Component JavaDoc;
14 import java.awt.FlowLayout JavaDoc;
15 import java.awt.Font JavaDoc;
16 import java.awt.event.ItemEvent JavaDoc;
17 import java.awt.event.ItemListener JavaDoc;
18 import java.awt.event.MouseAdapter JavaDoc;
19 import java.awt.event.MouseEvent JavaDoc;
20 import java.io.File JavaDoc;
21 import java.util.Iterator JavaDoc;
22 import java.util.Map JavaDoc;
23 import java.util.Vector JavaDoc;
24 import javax.swing.ComboBoxModel JavaDoc;
25 import javax.swing.DefaultComboBoxModel JavaDoc;
26 import javax.swing.JComboBox JavaDoc;
27 import javax.swing.JInternalFrame JavaDoc;
28 import javax.swing.JLabel JavaDoc;
29 import javax.swing.JMenuItem JavaDoc;
30 import javax.swing.JOptionPane JavaDoc;
31 import javax.swing.JPanel JavaDoc;
32 import javax.swing.JPopupMenu JavaDoc;
33 import javax.swing.SwingConstants JavaDoc;
34 import javax.swing.UIManager JavaDoc;
35 import javax.swing.text.DefaultEditorKit JavaDoc;
36 import mondrian.olap.Connection;
37 import mondrian.olap.DriverManager;
38 import mondrian.olap.Query;
39 import mondrian.olap.Result;
40
41 /**
42  *
43  * @author sean
44  * @version $Id: //open/mondrian/src/main/mondrian/gui/QueryPanel.java#5 $
45  */

46 public class QueryPanel extends javax.swing.JPanel JavaDoc {
47     Connection connection;
48     JMenuItem JavaDoc queryMenuItem;
49     int windowMenuIndex;
50     Map JavaDoc schemaWindowMap; // map of schema frames and schema menu items
51
//String connectString = "Provider=mondrian;" + "Jdbc=" + jdbcConnectionUrl + ";" + "Catalog=" + file.toURL().toString();
52

53     /** Creates new form QueryPanel */
54     public QueryPanel() {
55         initComponents();
56     }
57
58     public void setConnection(Connection c) {
59         connection = c;
60     }
61
62     public Connection getConnection() {
63         return connection;
64     }
65
66     //====================================================
67

68 /**
69    * Copyright (C) 2006, 2007 CINCOM SYSTEMS, INC.
70    * All Rights Reserved
71    */

72     public void setMenuItem(JMenuItem JavaDoc mi) {
73         this.queryMenuItem = mi;
74     }
75
76     public void setSchemaWindowMap(Map JavaDoc swindowMap) {
77         this.schemaWindowMap = swindowMap; // MAP OF FILE AND FRAME
78
setCatalogs();
79     }
80
81     private void setCatalogs() {
82         Vector JavaDoc v = new Vector JavaDoc();
83         Iterator JavaDoc it = schemaWindowMap.values().iterator(); // schema menu items
84
while (it.hasNext()) {
85             JMenuItem JavaDoc elem = (JMenuItem JavaDoc) it.next();
86             v.add(elem.getText());
87         }
88         ComboBoxModel JavaDoc cCatalogs = new DefaultComboBoxModel JavaDoc(v);
89         schemaList.setModel(cCatalogs) ;
90     }
91     public void setWindowMenuIndex(int i) {
92         this.windowMenuIndex = i;
93     }
94     public void initConnection(String JavaDoc smenutext) {
95         schemaList.setSelectedItem(smenutext);
96         connectButtonActionPerformed(null);
97     }
98     //=====================================================
99

100 /**
101    * Copyright (C) 2006, 2007 CINCOM SYSTEMS, INC.
102    * All Rights Reserved
103    */

104     /** This method is called from within the constructor to
105      * initialize the form.
106      * WARNING: Do NOT modify this code. The content of this method is
107      * always regenerated by the Form Editor.
108      */

109     private void initComponents() {
110         jScrollPane3 = new javax.swing.JScrollPane JavaDoc();
111         executeButton = new javax.swing.JButton JavaDoc();
112         jSplitPane1 = new javax.swing.JSplitPane JavaDoc();
113         jScrollPane1 = new javax.swing.JScrollPane JavaDoc();
114         queryTextPane = new javax.swing.JTextPane JavaDoc();
115         jScrollPane2 = new javax.swing.JScrollPane JavaDoc();
116         resultTextPane = new javax.swing.JTextPane JavaDoc();
117         connectButton = new javax.swing.JButton JavaDoc();
118         jPopupMenu = new JPopupMenu JavaDoc();
119         jPopupMenu.add(new DefaultEditorKit.CutAction JavaDoc());
120         jPopupMenu.add(new DefaultEditorKit.CopyAction JavaDoc());
121         jPopupMenu.add(new DefaultEditorKit.PasteAction JavaDoc());
122
123         schemaScrollPane1 = new javax.swing.JScrollPane JavaDoc();
124         schemaLabel = new javax.swing.JLabel JavaDoc();
125         schemaList = new JComboBox JavaDoc( new String JavaDoc[] {"Join", "Table"} );
126         //schemaScrollPane1.setViewportView(schemaList);
127
schemaPanel = new JPanel JavaDoc();
128         //schemaPanel.setLayout(new BorderLayout(25,0));
129
schemaPanel.setLayout(new FlowLayout JavaDoc(FlowLayout.LEFT, 10, 0));
130
131         setLayout(new java.awt.BorderLayout JavaDoc());
132
133         schemaLabel.setFont(new Font JavaDoc("Dialog", 1, 12));
134         schemaLabel.setForeground((Color JavaDoc) UIManager.getDefaults().get("CheckBoxMenuItem.acceleratorForeground"));
135         schemaLabel.setHorizontalAlignment(SwingConstants.CENTER);
136         schemaLabel.setText(" Schema ");
137         //schemaLabel.setBorder(new EtchedBorder());
138

139         schemaList.setBackground(Color.white);
140         final JPanel JavaDoc qpanel = this;
141         schemaList.addItemListener(new ItemListener JavaDoc() {
142             public void itemStateChanged(ItemEvent JavaDoc e) {
143
144
145             }
146         });
147         connectButton.setText("Connect");
148         connectButton.addActionListener(new java.awt.event.ActionListener JavaDoc() {
149             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
150                 connectButtonActionPerformed(evt);
151             }
152         });
153
154         schemaPanel.add(schemaLabel); //java.awt.BorderLayout.WEST
155
schemaPanel.add(schemaList);
156         schemaPanel.add(connectButton);
157
158         add(schemaPanel, java.awt.BorderLayout.NORTH);
159
160         executeButton.setText("Execute");
161         executeButton.addActionListener(new java.awt.event.ActionListener JavaDoc() {
162             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
163                 executeButtonActionPerformed(evt);
164             }
165         });
166
167         add(executeButton, java.awt.BorderLayout.SOUTH);
168
169         jSplitPane1.setDividerLocation(100);
170         jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
171         queryTextPane.setFont(new java.awt.Font JavaDoc("Courier New", 0, 12));
172         queryTextPane.setText("");
173         queryTextPane.addMouseListener(new MouseAdapter JavaDoc() {
174             public void mouseReleased(MouseEvent JavaDoc e) {
175                 if (e.isPopupTrigger()) {
176                     int x = e.getX();
177                     int y = e.getY();
178
179                     jPopupMenu.show(queryTextPane, x, y);
180
181                 }
182             }
183         });
184
185         jScrollPane1.setViewportView(queryTextPane);
186
187         jSplitPane1.setTopComponent(jScrollPane1);
188
189         resultTextPane.setEditable(false);
190         resultTextPane.setFont(new java.awt.Font JavaDoc("Courier New", 0, 12));
191         jScrollPane2.setViewportView(resultTextPane);
192
193         jSplitPane1.setBottomComponent(jScrollPane2);
194
195         add(jSplitPane1, java.awt.BorderLayout.CENTER);
196
197     }
198
199     private void executeButtonActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:T://event_executeButtonActionPerformed
200
//run the query, and show the results.
201
try {
202             if (connection == null) {
203                 JOptionPane.showMessageDialog(this, "No Mondrian connection. Select a Schema to connect.", "Alert" , JOptionPane.WARNING_MESSAGE);
204                 return;
205             }
206             Query q = connection.parseQuery(queryTextPane.getText());
207             Result r = connection.execute(q);
208
209             //document = DOMBuilder.build(getResult());
210
java.io.StringWriter JavaDoc sw = new java.io.StringWriter JavaDoc();
211             java.io.PrintWriter JavaDoc pw = new java.io.PrintWriter JavaDoc(sw);
212
213             r.print(pw);
214
215             resultTextPane.setText(sw.getBuffer().toString());
216         } catch (Exception JavaDoc ex) {
217             resultTextPane.setText(ex.getMessage());
218         }
219
220     }//GEN-LAST:T://event_executeButtonActionPerformed
221

222 /**
223    * Copyright (C) 2006, 2007 CINCOM SYSTEMS, INC.
224    * All Rights Reserved
225    */

226     private void connectButtonActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
227         File JavaDoc sfile = null;
228         try {
229             JInternalFrame JavaDoc sf = null;
230
231             String JavaDoc sfname = (String JavaDoc) schemaList.getSelectedItem();
232             Iterator JavaDoc it = schemaWindowMap.entrySet().iterator();
233             while (it.hasNext()) {
234                 Map.Entry JavaDoc elem = (Map.Entry JavaDoc) it.next();
235                 if (((JMenuItem JavaDoc) elem.getValue()).getText().equals(sfname)) {
236                     sf = (JInternalFrame JavaDoc) elem.getKey();
237                     break;
238                 }
239             }
240
241             if (sf == null) {
242                 // this case may arise when a schema file is opened, mdx query is opened and the schema frame is closed
243
JOptionPane.showMessageDialog(this, "Schema file is not open.", "Error" , JOptionPane.ERROR_MESSAGE);
244                 return;
245             }
246
247             //JInternalFrame sf = (JInternalFrame) schemaWindowMap.get(sfile);
248
SchemaExplorer se = (SchemaExplorer) sf.getContentPane().getComponent(0);
249             if (se.isNewFile()) {
250                 JOptionPane.showMessageDialog(this, "You must first save the Schema to open a Mondrian comnnection.", "Alert" , JOptionPane.WARNING_MESSAGE);
251                 sf.setSelected(true);
252                 return;
253             }
254             sfile = se.getSchemaFile();
255
256             String JavaDoc connectString = "Provider=mondrian;" + "Jdbc=" + se.getJdbcConnectionUrl() + ";" + "Catalog=" + se.getSchemaFile().toURL().toString();
257             Connection con = DriverManager.getConnection(connectString, null, false);
258             if (con != null) {
259                 connection = con;
260                 queryMenuItem.setText(windowMenuIndex + " MDX - "+se.getSchemaFile().getName());
261                 Component JavaDoc o = this;
262                 while (o != null) {
263                     //System.out.println(""+o.getClass());
264
if (o.getClass() == JInternalFrame JavaDoc.class) {
265                         ((JInternalFrame JavaDoc) o).setTitle("MDX Query - connected to "+se.getSchemaFile().getName());
266                         break;
267                     }
268                     o = o.getParent();
269                 }
270                 JOptionPane.showMessageDialog(this, "Mondrian connection Successful.", "Information" , JOptionPane.INFORMATION_MESSAGE);
271             } else {
272                 JOptionPane.showMessageDialog(this, "Mondrian connection could not be done for - "+se.getSchemaFile().getName(), "Error" , JOptionPane.ERROR_MESSAGE);
273             }
274         } catch (Exception JavaDoc ex) {
275             System.out.println("Exception: "+ex.getMessage());
276             JOptionPane.showMessageDialog(this, "Mondrian connection could not be done for "+(sfile == null?"selected Schema.":sfile.getName()), "Error" , JOptionPane.ERROR_MESSAGE);
277         }
278     }
279     // Variables declaration - do not modify
280
private javax.swing.JScrollPane JavaDoc jScrollPane3;
281     private javax.swing.JScrollPane JavaDoc jScrollPane2;
282     private javax.swing.JTextPane JavaDoc resultTextPane;
283     private javax.swing.JScrollPane JavaDoc jScrollPane1;
284     private javax.swing.JTextPane JavaDoc queryTextPane;
285     private javax.swing.JSplitPane JavaDoc jSplitPane1;
286     private javax.swing.JButton JavaDoc executeButton;
287     private javax.swing.JComboBox JavaDoc schemaList;
288     private JLabel JavaDoc schemaLabel;
289     private JPanel JavaDoc schemaPanel;
290     private javax.swing.JScrollPane JavaDoc schemaScrollPane1;
291     private javax.swing.JButton JavaDoc connectButton;
292     private JPopupMenu JavaDoc jPopupMenu;
293
294     // End of variables declaration
295

296 }
297
298 // End QueryPanel.java
Popular Tags