KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > it > businesslogic > ireport > gui > ReportQueryDialog


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  * ReportQueryDialog.java
28  *
29  * Created on 27 maggio 2003, 19.47
30  *
31  */

32
33 package it.businesslogic.ireport.gui;
34 import bsh.EvalError;
35 import it.businesslogic.ireport.*;
36 import it.businesslogic.ireport.JRParameter;
37 import it.businesslogic.ireport.data.BeanInspectorPanel;
38 import it.businesslogic.ireport.data.CincomMDXFieldsProvider;
39 import it.businesslogic.ireport.data.EJBQLFieldsProvider;
40 import it.businesslogic.ireport.data.HQLFieldsProvider;
41 import it.businesslogic.ireport.data.MDXFieldsProvider;
42 import it.businesslogic.ireport.data.SQLFieldsProvider;
43 import it.businesslogic.ireport.gui.queryexecuters.QueryExecuterDef;
44 import it.businesslogic.ireport.gui.subdataset.FilterExpressionDialog;
45 import it.businesslogic.ireport.gui.subdataset.SortFieldsDialog;
46 import it.businesslogic.ireport.util.*;
47 import it.businesslogic.ireport.util.LanguageChangedEvent;
48 import it.businesslogic.ireport.util.LanguageChangedListener;
49 import java.awt.BorderLayout JavaDoc;
50 import java.awt.Component JavaDoc;
51 import java.io.FileReader JavaDoc;
52 import java.io.FileWriter JavaDoc;
53 import javax.swing.table.*;
54 import javax.swing.*;
55 import java.util.*;
56 import java.sql.*;
57 import bsh.Interpreter;
58 import it.businesslogic.ireport.gui.sheet.Tag;
59
60 import javax.swing.event.*;
61 import javax.swing.tree.*;
62 import java.awt.datatransfer.*;
63 import java.io.File JavaDoc;
64 import net.sf.jasperreports.engine.JRValueParameter;
65 import net.sf.jasperreports.engine.design.JRDesignExpression;
66 import net.sf.jasperreports.engine.design.JRDesignQuery;
67
68 /**
69  * A dialog which allows the user to enter a SQL query and then choose the
70  * fields to use in the report.
71  *
72  * @author <a HREF="mailto:gt78@users.sourceforge.net">Giulio Toffoli</a>
73  * @author <a HREF="mailto:phenderson@users.sourceforge.net">Peter Henderson</a>
74  */

75 public class ReportQueryDialog extends javax.swing.JDialog JavaDoc implements ClipboardOwner {
76     
77     private BeanInspectorPanel bip1 = null;
78     
79     private FieldsProvider fieldsProvider = null;
80         
81     protected static String JavaDoc standard_types[]= new String JavaDoc[]{
82         "java.lang.String",
83     "java.lang.Object",
84     "java.lang.Boolean",
85     "java.lang.Byte",
86     "java.util.Date",
87     "java.sql.Timestamp",
88     "java.sql.Time",
89     "java.lang.Double",
90     "java.lang.Float",
91     "java.lang.Integer",
92     "java.io.InputStream",
93     "java.lang.Long",
94     "java.lang.Short",
95     "java.math.BigDecimal"
96     };
97     
98     public FieldReader readerThread = null;
99     public static int num = 1;
100     
101     public JLabel getJLabelStatusSQL()
102     {
103         return this.jLabelStatusSQL;
104     }
105     
106     /** Creates new form ReportQueryFrame */
107     public ReportQueryDialog(java.awt.Frame JavaDoc parent, boolean modal) {
108         
109         super(parent, modal);
110         initComponents();
111         this.setSize(800, 550);
112         Misc.centerFrame(this);
113         
114         stoppedChanging.setRepeats(false);
115         
116         jRSQLExpressionArea1.getDocument().addDocumentListener( new DocumentListener() {
117             public void changedUpdate(DocumentEvent e) {
118                 if(isSettingSQLExpression)return;
119                 //okButton.setEnabled(false);
120
stoppedChanging.restart();
121             }
122             public void insertUpdate(DocumentEvent e) {
123                 if(isSettingSQLExpression)return;
124                 //okButton.setEnabled(false);
125
stoppedChanging.restart();
126             }
127             public void removeUpdate(DocumentEvent e) {
128                 if(isSettingSQLExpression)return;
129                 //okButton.setEnabled(false);
130
stoppedChanging.restart();
131             }
132         } );
133         
134         setColumnsError( "Please open a report." );
135         if (MainFrame.getMainInstance().getProperties().getProperty("beanClass") != null)
136         {
137             jTextFieldBeanClass1.setText( MainFrame.getMainInstance().getProperties().getProperty("beanClass") +"");
138         }
139         
140         jComboBoxQueryType.addItem( new Tag("sql","SQL"));
141         jComboBoxQueryType.addItem( new Tag("hql","Hibernate Query Language (HQL)"));
142         jComboBoxQueryType.addItem( new Tag("xPath","XPath"));
143         jComboBoxQueryType.addItem( new Tag("ejbql","EJBQL"));
144         jComboBoxQueryType.addItem( new Tag("mdx","MDX"));
145         jComboBoxQueryType.addItem( new Tag("xmla-mdx","XMLA-MDX"));
146         
147         Enumeration e = MainFrame.getMainInstance().getQueryExecuters().elements();
148         while (e.hasMoreElements())
149         {
150             QueryExecuterDef qe = (QueryExecuterDef)e.nextElement();
151             jComboBoxQueryType.addItem( new Tag(qe,qe.getLanguage()));
152         }
153         
154         okButton.setEnabled(false);
155         
156         bip1 = new BeanInspectorPanel();
157         bip1.setComboVisible(false);
158         bip1.setJTableFields( jTableFields );
159         bip1.setPathOnDescription(true);
160         jPanel11.add(bip1, BorderLayout.CENTER);
161                 
162         javax.swing.KeyStroke JavaDoc escape = javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_ESCAPE, 0, false);
163         javax.swing.Action JavaDoc escapeAction = new javax.swing.AbstractAction JavaDoc() {
164             public void actionPerformed(java.awt.event.ActionEvent JavaDoc e) {
165                 cancelButtonActionPerformed(e);
166             }
167         };
168        
169         getRootPane().getInputMap(javax.swing.JComponent.WHEN_IN_FOCUSED_WINDOW).put(escape, "ESCAPE");
170         getRootPane().getActionMap().put("ESCAPE", escapeAction);
171
172         
173         applyI18n();
174         
175         I18n.addOnLanguageChangedListener( new LanguageChangedListener() {
176             public void languageChanged(LanguageChangedEvent evt) {
177                 applyI18n();
178             }
179         } );
180
181         //to make the default button ...
182
//this.getRootPane().setDefaultButton(this.jButtonOK);
183

184     }
185     
186     /**
187      * A timer to detect when the SQL expression area has not been changed, for
188      * a short moment. This is to prevent the database being hit with every
189      * with every key press.
190      */

191     javax.swing.Timer JavaDoc stoppedChanging = new javax.swing.Timer JavaDoc( 500, new java.awt.event.ActionListener JavaDoc() {
192         public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
193             if( automaticlyReadFieldsCheckBox.isSelected() ) {
194                 processQueryChanged( jRSQLExpressionArea1.getText().trim() );
195             }
196         }
197     } );
198     
199     
200     /**
201      * Given a database query string, extract the database columns, then display
202      * them. If there was a problem loading the list of columns, show an error
203      * panel which contains the reason why.
204      *
205      * @param query The SQL query string, which can contain JasperReports parameters.
206      */

207     private void processQueryChanged( String JavaDoc query ) {
208         
209         if (isSettingSQLExpression) return;
210         
211         //System.out.println("processQueryChanged");
212
//Thread.currentThread().dumpStack();
213

214         if (subDataset == null) {
215             setColumnsError( "Please open a report." );
216             return;
217         }
218         
219         if (query.length() == 0) {
220             setColumnsError( "You must insert a valid query first" );
221             return;
222         }
223
224         IReportConnection conn = (IReportConnection)MainFrame.getMainInstance().getProperties().get("DefaultConnection");
225         
226         Object JavaDoc obj = jComboBoxQueryType.getSelectedItem();
227         String JavaDoc queryLanguage = "sql";
228         if (obj != null && obj instanceof Tag)
229         {
230             queryLanguage = ""+((Tag)obj).getValue();
231         }
232         else
233         {
234             queryLanguage = ""+obj;
235         }
236         
237         try {
238             // Run the query in the backgroud as it is not quick.
239
if (readerThread != null && readerThread.isAlive())
240             {
241                 readerThread.interrupt();
242             }
243         } catch (Throwable JavaDoc ex) {
244             ex.printStackTrace();
245
246         }
247
248         readerThread = new FieldReader(query, conn, queryLanguage);
249         readerThread.start();
250     }
251     
252     
253     /**
254      * A Thread class to extract field names from a SQL query.
255      *
256      */

