KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > it > businesslogic > ireport > data > olap > OlapBrowser


1 /*
2  * Copyright (C) 2005 - 2006 JasperSoft Corporation. All rights reserved.
3  * http://www.jaspersoft.com.
4  *
5  * Unless you have purchased a commercial license agreement from JasperSoft,
6  * the following license terms apply:
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as published by
10  * the Free Software Foundation.
11  *
12  * This program is distributed WITHOUT ANY WARRANTY; and without the
13  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14  * See the GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, see http://www.gnu.org/licenses/gpl.txt
18  * or write to:
19  *
20  * Free Software Foundation, Inc.,
21  * 59 Temple Place - Suite 330,
22  * Boston, MA USA 02111-1307
23  *
24  *
25  *
26  *
27  * OlapBrowser.java
28  *
29  * Created on June 20, 2006, 4:36 PM
30  *
31  */

32
33 package it.businesslogic.ireport.data.olap;
34
35 import it.businesslogic.ireport.FieldsProviderEditor;
36 import it.businesslogic.ireport.JRField;
37 import it.businesslogic.ireport.gui.MainFrame;
38 import it.businesslogic.ireport.gui.ReportQueryDialog;
39 import it.businesslogic.ireport.gui.sheet.Tag;
40 import java.io.StringReader JavaDoc;
41 import java.util.Vector JavaDoc;
42 import javax.swing.JOptionPane JavaDoc;
43 import javax.swing.JTable JavaDoc;
44 import javax.swing.SwingUtilities JavaDoc;
45 import javax.swing.table.DefaultTableModel JavaDoc;
46 import javax.swing.tree.DefaultMutableTreeNode JavaDoc;
47 import javax.swing.tree.DefaultTreeModel JavaDoc;
48 import javax.swing.tree.DefaultTreeSelectionModel JavaDoc;
49 import javax.swing.tree.TreePath JavaDoc;
50 import mondrian.olap.*;
51
52 import net.sf.jasperreports.olap.mapping.MappingLexer;
53 import net.sf.jasperreports.olap.mapping.MappingParser;
54 import it.businesslogic.ireport.util.I18n;
55 /**
56  *
57  * @author gtoffoli
58  */

