1 32 33 package it.businesslogic.ireport.gui; 34 import bsh.EvalError; 35 import bsh.ParseException; 36 import bsh.TargetError; 37 import groovy.lang.Binding; 38 import groovy.lang.GroovyShell; 39 import it.businesslogic.ireport.CrosstabReportElement; 40 import it.businesslogic.ireport.ExpressionContext; 41 import it.businesslogic.ireport.IRParsingException; 42 import it.businesslogic.ireport.JRField; 43 import it.businesslogic.ireport.JRParameter; 44 import it.businesslogic.ireport.JRVariable; 45 import it.businesslogic.ireport.SubDataset; 46 import it.businesslogic.ireport.crosstab.CrosstabGroup; 47 import it.businesslogic.ireport.crosstab.CrosstabParameter; 48 import it.businesslogic.ireport.crosstab.Measure; 49 import it.businesslogic.ireport.gui.expbuilder.ArithmeticOperationHelper; 50 import it.businesslogic.ireport.gui.expbuilder.ExpObject; 51 import it.businesslogic.ireport.gui.expbuilder.ExpObjectCellRenderer; 52 import it.businesslogic.ireport.util.I18n; 53 import it.businesslogic.ireport.util.JRFakeObject; 54 import it.businesslogic.ireport.util.Misc; 55 import java.awt.Color ; 56 import java.io.StringReader ; 57 import java.text.MessageFormat ; 58 import javax.swing.event.CaretEvent ; 59 import javax.swing.event.CaretListener ; 60 import javax.swing.event.ChangeEvent ; 61 import javax.swing.event.ChangeListener ; 62 import javax.swing.text.Style ; 63 import javax.swing.text.StyleConstants ; 64 import javax.swing.tree.*; 65 import javax.swing.*; 66 import java.util.*; 67 import net.sf.jasperreports.engine.JRExpression; 68 import net.sf.jasperreports.engine.JRExpressionChunk; 69 import net.sf.jasperreports.engine.design.JRDesignExpression; 70 import net.sf.jasperreports.engine.fill.JRFillField; 71 import net.sf.jasperreports.engine.fill.JRFillParameter; 72 import net.sf.jasperreports.engine.fill.JRFillVariable; 73 import net.sf.jasperreports.engine.util.JRStringUtil; 74 import org.codehaus.groovy.control.CompilationFailedException; 75 import javax.swing.text.DefaultStyledDocument ; 76 80 public class ExpressionEditor extends javax.swing.JDialog implements CaretListener 81 { 82 83 88 public static final int VARIABLE = 1; 89 public static final int PARAMETER = 2; 90 public static final int FIELD = 3; 91 92 93 private SubDataset subDataset = null; 94 private Vector crosstabElements = new Vector(); 95 96 public static Vector defaultExpressions = null; 97 public boolean init = false; 98 99 public static Vector recentExpressions = new Vector(); 100 101 102 Style errorStyle = null; 103 Style okStyle = null; 104 DefaultStyledDocument doc = null; 105 106 107 static { 108 defaultExpressions = new Vector(); 109 defaultExpressions.add("( <condition> ? exp1 : exp2 )"); 110 defaultExpressions.add("msg(<pattern>, <arg0>)"); 111 defaultExpressions.add("msg(<pattern>, <arg0>, <arg1>)"); 112 defaultExpressions.add("msg(<pattern>, <arg0>, <arg1>, <arg2>)"); 113 defaultExpressions.add("str(<key>)"); 114 defaultExpressions.add("((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource(<select expression>)"); 115 defaultExpressions.add("((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).dataSource(<select expression>)"); 116 } 117 118 119 public ExpressionEditor() 120 { 121 super( MainFrame.getMainInstance(), true); 122 initComponents(); 123 this.setSize(750, 450); 124 125 this.setModal(true); 126 org.syntax.jedit.SyntaxDocument sd = new org.syntax.jedit.SyntaxDocument(); 128 sd.setTokenMarker(new org.syntax.jedit.tokenmarker.JavaTokenMarker() ); 129 130 this.jEditTextArea1.setDocument( sd ); 131 this.jEditTextArea1.getPainter().setEOLMarkersPainted(false); 132 this.jEditTextArea1.getPainter().setInvalidLinesPainted(false); 133 this.jEditTextArea1.getPainter().setLineHighlightEnabled(false); 134 135 136 DefaultMutableTreeNode dmtn = new DefaultMutableTreeNode("root"); 137 138 this.jTree1.setCellRenderer(new DocumentExpressionEditorTreeCellRenderer()); 139 this.jTree1.setModel(new javax.swing.tree.DefaultTreeModel (dmtn)); 140 141 it.businesslogic.ireport.util.Misc.centerFrame(this); 142 143 jList1.setModel(new DefaultListModel()); 144 jList2.setModel(new DefaultListModel()); 145 146 jEditTextArea1.requestFocusInWindow(); 147 148 jEditTextArea1.getDocument().addDocumentListener( new javax.swing.event.DocumentListener () { 149 public void changedUpdate(javax.swing.event.DocumentEvent evt) { 150 jRTextExpressionAreaTextChanged(); 151 } 152 public void insertUpdate(javax.swing.event.DocumentEvent evt) { 153 jRTextExpressionAreaTextChanged(); 154 } 155 public void removeUpdate(javax.swing.event.DocumentEvent evt) { 156 jRTextExpressionAreaTextChanged(); 157 } 158 }); 159 160 jEditTextArea1.addCaretListener( this ); 161 162 163 javax.swing.KeyStroke escape = javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_ESCAPE, 0, false); 164 javax.swing.Action escapeAction = new javax.swing.AbstractAction () { 165 public void actionPerformed(java.awt.event.ActionEvent e) { 166 setVisible(false); 167 } 168 }; 169 170 getRootPane().getInputMap(javax.swing.JComponent.WHEN_IN_FOCUSED_WINDOW).put(escape, "ESCAPE"); 171 getRootPane().getActionMap().put("ESCAPE", escapeAction); 172 173 jList1.getSelectionModel().setSelectionMode( jList1.getSelectionModel().SINGLE_SELECTION ); 174 jList1.setCellRenderer(new ExpObjectCellRenderer(jList1)); 175 jList2.setCellRenderer(new TextAreaCellRenderer(jList2)); 176 177 jSplitPane3.updateUI(); 180 applyI18n(); 181 caretUpdate(null); 182 183 jTabbedPane1.addChangeListener( new ChangeListener () { 184 public void stateChanged(ChangeEvent e) 185 { 186 if (jTabbedPane1.getSelectedIndex() == 1) 187 { 188 SwingUtilities.invokeLater( new Runnable () { 189 190 public void run() 191 { 192 try { 193 validateExpression(); 194 } catch (Exception ex) 195 { 196 setErrorText("Exception occurred during the expression validation", true); 197 } 198 } 199 }); 200 } 201 } 202 }); 203 204 doc = new DefaultStyledDocument (); 205 206 jTextPaneErrors.setDocument( doc ); 207 errorStyle = doc.addStyle("errorStyle", null); 208 StyleConstants.setForeground(errorStyle, Color.red); 209 okStyle = doc.addStyle("okStyle", null); 210 StyleConstants.setForeground(okStyle, Color.blue); 211 212 this.pack(); 213 } 214 215 216 217 222 private void initComponents() { 224 java.awt.GridBagConstraints gridBagConstraints; 225 226 jPanel1 = new javax.swing.JPanel (); 227 jSplitPane1 = new javax.swing.JSplitPane (); 228 jPanel6 = new javax.swing.JPanel (); 229 jEditTextArea1 = new org.syntax.jedit.JEditTextArea(); 230 jLabel1 = new javax.swing.JLabel (); 231 jLabelCaretPosition = new javax.swing.JLabel (); 232 jPanel5 = new javax.swing.JPanel (); 233 jTabbedPane1 = new javax.swing.JTabbedPane (); 234 jSplitPaneOAE = new javax.swing.JSplitPane (); 235 jPanel4 = new javax.swing.JPanel (); 236 jSplitPane3 = new javax.swing.JSplitPane (); 237 jScrollPane1 = new javax.swing.JScrollPane (); 238 jList1 = new javax.swing.JList (); 239 jScrollPane3 = new javax.swing.JScrollPane (); 240 jList2 = new javax.swing.JList (); 241 jPanel3 = new javax.swing.JPanel (); 242 jScrollPane2 = new javax.swing.JScrollPane (); 243 jTree1 = new javax.swing.JTree (); 244 jScrollPane4 = new javax.swing.JScrollPane (); 245 jTextPaneErrors = new javax.swing.JTextPane (); 246 jPanel2 = new javax.swing.JPanel (); 247 jButtonLoadExpression = new javax.swing.JButton (); 248 jButtonSaveExpression = new javax.swing.JButton (); 249 jButtonCheckExpression = new javax.swing.JButton (); 250 jButtonApply = new javax.swing.JButton (); 251 jButtonCancel = new javax.swing.JButton (); 252 253 setTitle("Expression editor..."); 254 setModal(true); 255 addComponentListener(new java.awt.event.ComponentAdapter () { 256 public void componentResized(java.awt.event.ComponentEvent evt) { 257 formComponentResized(evt); 258 } 259 }); 260 addWindowListener(new java.awt.event.WindowAdapter () { 261 public void windowClosing(java.awt.event.WindowEvent evt) { 262 exitForm(evt); 263 } 264 }); 265 266 jPanel1.setLayout(new java.awt.BorderLayout ()); 267 268 jPanel1.setPreferredSize(new java.awt.Dimension (752, 416)); 269 jSplitPane1.setDividerSize(4); 270 jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); 271 jSplitPane1.setResizeWeight(0.5); 272 jPanel6.setLayout(new java.awt.GridBagLayout ()); 273 274 jEditTextArea1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED)); 275 jEditTextArea1.setFocusCycleRoot(true); 276 jEditTextArea1.setFont(new java.awt.Font ("Courier New", 0, 11)); 277 jEditTextArea1.setMinimumSize(new java.awt.Dimension (20, 20)); 278 jEditTextArea1.setPreferredSize(new java.awt.Dimension (750, 150)); 279 jEditTextArea1.addComponentListener(new java.awt.event.ComponentAdapter () { 280 public void componentResized(java.awt.event.ComponentEvent evt) { 281 jEditTextArea1ComponentResized(evt); 282 } 283 }); 284 jEditTextArea1.addInputMethodListener(new java.awt.event.InputMethodListener () { 285 public void caretPositionChanged(java.awt.event.InputMethodEvent evt) { 286 } 287 public void inputMethodTextChanged(java.awt.event.InputMethodEvent evt) { 288 jEditTextArea1InputMethodTextChanged(evt); 289 } 290 }); 291 292 gridBagConstraints = new java.awt.GridBagConstraints (); 293 gridBagConstraints.gridwidth = 2; 294 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 295 gridBagConstraints.weightx = 1.0; 296 gridBagConstraints.weighty = 1.0; 297 gridBagConstraints.insets = new java.awt.Insets (2, 2, 2, 2); 298 jPanel6.add(jEditTextArea1, gridBagConstraints); 299 300 jLabel1.setForeground(new java.awt.Color (255, 0, 51)); 301 jLabel1.setText(" "); 302 gridBagConstraints = new java.awt.GridBagConstraints (); 303 gridBagConstraints.gridx = 0; 304 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 305 gridBagConstraints.weightx = 1.0; 306 gridBagConstraints.insets = new java.awt.Insets (0, 4, 0, 0); 307 jPanel6.add(jLabel1, gridBagConstraints); 308 309 jLabelCaretPosition.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); 310 jLabelCaretPosition.setText("Line: 1 Column: 1"); 311 gridBagConstraints = new java.awt.GridBagConstraints (); 312 gridBagConstraints.gridx = 1; 313 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 314 gridBagConstraints.insets = new java.awt.Insets (0, 4, 0, 4); 315 jPanel6.add(jLabelCaretPosition, gridBagConstraints); 316 317 jSplitPane1.setTopComponent(jPanel6); 318 319 jPanel5.setLayout(new java.awt.GridBagLayout ()); 320 321 jSplitPaneOAE.setBorder(null); 322 jSplitPaneOAE.setDividerSize(4); 323 jSplitPaneOAE.setResizeWeight(0.1); 324 jSplitPaneOAE.setAutoscrolls(true); 325 jSplitPaneOAE.setPreferredSize(new java.awt.Dimension (361, 160)); 326 jPanel4.setLayout(new java.awt.BorderLayout ()); 327 328 jPanel4.setPreferredSize(new java.awt.Dimension (100, 100)); 329 jSplitPane3.setBorder(null); 330 jSplitPane3.setDividerSize(4); 331 jSplitPane3.setResizeWeight(0.8); 332 jList1.addListSelectionListener(new javax.swing.event.ListSelectionListener () { 333 public void valueChanged(javax.swing.event.ListSelectionEvent evt) { 334 jList1ValueChanged(evt); 335 } 336 }); 337 jList1.addMouseListener(new java.awt.event.MouseAdapter () { 338 public void mouseClicked(java.awt.event.MouseEvent evt) { 339 jList1MouseClicked(evt); 340 } 341 }); 342 343 jScrollPane1.setViewportView(jList1); 344 345 jSplitPane3.setLeftComponent(jScrollPane1); 346 347 jList2.addMouseListener(new java.awt.event.MouseAdapter () { 348 public void mouseClicked(java.awt.event.MouseEvent evt) { 349 jList2MouseClicked(evt); 350 } 351 }); 352 353 jScrollPane3.setViewportView(jList2); 354 355 jSplitPane3.setRightComponent(jScrollPane3); 356 357 jPanel4.add(jSplitPane3, java.awt.BorderLayout.CENTER); 358 359 jSplitPaneOAE.setRightComponent(jPanel4); 360 jPanel4.getAccessibleContext().setAccessibleParent(jPanel1); 361 362 jPanel3.setLayout(new java.awt.BorderLayout ()); 363 364 jScrollPane2.setPreferredSize(new java.awt.Dimension (100, 100)); 365 jTree1.setRootVisible(false); 366 jTree1.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener () { 367 public void valueChanged(javax.swing.event.TreeSelectionEvent evt) { 368 jTree1ValueChanged(evt); 369 } 370 }); 371 372 jScrollPane2.setViewportView(jTree1); 373 374 jPanel3.add(jScrollPane2, java.awt.BorderLayout.CENTER); 375 376 jSplitPaneOAE.setLeftComponent(jPanel3); 377 jPanel3.getAccessibleContext().setAccessibleParent(jPanel1); 378 379 jTabbedPane1.addTab("Objects and expressions", jSplitPaneOAE); 380 381 jTextPaneErrors.setEditable(false); 382 jScrollPane4.setViewportView(jTextPaneErrors); 383 384 jTabbedPane1.addTab("Validation errors", jScrollPane4); 385 386 gridBagConstraints = new java.awt.GridBagConstraints (); 387 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 388 gridBagConstraints.weightx = 1.0; 389 gridBagConstraints.weighty = 1.0; 390 jPanel5.add(jTabbedPane1, gridBagConstraints); 391 392 jSplitPane1.setRightComponent(jPanel5); 393 394 jPanel1.add(jSplitPane1, java.awt.BorderLayout.CENTER); 395 396 getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER); 397 398 jPanel2.setLayout(new java.awt.GridBagLayout ()); 399 400 jPanel2.setMinimumSize(new java.awt.Dimension (10, 30)); 401 jPanel2.setPreferredSize(new java.awt.Dimension (10, 30)); 402 jButtonLoadExpression.setLabel("Import..."); 403 jButtonLoadExpression.addActionListener(new java.awt.event.ActionListener () { 404 public void actionPerformed(java.awt.event.ActionEvent evt) { 405 jButtonLoadExpressionActionPerformed1(evt); 406 } 407 }); 408 409 gridBagConstraints = new java.awt.GridBagConstraints (); 410 gridBagConstraints.insets = new java.awt.Insets (2, 2, 2, 2); 411 jPanel2.add(jButtonLoadExpression, gridBagConstraints); 412 413 jButtonSaveExpression.setText("Export..."); 414 jButtonSaveExpression.addActionListener(new java.awt.event.ActionListener () { 415 public void actionPerformed(java.awt.event.ActionEvent evt) { 416 jButtonSaveExpressionActionPerformed1(evt); 417 } 418 }); 419 420 gridBagConstraints = new java.awt.GridBagConstraints (); 421 gridBagConstraints.insets = new java.awt.Insets (2, 2, 2, 2); 422 jPanel2.add(jButtonSaveExpression, gridBagConstraints); 423 424 jButtonCheckExpression.setText("Check expression"); 425 jButtonCheckExpression.addActionListener(new java.awt.event.ActionListener () { 426 public void actionPerformed(java.awt.event.ActionEvent evt) { 427 jButtonCheckExpressionActionPerformed(evt); 428 } 429 }); 430 431 gridBagConstraints = new java.awt.GridBagConstraints (); 432 gridBagConstraints.insets = new java.awt.Insets (2, 2, 2, 2); 433 jPanel2.add(jButtonCheckExpression, gridBagConstraints); 434 435 jButtonApply.setMnemonic('a'); 436 jButtonApply.setText("Apply"); 437 jButtonApply.addActionListener(new java.awt.event.ActionListener () { 438 public void actionPerformed(java.awt.event.ActionEvent evt) { 439 jButtonApplyActionPerformed(evt); 440 } 441 }); 442 443 gridBagConstraints = new java.awt.GridBagConstraints (); 444 gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; 445 gridBagConstraints.weightx = 1.0; 446 gridBagConstraints.insets = new java.awt.Insets (2, 2, 2, 2); 447 jPanel2.add(jButtonApply, gridBagConstraints); 448 449 jButtonCancel.setMnemonic('c'); 450 jButtonCancel.setText("Cancel"); 451 jButtonCancel.addActionListener(new java.awt.event.ActionListener () { 452 public void actionPerformed(java.awt.event.ActionEvent evt) { 453 jButtonCancelActionPerformed(evt); 454 } 455 }); 456 457 gridBagConstraints = new java.awt.GridBagConstraints (); 458 gridBagConstraints.insets = new java.awt.Insets (2, 2, 2, 2); 459 jPanel2.add(jButtonCancel, gridBagConstraints); 460 461 getContentPane().add(jPanel2, java.awt.BorderLayout.SOUTH); 462 463 pack(); 464 } 466 private void jButtonCheckExpressionActionPerformed(java.awt.event.ActionEvent evt) { 468 SwingUtilities.invokeLater( new Runnable () { 469 470 public void run() 471 { 472 try { 473 validateExpression(); 474 } catch (Exception ex) 475 { 476 setErrorText("Exception occurred during the expression validation", true); 477 } 478 } 479 }); 480 } 482 private void jButtonSaveExpressionActionPerformed1(java.awt.event.ActionEvent evt) { Misc.saveExpression( jEditTextArea1.getText(), this ); 484 } 486 private void jButtonLoadExpressionActionPerformed1(java.awt.event.ActionEvent evt) { String expression = Misc.loadExpression(this); 488 489 if (expression != null) { 490 jEditTextArea1.setText(expression); 491 } 492 } 494 static int xxx = 0; 495 public void jRTextExpressionAreaTextChanged() 496 { 497 if (init) return; 498 jLabel1.setText(" "); 499 500 try { 501 bsh.Parser parser = new bsh.Parser(new StringReader (jEditTextArea1.getText()+";") ); 502 while(!parser.Line()) { 503 } 506 507 } catch (Exception ex) 508 { 509 jLabel1.setText("" + ex.getMessage()); 510 } 511 } 512 private void jEditTextArea1InputMethodTextChanged(java.awt.event.InputMethodEvent evt) { 514 515 } 517 private void jList2MouseClicked(java.awt.event.MouseEvent evt) { 519 if (evt.getButton() == evt.BUTTON1 && evt.getClickCount() == 2) 520 { 521 if (jList1.getSelectedValue() != null && jList2.getSelectedValue() != null) 522 { 523 try { 524 525 String objName = ""; 526 if (jList1.getSelectedValue() instanceof ExpObject) 527 { 528 objName = ((ExpObject)jList1.getSelectedValue()).getExpression(); 529 } 530 else 531 { 532 objName = ""+jList1.getSelectedValue(); 533 } 534 535 String method = (jList2.getSelectedValue()+""); 536 method = method.substring(0, method.lastIndexOf(")")+1); 537 jEditTextArea1.getDocument().replace(jEditTextArea1.getSelectionStart(), 538 jEditTextArea1.getSelectionEnd()-jEditTextArea1.getSelectionStart(), 539 objName+"."+method, null); 540 } catch (Exception ex){} 541 } 542 } 543 } 545 private void jList1MouseClicked(java.awt.event.MouseEvent evt) { 547 if (evt.getButton() == evt.BUTTON1 && evt.getClickCount() == 2) 548 { 549 DefaultMutableTreeNode dmtn = (DefaultMutableTreeNode)jTree1.getSelectionPath().getLastPathComponent(); 550 if ((""+dmtn.getUserObject()).equalsIgnoreCase(I18n.getString("Wizards","Wizards"))) 551 { 552 ArithmeticOperationHelper aoe = new ArithmeticOperationHelper(); 553 554 aoe.setLanguage( MainFrame.getMainInstance().getActiveReportFrame().getReport().getLanguage() ); 555 556 if ((jList1.getSelectedValue()+"").equals( I18n.getString("Addition","Addition (+)"))) 557 { 558 aoe.setOperation("+"); 559 } 560 if ((jList1.getSelectedValue()+"").equals( I18n.getString("Subtraction","Subtraction (-)"))) 561 { 562 aoe.setOperation("-"); 563 } 564 if ((jList1.getSelectedValue()+"").equals( I18n.getString("Division","Division (/)"))) 565 { 566 aoe.setOperation("/"); 567 } 568 if ((jList1.getSelectedValue()+"").equals( I18n.getString("Multiplication","Multiplication (*)"))) 569 { 570 aoe.setOperation("*"); 571 } 572 573 aoe.setValues( getAllObjects() ); 575 576 if ( aoe.showDialog(this) == JOptionPane.OK_OPTION) 577 { 578 579 String exp = aoe.getExpression(); 580 try { 581 jEditTextArea1.getDocument().replace(jEditTextArea1.getSelectionStart(), 582 jEditTextArea1.getSelectionEnd()-jEditTextArea1.getSelectionStart(), 583 exp, null); 584 } catch (Exception ex){} 585 } 586 } 587 else 588 { 589 try { 590 String objName = ""; 591 if (jList1.getSelectedValue() instanceof ExpObject) 592 { 593 objName = ((ExpObject)jList1.getSelectedValue()).getExpression(); 594 } 595 else 596 { 597 objName = ""+jList1.getSelectedValue(); 598 } 599 600 jEditTextArea1.getDocument().replace(jEditTextArea1.getSelectionStart(), 601 jEditTextArea1.getSelectionEnd()-jEditTextArea1.getSelectionStart(), 602 objName+"", null); 603 } catch (Exception ex){} 604 } 605 } 606 } 608 private void jList1ValueChanged(javax.swing.event.ListSelectionEvent evt) { 610 DefaultListModel dlm = (DefaultListModel)jList2.getModel(); 611 dlm.removeAllElements(); 612 613 Class clazz = null; 615 if (jList1.getSelectedValue() instanceof ExpObject) 616 { 617 try { 618 clazz = this.getClass().getClassLoader().loadClass( ((ExpObject)jList1.getSelectedValue()).getClassType()); 619 620 } catch (Throwable ex) 621 { 622 623 } 624 } 625 626 627 628 if (clazz != null) 629 { 630 java.lang.reflect.Method [] methods = clazz.getMethods(); 631 for (int i=0; i<methods.length; ++i) 632 { 633 if ((methods[i].getModifiers() & java.lang.reflect.Modifier.PUBLIC) != 0 ) 634 { 635 String method_firm = methods[i].getName() + "("; 636 Class [] params = methods[i].getParameterTypes(); 637 int j=0; 638 for (j=0; j<params.length; ++j) 639 { 640 641 if (j > 0) method_firm +=", "; 642 else method_firm +=" "; 643 method_firm += getPrintableTypeName( params[j].getName() ); 644 } 645 if (j>0) method_firm+=" "; 646 method_firm += ") "; 647 648 String rname = methods[i].getReturnType().getName(); 649 if (rname.equals("void")) continue; method_firm += getPrintableTypeName( rname); 651 dlm.addElement( method_firm ); 652 } 653 } 654 } 655 656 657 } 659 public String getPrintableTypeName( String type ) 660 { 661 if (type == null) return "void"; 662 663 if (type.endsWith(";")) type = type.substring(0,type.length()-1); 664 665 while (type.startsWith("[")) 666 { 667 type = type.substring(1) + "[]"; 668 if (type.startsWith("[")) continue; 669 if (type.startsWith("L")) type = type.substring(1); 670 if (type.startsWith("Z")) type = "boolean" + type.substring(1); 671 if (type.startsWith("B")) type = "byte" + type.substring(1); 672 if (type.startsWith("C")) type = "char" + type.substring(1); 673 if (type.startsWith("D")) type = "double" + type.substring(1); 674 if (type.startsWith("F")) type = "float" + type.substring(1); 675 if (type.startsWith("I")) type = "int" + type.substring(1); 676 if (type.startsWith("J")) type = "long" + type.substring(1); 677 if (type.startsWith("S")) type = "short" + type.substring(1); 678 } 679 680 if (type.startsWith("java.lang.")) 681 { 682 type = type.substring("java.lang.".length()); 683 if (type.indexOf(".") > 0) 684 { 685 type = "java.lang." + type; 686 } 687 } 688 return type; 689 } 690 private void jTree1ValueChanged(javax.swing.event.TreeSelectionEvent evt) { 692 ( (DefaultListModel)jList1.getModel()).removeAllElements(); 693 694 DefaultMutableTreeNode dmtn = (DefaultMutableTreeNode)jTree1.getSelectionPath().getLastPathComponent(); 696 if (dmtn.getUserObject() instanceof CrosstabReportElementWrapper) 697 { 698 CrosstabReportElement cr = ((CrosstabReportElementWrapper)dmtn.getUserObject()).getCrosstabReportElement(); 699 Enumeration e = cr.getMeasures().elements(); 700 while (e.hasMoreElements()) 701 { 702 Measure measure = (Measure)e.nextElement(); 703 ( (DefaultListModel)jList1.getModel()).addElement( new ExpObject(measure.getName(), ExpObject.TYPE_VARIABLE, measure.getClassType() )); 705 706 for (int j=0; j<cr.getRowGroups().size(); ++j) 707 { 708 CrosstabGroup group = (CrosstabGroup)cr.getRowGroups().elementAt(j); 709 ((DefaultListModel)jList1.getModel()).addElement( new ExpObject(measure.getName() + "_"+group.getName()+"_"+"ALL", ExpObject.TYPE_VARIABLE, group.getBucketExpressionClass() )); 711 } 712 for (int j=0; j<cr.getColumnGroups().size(); ++j) 713 { 714 CrosstabGroup group = (CrosstabGroup)cr.getColumnGroups().elementAt(j); 715 ((DefaultListModel)jList1.getModel()).addElement( new ExpObject(measure.getName() + "_"+group.getName()+"_"+"ALL", ExpObject.TYPE_VARIABLE, group.getBucketExpressionClass() )); 717 } 718 } 719 720 for (int i=0; i<cr.getRowGroups().size(); ++i) 721 { 722 CrosstabGroup group = (CrosstabGroup)cr.getRowGroups().elementAt(i); 723 ((DefaultListModel)jList1.getModel()).addElement( new ExpObject(group.getName(), ExpObject.TYPE_VARIABLE, group.getBucketExpressionClass() )); 725 } 726 727 for (int i=0; i<cr.getColumnGroups().size(); ++i) 728 { 729 CrosstabGroup group = (CrosstabGroup)cr.getColumnGroups().elementAt(i); 730 ((DefaultListModel)jList1.getModel()).addElement( new ExpObject(group.getName(), ExpObject.TYPE_VARIABLE, group.getBucketExpressionClass() )); 732 } 733 734 735 for (int i=0; i<cr.getCrosstabParameters().size(); ++i) 736 { 737 CrosstabParameter parameter = (CrosstabParameter)cr.getCrosstabParameters().elementAt(i); 738 ((DefaultListModel)jList1.getModel()).addElement( new ExpObject(parameter.getName(), ExpObject.TYPE_PARAM, parameter.getClassType() )); 740 } 741 742 } 743 else if ((""+dmtn.getUserObject()).equalsIgnoreCase("Fields") && getSubDataset() != null) 744 { 745 Enumeration e = getSubDataset().getFields().elements(); 746 while (e.hasMoreElements()) 747 { 748 JRField field = (JRField)e.nextElement(); 749 ((DefaultListModel)jList1.getModel()).addElement( new ExpObject(field.getName(), ExpObject.TYPE_FIELD, field.getClassType() )); 751 } 752 } 753 else if ((""+dmtn.getUserObject()).equalsIgnoreCase("Parameters") && getSubDataset() != null) 754 { 755 Enumeration e = getSubDataset().getParameters().elements(); 756 while (e.hasMoreElements()) 757 { 758 JRParameter parameter = (JRParameter)e.nextElement(); 759 ((DefaultListModel)jList1.getModel()).addElement( new ExpObject(parameter.getName(), ExpObject.TYPE_PARAM, parameter.getClassType() )); 761 762 } 763 } 764 else if ((""+dmtn.getUserObject()).equalsIgnoreCase("Variables") && getSubDataset() != null) 765 { 766 Enumeration e = getSubDataset().getVariables().elements(); 767 while (e.hasMoreElements()) 768 { 769 JRVariable variable = (JRVariable)e.nextElement(); 770 ((DefaultListModel)jList1.getModel()).addElement( new ExpObject(variable.getName(), ExpObject.TYPE_VARIABLE, variable.getClassType() )); 772 } 773 } 774 else if ((""+dmtn.getUserObject()).equalsIgnoreCase(I18n.getString("Formulas","Formulas" ))) 775 { 776 for (int i=0; i<defaultExpressions.size(); ++i) 777 { 778 ( (DefaultListModel)jList1.getModel()).addElement(defaultExpressions.elementAt(i)); 779 } 780 } 781 else if ((""+dmtn.getUserObject()).equalsIgnoreCase(I18n.getString("RecentExpressions","Recent expressions"))) 782 { 783 for (int i=0; i<recentExpressions.size(); ++i) 784 { 785 ( (DefaultListModel)jList1.getModel()).addElement(recentExpressions.elementAt(i)); 786 } 787 } 788 else if ((""+dmtn.getUserObject()).equalsIgnoreCase(I18n.getString("Wizards","Wizards"))) 789 { 790 ( (DefaultListModel)jList1.getModel()).addElement(I18n.getString("Addition","Addition (+)")); 792 ( (DefaultListModel)jList1.getModel()).addElement(I18n.getString("Subtraction","Subtraction (-)")); 793 ( (DefaultListModel)jList1.getModel()).addElement(I18n.getString("Division","Division (/)")); 794 ( (DefaultListModel)jList1.getModel()).addElement(I18n.getString("Multiplication","Multiplication (*)")); 795 } 796 } 798 private void jButtonCancelActionPerformed(java.awt.event.ActionEvent evt) { this.setDialogResult( javax.swing.JOptionPane.NO_OPTION ); 801 this.dispose(); 802 } 804 private void jButtonApplyActionPerformed(java.awt.event.ActionEvent evt) { this.setExpression( this.jEditTextArea1.getText() ); 806 807 recentExpressions.add( this.jEditTextArea1.getText() ); 808 809 this.setDialogResult( javax.swing.JOptionPane.OK_OPTION ); 810 this.dispose(); 811 } 813 private void jEditTextArea1ComponentResized(java.awt.event.ComponentEvent evt) { } 817 private void formComponentResized(java.awt.event.ComponentEvent evt) { this.jEditTextArea1.updateScrollBars(); 820 } 822 823 private void exitForm(java.awt.event.WindowEvent evt) { 825 } 827 830 public static void main(String args[]) 831 { 832 new ExpressionEditor().setVisible(true); 833 } 834 835 836 840 public java.lang.String getExpression() 841 { 842 return Expression; 843 } 844 845 849 public void setExpression(java.lang.String Expression) 850 { 851 init = true; 852 this.jEditTextArea1.setText( Expression ); 853 this.Expression = Expression; 854 init = false; 855 } 856 857 861 public int getDialogResult() 862 { 863 return dialogResult; 864 } 865 866 870 public void setDialogResult(int dialogResult) 871 { 872 this.dialogResult = dialogResult; 873 } 874 875 private javax.swing.JButton jButtonApply; 877 private javax.swing.JButton jButtonCancel; 878 private javax.swing.JButton jButtonCheckExpression; 879 private javax.swing.JButton jButtonLoadExpression; 880 private javax.swing.JButton jButtonSaveExpression; 881 private org.syntax.jedit.JEditTextArea jEditTextArea1; 882 private javax.swing.JLabel jLabel1; 883 private javax.swing.JLabel jLabelCaretPosition; 884 private javax.swing.JList jList1; 885 private javax.swing.JList jList2; 886 private javax.swing.JPanel jPanel1; 887 private javax.swing.JPanel jPanel2; 888 private javax.swing.JPanel jPanel3; 889 private javax.swing.JPanel jPanel4; 890 private javax.swing.JPanel jPanel5; 891 private javax.swing.JPanel jPanel6; 892 private javax.swing.JScrollPane jScrollPane1; 893 private javax.swing.JScrollPane jScrollPane2; 894 private javax.swing.JScrollPane jScrollPane3; 895 private javax.swing.JScrollPane jScrollPane4; 896 private javax.swing.JSplitPane jSplitPane1; 897 private javax.swing.JSplitPane jSplitPane3; 898 private javax.swing.JSplitPane jSplitPaneOAE; 899 private javax.swing.JTabbedPane jTabbedPane1; 900 private javax.swing.JTextPane jTextPaneErrors; 901 private javax.swing.JTree jTree1; 902 904 905 private String Expression; 906 907 private int dialogResult; 908 909 public SubDataset getSubDataset() { 910 return subDataset; 911 } 912 913 public void setSubDataset(SubDataset subDataset) { 914 this.subDataset = subDataset; 915 916 if (subDataset != null) 918 { 919 jEditTextArea1.getTokenMarker().setKeywordLookup(subDataset.getKeywordLookup()); 920 } 921 updateTreeEntries(); 922 923 } 924 925 public void updateTreeEntries() { 926 927 928 DefaultMutableTreeNode root = (DefaultMutableTreeNode)jTree1.getModel().getRoot(); 929 930 root.removeAllChildren(); 931 932 if (getSubDataset() != null) 933 { 934 root.add( new DefaultMutableTreeNode("Fields")); 935 root.add( new DefaultMutableTreeNode("Variables")); 936 root.add( new DefaultMutableTreeNode("Parameters")); 937 } 938 939 for (int i=0; i<getCrosstabElements().size(); ++i) 940 { 941 root.add( new DefaultMutableTreeNode( new CrosstabReportElementWrapper( (CrosstabReportElement)getCrosstabElements().get(i)))); 942 } 943 root.add( new DefaultMutableTreeNode(I18n.getString("Formulas","Formulas" ))); 944 945 root.add( new DefaultMutableTreeNode(I18n.getString("RecentExpressions","Recent expressions"))); 946 947 root.add( new DefaultMutableTreeNode(new IconedString(I18n.getString("Wizards","Wizards"),"/it/businesslogic/ireport/icons/wand.png" ))); 948 949 jTree1.expandPath(new TreePath(root)); 950 jTree1.updateUI(); 951 jTree1.setSelectionRow(0); 952 } 953 954 public Vector getCrosstabElements() { 955 return crosstabElements; 956 } 957 958 public void setCrosstabElements(Vector crosstabElements) { 959 this.crosstabElements = crosstabElements; 960 } 961 962 963 public void addCrosstabReportElement(CrosstabReportElement re) 964 { 965 if (!this.getCrosstabElements().contains(re)) 966 { 967 getCrosstabElements().add(re); 968 updateTreeEntries(); 969 } 970 } 971 972 977 public void setExpressionContext(ExpressionContext ec) 978 { 979 if ( ec == null) return; 980 setCrosstabElements(ec.getCrosstabReportElements()); 981 982 setSubDataset(ec.getSubDataset()); 983 } 984 985 1107 public void caretUpdate(CaretEvent e) { 1108 1109 MessageFormat formatter = new MessageFormat (""); 1110 formatter.applyPattern( I18n.getString("LineColumn","Line {0,number,integer}, Column {1,number,integer}" )); 1111 1112 if (jEditTextArea1.getCaretLine() < 0) 1113 { 1114 jLabelCaretPosition.setText(formatter.format(new Object []{new Integer (0), new Integer (0)})); 1115 } 1116 String s = jEditTextArea1.getText(); 1117 1118 int pos = jEditTextArea1.getCaretPosition(); 1119 int newLineStart = s.substring(0,jEditTextArea1.getCaretPosition()).lastIndexOf('\n')+1; 1120 pos = pos - newLineStart; 1121 pos++; 1122 1123 jLabelCaretPosition.setText(formatter.format(new Object []{new Integer ((jEditTextArea1.getCaretLine()+1)), new Integer (pos)})); 1124 } 1125 1126 1127 public void applyI18n() 1128 { 1129 jLabel1.setText(I18n.getString("expressionEditor.label1"," ")); 1131 jLabelCaretPosition.setText(I18n.getString("expressionEditor.labelCaretPosition","Line: 1 Column: 1")); 1132 jButtonLoadExpression.setText(it.businesslogic.ireport.util.I18n.getString("import", "Import...")); 1134 jButtonSaveExpression.setText(it.businesslogic.ireport.util.I18n.getString("export", "Export...")); 1135 jButtonCheckExpression.setText(it.businesslogic.ireport.util.I18n.getString("checkExpression", "Check expression")); 1136 jButtonApply.setText(it.businesslogic.ireport.util.I18n.getString("gui.OptionsDialog.ButtonApply", "Apply")); 1137 jButtonCancel.setText(it.businesslogic.ireport.util.I18n.getString("gui.OptionsDialog.ButtonCancel", "Cancel")); 1138 jTabbedPane1.setTitleAt(0,it.businesslogic.ireport.util.I18n.getString("ObjectsAndExpressions", "Objects and expressions") ); 1139 jTabbedPane1.setTitleAt(1,it.businesslogic.ireport.util.I18n.getString("ValidationErrors", "Validation errors") ); 1140 1141 1142 jTabbedPane1.setTitleAt(0, it.businesslogic.ireport.util.I18n.getString("expressionEditor.tab.ObjectsAndExpressions","Objects and expressions")); 1143 jTabbedPane1.setTitleAt(1, it.businesslogic.ireport.util.I18n.getString("expressionEditor.tab.ValidationErrors","Validation errors")); 1144 1145 } 1146 1147 public void validateExpression() 1148 { 1149 String expression_to_validate = jEditTextArea1.getText(); 1150 1151 JRDesignExpression jrExpression = new JRDesignExpression(); 1153 jrExpression.setText( expression_to_validate ); 1154 jTextPaneErrors.setText(""); 1155 1156 try { 1157 1158 java.util.List paramsObjects = new java.util.ArrayList (); 1159 java.util.List varsObjects = new java.util.ArrayList (); 1160 java.util.List fieldsObjects = new java.util.ArrayList (); 1161 1162 String final_espression = generateExpression(jrExpression, paramsObjects, fieldsObjects, varsObjects); 1163 1164 if ( MainFrame.getMainInstance().getActiveReportFrame().getReport().getLanguage().equals("groovy")) 1165 { 1166 Binding binding = new Binding(); 1167 for (int i=0; i<paramsObjects.size(); ++i) 1168 { 1169 String name = ""+paramsObjects.get(i); 1170 binding.setVariable(name, new JRFakeObject()); 1171 } 1172 for (int i=0; i<varsObjects.size(); ++i) 1173 { 1174 String name = ""+varsObjects.get(i); 1175 binding.setVariable(name, new JRFakeObject()); 1176 } 1177 for (int i=0; i<fieldsObjects.size(); ++i) 1178 { 1179 String name = ""+fieldsObjects.get(i); 1180 binding.setVariable(name, new JRFakeObject()); 1181 } 1182 GroovyShell shell = new GroovyShell(binding); 1183 1184 shell.parse(final_espression); 1185 1186 } 1187 else if ( MainFrame.getMainInstance().getActiveReportFrame().getReport().getLanguage().equals("java")) 1188 { 1189 bsh.Interpreter interpreter = new bsh.Interpreter(); 1190 1191 StringTokenizer st = new StringTokenizer( MainFrame.getMainInstance().getProperties().getProperty("classpath",""),"\n"); 1192 interpreter.eval("String tmp;"); 1193 while (st.hasMoreTokens()) 1194 { 1195 String token = st.nextToken(); 1196 if (token != null && token.trim().length() > 0) 1197 { 1198 interpreter.set("tmp", token.trim()); 1199 interpreter.eval("addClassPath(tmp);"); 1200 } 1201 } 1202 1203 Enumeration imps = MainFrame.getMainInstance().getActiveReportFrame().getReport().getImports().elements(); 1205 while ( imps.hasMoreElements() ) 1206 { 1207 String var = (String )imps.nextElement(); 1208 interpreter.eval("import " + var + ";"); 1209 } 1210 1211 interpreter.eval("import java.util.*;"); 1212 interpreter.eval("import java.math.*;"); 1213 interpreter.eval("import java.text.*;"); 1214 interpreter.eval("import java.io.*;"); 1215 interpreter.eval("import java.net.*;"); 1216 interpreter.setStrictJava(true); 1217 1218 for (int i=0; i<paramsObjects.size(); ++i) 1219 { 1220 String name = ""+paramsObjects.get(i); 1221 interpreter.set(name, new JRFakeObject()); 1222 } 1223 for (int i=0; i<varsObjects.size(); ++i) 1224 { 1225 String name = ""+varsObjects.get(i); 1226 interpreter.set(name, new JRFakeObject()); 1227 } 1228 for (int i=0; i<fieldsObjects.size(); ++i) 1229 { 1230 String name = ""+fieldsObjects.get(i); 1231 interpreter.set(name, new JRFakeObject()); 1232 } 1233 1234 interpreter.eval(final_espression); 1235 } 1236 setErrorText(it.businesslogic.ireport.util.I18n.getString("ValidationOK", "Expression successfully validated."),false); 1237 1238 1239 } catch (CompilationFailedException ex) 1240 { 1241 setErrorText( ex.getMessage() , true); 1242 } catch (ParseException ex) 1243 { 1244 setErrorText(ex.getMessage() + "\n" + ex.getErrorText() + "\nLine: " + ex.getErrorLineNumber(), true ); 1245 1246 } catch (TargetError ex) 1247 { 1248 setErrorText(it.businesslogic.ireport.util.I18n.getString("ValidationOK", "Expression successfully validated."), true); 1250 1251 } catch (EvalError ex) 1252 { 1253 setErrorText(ex.getMessage() + "\n" + ex.getErrorText() + "\nLine: " + ex.getErrorLineNumber(), true ); 1254 } catch (IRParsingException ex) 1255 { 1256 setErrorText( ex.getMessage() , true); 1257 if (ex.getChunk() != null) 1258 { 1259 int pos = expression_to_validate.indexOf( ex.getChunk() ); 1260 if (pos >=0) 1261 { 1262 jEditTextArea1.setSelectionStart(pos); 1263 jEditTextArea1.setSelectionEnd(pos); 1264 jEditTextArea1.setSelectionEnd(pos + ex.getChunk().length()); 1265 } 1266 } 1267 } catch (Exception ex) 1268 { 1269 setErrorText(ex.getMessage(), true); 1270 ex.printStackTrace(); 1271 } 1272 1273 jTabbedPane1.setSelectedIndex(1); 1274 } 1275 1276 private String generateExpression(JRExpression expression, 1277 java.util.List paramsObjects, 1278 java.util.List fieldsObjects, 1279 java.util.List varsObjects) throws IRParsingException 1280 { 1281 net.sf.jasperreports.engine.JRParameter jrParameter = null; 1282 net.sf.jasperreports.engine.JRField jrField = null; 1283 net.sf.jasperreports.engine.JRVariable jrVariable = null; 1284 1285 StringBuffer sb = new StringBuffer (); 1286 1287 JRExpressionChunk[] chunks = expression.getChunks(); 1288 JRExpressionChunk chunk = null; 1289 String chunkText = null; 1290 if (chunks != null && chunks.length > 0) 1291 { 1292 for(int i = 0; i < chunks.length; i++) 1293 { 1294 chunk = chunks[i]; 1295 1296 chunkText = chunk.getText(); 1297 if (chunkText == null) 1298 { 1299 chunkText = ""; 1300 } 1301 1302 switch (chunk.getType()) 1303 { 1304 case JRExpressionChunk.TYPE_TEXT : 1305 { 1306 sb.append(chunkText); 1307 break; 1308 } 1309 case JRExpressionChunk.TYPE_PARAMETER : 1310 { 1311 JRParameter param = (JRParameter)getExpressionObject(chunkText, PARAMETER); 1313 1314 sb.append("(("); 1315 sb.append(param.getClassType()); 1316 sb.append(")"); 1317 String vname = "parameter_" + JRStringUtil.getLiteral(chunkText); 1318 sb.append(vname); 1319 paramsObjects.add(vname); 1320 sb.append(".getValue())"); 1321 1322 break; 1323 } 1324 case JRExpressionChunk.TYPE_FIELD : 1325 { 1326 JRField field = (JRField)getExpressionObject(chunkText, FIELD); 1327 1328 sb.append("(("); 1329 sb.append(field.getClassType()); 1330 sb.append(")"); 1331 String vname = "field_" + JRStringUtil.getLiteral(chunkText); 1332 sb.append(vname); 1333 fieldsObjects.add(vname); 1334 sb.append(".get"); 1335 sb.append("Value())"); 1337 1338 break; 1339 } 1340 case JRExpressionChunk.TYPE_VARIABLE : 1341 { 1342 JRVariable variable = (JRVariable)getExpressionObject(chunkText, VARIABLE); 1343 1344 sb.append("(("); 1345 sb.append(variable.getClassType()); 1346 sb.append(")"); 1347 String vname = "variable_" + JRStringUtil.getLiteral(chunkText); 1348 sb.append(vname); 1349 varsObjects.add(vname); 1350 sb.append(".get"); 1351 sb.append("Value())"); 1353 1354 break; 1355 } 1356 case JRExpressionChunk.TYPE_RESOURCE : 1357 { 1358 sb.append("str(\""); 1359 sb.append(chunkText); 1360 sb.append("\")"); 1361 1362 break; 1363 } 1364 } 1365 } 1366 } 1367 1368 if (sb.length() == 0) 1369 { 1370 sb.append("null"); 1371 } 1372 1373 return sb.toString(); 1374 } 1375 1376 private Object getExpressionObject(String name, int type) throws IRParsingException 1377 { 1378 if (name == null) throw new IRParsingException("Object not found!"); 1379 1380 SubDataset subDataset = getSubDataset(); 1381 if (getSubDataset() == null && getCrosstabElements().size() == 0) 1382 { 1383 subDataset = MainFrame.getMainInstance().getActiveReportFrame().getReport(); 1384 } 1385 1386 if (type == PARAMETER) 1387 { 1388 if (subDataset != null) 1389 { 1390 Enumeration e = subDataset.getParameters().elements(); 1391 while (e.hasMoreElements()) 1392 { 1393 JRParameter p = (JRParameter)e.nextElement(); 1394 if (p.getName().equals(name)) return p; 1395 } 1396 } 1397 1398 for (int k=0; k<crosstabElements.size(); ++k) 1400 { 1401 CrosstabReportElement cr = (CrosstabReportElement)crosstabElements.get(k); 1403 1404 for (int i=0; i<cr.getCrosstabParameters().size(); ++i) 1405 { 1406 CrosstabParameter parameter = (CrosstabParameter)cr.getCrosstabParameters().elementAt(i); 1407 if (name.equals( ""+parameter) ) 1408 { 1409 return new JRParameter(parameter.getName(), parameter.getClassType()); 1411 } 1412 } 1413 1415 } 1416 1418 throw new IRParsingException("Parameter " + name + " not found!", "$P{" + name + "}"); 1419 } 1420 else if (type == FIELD) 1421 { 1422 if (subDataset != null) 1423 { 1424 Enumeration e = subDataset.getFields().elements(); 1425 while (e.hasMoreElements()) 1426 { 1427 JRField p = (JRField)e.nextElement(); 1428 if (p.getName().equals(name)) return p; 1429 } 1430 } 1431 throw new IRParsingException("Field " + name + " not found!", "$F{" + name + "}"); 1433 } 1434 else if (type == VARIABLE) 1435 { 1436 if (subDataset != null) 1437 { 1438 Enumeration e = subDataset.getVariables().elements(); 1439 while (e.hasMoreElements()) 1440 { 1441 JRVariable p = (JRVariable)e.nextElement(); 1442 if (p.getName().equals(name)) return p; 1443 } 1444 } 1445 1446 for (int k=0; k<crosstabElements.size(); ++k) 1448 { 1449 CrosstabReportElement cr = (CrosstabReportElement)crosstabElements.get(k); 1451 Enumeration e = cr.getMeasures().elements(); 1452 while (e.hasMoreElements()) 1453 { 1454 Measure measure = (Measure)e.nextElement(); 1455 if (name.equals( measure.getName() )) 1456 { 1457 return new JRVariable(measure.getName(), measure.getClassType(),false); 1458 } 1459 1460 for (int j=0; j<cr.getRowGroups().size(); ++j) 1461 { 1462 CrosstabGroup group = (CrosstabGroup)cr.getRowGroups().elementAt(j); 1463 if (name.equals( ""+measure+"_"+group.getName()+"_"+"ALL")) 1464 { 1465 return new JRVariable(measure+"_"+group.getName(), group.getBucketExpressionClass(),false); 1467 } 1468 } 1469 for (int j=0; j<cr.getColumnGroups().size(); ++j) 1470 { 1471 CrosstabGroup group = (CrosstabGroup)cr.getColumnGroups().elementAt(j); 1472 if (name.equals( ""+group+"_"+group.getName()+"_"+"ALL")) 1473 { 1474 return new JRVariable(measure+"_"+group.getName(), group.getBucketExpressionClass(),false); 1476 } 1477 } 1478 } 1479 1480 for (int i=0; i<cr.getRowGroups().size(); ++i) 1481 { 1482 CrosstabGroup group = (CrosstabGroup)cr.getRowGroups().elementAt(i); 1483 if (name.equals( ""+group)) 1484 { 1485 return new JRVariable(""+group, group.getBucketExpressionClass(),false); 1487 } 1488 } 1489 1490 for (int i=0; i<cr.getColumnGroups().size(); ++i) 1491 { 1492 CrosstabGroup group = (CrosstabGroup)cr.getColumnGroups().elementAt(i); 1493 if (name.equals( ""+group)) 1494 { 1495 return new JRVariable(""+group, group.getBucketExpressionClass(),false); 1497 } 1498 } 1499 1500 1501 1503 } 1504 throw new IRParsingException("Variable " + name + " not found!", "$F{" + name + "}"); 1506 } 1507 1508 throw new IRParsingException("Object " + name + " not found!", name); 1509 } 1510 1511 public void setErrorText(String msg, boolean isError) 1512 { 1513 jTextPaneErrors.setText(""); 1514 try { 1515 doc.insertString(doc.getLength(), msg, (isError) ? errorStyle : okStyle); 1516 } catch (Exception ex){} 1517 } 1518 1519 1520 public java.util.List getAllObjects() 1521 { 1522 java.util.List list = new java.util.ArrayList (); 1523 if (getSubDataset() != null) 1524 { 1525 Enumeration e = getSubDataset().getFields().elements(); 1526 while (e.hasMoreElements()) 1527 { 1528 JRField f = (JRField)e.nextElement(); 1529 list.add(new ExpObject(f.getName(), ExpObject.TYPE_FIELD, f.getClassType() )); 1530 } 1531 1532 e = getSubDataset().getVariables().elements(); 1533 while (e.hasMoreElements()) 1534 { 1535 JRVariable f = (JRVariable)e.nextElement(); 1536 list.add(new ExpObject(f.getName(), ExpObject.TYPE_VARIABLE, f.getClassType() )); 1537 } 1538 1539 e = getSubDataset().getParameters().elements(); 1540 while (e.hasMoreElements()) 1541 { 1542 JRParameter f = (JRParameter)e.nextElement(); 1543 list.add(new ExpObject(f.getName(), ExpObject.TYPE_PARAM, f.getClassType() )); 1544 } 1545 } 1546 for (int ct=0; ct<getCrosstabElements().size(); ++ct) 1547 { 1548 CrosstabReportElement cr = (CrosstabReportElement)getCrosstabElements().get(ct); 1549 Enumeration e = cr.getMeasures().elements(); 1550 while (e.hasMoreElements()) 1551 { 1552 Measure measure = (Measure)e.nextElement(); 1553 list.add(new ExpObject(measure.getName(), ExpObject.TYPE_VARIABLE, measure.getClassType() )); 1554 1555 for (int j=0; j<cr.getRowGroups().size(); ++j) 1556 { 1557 CrosstabGroup group = (CrosstabGroup)cr.getRowGroups().elementAt(j); 1558 list.add(new ExpObject(measure.getName()+"_"+group.getName()+"_"+"ALL", ExpObject.TYPE_VARIABLE, measure.getClassType() )); 1559 } 1560 for (int j=0; j<cr.getColumnGroups().size(); ++j) 1561 { 1562 CrosstabGroup group = (CrosstabGroup)cr.getColumnGroups().elementAt(j); 1563 list.add(new ExpObject(measure.getName()+"_"+group.getName()+"_"+"ALL", ExpObject.TYPE_VARIABLE, measure.getClassType() )); 1564 } 1565 } 1566 1567 for (int i=0; i<cr.getRowGroups().size(); ++i) 1568 { 1569 CrosstabGroup group = (CrosstabGroup)cr.getRowGroups().elementAt(i); 1570 list.add(new ExpObject(group.getName(), ExpObject.TYPE_VARIABLE, group.getBucketExpressionClass() )); 1571 } 1572 1573 for (int i=0; i<cr.getColumnGroups().size(); ++i) 1574 { 1575 CrosstabGroup group = (CrosstabGroup)cr.getColumnGroups().elementAt(i); 1576 list.add(new ExpObject(group.getName(), ExpObject.TYPE_VARIABLE, group.getBucketExpressionClass() )); 1577 } 1578 1579 1580 for (int i=0; i<cr.getCrosstabParameters().size(); ++i) 1581 { 1582 CrosstabParameter parameter = (CrosstabParameter)cr.getCrosstabParameters().elementAt(i); 1583 list.add(new ExpObject(parameter.getName(), ExpObject.TYPE_PARAM, parameter.getClassType() )); 1584 } 1585 } 1586 1587 return list; 1588 } 1589 1590} 1591 1592 | Popular Tags |