257     class FieldReader extends Thread JavaDoc {
258         String JavaDoc src_query;
259         String JavaDoc src_query_language = "sql";
260         IReportConnection conn;
261        
262         /**
263          * ctor.
264          * @param query The query to read the field from
265          * @param conn The IRport DB connection to use.
266          */

267         public FieldReader(String JavaDoc query, IReportConnection conn) {
268             this(query, conn, "sql");
269         }
270         
271         /**
272          * ctor.
273          * @param query The query to read the field from
274          * @param conn The IRport DB connection to use.
275          */

276         public FieldReader(String JavaDoc query, IReportConnection conn, String JavaDoc query_language) {
277             src_query=query;
278             this.conn=conn;
279             this.src_query_language = query_language;
280         }
281         
282         
283         
284         /**
285          * Set the fields table data to the supplied data.
286          * This is called from a none swing thread, hence all the invoke and
287          * wait magic. If the current thread is the AWT Event Dispacher, no
288          * invoke and wait is call.
289          * The columns are only set if the query string matches the one the
290          * results are for.
291          *
292          * @param columns The list of columns to set.
293          */

294         public void setColumnsFromWorker( final List columns ) {
295             try {
296                 
297                 Runnable JavaDoc r = new Runnable JavaDoc() {
298                         public void run() {
299                             String JavaDoc str = jRSQLExpressionArea1.getText().trim();
300                             if( str.compareTo(src_query)==0 ) {
301                                 setColumns( columns );
302                             }
303                         }
304                     };
305                     
306                 if (!SwingUtilities.isEventDispatchThread())
307                 {
308                     SwingUtilities.invokeAndWait( r );
309                 }
310                 else
311                 {
312                         r.run();
313                 }
314                     
315             } catch(Exception JavaDoc e) {
316                 // oh well we got interrupted.
317
}
318         }
319         
320         /**
321          * Set the columns error message.
322          * This is called from a none swing thread, hence all the invoke and
323          * wait magic.
324          * The message is only set if the query string matches the one the
325          * error message is for.
326          *
327          * @param columns The list of columns to set.
328          */

329         public void setColumnErrorFromWork( final String JavaDoc error_msg ) {
330             try {
331                 
332                 Runnable JavaDoc r = new Runnable JavaDoc() {
333                     public void run() {
334                         String JavaDoc str = jRSQLExpressionArea1.getText().trim();
335                         if( str.compareTo(src_query)==0 ) {
336                             setColumnsError( error_msg );
337                             jRSQLExpressionArea1.requestFocusInWindow();
338                         }
339                         
340                     }
341                 };
342                 
343                 if (SwingUtilities.isEventDispatchThread())
344                 {
345                     r.run();
346                 }
347                 else
348                 {
349                     SwingUtilities.invokeAndWait( r );
350                 }
351             } catch(Exception JavaDoc e) {
352                 // oh well we got interrupted.
353
}
354         }
355         
356         public String JavaDoc interpretQuery()
357         {
358             
359             String JavaDoc query = this.src_query;
360             try {
361                 Interpreter interpreter = prepareExpressionEvaluator();
362
363                 // look for parameters in the query and replace them with default values.
364
// parameters look something like
365
// $P{QuoteGroupID}
366
// or
367
// $P!{OrderByClause}
368
java.util.List JavaDoc queryParams = new ArrayList();
369                 Enumeration enumParams = subDataset.getParameters().elements();
370                 while( enumParams.hasMoreElements() ) {
371                     it.businesslogic.ireport.JRParameter parameter = (it.businesslogic.ireport.JRParameter)enumParams.nextElement();
372
373                     String JavaDoc p1 = "$P{" + parameter.getName() + "}";
374                     String JavaDoc p2 = "$P!{" + parameter.getName() + "}";
375
376                     // evaluate the Default expression value
377

378                     // Integer expID = (Integer)parameterNameToExpressionID.get(parameter.getName());
379

380                     Object JavaDoc defValue;
381                     if( parameter.getDefaultValueExpression() != null && !parameter.getDefaultValueExpression().equals("") ) {
382                         defValue = recursiveInterpreter( interpreter, parameter.getDefaultValueExpression(), subDataset.getParameters());
383                         // interpreter.eval("bshCalculator.evaluate(" + expID.intValue() + ")");
384
} else {
385                         // this param does not have a default value.
386
defValue = null;
387                     }
388
389
390                     int ip1 = query.indexOf(p1);
391                     while( ip1!=-1 ) {
392                         // String replacement, Altering the SQL statement.
393
if( defValue==null ) {
394                             throw new IllegalArgumentException JavaDoc("Please set a " +
395                                 "default value for the parameter '"
396                                 + parameter.getName() + "'" );
397                         }
398
399                         String JavaDoc before = query.substring(0, ip1);
400                         String JavaDoc after = query.substring(ip1+p1.length());
401                         if (parameter.getClassType().equals("java.lang.String"))
402                         {
403                             String JavaDoc stt = defValue.toString();
404                             stt = it.businesslogic.ireport.util.Misc.string_replace("''","'", stt);
405                             query = before + "'" + stt + "'" + after;
406                         }
407                         else query = before + "" + defValue.toString() + "" + after;
408                         
409                         ip1 = query.indexOf(p1);
410                     }
411
412                     int ip2 = query.indexOf(p2);
413                     while( ip2!=-1 ) {
414                         // String replacement, Altering the SQL statement.
415
if( defValue==null ) {
416                             throw new IllegalArgumentException JavaDoc("Please set a " +
417                                 "default value for the parameter '"
418                                 + parameter.getName() + "'" );
419                         }
420
421                         String JavaDoc before = query.substring(0, ip2);
422                         String JavaDoc after = query.substring(ip2+p2.length());
423                         query = before + "" + defValue.toString() + "" + after;
424                         ip2 = query.indexOf(p2);
425                     }
426                 }
427             
428                 return query;
429             } catch (Exception JavaDoc ex)
430             {
431                 javax.swing.JOptionPane.showMessageDialog(null, ex.getMessage());
432                 return "";
433             }
434         }
435         
436         public void run() {
437             
438             String JavaDoc error_msg = "";
439             num++;
440             int in = num;
441             
442             FieldsProvider fp = getFieldsProvider();
443             if (fp == null) return;
444                         
445             if (fp.hasEditorComponent())
446             {
447                 FieldsProviderEditor editor = (FieldsProviderEditor)fp.getEditorComponent(ReportQueryDialog.this);
448                 editor.queryChanged(this.src_query);
449             }
450             
451             if (in < num) return; //Abort, new execution requested
452

453             if (fp.supportsGetFieldsOperation())
454             {
455                 try {
456
457                     // Create the JasperReport object
458
Report rep = MainFrame.getMainInstance().getActiveReportFrame().getReport();
459
460                     net.sf.jasperreports.engine.design.JasperDesign report = new net.sf.jasperreports.engine.design.JasperDesign();
461                     JRDesignQuery queryDes = new JRDesignQuery();
462                     queryDes.setText( this.src_query );
463                     queryDes.setLanguage( this.src_query_language );
464                     report.setQuery( queryDes);
465
466                     for (int i=0; i< rep.getJRproperties().size(); ++i)
467                     {
468                         JRProperty property = (JRProperty)rep.getJRproperties().elementAt(i);
469                         report.setProperty(property.getName(), property.getValue());
470                     }
471
472                     Interpreter interpreter = prepareExpressionEvaluator();
473                     HashMap parametersValues = new HashMap();
474
475                     for (int i=0; i< rep.getParameters().size(); ++i)
476                     {
477                         JRParameter ireportParam = (JRParameter)rep.getParameters().elementAt(i);
478                         if (ireportParam.isBuiltin()) continue;
479                         net.sf.jasperreports.engine.design.JRDesignParameter param = new net.sf.jasperreports.engine.design.JRDesignParameter();
480                         param.setName( ireportParam.getName() );
481                         JRDesignExpression de = new JRDesignExpression();
482                         de.setText( ireportParam.getDefaultValueExpression() );
483                         de.setValueClassName( ireportParam.getClassType() );
484                         param.setDefaultValueExpression( de );
485                         param.setForPrompting(ireportParam.isIsForPrompting() );
486                         param.setValueClassName( ireportParam.getClassType() );
487                         report.addParameter( param );
488
489                         Object JavaDoc defValue;
490                         if( ireportParam.getDefaultValueExpression() != null && !ireportParam.getDefaultValueExpression().equals("") ) {
491
492                             defValue = recursiveInterpreter( interpreter, ireportParam.getDefaultValueExpression(), subDataset.getParameters());
493                             //defValue = interpreter.eval( parameter.getDefaultValueExpression() );
494
// interpreter.eval("bshCalculator.evaluate(" + expID.intValue() + ")");
495
} else {
496                             // this param does not have a default value.
497
defValue = null;
498                         }
499
500                         parametersValues.put(ireportParam.getName(), defValue);
501                     }
502
503                     try {
504                         report.setName(rep.getName());
505                     } catch (Exception JavaDoc ex)
506                     {}
507
508                     if (in < num) return; //Abort, new execution requested
509

510                     // Create a temporary JasperReports object...
511
net.sf.jasperreports.engine.JRField[] jrFields = fp.getFields( this.conn, report.getMainDataset() , parametersValues);
512
513                     if (in < num) return; //Abort, new execution requested
514

515                     List columns = new ArrayList();
516                     for (int i=0; i<jrFields.length; ++i)
517                     {
518                         JRField field = new JRField( jrFields[i].getName(),jrFields[i].getValueClassName() );
519                         field.setDescription( jrFields[i].getDescription() );
520                         columns.add( new Object JavaDoc[]{field, field.getClassType(), field.getDescription()} );
521                     }
522
523                     if (in < num) return; //Abort, new execution requested
524

525                     setColumnsFromWorker(columns);
526
527                 } catch (Exception JavaDoc ex)
528                 {
529                     ex.printStackTrace();
530                     setColumnErrorFromWork( "Error: " + ex.getMessage() );
531                 }
532                 getJLabelStatusSQL().setText("Ready");
533             }
534             /////////////////////
535
}
536     }
537     
538     
539     
540     
541     
542     
543     /**
544      * Shows the list of columns.
545      * If the column error message label is visible remove it first.
546      *
547      * @param cols A List Object[], for the fields.
548      */

549     public void setColumns( final List cols ) {
550         
551         columnsErrorMsgLabel.setText( "" );
552         jPanel2.remove( columnsErrorScrollPane );
553         jPanel2.add( columnsScrollPane, java.awt.BorderLayout.CENTER );
554         jPanel2.revalidate();
555         
556         
557         javax.swing.table.DefaultTableModel JavaDoc dtm = (javax.swing.table.DefaultTableModel JavaDoc)jTableFields.getModel();
558         dtm.getDataVector().clear();
559         for(int i=0; i<cols.size(); i++) {
560             Object JavaDoc [] row = (Object JavaDoc[])cols.get(i);
561             dtm.addRow( row );
562         }
563         
564         // Select all the fields so the new user does not get confused, when
565
// they press OK. As only the selected fields are actually saved to the
566
// report
567
jTableFields.selectAll();
568         
569         okButton.setEnabled( true );
570     }
571     
572     /**
573      * Replace the columns list with a label that contains the reason why
574      * columns cannot be loaded.
575      *
576      * @param msg The error message to display, can be in HTML.
577      */