59 public class OlapBrowser extends javax.swing.JPanel JavaDoc implements FieldsProviderEditor {
60     
61     private JTable JavaDoc jTableFields = null;
62     private ReportQueryDialog reportQueryDialog = null;
63     
64     /** Creates new form OlapBrowser */
65     public OlapBrowser() {
66         initComponents();
67         
68         DefaultMutableTreeNode JavaDoc root = new DefaultMutableTreeNode JavaDoc();
69         jTree1.setModel(new DefaultTreeModel JavaDoc(root));
70         jTree1.setCellRenderer( new OlapTreeCellRenderer());
71         
72         jComboBoxType.addItem(new Tag("java.lang.String",I18n.getString("mdx.type.Text", "Text") ));
73         jComboBoxType.addItem(new Tag("java.lang.Number", I18n.getString("mdx.type.Numeric", "Numeric") ));
74         jComboBoxType.addItem(new Tag("java.util.Date", I18n.getString("mdx.type.Date", "Date")));
75         jComboBoxType.addItem(new Tag("java.util.Date", I18n.getString("mdx.type.Boolean", "Boolean") ));
76         
77         jComboBoxType.setSelectedIndex(0);
78         
79         applyI18n();
80         
81         ((DefaultTreeSelectionModel JavaDoc)jTree1.getSelectionModel()).setSelectionMode(DefaultTreeSelectionModel.SINGLE_TREE_SELECTION );
82     }
83     
84     
85     public void setOlapQuery(Query query)
86     {
87         
88         
89         DefaultTreeModel JavaDoc dtm = (DefaultTreeModel JavaDoc)jTree1.getModel();
90         DefaultMutableTreeNode JavaDoc root = (DefaultMutableTreeNode JavaDoc)dtm.getRoot();
91         root.removeAllChildren();
92         
93         if (query == null)
94         {
95             jTree1.updateUI();
96             return;
97         }
98         
99     QueryAxis[] axes = query.getAxes();
100         
101         Hierarchy[][] queryHierarchies = new Hierarchy[axes.length][];
102         int[][] fieldsMaxDepths = new int[axes.length][];
103         int[][] maxDepths = new int[axes.length][];
104         
105         int hCount = 0;
106         for (int i = 0; i < axes.length; i++)
107         {
108                 queryHierarchies[i] = query.getMdxHierarchiesOnAxis(i);
109                 
110                 DefaultMutableTreeNode JavaDoc childNode = new DefaultMutableTreeNode JavaDoc(new WalkableWrapper(axes[i],root));
111                 
112                 if ( queryHierarchies[i].length == 1 &&
113                      queryHierarchies[i][0].getDimension().isMeasures())
114                 {
115                     addChildren(childNode, axes[i].getChildren());
116                 }
117                 else
118                 {
119                     addChildren(childNode, queryHierarchies[i]);
120                 }
121                 
122                 root.add(childNode );
123         
124                 hCount += queryHierarchies[i].length;
125                 fieldsMaxDepths[i] = new int[queryHierarchies[i].length];
126                 maxDepths[i] = new int[queryHierarchies[i].length];
127         }
128         
129         jTree1.updateUI();
130     }
131     
132     public void setOlapResult2(Result result)
133     {
134         DefaultTreeModel JavaDoc dtm = (DefaultTreeModel JavaDoc)jTree1.getModel();
135         DefaultMutableTreeNode JavaDoc root = (DefaultMutableTreeNode JavaDoc)dtm.getRoot();
136         root.removeAllChildren();
137         
138         if (result == null)
139         {
140             jTree1.updateUI();
141             return;
142         }
143         
144         // Main axes...
145

146         
147         QueryAxis[] axis = result.getQuery().getAxes();
148         Axis[] raxis = result.getAxes();
149         
150         for (int i=0; i<axis.length; ++i)
151         {
152             DefaultMutableTreeNode JavaDoc childNode = new DefaultMutableTreeNode JavaDoc(new WalkableWrapper(axis[i], root));
153             addChildren(childNode, axis[i].getChildren());
154             root.add(childNode );
155         }
156         
157         jTree1.updateUI();
158     }
159     
160     public void setOlapResultData(Result result)
161     {
162         DefaultTreeModel JavaDoc dtm = (DefaultTreeModel JavaDoc)jTree1.getModel();
163         DefaultMutableTreeNode JavaDoc root = (DefaultMutableTreeNode JavaDoc)dtm.getRoot();
164         root.removeAllChildren();
165         
166         if (result == null)
167         {
168             jTree1.updateUI();
169             return;
170         }
171         
172         // Main axes...
173

174         
175         QueryAxis[] axis = result.getQuery().getAxes();
176         Axis[] raxis = result.getAxes();
177         
178         for (int i=0; i<axis.length; ++i)
179         {
180             DefaultMutableTreeNode JavaDoc childNode = new DefaultMutableTreeNode JavaDoc(new WalkableWrapper(axis[i], root));
181             Position[] positions = raxis[i].positions;
182             addChildren(childNode, positions);
183             root.add(childNode );
184         }
185         
186         jTree1.updateUI();
187     }
188     
189     public void addChildren(DefaultMutableTreeNode JavaDoc node, Object JavaDoc[] children)
190     {
191         if (children == null) return;
192         for (int i=0; i<children.length; ++i)
193         {
194             if (children[i] instanceof FunCall)
195             {
196                 
197                 addChildren( node, ((FunCall)children[i]).getChildren());
198             }
199             else
200             {
201                 DefaultMutableTreeNode JavaDoc childNode = new DefaultMutableTreeNode JavaDoc(new WalkableWrapper(children[i], node));
202                 if (children[i] instanceof Position)
203                 {
204                     addChildren(childNode, ((Position)children[i]).getMembers());
205                 }
206                 else if (children[i] instanceof Hierarchy)
207                 {
208                     addChildren(childNode, ((Hierarchy)children[i]).getLevels());
209                 }
210                 
211                 node.add(childNode );
212             }
213             //if (children[i] instanceof Member)
214
//{
215
// addChildren(childNode, ((Member)children[i]).getChildren());
216
//}
217

218         }
219     }
220
221     public JTable JavaDoc getJTableFields() {
222         return jTableFields;
223     }
224
225     public void setJTableFields(JTable JavaDoc jTableFields) {
226         this.jTableFields = jTableFields;
227     }
228     
229     /** This method is called from within the constructor to
230      * initialize the form.
231      * WARNING: Do NOT modify this code. The content of this method is
232      * always regenerated by the Form Editor.
233      */

234     // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
235
private void initComponents() {
236         java.awt.GridBagConstraints JavaDoc gridBagConstraints;
237
238         jScrollPane1 = new javax.swing.JScrollPane JavaDoc();
239         jTree1 = new javax.swing.JTree JavaDoc();
240         jLabel4 = new javax.swing.JLabel JavaDoc();
241         jPanel1 = new javax.swing.JPanel JavaDoc();
242         jLabel1 = new javax.swing.JLabel JavaDoc();
243         jTextFieldName = new javax.swing.JTextField JavaDoc();
244         jLabel3 = new javax.swing.JLabel JavaDoc();
245         jComboBoxType = new javax.swing.JComboBox JavaDoc();
246         jLabel2 = new javax.swing.JLabel JavaDoc();
247         jTextFieldExpression = new javax.swing.JTextField JavaDoc();
248         jPanel2 = new javax.swing.JPanel JavaDoc();
249         jButton2 = new javax.swing.JButton JavaDoc();
250         jButton1 = new javax.swing.JButton JavaDoc();
251
252         setLayout(new java.awt.GridBagLayout JavaDoc());
253
254         setMinimumSize(new java.awt.Dimension JavaDoc(250, 85));
255         setPreferredSize(new java.awt.Dimension JavaDoc(405, 384));
256         jScrollPane1.setPreferredSize(new java.awt.Dimension JavaDoc(400, 322));
257         jTree1.setRootVisible(false);
258         jTree1.addMouseListener(new java.awt.event.MouseAdapter JavaDoc() {
259             public void mouseClicked(java.awt.event.MouseEvent JavaDoc evt) {
260                 jTree1MouseClicked(evt);
261             }
262         });
263
264         jScrollPane1.setViewportView(jTree1);
265
266         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
267         gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
268         gridBagConstraints.weightx = 1.0;
269         gridBagConstraints.weighty = 1.0;
270         gridBagConstraints.insets = new java.awt.Insets JavaDoc(0, 0, 2, 4);
271         add(jScrollPane1, gridBagConstraints);
272
273         jLabel4.setForeground(new java.awt.Color JavaDoc(0, 51, 255));
274         jLabel4.setText("Double click on a tree element the get it's expression");
275         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
276         gridBagConstraints.gridx = 0;
277         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
278         gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
279         gridBagConstraints.weightx = 1.0;
280         gridBagConstraints.insets = new java.awt.Insets JavaDoc(4, 4, 4, 4);
281         add(jLabel4, gridBagConstraints);
282
283         jPanel1.setLayout(new java.awt.GridBagLayout JavaDoc());
284
285         jLabel1.setText("Field name");
286         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
287         gridBagConstraints.gridy = 0;
288         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
289         gridBagConstraints.insets = new java.awt.Insets JavaDoc(4, 4, 0, 0);
290         jPanel1.add(jLabel1, gridBagConstraints);
291
292         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
293         gridBagConstraints.gridy = 0;
294         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
295         gridBagConstraints.weightx = 0.5;
296         gridBagConstraints.insets = new java.awt.Insets JavaDoc(4, 4, 0, 0);
297         jPanel1.add(jTextFieldName, gridBagConstraints);
298
299         jLabel3.setText("Type");
300         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
301         gridBagConstraints.gridy = 0;
302         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
303         gridBagConstraints.insets = new java.awt.Insets JavaDoc(4, 6, 0, 0);
304         jPanel1.add(jLabel3, gridBagConstraints);
305
306         jComboBoxType.setMinimumSize(new java.awt.Dimension JavaDoc(30, 19));
307         jComboBoxType.setPreferredSize(new java.awt.Dimension JavaDoc(50, 19));
308         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
309         gridBagConstraints.gridy = 0;
310         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
311         gridBagConstraints.weightx = 0.3;
312         gridBagConstraints.insets = new java.awt.Insets JavaDoc(4, 2, 0, 4);
313         jPanel1.add(jComboBoxType, gridBagConstraints);
314
315         jLabel2.setText("Expression");
316         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
317         gridBagConstraints.gridy = 1;
318         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
319         gridBagConstraints.insets = new java.awt.Insets JavaDoc(4, 4, 0, 0);
320         jPanel1.add(jLabel2, gridBagConstraints);
321
322         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
323         gridBagConstraints.gridy = 1;
324         gridBagConstraints.gridwidth = 3;
325         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
326         gridBagConstraints.weightx = 1.0;
327         gridBagConstraints.insets = new java.awt.Insets JavaDoc(4, 4, 0, 4);
328         jPanel1.add(jTextFieldExpression, gridBagConstraints);
329
330         jPanel2.setLayout(new java.awt.GridBagLayout JavaDoc());
331
332         jButton2.setText("Clear");
333         jButton2.addActionListener(new java.awt.event.ActionListener JavaDoc() {
334             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
335                 jButton2ActionPerformed(evt);
336             }
337         });
338
339         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
340         gridBagConstraints.gridy = 5;
341         gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHEAST;
342         gridBagConstraints.weightx = 1.0;
343         gridBagConstraints.insets = new java.awt.Insets JavaDoc(2, 0, 2, 4);
344         jPanel2.add(jButton2, gridBagConstraints);
345
346         jButton1.setText("Add field");
347         jButton1.addActionListener(new java.awt.event.ActionListener JavaDoc() {
348             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
349                 jButton1ActionPerformed(evt);
350             }
351         });
352
353         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
354         gridBagConstraints.gridy = 5;
355         gridBagConstraints.gridwidth = 2;
356         gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHEAST;
357         gridBagConstraints.insets = new java.awt.Insets JavaDoc(2, 0, 2, 4);
358         jPanel2.add(jButton1, gridBagConstraints);
359
360         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
361         gridBagConstraints.gridx = 0;
362         gridBagConstraints.gridwidth = 5;
363         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
364         gridBagConstraints.weightx = 1.0;
365         jPanel1.add(jPanel2, gridBagConstraints);
366
367         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
368         gridBagConstraints.gridx = 0;
369         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
370         gridBagConstraints.weightx = 1.0;
371         add(jPanel1, gridBagConstraints);
372
373     }// </editor-fold>//GEN-END:initComponents
374

