1 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 ; 50 import java.awt.Component ; 51 import java.io.FileReader ; 52 import java.io.FileWriter ; 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 ; 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 75 public class ReportQueryDialog extends javax.swing.JDialog implements ClipboardOwner { 76 77 private BeanInspectorPanel bip1 = null; 78 79 private FieldsProvider fieldsProvider = null; 80 81 protected static String standard_types[]= new String []{ 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 107 public ReportQueryDialog(java.awt.Frame 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 stoppedChanging.restart(); 121 } 122 public void insertUpdate(DocumentEvent e) { 123 if(isSettingSQLExpression)return; 124 stoppedChanging.restart(); 126 } 127 public void removeUpdate(DocumentEvent e) { 128 if(isSettingSQLExpression)return; 129 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 escape = javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_ESCAPE, 0, false); 163 javax.swing.Action escapeAction = new javax.swing.AbstractAction () { 164 public void actionPerformed(java.awt.event.ActionEvent 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 184 } 185 186 191 javax.swing.Timer stoppedChanging = new javax.swing.Timer ( 500, new java.awt.event.ActionListener () { 192 public void actionPerformed(java.awt.event.ActionEvent evt) { 193 if( automaticlyReadFieldsCheckBox.isSelected() ) { 194 processQueryChanged( jRSQLExpressionArea1.getText().trim() ); 195 } 196 } 197 } ); 198 199 200 207 private void processQueryChanged( String query ) { 208 209 if (isSettingSQLExpression) return; 210 211 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 obj = jComboBoxQueryType.getSelectedItem(); 227 String 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 if (readerThread != null && readerThread.isAlive()) 240 { 241 readerThread.interrupt(); 242 } 243 } catch (Throwable ex) { 244 ex.printStackTrace(); 245 246 } 247 248 readerThread = new FieldReader(query, conn, queryLanguage); 249 readerThread.start(); 250 } 251 252 253 257 class FieldReader extends Thread { 258 String src_query; 259 String src_query_language = "sql"; 260 IReportConnection conn; 261 262 267 public FieldReader(String query, IReportConnection conn) { 268 this(query, conn, "sql"); 269 } 270 271 276 public FieldReader(String query, IReportConnection conn, String query_language) { 277 src_query=query; 278 this.conn=conn; 279 this.src_query_language = query_language; 280 } 281 282 283 284 294 public void setColumnsFromWorker( final List columns ) { 295 try { 296 297 Runnable r = new Runnable () { 298 public void run() { 299 String 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 e) { 316 } 318 } 319 320 329 public void setColumnErrorFromWork( final String error_msg ) { 330 try { 331 332 Runnable r = new Runnable () { 333 public void run() { 334 String 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 e) { 352 } 354 } 355 356 public String interpretQuery() 357 { 358 359 String query = this.src_query; 360 try { 361 Interpreter interpreter = prepareExpressionEvaluator(); 362 363 java.util.List 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 p1 = "$P{" + parameter.getName() + "}"; 374 String p2 = "$P!{" + parameter.getName() + "}"; 375 376 378 380 Object defValue; 381 if( parameter.getDefaultValueExpression() != null && !parameter.getDefaultValueExpression().equals("") ) { 382 defValue = recursiveInterpreter( interpreter, parameter.getDefaultValueExpression(), subDataset.getParameters()); 383 } else { 385 defValue = null; 387 } 388 389 390 int ip1 = query.indexOf(p1); 391 while( ip1!=-1 ) { 392 if( defValue==null ) { 394 throw new IllegalArgumentException ("Please set a " + 395 "default value for the parameter '" 396 + parameter.getName() + "'" ); 397 } 398 399 String before = query.substring(0, ip1); 400 String after = query.substring(ip1+p1.length()); 401 if (parameter.getClassType().equals("java.lang.String")) 402 { 403 String 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 if( defValue==null ) { 416 throw new IllegalArgumentException ("Please set a " + 417 "default value for the parameter '" 418 + parameter.getName() + "'" ); 419 } 420 421 String before = query.substring(0, ip2); 422 String 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 ex) 430 { 431 javax.swing.JOptionPane.showMessageDialog(null, ex.getMessage()); 432 return ""; 433 } 434 } 435 436 public void run() { 437 438 String 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; 453 if (fp.supportsGetFieldsOperation()) 454 { 455 try { 456 457 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 defValue; 490 if( ireportParam.getDefaultValueExpression() != null && !ireportParam.getDefaultValueExpression().equals("") ) { 491 492 defValue = recursiveInterpreter( interpreter, ireportParam.getDefaultValueExpression(), subDataset.getParameters()); 493 } else { 496 defValue = null; 498 } 499 500 parametersValues.put(ireportParam.getName(), defValue); 501 } 502 503 try { 504 report.setName(rep.getName()); 505 } catch (Exception ex) 506 {} 507 508 if (in < num) return; 510 net.sf.jasperreports.engine.JRField[] jrFields = fp.getFields( this.conn, report.getMainDataset() , parametersValues); 512 513 if (in < num) return; 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 []{field, field.getClassType(), field.getDescription()} ); 521 } 522 523 if (in < num) return; 525 setColumnsFromWorker(columns); 526 527 } catch (Exception ex) 528 { 529 ex.printStackTrace(); 530 setColumnErrorFromWork( "Error: " + ex.getMessage() ); 531 } 532 getJLabelStatusSQL().setText("Ready"); 533 } 534 } 536 } 537 538 539 540 541 542 543 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 dtm = (javax.swing.table.DefaultTableModel )jTableFields.getModel(); 558 dtm.getDataVector().clear(); 559 for(int i=0; i<cols.size(); i++) { 560 Object [] row = (Object [])cols.get(i); 561 dtm.addRow( row ); 562 } 563 564 jTableFields.selectAll(); 568 569 okButton.setEnabled( true ); 570 } 571 572 578 public void setColumnsError( final String 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 } 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 603 private void initComponents() { 605 java.awt.GridBagConstraints gridBagConstraints; 606 607 jSplitPane1 = new javax.swing.JSplitPane (); 608 jPanel1 = new javax.swing.JPanel (); 609 jTabbedPane1 = new javax.swing.JTabbedPane (); 610 jPanelSQL = new javax.swing.JPanel (); 611 jPanel14 = new javax.swing.JPanel (); 612 jLabel1 = new javax.swing.JLabel (); 613 jComboBoxQueryType = new javax.swing.JComboBox (); 614 jPanel16 = new javax.swing.JPanel (); 615 jButtonLoadQuery = new javax.swing.JButton (); 616 jButtonSaveQuery = new javax.swing.JButton (); 617 jPanelQueryArea = new javax.swing.JPanel (); 618 jSplitPane2 = new javax.swing.JSplitPane (); 619 jPanel7 = new javax.swing.JPanel (); 620 jRSQLExpressionArea1 = new it.businesslogic.ireport.gui.JRSQLExpressionArea(); 621 jLabelStatusSQL = new javax.swing.JLabel (); 622 automaticlyReadFieldsCheckBox = new javax.swing.JCheckBox (); 623 readFieldsButton = new javax.swing.JButton (); 624 jButtonOpenDesigner = new javax.swing.JButton (); 625 exportQueryButton = new javax.swing.JButton (); 626 jPanel8 = new javax.swing.JPanel (); 627 jTextFieldBeanClass1 = new javax.swing.JTextField (); 628 jLabel3 = new javax.swing.JLabel (); 629 jButtonReadBeanAttributes3 = new javax.swing.JButton (); 630 jPanel11 = new javax.swing.JPanel (); 631 jSeparator1 = new javax.swing.JSeparator (); 632 jPanel6 = new javax.swing.JPanel (); 633 jButton2 = new javax.swing.JButton (); 634 jPanel15 = new javax.swing.JPanel (); 635 jButton3 = new javax.swing.JButton (); 636 jPanel2 = new javax.swing.JPanel (); 637 columnsScrollPane = new javax.swing.JScrollPane (); 638 jTableFields = new javax.swing.JTable (); 639 jPanel3 = new javax.swing.JPanel (); 640 jPanel4 = new javax.swing.JPanel (); 641 okButton = new javax.swing.JButton (); 642 cancelButton = new javax.swing.JButton (); 643 jPanel9 = new javax.swing.JPanel (); 644 jButton1 = new javax.swing.JButton (); 645 jButton4 = new javax.swing.JButton (); 646 columnsErrorScrollPane = new javax.swing.JScrollPane (); 647 columnsErrorMsgLabel = new javax.swing.JLabel (); 648 649 setTitle("Report query"); 650 addWindowListener(new java.awt.event.WindowAdapter () { 651 public void windowClosing(java.awt.event.WindowEvent evt) { 652 closeDialog(evt); 653 } 654 public void windowOpened(java.awt.event.WindowEvent 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 ()); 662 663 jPanel1.setMinimumSize(new java.awt.Dimension (10, 100)); 664 jPanel1.setPreferredSize(new java.awt.Dimension (10, 350)); 665 jTabbedPane1.setMinimumSize(new java.awt.Dimension (154, 350)); 666 jTabbedPane1.setPreferredSize(new java.awt.Dimension (154, 350)); 667 jPanelSQL.setLayout(new java.awt.GridBagLayout ()); 668 669 jPanelSQL.setMinimumSize(new java.awt.Dimension (1, 100)); 670 jPanelSQL.setPreferredSize(new java.awt.Dimension (1, 350)); 671 jPanel14.setLayout(new java.awt.GridBagLayout ()); 672 673 jLabel1.setText("Query language"); 674 gridBagConstraints = new java.awt.GridBagConstraints (); 675 gridBagConstraints.insets = new java.awt.Insets (4, 4, 4, 4); 676 jPanel14.add(jLabel1, gridBagConstraints); 677 678 jComboBoxQueryType.setEditable(true); 679 jComboBoxQueryType.setMinimumSize(new java.awt.Dimension (200, 18)); 680 jComboBoxQueryType.setPreferredSize(new java.awt.Dimension (200, 22)); 681 jComboBoxQueryType.addActionListener(new java.awt.event.ActionListener () { 682 public void actionPerformed(java.awt.event.ActionEvent evt) { 683 jComboBoxQueryTypeActionPerformed(evt); 684 } 685 }); 686 687 gridBagConstraints = new java.awt.GridBagConstraints (); 688 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 689 gridBagConstraints.insets = new java.awt.Insets (4, 0, 4, 4); 690 jPanel14.add(jComboBoxQueryType, gridBagConstraints); 691 692 jPanel16.setLayout(new java.awt.GridBagLayout ()); 693 694 jButtonLoadQuery.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/folder_database.png"))); 695 jButtonLoadQuery.setText("Load query"); 696 jButtonLoadQuery.setMargin(new java.awt.Insets (2, 4, 2, 4)); 697 jButtonLoadQuery.addActionListener(new java.awt.event.ActionListener () { 698 public void actionPerformed(java.awt.event.ActionEvent evt) { 699 jButtonLoadQueryActionPerformed(evt); 700 } 701 }); 702 703 gridBagConstraints = new java.awt.GridBagConstraints (); 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 (getClass().getResource("/it/businesslogic/ireport/icons/menu/database_save.png"))); 709 jButtonSaveQuery.setText("Save query"); 710 jButtonSaveQuery.setMargin(new java.awt.Insets (2, 4, 2, 4)); 711 jButtonSaveQuery.addActionListener(new java.awt.event.ActionListener () { 712 public void actionPerformed(java.awt.event.ActionEvent evt) { 713 jButtonSaveQueryActionPerformed(evt); 714 } 715 }); 716 717 gridBagConstraints = new java.awt.GridBagConstraints (); 718 gridBagConstraints.insets = new java.awt.Insets (0, 4, 0, 4); 719 jPanel16.add(jButtonSaveQuery, gridBagConstraints); 720 721 gridBagConstraints = new java.awt.GridBagConstraints (); 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 (); 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 ()); 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 ()); 740 741 jRSQLExpressionArea1.setBorder(javax.swing.BorderFactory.createEtchedBorder()); 742 jRSQLExpressionArea1.setMinimumSize(new java.awt.Dimension (50, 200)); 743 jRSQLExpressionArea1.setPreferredSize(new java.awt.Dimension (661, 340)); 744 gridBagConstraints = new java.awt.GridBagConstraints (); 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 (4, 20)); 754 jLabelStatusSQL.setPreferredSize(new java.awt.Dimension (4, 20)); 755 gridBagConstraints = new java.awt.GridBagConstraints (); 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 () { 764 public void actionPerformed(java.awt.event.ActionEvent evt) { 765 automaticlyReadFieldsCheckBoxActionPerformed(evt); 766 } 767 }); 768 769 gridBagConstraints = new java.awt.GridBagConstraints (); 770 gridBagConstraints.gridy = 2; 771 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 772 gridBagConstraints.insets = new java.awt.Insets (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 () { 778 public void actionPerformed(java.awt.event.ActionEvent evt) { 779 readFieldsButtonActionPerformed(evt); 780 } 781 }); 782 783 gridBagConstraints = new java.awt.GridBagConstraints (); 784 gridBagConstraints.gridy = 2; 785 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 786 gridBagConstraints.insets = new java.awt.Insets (2, 10, 2, 0); 787 jPanel7.add(readFieldsButton, gridBagConstraints); 788 789 jButtonOpenDesigner.setText("Query designer"); 790 jButtonOpenDesigner.addActionListener(new java.awt.event.ActionListener () { 791 public void actionPerformed(java.awt.event.ActionEvent evt) { 792 jButtonOpenDesignerActionPerformed(evt); 793 } 794 }); 795 796 gridBagConstraints = new java.awt.GridBagConstraints (); 797 gridBagConstraints.gridy = 2; 798 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 799 gridBagConstraints.weightx = 1.0; 800 gridBagConstraints.insets = new java.awt.Insets (2, 10, 2, 0); 801 jPanel7.add(jButtonOpenDesigner, gridBagConstraints); 802 803 exportQueryButton.setText("Send to clipboard"); 804 exportQueryButton.addActionListener(new java.awt.event.ActionListener () { 805 public void actionPerformed(java.awt.event.ActionEvent evt) { 806 exportQueryButtonActionPerformed(evt); 807 } 808 }); 809 810 gridBagConstraints = new java.awt.GridBagConstraints (); 811 gridBagConstraints.gridy = 2; 812 gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; 813 gridBagConstraints.weightx = 1.0; 814 gridBagConstraints.insets = new java.awt.Insets (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 (); 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 (0, 4, 2, 4); 827 jPanelSQL.add(jPanelQueryArea, gridBagConstraints); 828 829 jTabbedPane1.addTab("Report query ", jPanelSQL); 830 831 jPanel8.setLayout(new java.awt.GridBagLayout ()); 832 833 jPanel8.setMinimumSize(new java.awt.Dimension (235, 30)); 834 jPanel8.setPreferredSize(new java.awt.Dimension (215, 30)); 835 gridBagConstraints = new java.awt.GridBagConstraints (); 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 (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 (); 847 gridBagConstraints.gridx = 0; 848 gridBagConstraints.gridy = 0; 849 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 850 gridBagConstraints.insets = new java.awt.Insets (3, 3, 5, 3); 851 jPanel8.add(jLabel3, gridBagConstraints); 852 853 jButtonReadBeanAttributes3.setText("Read attributes"); 854 jButtonReadBeanAttributes3.addActionListener(new java.awt.event.ActionListener () { 855 public void actionPerformed(java.awt.event.ActionEvent evt) { 856 jButtonReadBeanAttributes3ActionPerformed(evt); 857 } 858 }); 859 860 gridBagConstraints = new java.awt.GridBagConstraints (); 861 gridBagConstraints.gridx = 1; 862 gridBagConstraints.gridy = 1; 863 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 864 gridBagConstraints.insets = new java.awt.Insets (0, 3, 5, 3); 865 jPanel8.add(jButtonReadBeanAttributes3, gridBagConstraints); 866 867 jPanel11.setLayout(new java.awt.BorderLayout ()); 868 869 gridBagConstraints = new java.awt.GridBagConstraints (); 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 (0, 0, 4, 4); 877 jPanel8.add(jPanel11, gridBagConstraints); 878 879 jSeparator1.setMinimumSize(new java.awt.Dimension (0, 4)); 880 jSeparator1.setPreferredSize(new java.awt.Dimension (0, 4)); 881 gridBagConstraints = new java.awt.GridBagConstraints (); 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 (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 () { 894 public void actionPerformed(java.awt.event.ActionEvent 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 () { 905 public void actionPerformed(java.awt.event.ActionEvent 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 ()); 919 920 jPanel2.setPreferredSize(new java.awt.Dimension (453, 150)); 921 columnsScrollPane.setPreferredSize(new java.awt.Dimension (453, 150)); 922 jTableFields.setModel(new javax.swing.table.DefaultTableModel ( 923 new Object [][] { 924 925 }, 926 new String [] { 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 () { 939 public void keyReleased(java.awt.event.KeyEvent 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 ()); 949 950 jPanel3.setPreferredSize(new java.awt.Dimension (10, 34)); 951 jPanel3.setMinimumSize(new java.awt.Dimension (10, 34)); 952 jPanel4.setLayout(new java.awt.GridBagLayout ()); 953 954 jPanel4.setPreferredSize(new java.awt.Dimension (150, 10)); 955 okButton.setText("OK"); 956 okButton.setEnabled(false); 957 okButton.setMaximumSize(new java.awt.Dimension (67, 25)); 958 okButton.setMinimumSize(new java.awt.Dimension (67, 25)); 959 okButton.setPreferredSize(new java.awt.Dimension (67, 25)); 960 okButton.addActionListener(new java.awt.event.ActionListener () { 961 public void actionPerformed(java.awt.event.ActionEvent evt) { 962 okButtonActionPerformed(evt); 963 } 964 }); 965 966 gridBagConstraints = new java.awt.GridBagConstraints (); 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 () { 973 public void actionPerformed(java.awt.event.ActionEvent evt) { 974 cancelButtonActionPerformed(evt); 975 } 976 }); 977 978 gridBagConstraints = new java.awt.GridBagConstraints (); 979 gridBagConstraints.gridx = 1; 980 gridBagConstraints.gridy = 0; 981 gridBagConstraints.insets = new java.awt.Insets (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 ()); 987 988 jPanel9.setMinimumSize(new java.awt.Dimension (100, 20)); 989 jButton1.setText("Filter expression..."); 990 jButton1.addActionListener(new java.awt.event.ActionListener () { 991 public void actionPerformed(java.awt.event.ActionEvent evt) { 992 jButton1ActionPerformed(evt); 993 } 994 }); 995 996 gridBagConstraints = new java.awt.GridBagConstraints (); 997 gridBagConstraints.gridx = 0; 998 gridBagConstraints.gridy = 0; 999 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 1000 gridBagConstraints.insets = new java.awt.Insets (0, 4, 0, 0); 1001 jPanel9.add(jButton1, gridBagConstraints); 1002 1003 jButton4.setText("Sort options..."); 1004 jButton4.addActionListener(new java.awt.event.ActionListener () { 1005 public void actionPerformed(java.awt.event.ActionEvent evt) { 1006 jButton1ActionPerformed1(evt); 1007 } 1008 }); 1009 1010 gridBagConstraints = new java.awt.GridBagConstraints (); 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 (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 } 1036 private void jButtonOpenDesignerActionPerformed(java.awt.event.ActionEvent evt) { 1038 if (getFieldsProvider() != null && 1039 getFieldsProvider().hasQueryDesigner()) 1040 { 1041 try { 1042 String 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 ex) 1048 { 1049 javax.swing.JOptionPane.showMessageDialog(null, ex.getMessage()); 1050 } 1051 } 1052 1053 1054 } 1056 private void jButton1ActionPerformed1(java.awt.event.ActionEvent evt) { 1058 SortFieldsDialog sfd = new SortFieldsDialog( this, true); 1059 sfd.setSubDataset( this.getSubDataset() ); 1060 sfd.setVisible(true); 1061 1062 } 1064 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 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 } 1076 private void jButtonSaveQueryActionPerformed(java.awt.event.ActionEvent evt) { 1078 Misc.saveSQLQuery( jRSQLExpressionArea1.getText(), this ); 1079 1080 } 1082 private void jButtonLoadQueryActionPerformed(java.awt.event.ActionEvent evt) { 1084 1085 String query = Misc.loadSQLQuery(this); 1086 1087 if (query != null) 1088 { 1089 jRSQLExpressionArea1.setText(query); 1090 } 1091 1092 } 1094 private void jComboBoxQueryTypeActionPerformed(java.awt.event.ActionEvent evt) { boolean autoReadFields = automaticlyReadFieldsCheckBox.isSelected(); 1097 1098 readFieldsButton.setEnabled(false); 1099 automaticlyReadFieldsCheckBox.setSelected(false); 1100 readFieldsButton.setEnabled(false); 1101 1102 String 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 getJLabelStatusSQL().setText("Looking for a valid Fields provider for " + language + " queries...."); 1117 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 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 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 ) 1183 { 1184 setSpecialLanguageComponent( (Component )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 } 1197 1198 public void setSpecialLanguageComponent(Component 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 evt) { 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 fieldName = ""+names.elementAt(nd); 1242 it.businesslogic.ireport.JRField field = new it.businesslogic.ireport.JRField(fieldName, "java.lang.String"); 1243 field.setDescription(""); 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 ex) 1253 { 1254 setColumnsError( "" + ex.getMessage() ); 1255 1256 } 1257 } 1258 } 1260 private void formWindowOpened(java.awt.event.WindowEvent evt) { 1262 } 1264 private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { 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 queryLanguage = "sql"; 1281 Object 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 ex) 1318 { 1319 1320 } 1321 1322 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 ex) 1339 { 1340 setColumnsError( "" + ex.getMessage() ); 1341 1342 } 1343 } 1344 1345 } 1347 private void exportQueryButtonActionPerformed(java.awt.event.ActionEvent evt) { 1349 FieldReader fr = new FieldReader(jRSQLExpressionArea1.getText(), null); 1350 String query = fr.interpretQuery(); 1351 1352 java.awt.datatransfer.Clipboard clipboard = java.awt.Toolkit.getDefaultToolkit().getSystemClipboard(); 1353 StringSelection fieldContent = new StringSelection (query); 1354 1355 clipboard.setContents (fieldContent, this); 1356 1357 1358 } 1361 private void jButtonReadBeanAttributes3ActionPerformed(java.awt.event.ActionEvent evt) { 1363 bip1.setClassName(jTextFieldBeanClass1.getText().trim()); 1364 } 1366 protected void getFieldsFromClass(Class clazz, String path) throws Exception 1367 { 1368 DefaultTableModel dtm = (DefaultTableModel)jTableFields.getModel(); 1369 1370 java.lang.reflect.Method [] methods = clazz.getMethods(); 1371 java.lang.reflect.Field [] fields = clazz.getFields(); 1372 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 fieldName = methods[i].getName().substring(3); 1386 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 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 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 evt) { 1435 if( automaticlyReadFieldsCheckBox.isSelected() ) { 1436 readFieldsButton.setEnabled(false); 1439 if (!isSettingSQLExpression) 1440 { 1441 processQueryChanged( jRSQLExpressionArea1.getText().trim() ); 1442 } 1443 } else { 1444 readFieldsButton.setEnabled(true); 1448 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 } 1458 private void readFieldsButtonActionPerformed(java.awt.event.ActionEvent evt) { processQueryChanged( jRSQLExpressionArea1.getText().trim() ); 1460 } 1462 private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) { num++; 1465 this.setVisible(false); 1466 } 1468 private void okButtonActionPerformed(java.awt.event.ActionEvent evt) { 1470 try { 1471 if (stoppedChanging != null) stoppedChanging.stop(); 1472 1473 if ( this.getSubDataset() != null) 1474 { 1475 num++; 1477 Object 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 this.subDataset.setQuery( jRSQLExpressionArea1.getText()); 1488 1489 if ( jTableFields.getRowCount() > 0) 1490 { 1491 this.subDataset.getFields().clear(); 1493 1494 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 ex) 1521 { 1522 ex.printStackTrace(); 1523 } 1524 1525 this.setVisible(false); 1526 1527 } 1529 private void jTableFieldsKeyReleased(java.awt.event.KeyEvent evt) { 1531 if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_DELETE) 1533 { 1534 javax.swing.table.DefaultTableModel dtm = (javax.swing.table.DefaultTableModel )jTableFields.getModel(); 1535 while (jTableFields.getSelectedRow() >=0) 1543 { 1544 dtm.removeRow(jTableFields.getSelectedRow()); 1545 } 1546 } 1547 } 1549 1550 1551 1552 1553 1554 private void closeDialog(java.awt.event.WindowEvent evt) { setVisible(false); 1556 dispose(); 1557 } 1559 1562 public static void main(String args[]) { 1563 new ReportQueryDialog(new javax.swing.JFrame (), true).setVisible(true); 1564 } 1565 1566 Map parameterNameToExpressionID = null; 1567 1568 1572 private Interpreter prepareExpressionEvaluator() throws bsh.EvalError { 1573 1574 Interpreter interpreter = new Interpreter(); 1575 interpreter.setClassLoader(interpreter.getClass().getClassLoader()); 1576 1577 StringTokenizer st = new StringTokenizer( MainFrame.getMainInstance().getProperties().getProperty("classpath",""),"\n"); 1579 interpreter.eval("String tmp;"); 1580 while (st.hasMoreTokens()) 1581 { 1582 String 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 Enumeration imps = MainFrame.getMainInstance().getActiveReportFrame().getReport().getImports().elements(); 1592 while ( imps.hasMoreElements() ) 1593 { 1594 String var = (String )imps.nextElement(); 1595 interpreter.eval("import " + var + ";"); 1596 } 1597 1603 return interpreter; 1604 1605 } 1607 1608 1614 private Class classStringToClass(String classType) { 1615 Class c = null; 1616 1617 1618 if ( classType.equals("java.lang.String") ) { 1619 c = java.lang.String .class; 1620 } else if ( classType.equals("java.lang.Integer") ) { 1621 c = java.lang.Integer .class; 1622 } else if ( classType.equals("java.lang.Boolean") ) { 1623 c = java.lang.Boolean .class; 1624 } else if ( classType.equals("java.lang.Byte") ) { 1625 c = java.lang.Byte .class; 1626 } else if ( classType.equals("java.util.Date") ) { 1627 c = java.util.Date .class; 1628 } else if ( classType.equals("java.sql.Timestamp") ) { 1629 c = java.sql.Timestamp .class; 1630 } else if ( classType.equals("java.sql.Time") ) { 1631 c = java.sql.Time .class; 1632 } else if ( classType.equals("java.lang.Double") ) { 1633 c = java.lang.Double .class; 1634 } else if ( classType.equals("java.lang.Float") ) { 1635 c = java.lang.Float .class; 1636 } else if ( classType.equals("java.lang.Long") ) { 1637 c = java.lang.Long .class; 1638 } else if ( classType.equals("java.lang.Short") ) { 1639 c = java.lang.Short .class; 1640 } else if ( classType.equals("java.math.BigDecimal") ) { 1641 c = java.math.BigDecimal .class; 1642 } 1643 1644 return c; 1645 } 1646 1647 1648 private javax.swing.JCheckBox automaticlyReadFieldsCheckBox; 1650 private javax.swing.JButton cancelButton; 1651 private javax.swing.JLabel columnsErrorMsgLabel; 1652 private javax.swing.JScrollPane columnsErrorScrollPane; 1653 private javax.swing.JScrollPane columnsScrollPane; 1654 private javax.swing.JButton exportQueryButton; 1655 private javax.swing.JButton jButton1; 1656 private javax.swing.JButton jButton2; 1657 private javax.swing.JButton jButton3; 1658 private javax.swing.JButton jButton4; 1659 private javax.swing.JButton jButtonLoadQuery; 1660 private javax.swing.JButton jButtonOpenDesigner; 1661 private javax.swing.JButton jButtonReadBeanAttributes3; 1662 private javax.swing.JButton jButtonSaveQuery; 1663 private javax.swing.JComboBox jComboBoxQueryType; 1664 private javax.swing.JLabel jLabel1; 1665 private javax.swing.JLabel jLabel3; 1666 private javax.swing.JLabel jLabelStatusSQL; 1667 private javax.swing.JPanel jPanel1; 1668 private javax.swing.JPanel jPanel11; 1669 private javax.swing.JPanel jPanel14; 1670 private javax.swing.JPanel jPanel15; 1671 private javax.swing.JPanel jPanel16; 1672 private javax.swing.JPanel jPanel2; 1673 private javax.swing.JPanel jPanel3; 1674 private javax.swing.JPanel jPanel4; 1675 private javax.swing.JPanel jPanel6; 1676 private javax.swing.JPanel jPanel7; 1677 private javax.swing.JPanel jPanel8; 1678 private javax.swing.JPanel jPanel9; 1679 private javax.swing.JPanel jPanelQueryArea; 1680 private javax.swing.JPanel jPanelSQL; 1681 private it.businesslogic.ireport.gui.JRSQLExpressionArea jRSQLExpressionArea1; 1682 private javax.swing.JSeparator jSeparator1; 1683 private javax.swing.JSplitPane jSplitPane1; 1684 private javax.swing.JSplitPane jSplitPane2; 1685 private javax.swing.JTabbedPane jTabbedPane1; 1686 private javax.swing.JTable jTableFields; 1687 private javax.swing.JTextField jTextFieldBeanClass1; 1688 private javax.swing.JButton okButton; 1689 private javax.swing.JButton readFieldsButton; 1690 1692 private boolean isSettingSQLExpression = false; 1693 1694 1695 1696 public void lostOwnership (Clipboard parClipboard, Transferable parTransferable) { } 1697 1698 public static Object recursiveInterpreter(Interpreter interpreter, String expression, Vector parameters) throws EvalError 1699 { 1700 return recursiveInterpreter(interpreter, expression, parameters, 0); 1701 } 1702 1703 public static Object recursiveInterpreter(Interpreter interpreter, String expression, Vector parameters, int recursion_level) throws EvalError 1704 { 1705 ++recursion_level; 1706 if (recursion_level > 100) return null; 1708 if (expression != null && expression.trim().length() > 0) 1709 { 1710 while (expression.indexOf("$P{") >= 0) 1712 { 1713 int start_index = expression.indexOf("$P{")+3; 1714 String param_name = expression.substring(start_index, expression.indexOf("}", start_index) ); 1715 String 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 Object res = interpreter.eval(expression); 1732 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 { 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 ex) 1762 { 1763 1764 } 1765 if (subDataset == null) 1767 this.jRSQLExpressionArea1.setText(""); 1768 else 1769 { 1770 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 []{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) { 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 automaticlyReadFieldsCheckBox.setText(I18n.getString("reportQueryDialog.utomaticlyReadFieldsCheckBox","Automatically Retrieve Fields")); 1820 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 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 1851 public JRSQLExpressionArea getSQLExpressionArea() 1852 { 1853 return jRSQLExpressionArea1; 1854 } 1855 1856 1860 public JTable getFieldsTable() 1861 { 1862 return jTableFields; 1863 } 1864} 1865 1866 1867 | Popular Tags |