578     public void setColumnsError( final String JavaDoc msg ) {
579         columnsErrorMsgLabel.setText( msg );
580         jPanel2.remove( columnsScrollPane );
581         jPanel2.add( columnsErrorScrollPane, java.awt.BorderLayout.CENTER );
582         jPanel2.revalidate();
583         columnsErrorMsgLabel.repaint();
584         
585         //okButton.setEnabled(false);
586
}
587
588     private FieldsProvider getFieldsProvider() {
589         return fieldsProvider;
590     }
591
592     private void setFieldsProvider(FieldsProvider fieldsProvider) {
593         this.fieldsProvider = fieldsProvider;
594     }
595     
596     
597     
598     /** This method is called from within the constructor to
599      * initialize the form.
600      * WARNING: Do NOT modify this code. The content of this method is
601      * always regenerated by the Form Editor.
602      */

603     // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
604
private void initComponents() {
605         java.awt.GridBagConstraints JavaDoc gridBagConstraints;
606
607         jSplitPane1 = new javax.swing.JSplitPane JavaDoc();
608         jPanel1 = new javax.swing.JPanel JavaDoc();
609         jTabbedPane1 = new javax.swing.JTabbedPane JavaDoc();
610         jPanelSQL = new javax.swing.JPanel JavaDoc();
611         jPanel14 = new javax.swing.JPanel JavaDoc();
612         jLabel1 = new javax.swing.JLabel JavaDoc();
613         jComboBoxQueryType = new javax.swing.JComboBox JavaDoc();
614         jPanel16 = new javax.swing.JPanel JavaDoc();
615         jButtonLoadQuery = new javax.swing.JButton JavaDoc();
616         jButtonSaveQuery = new javax.swing.JButton JavaDoc();
617         jPanelQueryArea = new javax.swing.JPanel JavaDoc();
618         jSplitPane2 = new javax.swing.JSplitPane JavaDoc();
619         jPanel7 = new javax.swing.JPanel JavaDoc();
620         jRSQLExpressionArea1 = new it.businesslogic.ireport.gui.JRSQLExpressionArea();
621         jLabelStatusSQL = new javax.swing.JLabel JavaDoc();
622         automaticlyReadFieldsCheckBox = new javax.swing.JCheckBox JavaDoc();
623         readFieldsButton = new javax.swing.JButton JavaDoc();
624         jButtonOpenDesigner = new javax.swing.JButton JavaDoc();
625         exportQueryButton = new javax.swing.JButton JavaDoc();
626         jPanel8 = new javax.swing.JPanel JavaDoc();
627         jTextFieldBeanClass1 = new javax.swing.JTextField JavaDoc();
628         jLabel3 = new javax.swing.JLabel JavaDoc();
629         jButtonReadBeanAttributes3 = new javax.swing.JButton JavaDoc();
630         jPanel11 = new javax.swing.JPanel JavaDoc();
631         jSeparator1 = new javax.swing.JSeparator JavaDoc();
632         jPanel6 = new javax.swing.JPanel JavaDoc();
633         jButton2 = new javax.swing.JButton JavaDoc();
634         jPanel15 = new javax.swing.JPanel JavaDoc();
635         jButton3 = new javax.swing.JButton JavaDoc();
636         jPanel2 = new javax.swing.JPanel JavaDoc();
637         columnsScrollPane = new javax.swing.JScrollPane JavaDoc();
638         jTableFields = new javax.swing.JTable JavaDoc();
639         jPanel3 = new javax.swing.JPanel JavaDoc();
640         jPanel4 = new javax.swing.JPanel JavaDoc();
641         okButton = new javax.swing.JButton JavaDoc();
642         cancelButton = new javax.swing.JButton JavaDoc();
643         jPanel9 = new javax.swing.JPanel JavaDoc();
644         jButton1 = new javax.swing.JButton JavaDoc();
645         jButton4 = new javax.swing.JButton JavaDoc();
646         columnsErrorScrollPane = new javax.swing.JScrollPane JavaDoc();
647         columnsErrorMsgLabel = new javax.swing.JLabel JavaDoc();
648
649         setTitle("Report query");
650         addWindowListener(new java.awt.event.WindowAdapter JavaDoc() {
651             public void windowClosing(java.awt.event.WindowEvent JavaDoc evt) {
652                 closeDialog(evt);
653             }
654             public void windowOpened(java.awt.event.WindowEvent JavaDoc evt) {
655                 formWindowOpened(evt);
656             }
657         });
658
659         jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
660         jSplitPane1.setResizeWeight(0.5);
661         jPanel1.setLayout(new java.awt.BorderLayout JavaDoc());
662
663         jPanel1.setMinimumSize(new java.awt.Dimension JavaDoc(10, 100));
664         jPanel1.setPreferredSize(new java.awt.Dimension JavaDoc(10, 350));
665         jTabbedPane1.setMinimumSize(new java.awt.Dimension JavaDoc(154, 350));
666         jTabbedPane1.setPreferredSize(new java.awt.Dimension JavaDoc(154, 350));
667         jPanelSQL.setLayout(new java.awt.GridBagLayout JavaDoc());
668
669         jPanelSQL.setMinimumSize(new java.awt.Dimension JavaDoc(1, 100));
670         jPanelSQL.setPreferredSize(new java.awt.Dimension JavaDoc(1, 350));
671         jPanel14.setLayout(new java.awt.GridBagLayout JavaDoc());
672
673         jLabel1.setText("Query language");
674         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
675         gridBagConstraints.insets = new java.awt.Insets JavaDoc(4, 4, 4, 4);
676         jPanel14.add(jLabel1, gridBagConstraints);
677
678         jComboBoxQueryType.setEditable(true);
679         jComboBoxQueryType.setMinimumSize(new java.awt.Dimension JavaDoc(200, 18));
680         jComboBoxQueryType.setPreferredSize(new java.awt.Dimension JavaDoc(200, 22));
681         jComboBoxQueryType.addActionListener(new java.awt.event.ActionListener JavaDoc() {
682             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
683                 jComboBoxQueryTypeActionPerformed(evt);
684             }
685         });
686
687         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
688         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
689         gridBagConstraints.insets = new java.awt.Insets JavaDoc(4, 0, 4, 4);
690         jPanel14.add(jComboBoxQueryType, gridBagConstraints);
691
692         jPanel16.setLayout(new java.awt.GridBagLayout JavaDoc());
693
694         jButtonLoadQuery.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/folder_database.png")));
695         jButtonLoadQuery.setText("Load query");
696         jButtonLoadQuery.setMargin(new java.awt.Insets JavaDoc(2, 4, 2, 4));
697         jButtonLoadQuery.addActionListener(new java.awt.event.ActionListener JavaDoc() {
698             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
699                 jButtonLoadQueryActionPerformed(evt);
700             }
701         });
702
703         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
704         gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
705         gridBagConstraints.weightx = 1.0;
706         jPanel16.add(jButtonLoadQuery, gridBagConstraints);
707
708         jButtonSaveQuery.setIcon(new javax.swing.ImageIcon JavaDoc(getClass().getResource("/it/businesslogic/ireport/icons/menu/database_save.png")));
709         jButtonSaveQuery.setText("Save query");
710         jButtonSaveQuery.setMargin(new java.awt.Insets JavaDoc(2, 4, 2, 4));
711         jButtonSaveQuery.addActionListener(new java.awt.event.ActionListener JavaDoc() {
712             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
713                 jButtonSaveQueryActionPerformed(evt);
714             }
715         });
716
717         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
718         gridBagConstraints.insets = new java.awt.Insets JavaDoc(0, 4, 0, 4);
719         jPanel16.add(jButtonSaveQuery, gridBagConstraints);
720
721         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
722         gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
723         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
724         gridBagConstraints.weightx = 1.0;
725         jPanel14.add(jPanel16, gridBagConstraints);
726
727         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
728         gridBagConstraints.gridx = 0;
729         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
730         gridBagConstraints.weightx = 1.0;
731         jPanelSQL.add(jPanel14, gridBagConstraints);
732
733         jPanelQueryArea.setLayout(new java.awt.BorderLayout JavaDoc());
734
735         jSplitPane2.setBorder(null);
736         jSplitPane2.setDividerSize(6);
737         jSplitPane2.setResizeWeight(0.5);
738         jSplitPane2.setOneTouchExpandable(true);
739         jPanel7.setLayout(new java.awt.GridBagLayout JavaDoc());
740
741         jRSQLExpressionArea1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
742         jRSQLExpressionArea1.setMinimumSize(new java.awt.Dimension JavaDoc(50, 200));
743         jRSQLExpressionArea1.setPreferredSize(new java.awt.Dimension JavaDoc(661, 340));
744         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
745         gridBagConstraints.gridx = 0;
746         gridBagConstraints.gridwidth = 4;
747         gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
748         gridBagConstraints.weightx = 1.0;
749         gridBagConstraints.weighty = 1.0;
750         jPanel7.add(jRSQLExpressionArea1, gridBagConstraints);
751
752         jLabelStatusSQL.setBorder(javax.swing.BorderFactory.createEtchedBorder());
753         jLabelStatusSQL.setMinimumSize(new java.awt.Dimension JavaDoc(4, 20));
754         jLabelStatusSQL.setPreferredSize(new java.awt.Dimension JavaDoc(4, 20));
755         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
756         gridBagConstraints.gridx = 0;
757         gridBagConstraints.gridwidth = 4;
758         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
759         jPanel7.add(jLabelStatusSQL, gridBagConstraints);
760
761         automaticlyReadFieldsCheckBox.setSelected(true);
762         automaticlyReadFieldsCheckBox.setText("Automatically Retrieve Fields");
763         automaticlyReadFieldsCheckBox.addActionListener(new java.awt.event.ActionListener JavaDoc() {
764             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
765                 automaticlyReadFieldsCheckBoxActionPerformed(evt);
766             }
767         });
768
769         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
770         gridBagConstraints.gridy = 2;
771         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
772         gridBagConstraints.insets = new java.awt.Insets JavaDoc(2, 0, 2, 0);
773         jPanel7.add(automaticlyReadFieldsCheckBox, gridBagConstraints);
774
775         readFieldsButton.setText("Read Fields");
776         readFieldsButton.setEnabled(false);
777         readFieldsButton.addActionListener(new java.awt.event.ActionListener JavaDoc() {
778             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
779                 readFieldsButtonActionPerformed(evt);
780             }
781         });
782
783         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
784         gridBagConstraints.gridy = 2;
785         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
786         gridBagConstraints.insets = new java.awt.Insets JavaDoc(2, 10, 2, 0);
787         jPanel7.add(readFieldsButton, gridBagConstraints);
788
789         jButtonOpenDesigner.setText("Query designer");
790         jButtonOpenDesigner.addActionListener(new java.awt.event.ActionListener JavaDoc() {
791             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
792                 jButtonOpenDesignerActionPerformed(evt);
793             }
794         });
795
796         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
797         gridBagConstraints.gridy = 2;
798         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
799         gridBagConstraints.weightx = 1.0;
800         gridBagConstraints.insets = new java.awt.Insets JavaDoc(2, 10, 2, 0);
801         jPanel7.add(jButtonOpenDesigner, gridBagConstraints);
802
803         exportQueryButton.setText("Send to clipboard");
804         exportQueryButton.addActionListener(new java.awt.event.ActionListener JavaDoc() {
805             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
806                 exportQueryButtonActionPerformed(evt);
807             }
808         });
809
810         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
811         gridBagConstraints.gridy = 2;
812         gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
813         gridBagConstraints.weightx = 1.0;
814         gridBagConstraints.insets = new java.awt.Insets JavaDoc(2, 10, 2, 0);
815         jPanel7.add(exportQueryButton, gridBagConstraints);
816
817         jSplitPane2.setLeftComponent(jPanel7);
818
819         jPanelQueryArea.add(jSplitPane2, java.awt.BorderLayout.CENTER);
820
821         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
822         gridBagConstraints.gridx = 0;
823         gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
824         gridBagConstraints.weightx = 1.0;
825         gridBagConstraints.weighty = 1.0;
826         gridBagConstraints.insets = new java.awt.Insets JavaDoc(0, 4, 2, 4);
827         jPanelSQL.add(jPanelQueryArea, gridBagConstraints);
828
829         jTabbedPane1.addTab("Report query ", jPanelSQL);
830
831         jPanel8.setLayout(new java.awt.GridBagLayout JavaDoc());
832
833         jPanel8.setMinimumSize(new java.awt.Dimension JavaDoc(235, 30));
834         jPanel8.setPreferredSize(new java.awt.Dimension JavaDoc(215, 30));
835         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
836         gridBagConstraints.gridx = 0;
837         gridBagConstraints.gridy = 1;
838         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
839         gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
840         gridBagConstraints.weightx = 1.0;
841         gridBagConstraints.insets = new java.awt.Insets JavaDoc(0, 3, 5, 3);
842         jPanel8.add(jTextFieldBeanClass1, gridBagConstraints);
843
844         jLabel3.setText("Class name");
845         jLabel3.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);
846         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
847         gridBagConstraints.gridx = 0;
848         gridBagConstraints.gridy = 0;
849         gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
850         gridBagConstraints.insets = new java.awt.Insets JavaDoc(3, 3, 5, 3);
851         jPanel8.add(jLabel3, gridBagConstraints);
852
853         jButtonReadBeanAttributes3.setText("Read attributes");
854         jButtonReadBeanAttributes3.addActionListener(new java.awt.event.ActionListener JavaDoc() {
855             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
856                 jButtonReadBeanAttributes3ActionPerformed(evt);
857             }
858         });
859
860         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
861         gridBagConstraints.gridx = 1;
862         gridBagConstraints.gridy = 1;
863         gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
864         gridBagConstraints.insets = new java.awt.Insets JavaDoc(0, 3, 5, 3);
865         jPanel8.add(jButtonReadBeanAttributes3, gridBagConstraints);
866
867         jPanel11.setLayout(new java.awt.BorderLayout JavaDoc());
868
869         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
870         gridBagConstraints.gridx = 0;
871         gridBagConstraints.gridy = 3;
872         gridBagConstraints.gridwidth = 2;
873         gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
874         gridBagConstraints.weightx = 1.0;
875         gridBagConstraints.weighty = 1.0;
876         gridBagConstraints.insets = new java.awt.Insets JavaDoc(0, 0, 4, 4);
877         jPanel8.add(jPanel11, gridBagConstraints);
878
879         jSeparator1.setMinimumSize(new java.awt.Dimension JavaDoc(0, 4));
880         jSeparator1.setPreferredSize(new java.awt.Dimension JavaDoc(0, 4));
881         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
882         gridBagConstraints.gridx = 0;
883         gridBagConstraints.gridy = 2;
884         gridBagConstraints.gridwidth = 2;
885         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
886         gridBagConstraints.weightx = 1.0;
887         gridBagConstraints.insets = new java.awt.Insets JavaDoc(0, 0, 4, 0);
888         jPanel8.add(jSeparator1, gridBagConstraints);
889
890         jTabbedPane1.addTab("JavaBean Datasource", jPanel8);
891
892         jButton2.setText("Get fields from datasource");
893         jButton2.addActionListener(new java.awt.event.ActionListener JavaDoc() {
894             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
895                 jButton2ActionPerformed(evt);
896             }
897         });
898
899         jPanel6.add(jButton2);
900
901         jTabbedPane1.addTab("DataSource Provider", jPanel6);
902
903         jButton3.setText("Get fields from datasource");
904         jButton3.addActionListener(new java.awt.event.ActionListener JavaDoc() {
905             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
906                 jButton2ActionPerformed1(evt);
907             }
908         });
909
910         jPanel15.add(jButton3);
911
912         jTabbedPane1.addTab("CSV Datasource", jPanel15);
913
914         jPanel1.add(jTabbedPane1, java.awt.BorderLayout.CENTER);
915
916         jSplitPane1.setTopComponent(jPanel1);
917
918         jPanel2.setLayout(new java.awt.BorderLayout JavaDoc());
919
920         jPanel2.setPreferredSize(new java.awt.Dimension JavaDoc(453, 150));
921         columnsScrollPane.setPreferredSize(new java.awt.Dimension JavaDoc(453, 150));
922         jTableFields.setModel(new javax.swing.table.DefaultTableModel JavaDoc(
923             new Object JavaDoc [][] {
924
925             },
926             new String JavaDoc [] {
927                 "Field name", "Field type", "Description"
928             }
929         ) {
930             boolean[] canEdit = new boolean [] {
931                 false, false, false
932             };
933
934             public boolean isCellEditable(int rowIndex, int columnIndex) {
935                 return canEdit [columnIndex];
936             }
937         });
938         jTableFields.addKeyListener(new java.awt.event.KeyAdapter JavaDoc() {
939             public void keyReleased(java.awt.event.KeyEvent JavaDoc evt) {
940                 jTableFieldsKeyReleased(evt);
941             }
942         });
943
944         columnsScrollPane.setViewportView(jTableFields);
945
946         jPanel2.add(columnsScrollPane, java.awt.BorderLayout.CENTER);
947
948         jPanel3.setLayout(new java.awt.BorderLayout JavaDoc());
949
950         jPanel3.setPreferredSize(new java.awt.Dimension JavaDoc(10, 34));
951         jPanel3.setMinimumSize(new java.awt.Dimension JavaDoc(10, 34));
952         jPanel4.setLayout(new java.awt.GridBagLayout JavaDoc());
953
954         jPanel4.setPreferredSize(new java.awt.Dimension JavaDoc(150, 10));
955         okButton.setText("OK");
956         okButton.setEnabled(false);
957         okButton.setMaximumSize(new java.awt.Dimension JavaDoc(67, 25));
958         okButton.setMinimumSize(new java.awt.Dimension JavaDoc(67, 25));
959         okButton.setPreferredSize(new java.awt.Dimension JavaDoc(67, 25));
960         okButton.addActionListener(new java.awt.event.ActionListener JavaDoc() {
961             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
962                 okButtonActionPerformed(evt);
963             }
964         });
965
966         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
967         gridBagConstraints.gridx = 0;
968         gridBagConstraints.gridy = 0;
969         jPanel4.add(okButton, gridBagConstraints);
970
971         cancelButton.setText("Cancel");
972         cancelButton.addActionListener(new java.awt.event.ActionListener JavaDoc() {
973             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
974                 cancelButtonActionPerformed(evt);
975             }
976         });
977
978         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
979         gridBagConstraints.gridx = 1;
980         gridBagConstraints.gridy = 0;
981         gridBagConstraints.insets = new java.awt.Insets JavaDoc(0, 0, 0, 4);
982         jPanel4.add(cancelButton, gridBagConstraints);
983
984         jPanel3.add(jPanel4, java.awt.BorderLayout.EAST);
985
986         jPanel9.setLayout(new java.awt.GridBagLayout JavaDoc());
987
988         jPanel9.setMinimumSize(new java.awt.Dimension JavaDoc(100, 20));
989         jButton1.setText("Filter expression...");
990         jButton1.addActionListener(new java.awt.event.ActionListener JavaDoc() {
991             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
992                 jButton1ActionPerformed(evt);
993             }
994         });
995
996         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
997         gridBagConstraints.gridx = 0;
998         gridBagConstraints.gridy = 0;
999         gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
1000        gridBagConstraints.insets = new java.awt.Insets JavaDoc(0, 4, 0, 0);
1001        jPanel9.add(jButton1, gridBagConstraints);
1002
1003        jButton4.setText("Sort options...");
1004        jButton4.addActionListener(new java.awt.event.ActionListener JavaDoc() {
1005            public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
1006                jButton1ActionPerformed1(evt);
1007            }
1008        });
1009
1010        gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
1011        gridBagConstraints.gridx = 1;
1012        gridBagConstraints.gridy = 0;
1013        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
1014        gridBagConstraints.weightx = 1.0;
1015        gridBagConstraints.insets = new java.awt.Insets JavaDoc(0, 4, 0, 0);
1016        jPanel9.add(jButton4, gridBagConstraints);
1017
1018        jPanel3.add(jPanel9, java.awt.BorderLayout.CENTER);
1019
1020        jPanel2.add(jPanel3, java.awt.BorderLayout.SOUTH);
1021
1022        columnsErrorMsgLabel.setText("jLabel1");
1023        columnsErrorMsgLabel.setVerticalAlignment(javax.swing.SwingConstants.TOP);
1024        columnsErrorMsgLabel.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
1025        columnsErrorScrollPane.setViewportView(columnsErrorMsgLabel);
1026
1027        jPanel2.add(columnsErrorScrollPane, java.awt.BorderLayout.CENTER);
1028
1029        jSplitPane1.setBottomComponent(jPanel2);
1030
1031        getContentPane().add(jSplitPane1, java.awt.BorderLayout.CENTER);
1032
1033        pack();
1034    }// </editor-fold>//GEN-END:initComponents
1035