375     private void jButton2ActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jButton2ActionPerformed
376

377         jTextFieldName.setText("");
378         jComboBoxType.setSelectedIndex(0);
379         jTextFieldExpression.setText("");
380         
381     }//GEN-LAST:event_jButton2ActionPerformed
382

383     private void jButton1ActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jButton1ActionPerformed
384

385         if (jTextFieldName.getText().length() == 0)
386         {
387             JOptionPane.showMessageDialog(this, I18n.getString("message.olapBrowser.notValidFieldName","Field name not valid"),I18n.getString("message.title.error","Error"), JOptionPane.ERROR_MESSAGE);
388             return;
389             
390         }
391         if (jTextFieldExpression.getText().length() == 0)
392         {
393             JOptionPane.showMessageDialog(this,I18n.getString("message.olapBrowser.notValidFieldExpression","Field expression not valid"), I18n.getString("message.title.error","Error"), JOptionPane.ERROR_MESSAGE);
394             return;
395         }
396         
397         JRField field = new JRField(jTextFieldName.getText().trim(), ""+((Tag)jComboBoxType.getSelectedItem()).getValue() );
398         field.setDescription( jTextFieldExpression.getText() );
399         
400        /*
401         try
402         {
403                 MappingLexer lexer = new MappingLexer(new StringReader(jTextFieldExpression.getText()));
404                 
405                 //MappingParser parser = new MappingParser(lexer);
406                 //parser.setMappingMetadata(this);
407                 parser.mapping();
408         }
409         catch (Exception e)
410         {
411             JOptionPane.showMessageDialog(this,"Field expression not valid:\n" + e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
412             return;
413         }
414         */

415         
416         
417         if (fieldAlreadyExists(field))
418         {
419             JOptionPane.showMessageDialog(this,I18n.getString("message.olapBrowser.fieldDuplicated","A field with this name is already present"), I18n.getString("message.title.error","Error"), JOptionPane.ERROR_MESSAGE);
420             return;
421         }
422         
423         Vector JavaDoc row = new Vector JavaDoc();
424         row.addElement(field);
425         row.addElement(field.getClassType());
426         row.addElement(field.getDescription());
427         
428         DefaultTableModel JavaDoc dtm = (DefaultTableModel JavaDoc)getJTableFields().getModel();
429         dtm.addRow(row);
430         getJTableFields().getSelectionModel().addSelectionInterval( getJTableFields().getRowCount()-1, getJTableFields().getRowCount()-1 );
431             
432         
433     }//GEN-LAST:event_jButton1ActionPerformed
434

435     private void jTree1MouseClicked(java.awt.event.MouseEvent JavaDoc evt) {//GEN-FIRST:event_jTree1MouseClicked
436

437         if (evt.getClickCount() == 2 && evt.getButton() == evt.BUTTON1)
438         {
439             TreePath JavaDoc tp = jTree1.getSelectionPath();
440             if (tp != null)
441             {
442                 WalkableWrapper ww = (WalkableWrapper)((DefaultMutableTreeNode JavaDoc)tp.getLastPathComponent()).getUserObject();
443                 
444                 String JavaDoc exp = ww.getExpression();
445                 if (exp != null)
446                 {
447                     if (ww.isMeasure())
448                     {
449                         jTextFieldName.setText( ww+"");
450                         jTextFieldExpression.setText( exp);
451                     }
452                     else
453                     {
454                         String JavaDoc newexp = jTextFieldExpression.getText();
455                         int ss = ( jTextFieldExpression.getSelectionStart() >= 0 ) ? jTextFieldExpression.getSelectionStart() : jTextFieldExpression.getCaretPosition();
456                         int se = ( jTextFieldExpression.getSelectionEnd() >= 0 ) ? jTextFieldExpression.getSelectionEnd() : jTextFieldExpression.getCaretPosition();
457                         newexp = newexp.substring(0,ss) + exp + newexp.substring(se);
458                         jTextFieldExpression.setText( newexp);
459                         jTextFieldExpression.requestFocusInWindow();
460                     }
461                 }
462             }
463             
464             
465             
466         }
467     }//GEN-LAST:event_jTree1MouseClicked
468