1036    private void jButtonOpenDesignerActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jButtonOpenDesignerActionPerformed
1037

1038        if (getFieldsProvider() != null &&
1039            getFieldsProvider().hasQueryDesigner())
1040        {
1041            try {
1042                String JavaDoc newQuery = getFieldsProvider().designQuery((IReportConnection)MainFrame.getMainInstance().getProperties().get("DefaultConnection"), jRSQLExpressionArea1.getText(), this );
1043                if (newQuery != null && !jRSQLExpressionArea1.getText().equals(newQuery))
1044                {
1045                    jRSQLExpressionArea1.setText( newQuery );
1046                }
1047            } catch (Exception JavaDoc ex)
1048            {
1049                javax.swing.JOptionPane.showMessageDialog(null, ex.getMessage());
1050            }
1051        }
1052        
1053        
1054    }//GEN-LAST:event_jButtonOpenDesignerActionPerformed
1055

1056    private void jButton1ActionPerformed1(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jButton1ActionPerformed1
1057

1058        SortFieldsDialog sfd = new SortFieldsDialog( this, true);
1059        sfd.setSubDataset( this.getSubDataset() );
1060        sfd.setVisible(true);
1061        
1062    }//GEN-LAST:event_jButton1ActionPerformed1
1063

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

1066        if (getSubDataset() == null) return;
1067        FilterExpressionDialog fed = new FilterExpressionDialog(this, true);
1068        fed.setFilterExpression( this.getSubDataset().getFilterExpression(), getSubDataset());
1069        fed.setVisible(true);
1070        if (fed.getDialogResult() == JOptionPane.OK_OPTION)
1071        {
1072            getSubDataset().setFilterExpression( fed.getFilterExpression() );
1073        }
1074    }//GEN-LAST:event_jButton1ActionPerformed
1075

1076    private void jButtonSaveQueryActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jButtonSaveQueryActionPerformed
1077

1078       Misc.saveSQLQuery( jRSQLExpressionArea1.getText(), this );
1079        
1080    }//GEN-LAST:event_jButtonSaveQueryActionPerformed
1081

1082    private void jButtonLoadQueryActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jButtonLoadQueryActionPerformed
1083

1084        
1085            String JavaDoc query = Misc.loadSQLQuery(this);
1086            
1087            if (query != null)
1088            {
1089                jRSQLExpressionArea1.setText(query);
1090            }
1091            
1092    }//GEN-LAST:event_jButtonLoadQueryActionPerformed
1093

1094    private void jComboBoxQueryTypeActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jComboBoxQueryTypeActionPerformed
1095
// TODO add your handling code here:
1096
boolean autoReadFields = automaticlyReadFieldsCheckBox.isSelected();
1097        
1098        readFieldsButton.setEnabled(false);
1099        automaticlyReadFieldsCheckBox.setSelected(false);
1100        readFieldsButton.setEnabled(false);
1101        
1102        String JavaDoc language = "sql";
1103        
1104        if (jComboBoxQueryType.getSelectedItem() != null &&
1105            jComboBoxQueryType.getSelectedItem() instanceof Tag)
1106        {
1107            language = ""+((Tag)jComboBoxQueryType.getSelectedItem()).getValue();
1108        }
1109        else if (jComboBoxQueryType.getSelectedItem() != null)
1110        {
1111            language = "" + jComboBoxQueryType.getSelectedItem();
1112        }
1113        
1114        
1115        // 1. Look for a special FieldsProvider....
1116
getJLabelStatusSQL().setText("Looking for a valid Fields provider for " + language + " queries....");
1117        /////////////////////////////
1118
setFieldsProvider(null);
1119            
1120        Enumeration enum_qe = MainFrame.getMainInstance().getQueryExecuters().elements();
1121        while (enum_qe.hasMoreElements())
1122        {
1123            QueryExecuterDef qed = (QueryExecuterDef)enum_qe.nextElement();
1124            if (qed.getLanguage().equals(language) && qed.getFieldsProvider() != null && qed.getFieldsProvider().length() > 0)
1125            {
1126                try {
1127
1128                    // We have to set the query executer class...
1129
net.sf.jasperreports.engine.util.JRProperties.setProperty("net.sf.jasperreports.query.executer.factory." + language, qed.getClassName());
1130                    setFieldsProvider( (FieldsProvider)Class.forName( qed.getFieldsProvider(),true,MainFrame.getMainInstance().getReportClassLoader()).newInstance() );
1131                } catch (Throwable JavaDoc t)
1132                {
1133                    getJLabelStatusSQL().setText("Error creating the fields provider " + t.getMessage());
1134                }
1135            }
1136        }
1137        
1138        exportQueryButton.setEnabled(language.equals("sql"));
1139        
1140        if (getFieldsProvider() == null && language.equals("sql"))
1141        {
1142            setFieldsProvider( new SQLFieldsProvider());
1143        }
1144        else if (getFieldsProvider() == null && language.equals("hql"))
1145        {
1146            setFieldsProvider( new HQLFieldsProvider());
1147        }
1148        else if (getFieldsProvider() == null && language.equals("ejbql"))
1149        {
1150            setFieldsProvider( new EJBQLFieldsProvider());
1151        }
1152        else if (getFieldsProvider() == null && language.equals("mdx"))
1153        {
1154            setFieldsProvider( new MDXFieldsProvider());
1155        }
1156        else if (getFieldsProvider() == null && language.equals("xmla-mdx"))
1157        {
1158            setFieldsProvider( new CincomMDXFieldsProvider());
1159        }
1160        
1161        boolean isSettingSQLExpressionOldValue = isSettingSQLExpression;
1162        isSettingSQLExpression = true;
1163        
1164        if (getFieldsProvider() == null)
1165        {
1166            setSpecialLanguageComponent( null );
1167            readFieldsButton.setEnabled(false );
1168            jButtonOpenDesigner.setEnabled( false );
1169            automaticlyReadFieldsCheckBox.setEnabled(false);
1170            automaticlyReadFieldsCheckBox.setSelected(autoReadFields);
1171            getJLabelStatusSQL().setText("No Fields Provider available for " + language + " queries!");
1172        }
1173        else
1174        {
1175            readFieldsButton.setEnabled( true );
1176            automaticlyReadFieldsCheckBox.setEnabled( getFieldsProvider().supportsAutomaticQueryExecution() );
1177            automaticlyReadFieldsCheckBox.setSelected(autoReadFields);
1178            jButtonOpenDesigner.setEnabled( getFieldsProvider().hasQueryDesigner());
1179            if (getFieldsProvider().hasEditorComponent())
1180            {
1181                FieldsProviderEditor fpe = getFieldsProvider().getEditorComponent(this);
1182                if (fpe instanceof Component JavaDoc)
1183                {
1184                    setSpecialLanguageComponent( (Component JavaDoc)fpe );
1185                }
1186            }
1187            else
1188            {
1189                setSpecialLanguageComponent( null );
1190            }
1191            getJLabelStatusSQL().setText("Fields provider for " + language + " queries ready.");
1192        }
1193        isSettingSQLExpression = isSettingSQLExpressionOldValue;
1194        
1195    }//GEN-LAST:event_jComboBoxQueryTypeActionPerformed
1196