469     
470     private boolean fieldAlreadyExists(JRField field)
471     {
472         boolean found = false;
473             for (int j=0; j<getJTableFields().getRowCount(); ++j)
474             {
475                Object JavaDoc ff = getJTableFields().getValueAt(j, 0);
476                if ( ff instanceof it.businesslogic.ireport.JRField )
477                {
478                    if ( ((it.businesslogic.ireport.JRField)ff).getName().equals(field.getName()))
479                    {
480                        found = true;
481                        break;
482                    }
483                }
484             }
485         
486         return found;
487     }
488     // Variables declaration - do not modify//GEN-BEGIN:variables
489
private javax.swing.JButton JavaDoc jButton1;
490     private javax.swing.JButton JavaDoc jButton2;
491     private javax.swing.JComboBox JavaDoc jComboBoxType;
492     private javax.swing.JLabel JavaDoc jLabel1;
493     private javax.swing.JLabel JavaDoc jLabel2;
494     private javax.swing.JLabel JavaDoc jLabel3;
495     private javax.swing.JLabel JavaDoc jLabel4;
496     private javax.swing.JPanel JavaDoc jPanel1;
497     private javax.swing.JPanel JavaDoc jPanel2;
498     private javax.swing.JScrollPane JavaDoc jScrollPane1;
499     private javax.swing.JTextField JavaDoc jTextFieldExpression;
500     private javax.swing.JTextField JavaDoc jTextFieldName;
501     private javax.swing.JTree JavaDoc jTree1;
502     // End of variables declaration//GEN-END:variables
503