1197    
1198    public void setSpecialLanguageComponent(Component JavaDoc c)
1199    {
1200        if (c == null)
1201        {
1202            if (jPanelQueryArea.getComponent(0) != jPanel7)
1203            {
1204                jPanelQueryArea.removeAll();
1205                jPanelQueryArea.add(jPanel7, BorderLayout.CENTER);
1206            }
1207        }
1208        else
1209        {
1210         
1211            if (jPanelQueryArea.getComponent(0) != jSplitPane2 ||
1212                jSplitPane2.getRightComponent() != c)
1213            {
1214                jPanelQueryArea.removeAll();
1215                jSplitPane2.setLeftComponent(jPanel7);
1216                jSplitPane2.setRightComponent( c );
1217                jPanelQueryArea.add(jSplitPane2, BorderLayout.CENTER);
1218            }
1219        }
1220        jPanelQueryArea.updateUI();
1221        jRSQLExpressionArea1.requestFocusInWindow();
1222        jRSQLExpressionArea1.requestFocus();
1223    }
1224    
1225    
1226    private void jButton2ActionPerformed1(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jButton2ActionPerformed1
1227
IReportConnection conn = (IReportConnection)MainFrame.getMainInstance().getProperties().get("DefaultConnection");
1228        if (conn == null || !(conn instanceof it.businesslogic.ireport.connection.JRCSVDataSourceConnection)) {
1229            setColumnsError( "The active connection is not a JasperReports CSV DataSource." );
1230            return;
1231        }
1232        else
1233        {
1234            it.businesslogic.ireport.connection.JRCSVDataSourceConnection ic = (it.businesslogic.ireport.connection.JRCSVDataSourceConnection)conn;
1235            try {
1236                Vector names = ic.getColumnNames();
1237                DefaultTableModel dtm = (DefaultTableModel)jTableFields.getModel();
1238                dtm.setRowCount(0);
1239            
1240                for (int nd =0; nd < names.size(); ++nd) {
1241                    String JavaDoc fieldName = ""+names.elementAt(nd);
1242                    it.businesslogic.ireport.JRField field = new it.businesslogic.ireport.JRField(fieldName, "java.lang.String");
1243                    field.setDescription(""); //Field returned by " +methods[i].getName() + " (real type: "+ returnType +")");
1244

1245                    Vector row = new Vector();
1246                    row.addElement(field);
1247                    row.addElement(field.getClassType());
1248                    row.addElement(field.getDescription());
1249                    dtm.addRow(row);
1250                }
1251                jTableFields.setRowSelectionInterval(0, names.size()-1);
1252            } catch (Exception JavaDoc ex)
1253            {
1254                setColumnsError( "" + ex.getMessage() );
1255            
1256            }
1257        }
1258    }//GEN-LAST:event_jButton2ActionPerformed1
1259

1260    private void formWindowOpened(java.awt.event.WindowEvent JavaDoc evt) {//GEN-FIRST:event_formWindowOpened
1261

1262    }//GEN-LAST:event_formWindowOpened
1263

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

1266        IReportConnection conn = (IReportConnection)MainFrame.getMainInstance().getProperties().get("DefaultConnection");
1267        if (conn == null || !(conn instanceof it.businesslogic.ireport.connection.JRDataSourceProviderConnection)) {
1268            setColumnsError( "The active connection is not a JasperReports DataSource provider." );
1269            return;
1270        }
1271        else
1272        {
1273            it.businesslogic.ireport.connection.JRDataSourceProviderConnection ic = (it.businesslogic.ireport.connection.JRDataSourceProviderConnection)conn;
1274            try {
1275                Report rep = MainFrame.getMainInstance().getActiveReportFrame().getReport();
1276                
1277                net.sf.jasperreports.engine.design.JasperDesign report = new net.sf.jasperreports.engine.design.JasperDesign();
1278                JRDesignQuery queryDes = new JRDesignQuery();
1279                queryDes.setText(jRSQLExpressionArea1.getText());
1280                 String JavaDoc queryLanguage = "sql";
1281                 Object JavaDoc obj = jComboBoxQueryType.getSelectedItem();
1282                if (obj != null && obj instanceof Tag)
1283                {
1284                    queryLanguage = ""+((Tag)obj).getValue();
1285                }
1286                else
1287                {
1288                    queryLanguage = ""+obj;
1289                }
1290                queryDes.setLanguage( queryLanguage );
1291                report.setQuery( queryDes);
1292                
1293                for (int i=0; i< rep.getJRproperties().size(); ++i)
1294                {
1295                    JRProperty property = (JRProperty)rep.getJRproperties().elementAt(i);
1296                    report.setProperty(property.getName(), property.getValue());
1297                }
1298                
1299                for (int i=0; i< rep.getParameters().size(); ++i)
1300                {
1301                    JRParameter ireportParam = (JRParameter)rep.getParameters().elementAt(i);
1302                    if (ireportParam.isBuiltin()) continue;
1303                    net.sf.jasperreports.engine.design.JRDesignParameter param = new net.sf.jasperreports.engine.design.JRDesignParameter();
1304                    param.setName( ireportParam.getName() );
1305                    JRDesignExpression de = new JRDesignExpression();
1306                    de.setText( ireportParam.getDefaultValueExpression() );
1307                    de.setValueClassName( ireportParam.getClassType() );
1308                    param.setDefaultValueExpression( de );
1309                    param.setForPrompting(ireportParam.isIsForPrompting() );
1310                    param.setValueClassName( ireportParam.getClassType() );
1311                    report.addParameter( param );
1312                }
1313                
1314                try {
1315                    
1316                    report.setName(rep.getName());
1317                } catch (Exception JavaDoc ex)
1318                {
1319                    
1320                }
1321                
1322                // Create a temporary JasperReports object...
1323
net.sf.jasperreports.engine.JasperReport jr = new net.sf.jasperreports.engine.JasperReport(report,"",null,null,"");
1324                
1325            net.sf.jasperreports.engine.JRField[] jrfields = ic.getDataSourceProvider().getFields( jr );
1326            DefaultTableModel dtm = (DefaultTableModel)jTableFields.getModel();
1327            dtm.setRowCount(0);
1328            for (int i=0; i< jrfields.length; ++i)
1329            {
1330                it.businesslogic.ireport.JRField field = new it.businesslogic.ireport.JRField(jrfields[i].getName(), jrfields[i].getValueClassName());
1331                field.setDescription( it.businesslogic.ireport.util.Misc.nvl( jrfields[i].getDescription(),""));
1332                Vector row = new Vector();
1333                row.addElement(field);
1334                row.addElement(field.getClassType());
1335                row.addElement(field.getDescription());
1336                dtm.addRow(row);
1337            }
1338            } catch (Exception JavaDoc ex)
1339            {
1340                setColumnsError( "" + ex.getMessage() );
1341            
1342            }
1343        }
1344        
1345    }//GEN-LAST:event_jButton2ActionPerformed
1346

1347    private void exportQueryButtonActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_exportQueryButtonActionPerformed
1348

1349        FieldReader fr = new FieldReader(jRSQLExpressionArea1.getText(), null);
1350        String JavaDoc query = fr.interpretQuery();
1351        
1352        java.awt.datatransfer.Clipboard JavaDoc clipboard = java.awt.Toolkit.getDefaultToolkit().getSystemClipboard();
1353        StringSelection fieldContent = new StringSelection (query);
1354        
1355        clipboard.setContents (fieldContent, this);
1356
1357        
1358        // TODO add your handling code here:
1359
}//GEN-LAST:event_exportQueryButtonActionPerformed
1360

1361    private void jButtonReadBeanAttributes3ActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jButtonReadBeanAttributes3ActionPerformed
1362

1363        bip1.setClassName(jTextFieldBeanClass1.getText().trim());
1364    }//GEN-LAST:event_jButtonReadBeanAttributes3ActionPerformed
1365

1366    protected void getFieldsFromClass(Class JavaDoc clazz, String JavaDoc path) throws Exception JavaDoc
1367    {
1368         DefaultTableModel dtm = (DefaultTableModel)jTableFields.getModel();
1369            
1370         java.lang.reflect.Method JavaDoc[] methods = clazz.getMethods();
1371         java.lang.reflect.Field JavaDoc[] fields = clazz.getFields();
1372         // for any method, looking for get<FieldName> ....
1373

1374            
1375         for (int i=0; i<methods.length; ++i)
1376         {
1377               
1378                if ( java.lang.reflect.Modifier.isPublic( methods[i].getModifiers() ) &&
1379                     methods[i].getDeclaringClass().getName().equals(clazz.getName() ) &&
1380                     !java.lang.reflect.Modifier.isNative( methods[i].getModifiers() )
1381                     && methods[i].getName().startsWith("get")
1382                        && !methods[i].getReturnType().isPrimitive()
1383                        && !methods[i].getReturnType().isArray())
1384                {
1385                   String JavaDoc fieldName = methods[i].getName().substring(3);
1386                   // Looking for the field...
1387
for (int f=0; f<fields.length; ++f)
1388                   {
1389                       if (fields[f].getName().equalsIgnoreCase( fieldName ))
1390                       {
1391                           
1392                           fieldName = fields[f].getName();
1393                           break;
1394                       }
1395                   }
1396                   
1397                   String JavaDoc returnType = methods[i].getReturnType().getName();
1398                   boolean found = false;
1399                   for (int cc=0; cc<standard_types.length; ++cc)
1400                   {
1401                        if ( returnType.equalsIgnoreCase(standard_types[cc]))
1402                        {
1403                            it.businesslogic.ireport.JRField field = new it.businesslogic.ireport.JRField(fieldName, returnType);
1404                            field.setDescription(path + "" + fieldName);
1405                            Vector row = new Vector();
1406                            row.addElement(field);
1407                            row.addElement(field.getClassType());
1408                            row.addElement(field.getDescription());
1409                            dtm.addRow(row);
1410                            found = true;
1411                            break;
1412                        }
1413                  }
1414                  if (!found)
1415                  {
1416                        it.businesslogic.ireport.JRField field = new it.businesslogic.ireport.JRField(fieldName, "java.lang.Object");
1417                        field.setDescription(path + "" + fieldName);
1418                        Vector row = new Vector();
1419                        row.addElement(field);
1420                        row.addElement(field.getClassType());
1421                        row.addElement(field.getDescription());
1422                        dtm.addRow(row);
1423                        Class JavaDoc subClazz = Class.forName(returnType);
1424                        getFieldsFromClass( subClazz , path + fieldName + ".");
1425                  }
1426                }
1427            }
1428    }
1429    
1430
1431
1432
1433    private void automaticlyReadFieldsCheckBoxActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_automaticlyReadFieldsCheckBoxActionPerformed
1434

1435        if( automaticlyReadFieldsCheckBox.isSelected() ) {
1436            // Automagically get quiery fields.
1437
// User has just enabled this so get field list.
1438
readFieldsButton.setEnabled(false);
1439            if (!isSettingSQLExpression)
1440            {
1441                processQueryChanged( jRSQLExpressionArea1.getText().trim() );
1442            }
1443        } else {
1444            // Turn off automagic field reading. User will have to press the
1445
// Read Fields button
1446
//okButton.setEnabled(false);
1447
readFieldsButton.setEnabled(true);
1448            //setColumnsError( "Enter your query above. Then use the Read " +
1449
// "Fields button to retrieve the list of fields." );
1450
this.jLabelStatusSQL.setText("Enter your query above. Then use the Read " +
1451                    "Fields button to retrieve the list of fields." );
1452        }
1453        
1454        MainFrame.getMainInstance().getProperties().setProperty("UseAutoRegiesterFields", "" + automaticlyReadFieldsCheckBox.isSelected());
1455        
1456    }//GEN-LAST:event_automaticlyReadFieldsCheckBoxActionPerformed
1457

1458    private void readFieldsButtonActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_readFieldsButtonActionPerformed
1459
processQueryChanged( jRSQLExpressionArea1.getText().trim() );
1460    }//GEN-LAST:event_readFieldsButtonActionPerformed
1461

1462    private void cancelButtonActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_cancelButtonActionPerformed
1463
// No changes.
1464
num++;
1465        this.setVisible(false);
1466    }//GEN-LAST:event_cancelButtonActionPerformed
1467

1468    private void okButtonActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_okButtonActionPerformed
1469

1470        try {
1471        if (stoppedChanging != null) stoppedChanging.stop();
1472  
1473        if ( this.getSubDataset() != null)
1474        {
1475            num++; // avoid syncronization problems....
1476

1477            Object JavaDoc obj = jComboBoxQueryType.getSelectedItem();
1478            if (obj != null && obj instanceof Tag)
1479            {
1480                this.subDataset.setQueryLanguage(""+((Tag)obj).getValue());
1481            }
1482            else
1483            {
1484                this.subDataset.setQueryLanguage(""+obj);
1485            }
1486            // save the query to the report.
1487
this.subDataset.setQuery( jRSQLExpressionArea1.getText());
1488            
1489            if ( jTableFields.getRowCount() > 0)
1490            {
1491                // Clear all the existing fields.
1492
this.subDataset.getFields().clear();
1493    
1494                // Add the new fields.
1495
int[] selectedRows = jTableFields.getSelectedRows();
1496                for (int i=0; i<selectedRows.length ; ++i) {
1497                    if (selectedRows[i] > jTableFields.getRowCount()) continue;
1498
1499                    it.businesslogic.ireport.JRField field = (it.businesslogic.ireport.JRField)this.jTableFields.getValueAt(selectedRows[i], 0);
1500                    Enumeration e = this.subDataset.getFields().elements();
1501                    boolean found = false;
1502                    while (e.hasMoreElements()) {
1503                        it.businesslogic.ireport.JRField f = (it.businesslogic.ireport.JRField)e.nextElement();
1504                        if (f.getName().equalsIgnoreCase(field.getName())) {
1505                            found = true;
1506                            break;
1507                        }
1508                    }
1509                    if (!found) {
1510                        this.subDataset.addField(field);
1511                    }
1512                }
1513                if (subDataset instanceof Report)
1514                {
1515                    MainFrame.getMainInstance().getValuesDialog().getValuesPanel().updateFields();
1516                }
1517            }
1518       }
1519       
1520       } catch (Throwable JavaDoc ex)
1521            {
1522                ex.printStackTrace();
1523            }
1524       
1525       this.setVisible(false);
1526        
1527    }//GEN-LAST:event_okButtonActionPerformed
1528

1529    private void jTableFieldsKeyReleased(java.awt.event.KeyEvent JavaDoc evt) {//GEN-FIRST:event_jTableFieldsKeyReleased
1530

1531        //javax.swing.JOptionPane.showMessageDialog(null,"Key: "+evt.getKeyCode() + " (" + java.awt.event.KeyEvent.VK_DELETE + ")");
1532
if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_DELETE)
1533        {
1534             javax.swing.table.DefaultTableModel JavaDoc dtm = (javax.swing.table.DefaultTableModel JavaDoc)jTableFields.getModel();
1535             //int[] selectedRows = jTableFields.getSelectedRows();
1536
//for (int i= selectedRows.length-1; i>=0; --i)
1537
//{
1538
// it.businesslogic.ireport.JRField field = (it.businesslogic.ireport.JRField)this.jTableFields.getValueAt( i, 0);
1539
//this.subDataset.removeField(field);
1540
//this.jTableFields.removeRowSelectionInterval(i,i);
1541
//}
1542
while (jTableFields.getSelectedRow() >=0)
1543             {
1544                 dtm.removeRow(jTableFields.getSelectedRow());
1545             }
1546        }
1547    }//GEN-LAST:event_jTableFieldsKeyReleased
1548

1549    
1550    
1551    
1552    
1553    /** Closes the dialog */
1554    private void closeDialog(java.awt.event.WindowEvent JavaDoc evt) {//GEN-FIRST:event_closeDialog
1555
setVisible(false);
1556        dispose();
1557    }//GEN-LAST:event_closeDialog
1558

1559    /**
1560     * @param args the command line arguments
1561     */

1562    public static void main(String JavaDoc args[]) {
1563        new ReportQueryDialog(new javax.swing.JFrame JavaDoc(), true).setVisible(true);
1564    }
1565        
1566    Map parameterNameToExpressionID = null;
1567    
1568    /**
1569     * Create an expression evaluator for report parameters.
1570     *
1571     */

1572    private Interpreter prepareExpressionEvaluator() throws bsh.EvalError {
1573        
1574        Interpreter interpreter = new Interpreter();
1575        interpreter.setClassLoader(interpreter.getClass().getClassLoader());
1576        
1577        // Staring patch from rp4
1578
StringTokenizer st = new StringTokenizer( MainFrame.getMainInstance().getProperties().getProperty("classpath",""),"\n");
1579        interpreter.eval("String tmp;");
1580        while (st.hasMoreTokens())
1581        {
1582            String JavaDoc token = st.nextToken();
1583            if (token != null && token.trim().length() > 0)
1584            {
1585                interpreter.set("tmp", token.trim());
1586                interpreter.eval("addClassPath(tmp);");
1587            }
1588        }
1589       
1590        // Add report import directives to the bsh interpreter
1591
Enumeration imps = MainFrame.getMainInstance().getActiveReportFrame().getReport().getImports().elements();
1592        while ( imps.hasMoreElements() )
1593        {
1594            String JavaDoc var = (String JavaDoc)imps.nextElement();
1595            interpreter.eval("import " + var + ";");
1596        }
1597        // End patch from rp4
1598
/*
1599        interpreter.eval(new StringReader(bshScript));
1600
1601        interpreter.eval("bshCalculator = createBshCalculator()");
1602        */

1603        return interpreter;
1604         
1605        // return null;
1606
}
1607
1608    /**
1609     * Convert a class name string into its class object.
1610     * There must be a function in JasperReports that does this somewhere.
1611     *
1612     *
1613     */

1614    private Class JavaDoc classStringToClass(String JavaDoc classType) {
1615        Class JavaDoc c = null;
1616        
1617        
1618        if ( classType.equals("java.lang.String") ) {
1619            c = java.lang.String JavaDoc.class;
1620        } else if ( classType.equals("java.lang.Integer") ) {
1621            c = java.lang.Integer JavaDoc.class;
1622        } else if ( classType.equals("java.lang.Boolean") ) {
1623            c = java.lang.Boolean JavaDoc.class;
1624        } else if ( classType.equals("java.lang.Byte") ) {
1625            c = java.lang.Byte JavaDoc.class;
1626        } else if ( classType.equals("java.util.Date") ) {
1627            c = java.util.Date JavaDoc.class;
1628        } else if ( classType.equals("java.sql.Timestamp") ) {
1629            c = java.sql.Timestamp JavaDoc.class;
1630        } else if ( classType.equals("java.sql.Time") ) {
1631            c = java.sql.Time JavaDoc.class;
1632        } else if ( classType.equals("java.lang.Double") ) {
1633            c = java.lang.Double JavaDoc.class;
1634        } else if ( classType.equals("java.lang.Float") ) {
1635            c = java.lang.Float JavaDoc.class;
1636        } else if ( classType.equals("java.lang.Long") ) {
1637            c = java.lang.Long JavaDoc.class;
1638        } else if ( classType.equals("java.lang.Short") ) {
1639            c = java.lang.Short JavaDoc.class;
1640        } else if ( classType.equals("java.math.BigDecimal") ) {
1641            c = java.math.BigDecimal JavaDoc.class;
1642        }
1643        
1644        return c;
1645    }
1646    
1647    
1648    // Variables declaration - do not modify//GEN-BEGIN:variables
1649
private javax.swing.JCheckBox JavaDoc automaticlyReadFieldsCheckBox;
1650    private javax.swing.JButton JavaDoc cancelButton;
1651    private javax.swing.JLabel JavaDoc columnsErrorMsgLabel;
1652    private javax.swing.JScrollPane JavaDoc columnsErrorScrollPane;
1653    private javax.swing.JScrollPane JavaDoc columnsScrollPane;
1654    private javax.swing.JButton JavaDoc exportQueryButton;
1655    private javax.swing.JButton JavaDoc jButton1;
1656    private javax.swing.JButton JavaDoc jButton2;
1657    private javax.swing.JButton JavaDoc jButton3;
1658    private javax.swing.JButton JavaDoc jButton4;
1659    private javax.swing.JButton JavaDoc jButtonLoadQuery;
1660    private javax.swing.JButton JavaDoc jButtonOpenDesigner;
1661    private javax.swing.JButton JavaDoc jButtonReadBeanAttributes3;
1662    private javax.swing.JButton JavaDoc jButtonSaveQuery;
1663    private javax.swing.JComboBox JavaDoc jComboBoxQueryType;
1664    private javax.swing.JLabel JavaDoc jLabel1;
1665    private javax.swing.JLabel JavaDoc jLabel3;
1666    private javax.swing.JLabel JavaDoc jLabelStatusSQL;
1667    private javax.swing.JPanel JavaDoc jPanel1;
1668    private javax.swing.JPanel JavaDoc jPanel11;
1669    private javax.swing.JPanel JavaDoc jPanel14;
1670    private javax.swing.JPanel JavaDoc jPanel15;
1671    private javax.swing.JPanel JavaDoc jPanel16;
1672    private javax.swing.JPanel JavaDoc jPanel2;
1673    private javax.swing.JPanel JavaDoc jPanel3;
1674    private javax.swing.JPanel JavaDoc jPanel4;
1675    private javax.swing.JPanel JavaDoc jPanel6;
1676    private javax.swing.JPanel JavaDoc jPanel7;
1677    private javax.swing.JPanel JavaDoc jPanel8;
1678    private javax.swing.JPanel JavaDoc jPanel9;
1679    private javax.swing.JPanel JavaDoc jPanelQueryArea;
1680    private javax.swing.JPanel JavaDoc jPanelSQL;
1681    private it.businesslogic.ireport.gui.JRSQLExpressionArea jRSQLExpressionArea1;
1682    private javax.swing.JSeparator JavaDoc jSeparator1;
1683    private javax.swing.JSplitPane JavaDoc jSplitPane1;
1684    private javax.swing.JSplitPane JavaDoc jSplitPane2;
1685    private javax.swing.JTabbedPane JavaDoc jTabbedPane1;
1686    private javax.swing.JTable JavaDoc jTableFields;
1687    private javax.swing.JTextField JavaDoc jTextFieldBeanClass1;
1688    private javax.swing.JButton JavaDoc okButton;
1689    private javax.swing.JButton JavaDoc readFieldsButton;
1690    // End of variables declaration//GEN-END:variables
1691