504     public void applyI18n(){
505                 // Start autogenerated code ----------------------
506
jButton1.setText(I18n.getString("olapBrowser.button1","Add field"));
507                 jButton2.setText(I18n.getString("olapBrowser.button2","Clear"));
508                 jLabel1.setText(I18n.getString("olapBrowser.label1","Field name"));
509                 jLabel2.setText(I18n.getString("olapBrowser.label2","Expression"));
510                 jLabel3.setText(I18n.getString("olapBrowser.label3","Type"));
511                 jLabel4.setText(I18n.getString("olapBrowser.label4","Double click on a tree element the get it's expression"));
512                 // End autogenerated code ----------------------
513
}
514
515     
516     int lastExecution = 0;
517     
518     public void queryChanged(String JavaDoc newQuery) {
519     
520         lastExecution++;
521         int thisExecution = lastExecution;
522         // Execute a thread to perform the query change...
523

524         String JavaDoc error_msg = "";
525         lastExecution++;
526             
527         int in = lastExecution;
528             
529         getReportQueryDialog().getJLabelStatusSQL().setText("Executing MDX query....");
530         /////////////////////////////
531

532         try {
533         Thread.currentThread().setContextClassLoader( MainFrame.getMainInstance().getReportClassLoader());
534         } catch (Exception JavaDoc ex)
535         {
536             ex.printStackTrace();
537         }
538             
539         if (in < lastExecution) return; //Abort, new execution requested
540

541         OLAPQueryExecuter olapQE = new OLAPQueryExecuter(newQuery, getReportQueryDialog().getSubDataset().getParameters());
542         
543             String JavaDoc lastError = "";
544             try {
545                 
546                 //final mondrian.olap.Result result = olapQE.executeOlapQuery();
547
final mondrian.olap.Query query = olapQE.createOlapQuery();
548                 
549                 if (in < lastExecution) return; //Abort, new execution requested
550
SwingUtilities.invokeAndWait( new Runnable JavaDoc() {
551                     public void run() {
552                         setOlapQuery( query );
553                     }
554                 } );
555                 
556             } catch (Exception JavaDoc ex)
557             {
558                 ex.printStackTrace();
559                 setOlapQuery( null );
560                 lastError = " (Last error was " + ex.getMessage() +")";
561             }
562         
563         getReportQueryDialog().getJLabelStatusSQL().setText("Ready");
564     }
565
566     public ReportQueryDialog getReportQueryDialog() {
567         return reportQueryDialog;
568     }
569
570     public void setReportQueryDialog(ReportQueryDialog reportQueryDialog) {
571         this.reportQueryDialog = reportQueryDialog;
572     }
573 }
574
Popular Tags