1692    private boolean isSettingSQLExpression = false;
1693    
1694    
1695    
1696    public void lostOwnership (Clipboard parClipboard, Transferable parTransferable) { }
1697
1698    public static Object JavaDoc recursiveInterpreter(Interpreter interpreter, String JavaDoc expression, Vector parameters) throws EvalError
1699    {
1700        return recursiveInterpreter(interpreter, expression, parameters, 0);
1701    }
1702    
1703    public static Object JavaDoc recursiveInterpreter(Interpreter interpreter, String JavaDoc expression, Vector parameters, int recursion_level) throws EvalError
1704    {
1705        ++recursion_level;
1706        //System.out.println("Valuto ["+ recursion_level +"]: " + expression);
1707
if (recursion_level > 100) return null;
1708        if (expression != null && expression.trim().length() > 0)
1709        {
1710            // for each parameter, we have to calc the real value...
1711
while (expression.indexOf("$P{") >= 0)
1712            {
1713                int start_index = expression.indexOf("$P{")+3;
1714                String JavaDoc param_name = expression.substring(start_index, expression.indexOf("}", start_index) );
1715                String JavaDoc param_expression = "";
1716                for (int i=0; i<parameters.size(); ++i)
1717                {
1718                    JRParameter p = (JRParameter)parameters.elementAt(i);
1719                    if (p.getName().equals( param_name))
1720                    {
1721                        param_expression = p.getDefaultValueExpression();
1722                        break;
1723                    }
1724                }
1725                
1726                expression = Misc.string_replace( param_name, "$P{"+param_name+"}", expression);
1727                interpreter.set( param_name, recursiveInterpreter(interpreter, param_expression, parameters, recursion_level));
1728            }
1729            
1730            //System.out.println("interpreto ["+ recursion_level +"]: " + expression);
1731
Object JavaDoc res = interpreter.eval(expression);
1732            //System.out.println("Result: " + res);
1733
return res;
1734        }
1735        return null;
1736    }
1737
1738    private SubDataset subDataset;
1739
1740    public SubDataset getSubDataset() {
1741        return subDataset;
1742    }
1743
1744    public void setSubDataset(SubDataset subDataset) {
1745        
1746        isSettingSQLExpression = true;
1747        try { // Used only to perform a finally op
1748
this.subDataset = subDataset;
1749
1750            DefaultTableModel dtm = (DefaultTableModel)jTableFields.getModel();
1751            dtm.setRowCount(0);
1752
1753            num++;
1754            jLabelStatusSQL.setText( "" );
1755
1756            jRSQLExpressionArea1.setText("");
1757
1758            try {
1759                automaticlyReadFieldsCheckBox.setSelected( Boolean.valueOf( MainFrame.getMainInstance().getProperties().getProperty("UseAutoRegiesterFields", "true") ).booleanValue());
1760                automaticlyReadFieldsCheckBoxActionPerformed(null);
1761            } catch (Exception JavaDoc ex)
1762            {
1763
1764            }
1765            // Load query...
1766
if (subDataset == null)
1767                this.jRSQLExpressionArea1.setText("");
1768            else
1769            {
1770                // Use query, and use existing field list. ie Dont load from DB
1771
this.jRSQLExpressionArea1.setText( this.subDataset.getQuery() );
1772
1773                List columns = new ArrayList();
1774                Iterator i = subDataset.getFields().iterator();
1775                while( i.hasNext() ) {
1776                    it.businesslogic.ireport.JRField field = (it.businesslogic.ireport.JRField)i.next();
1777                    columns.add( new Object JavaDoc[]{field, field.getClassType(), field.getDescription()} );
1778                }
1779                setColumns( columns );
1780
1781                for (int ix=0; ix<jComboBoxQueryType.getItemCount(); ++ix)
1782                {
1783                   if (!(jComboBoxQueryType.getItemAt(ix) instanceof Tag))
1784                   {
1785                    jComboBoxQueryType.removeItemAt(ix);
1786                    ix--;
1787                   }
1788                }
1789
1790                boolean found = false;
1791                for (int ix=0; ix<jComboBoxQueryType.getItemCount(); ++ix)
1792                {
1793                   Tag t = (Tag)jComboBoxQueryType.getItemAt(ix);
1794                   if (t.getValue().equals(subDataset.getQueryLanguage()))
1795                   {
1796                       found = true;
1797                       jComboBoxQueryType.setSelectedIndex(ix);
1798                       break;
1799                   }
1800                }
1801                if (!found) // Default is sql...
1802
{
1803                    jComboBoxQueryType.setEditable(true);
1804                    jComboBoxQueryType.setSelectedItem(subDataset.getQueryLanguage());
1805                }
1806
1807                jLabelStatusSQL.setText("");
1808 
1809            }
1810        
1811        } finally {
1812            
1813            isSettingSQLExpression = false;
1814        }
1815    }
1816    
1817    public void applyI18n(){
1818                // Start autogenerated code ----------------------
1819
automaticlyReadFieldsCheckBox.setText(I18n.getString("reportQueryDialog.utomaticlyReadFieldsCheckBox","Automatically Retrieve Fields"));
1820                // End autogenerated code ----------------------
1821
// Start autogenerated code ----------------------
1822
cancelButton.setText(I18n.getString("reportQueryDialog.ancelButton","Cancel"));
1823                exportQueryButton.setText(I18n.getString("reportQueryDialog.xportQueryButton","Send to clipboard"));
1824                jButton1.setText(I18n.getString("reportQueryDialog.button1","Filter expression..."));
1825                jButton2.setText(I18n.getString("reportQueryDialog.button2","Get fields from datasource"));
1826                jButton3.setText(I18n.getString("reportQueryDialog.button3","Get fields from datasource"));
1827                jButton4.setText(I18n.getString("reportQueryDialog.button4","Sort options..."));
1828                jButtonLoadQuery.setText(I18n.getString("reportQueryDialog.buttonLoadQuery","Load query"));
1829                jButtonReadBeanAttributes3.setText(I18n.getString("reportQueryDialog.buttonReadBeanAttributes3","Read attributes"));
1830                jButtonSaveQuery.setText(I18n.getString("reportQueryDialog.buttonSaveQuery","Save query"));
1831                jLabel1.setText(I18n.getString("reportQueryDialog.label1","Query language"));
1832                jLabel3.setText(I18n.getString("reportQueryDialog.label3","Class name"));
1833                okButton.setText(I18n.getString("reportQueryDialog.kButton","OK"));
1834                readFieldsButton.setText(I18n.getString("reportQueryDialog.eadFieldsButton","Read Fields"));
1835                // End autogenerated code ----------------------
1836

1837                jTableFields.getColumnModel().getColumn(0).setHeaderValue( I18n.getString("reportQueryDialog.tablecolumn.fieldName","Field name") );
1838                jTableFields.getColumnModel().getColumn(1).setHeaderValue( I18n.getString("reportQueryDialog.tablecolumn.fieldType","Field type") );
1839                jTableFields.getColumnModel().getColumn(2).setHeaderValue( I18n.getString("reportQueryDialog.tablecolumn.description","Description") );
1840    
1841                jTabbedPane1.setTitleAt(0,it.businesslogic.ireport.util.I18n.getString("reportQueryDialog.tab.ReportQuery", "Report query"));
1842                jTabbedPane1.setTitleAt(1,it.businesslogic.ireport.util.I18n.getString("reportQueryDialog.tab.JavaBeanDatasource", "JavaBean Datasource"));
1843                jTabbedPane1.setTitleAt(2,it.businesslogic.ireport.util.I18n.getString("reportQueryDialog.tab.DataSourceProvider", "DataSource Provider"));
1844                jTabbedPane1.setTitleAt(3,it.businesslogic.ireport.util.I18n.getString("reportQueryDialog.tab.CSVDatasource", "CSV Datasource"));
1845    }
1846    
1847    
1848    /**
1849     * Thie method can be useful for a CustomQueryEditor
1850     */

1851    public JRSQLExpressionArea getSQLExpressionArea()
1852    {
1853        return jRSQLExpressionArea1;
1854    }
1855    
1856    /**
1857     * Thie method can be useful for a CustomQueryEditor
1858     * Return the table containing all the fields.
1859     */

1860    public JTable getFieldsTable()
1861    {
1862        return jTableFields;
1863    }
1864}
1865
1866
1867
Popular Tags