1 32 33 package it.businesslogic.ireport.gui.expbuilder; 34 35 import com.sun.java.swing.SwingUtilities2; 36 import it.businesslogic.ireport.gui.sheet.Tag; 37 import it.businesslogic.ireport.util.I18n; 38 import it.businesslogic.ireport.util.Misc; 39 import java.awt.Component ; 40 import java.awt.Dialog ; 41 import java.awt.Frame ; 42 import java.awt.Window ; 43 import javax.swing.DefaultListModel ; 44 import javax.swing.JDialog ; 45 import javax.swing.JOptionPane ; 46 import javax.swing.SwingUtilities ; 47 48 52 public class ArithmeticOperationHelper extends javax.swing.JPanel { 53 54 JDialog dialog = null; 55 private String expression = null; 56 private String language = "java"; 57 private int dialogResult = JOptionPane.CANCEL_OPTION; 58 59 60 public ArithmeticOperationHelper() { 61 initComponents(); 62 applyI18n(); 63 jList1.setModel(new DefaultListModel ()); 64 jList2.setModel(new DefaultListModel ()); 65 66 jList1.setCellRenderer( new ExpObjectCellRenderer(jList1)); 67 jList2.setCellRenderer( new ExpObjectCellRenderer(jList2)); 68 69 70 jComboBoxType1.addItem( new Tag("auto", I18n.getString("autoType", "Automatic") )); 71 jComboBoxType1.addItem( new Tag("int", I18n.getString("intType", "Integer number (i.e. 123)") )); 72 jComboBoxType1.addItem( new Tag("double", I18n.getString("realType", "Real number (i.e. 123.456)") )); 73 74 jComboBoxType2.addItem( new Tag("auto", I18n.getString("autoType", "Automatic") )); 75 jComboBoxType2.addItem( new Tag("int", I18n.getString("intType", "Integer number (i.e. 123)") )); 76 jComboBoxType2.addItem( new Tag("double", I18n.getString("realType", "Real number (i.e. 123.456)") )); 77 78 jComboBoxReturnType.addItem(I18n.getString("autoType", "Automatic") ); 79 jComboBoxReturnType.addItem("BigDecimal"); 80 jComboBoxReturnType.addItem("BigInteger"); 81 jComboBoxReturnType.addItem("Byte"); 82 jComboBoxReturnType.addItem("Double"); 83 jComboBoxReturnType.addItem("Float"); 84 jComboBoxReturnType.addItem("Integer"); 85 jComboBoxReturnType.addItem("Long"); 86 jComboBoxReturnType.addItem("Short"); 87 88 updateAdvancedOptionsStatus(false); 89 } 90 91 public String getFinalReturnType() 92 { 93 jComboBoxReturnType.removeAllItems(); 94 if (jComboBoxType1.getSelectedIndex() == 0 && 95 jComboBoxType1.getSelectedIndex() == 0) 96 { 97 return "Integer"; 98 } 99 else 100 { 101 return "Double"; 102 } 103 } 104 105 106 107 public void setValues( java.util.List values ) 109 { 110 if (values == null) return; 111 int valids = 0; 112 113 for (int i=0; i<values.size(); ++i) 114 { 115 ExpObject obj = (ExpObject)values.get(i); 116 String type = obj.getClassType(); 117 if (type == null) continue; 118 119 if (type.equals( "java.lang.Number") || 120 type.equals( "java.lang.BigDecimal") || 121 type.equals( "java.lang.BigInteger") || 122 type.equals( "java.lang.Byte") || 123 type.equals( "java.lang.Double") || 124 type.equals( "java.lang.Float") || 125 type.equals( "java.lang.Integer") || 126 type.equals( "java.lang.Long") || 127 type.equals( "java.lang.Short") ) 128 { 129 ((DefaultListModel )jList1.getModel()).addElement(obj); 130 ((DefaultListModel )jList2.getModel()).addElement(obj); 131 valids++; 132 } 133 } 134 135 if (valids > 0) 136 { 137 jList1.setSelectedIndex(0); 138 jList2.setSelectedIndex(0); 139 } 140 } 141 142 public void setOperation(String op) 143 { 144 jComboBoxOperation.setSelectedItem(op); 145 } 146 150 public int showDialog(Component c) 151 { 152 Window topLevel = null; 153 if (c != null) 154 { 155 topLevel = SwingUtilities.getWindowAncestor(c); 156 } 157 158 if (topLevel == null) 159 { 160 dialog = new JDialog (); 161 dialog.setModal(true); 162 } 163 else if (topLevel instanceof Frame ) { 164 dialog = new JDialog ((Frame )topLevel, true); 165 } 166 else if (topLevel instanceof Dialog ) { 167 dialog = new JDialog ((Dialog )topLevel, true); 168 } 169 170 dialog.getContentPane().add(this); 171 dialog.setDefaultCloseOperation( dialog.DISPOSE_ON_CLOSE ); 172 173 dialog.setTitle("Arithmetic operation" ); 174 dialog.pack(); 175 Misc.centerFrame(dialog); 176 177 dialog.setVisible(true); 178 179 return getDialogResult(); 180 } 181 182 187 private void initComponents() { 189 java.awt.GridBagConstraints gridBagConstraints; 190 191 jPanelValue1 = new javax.swing.JPanel (); 192 jLabel1 = new javax.swing.JLabel (); 193 jScrollPane1 = new javax.swing.JScrollPane (); 194 jList1 = new javax.swing.JList (); 195 jLabelAdv1 = new javax.swing.JLabel (); 196 jComboBoxType1 = new javax.swing.JComboBox (); 197 jComboBoxOperation = new javax.swing.JComboBox (); 198 jPanelValue2 = new javax.swing.JPanel (); 199 jLabel2 = new javax.swing.JLabel (); 200 jScrollPane2 = new javax.swing.JScrollPane (); 201 jList2 = new javax.swing.JList (); 202 jLabelAdv2 = new javax.swing.JLabel (); 203 jComboBoxType2 = new javax.swing.JComboBox (); 204 jPanelReturnType = new javax.swing.JPanel (); 205 jSeparator2 = new javax.swing.JSeparator (); 206 jLabelReturnType = new javax.swing.JLabel (); 207 jComboBoxReturnType = new javax.swing.JComboBox (); 208 jSeparator1 = new javax.swing.JSeparator (); 209 jPanel1 = new javax.swing.JPanel (); 210 jToggleButton1 = new javax.swing.JToggleButton (); 211 jButtonOk = new javax.swing.JButton (); 212 jButtonCancel = new javax.swing.JButton (); 213 214 setLayout(new java.awt.GridBagLayout ()); 215 216 setMinimumSize(new java.awt.Dimension (500, 300)); 217 setPreferredSize(new java.awt.Dimension (673, 300)); 218 jPanelValue1.setLayout(new java.awt.GridBagLayout ()); 219 220 jLabel1.setText("Value 1"); 221 gridBagConstraints = new java.awt.GridBagConstraints (); 222 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 223 gridBagConstraints.insets = new java.awt.Insets (4, 4, 0, 4); 224 jPanelValue1.add(jLabel1, gridBagConstraints); 225 226 jList1.addListSelectionListener(new javax.swing.event.ListSelectionListener () { 227 public void valueChanged(javax.swing.event.ListSelectionEvent evt) { 228 jList1ValueChanged(evt); 229 } 230 }); 231 232 jScrollPane1.setViewportView(jList1); 233 234 gridBagConstraints = new java.awt.GridBagConstraints (); 235 gridBagConstraints.gridx = 0; 236 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 237 gridBagConstraints.weightx = 1.0; 238 gridBagConstraints.weighty = 1.0; 239 gridBagConstraints.insets = new java.awt.Insets (0, 4, 4, 4); 240 jPanelValue1.add(jScrollPane1, gridBagConstraints); 241 242 jLabelAdv1.setText("Consider this number as:"); 243 gridBagConstraints = new java.awt.GridBagConstraints (); 244 gridBagConstraints.gridx = 0; 245 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 246 gridBagConstraints.insets = new java.awt.Insets (0, 4, 0, 4); 247 jPanelValue1.add(jLabelAdv1, gridBagConstraints); 248 249 gridBagConstraints = new java.awt.GridBagConstraints (); 250 gridBagConstraints.gridx = 0; 251 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 252 gridBagConstraints.insets = new java.awt.Insets (0, 4, 4, 4); 253 jPanelValue1.add(jComboBoxType1, gridBagConstraints); 254 255 gridBagConstraints = new java.awt.GridBagConstraints (); 256 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 257 gridBagConstraints.weightx = 1.0; 258 gridBagConstraints.weighty = 1.0; 259 add(jPanelValue1, gridBagConstraints); 260 261 jComboBoxOperation.setModel(new javax.swing.DefaultComboBoxModel (new String [] { "+", "-", "/", "*" })); 262 jComboBoxOperation.setMinimumSize(new java.awt.Dimension (50, 18)); 263 jComboBoxOperation.setPreferredSize(new java.awt.Dimension (50, 22)); 264 gridBagConstraints = new java.awt.GridBagConstraints (); 265 gridBagConstraints.gridx = 1; 266 add(jComboBoxOperation, gridBagConstraints); 267 268 jPanelValue2.setLayout(new java.awt.GridBagLayout ()); 269 270 jLabel2.setText("Value 2"); 271 gridBagConstraints = new java.awt.GridBagConstraints (); 272 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 273 gridBagConstraints.insets = new java.awt.Insets (4, 4, 0, 4); 274 jPanelValue2.add(jLabel2, gridBagConstraints); 275 276 jList2.addListSelectionListener(new javax.swing.event.ListSelectionListener () { 277 public void valueChanged(javax.swing.event.ListSelectionEvent evt) { 278 jList2ValueChanged(evt); 279 } 280 }); 281 282 jScrollPane2.setViewportView(jList2); 283 284 gridBagConstraints = new java.awt.GridBagConstraints (); 285 gridBagConstraints.gridx = 0; 286 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 287 gridBagConstraints.weightx = 1.0; 288 gridBagConstraints.weighty = 1.0; 289 gridBagConstraints.insets = new java.awt.Insets (0, 4, 4, 4); 290 jPanelValue2.add(jScrollPane2, gridBagConstraints); 291 292 jLabelAdv2.setText("Consider this number as:"); 293 gridBagConstraints = new java.awt.GridBagConstraints (); 294 gridBagConstraints.gridx = 0; 295 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 296 gridBagConstraints.insets = new java.awt.Insets (0, 4, 0, 4); 297 jPanelValue2.add(jLabelAdv2, gridBagConstraints); 298 299 gridBagConstraints = new java.awt.GridBagConstraints (); 300 gridBagConstraints.gridx = 0; 301 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 302 gridBagConstraints.insets = new java.awt.Insets (0, 4, 4, 4); 303 jPanelValue2.add(jComboBoxType2, gridBagConstraints); 304 305 gridBagConstraints = new java.awt.GridBagConstraints (); 306 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 307 gridBagConstraints.weightx = 1.0; 308 gridBagConstraints.weighty = 1.0; 309 add(jPanelValue2, gridBagConstraints); 310 311 jPanelReturnType.setLayout(new java.awt.GridBagLayout ()); 312 313 jSeparator2.setMinimumSize(new java.awt.Dimension (2, 2)); 314 jSeparator2.setPreferredSize(new java.awt.Dimension (2, 2)); 315 gridBagConstraints = new java.awt.GridBagConstraints (); 316 gridBagConstraints.gridx = 0; 317 gridBagConstraints.gridwidth = 3; 318 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 319 jPanelReturnType.add(jSeparator2, gridBagConstraints); 320 321 jLabelReturnType.setText("Return type:"); 322 gridBagConstraints = new java.awt.GridBagConstraints (); 323 gridBagConstraints.gridy = 1; 324 gridBagConstraints.insets = new java.awt.Insets (4, 4, 4, 4); 325 jPanelReturnType.add(jLabelReturnType, gridBagConstraints); 326 327 jComboBoxReturnType.setMinimumSize(new java.awt.Dimension (200, 18)); 328 jComboBoxReturnType.setPreferredSize(new java.awt.Dimension (200, 22)); 329 gridBagConstraints = new java.awt.GridBagConstraints (); 330 gridBagConstraints.gridy = 1; 331 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 332 gridBagConstraints.weightx = 1.0; 333 gridBagConstraints.insets = new java.awt.Insets (4, 0, 4, 4); 334 jPanelReturnType.add(jComboBoxReturnType, gridBagConstraints); 335 336 gridBagConstraints = new java.awt.GridBagConstraints (); 337 gridBagConstraints.gridx = 0; 338 gridBagConstraints.gridwidth = 3; 339 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 340 gridBagConstraints.weightx = 1.0; 341 add(jPanelReturnType, gridBagConstraints); 342 343 jSeparator1.setMinimumSize(new java.awt.Dimension (2, 2)); 344 jSeparator1.setPreferredSize(new java.awt.Dimension (2, 2)); 345 gridBagConstraints = new java.awt.GridBagConstraints (); 346 gridBagConstraints.gridx = 0; 347 gridBagConstraints.gridwidth = 3; 348 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 349 add(jSeparator1, gridBagConstraints); 350 351 jPanel1.setLayout(new java.awt.GridBagLayout ()); 352 353 jToggleButton1.setText("Advanced options"); 354 jToggleButton1.addActionListener(new java.awt.event.ActionListener () { 355 public void actionPerformed(java.awt.event.ActionEvent evt) { 356 jToggleButton1ActionPerformed(evt); 357 } 358 }); 359 360 gridBagConstraints = new java.awt.GridBagConstraints (); 361 gridBagConstraints.insets = new java.awt.Insets (0, 0, 0, 4); 362 jPanel1.add(jToggleButton1, gridBagConstraints); 363 364 jButtonOk.setText("Ok"); 365 jButtonOk.setActionCommand("OK"); 366 jButtonOk.addActionListener(new java.awt.event.ActionListener () { 367 public void actionPerformed(java.awt.event.ActionEvent evt) { 368 jButtonOkActionPerformed(evt); 369 } 370 }); 371 372 gridBagConstraints = new java.awt.GridBagConstraints (); 373 gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; 374 gridBagConstraints.weightx = 1.0; 375 jPanel1.add(jButtonOk, gridBagConstraints); 376 377 jButtonCancel.setText("Cancel"); 378 jButtonCancel.addActionListener(new java.awt.event.ActionListener () { 379 public void actionPerformed(java.awt.event.ActionEvent evt) { 380 jButtonCancelActionPerformed(evt); 381 } 382 }); 383 384 gridBagConstraints = new java.awt.GridBagConstraints (); 385 gridBagConstraints.insets = new java.awt.Insets (0, 4, 0, 0); 386 jPanel1.add(jButtonCancel, gridBagConstraints); 387 388 gridBagConstraints = new java.awt.GridBagConstraints (); 389 gridBagConstraints.gridx = 0; 390 gridBagConstraints.gridwidth = 3; 391 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 392 gridBagConstraints.insets = new java.awt.Insets (4, 4, 4, 4); 393 add(jPanel1, gridBagConstraints); 394 395 } 397 private void jList2ValueChanged(javax.swing.event.ListSelectionEvent evt) { 399 } 401 private void jButtonOkActionPerformed(java.awt.event.ActionEvent evt) { 403 String exp = ""; 404 if (jList1.getSelectedIndex() < 0) 405 { 406 JOptionPane.showMessageDialog(this, I18n.getString("ArithmeticOperationHelper.msg1","Please select an object in the first list")); 407 return; 408 } 409 else if (jList1.getSelectedIndex() < 0) 410 { 411 JOptionPane.showMessageDialog(this, I18n.getString("ArithmeticOperationHelper.msg2","Please select an object from the second list")); 412 return; 413 } 414 415 416 ExpObject expObj1 = (ExpObject)jList1.getSelectedValue(); 417 ExpObject expObj2 = (ExpObject)jList1.getSelectedValue(); 418 419 if (getLanguage().equals("groovy")) 420 { 421 this.setExpression( expObj1.getExpression() + " " + jComboBoxOperation.getSelectedItem() + " " + expObj2.getExpression() ); 422 } 423 else 424 { 425 exp = expObj1.getExpression(); 426 427 if (jComboBoxType1.getSelectedIndex() == 0) 428 { 429 String type = expObj1.getClassType(); 430 if (type.equals( "java.lang.Number")) exp +=".doubleValue()"; 431 if (type.equals( "java.lang.BigDecimal")) exp +=".doubleValue()"; 432 if (type.equals( "java.lang.BigInteger")) exp +=".longValue()"; 433 if (type.equals( "java.lang.Byte")) exp +=".byteValue()"; 434 if (type.equals( "java.lang.Double")) exp +=".doubleValue()"; 435 if (type.equals( "java.lang.Float")) exp +=".floatValue()"; 436 if (type.equals( "java.lang.Integer")) exp +=".intValue()"; 437 if (type.equals( "java.lang.Long")) exp +=".longValue()"; 438 if (type.equals( "java.lang.Short")) exp +=".shortValue()"; 439 } 440 else if (jComboBoxType1.getSelectedIndex() == 1) 441 { 442 exp +=".intValue()"; 443 } 444 else if (jComboBoxType1.getSelectedIndex() == 2) 445 { 446 exp +=".doubleValue()"; 447 } 448 449 exp = " (" + exp + ") " + jComboBoxOperation.getSelectedItem(); 450 451 452 exp += "(" + expObj2.getExpression(); 453 454 if (jComboBoxType2.getSelectedIndex() == 0) 455 { 456 String type = expObj2.getClassType(); 457 if (type.equals( "java.lang.Number")) exp +=".doubleValue()"; 458 if (type.equals( "java.lang.BigDecimal")) exp +=".doubleValue()"; 459 if (type.equals( "java.lang.BigInteger")) exp +=".longValue()"; 460 if (type.equals( "java.lang.Byte")) exp +=".byteValue()"; 461 if (type.equals( "java.lang.Double")) exp +=".doubleValue()"; 462 if (type.equals( "java.lang.Float")) exp +=".floatValue()"; 463 if (type.equals( "java.lang.Integer")) exp +=".intValue()"; 464 if (type.equals( "java.lang.Long")) exp +=".longValue()"; 465 if (type.equals( "java.lang.Short")) exp +=".shortValue()"; 466 } 467 else if (jComboBoxType2.getSelectedIndex() == 1) 468 { 469 exp +=".intValue()"; 470 } 471 else if (jComboBoxType2.getSelectedIndex() == 2) 472 { 473 exp +=".doubleValue()"; 474 } 475 476 exp +=")"; 477 478 if (jComboBoxReturnType.getSelectedIndex() != 0) 479 { 480 481 exp = "new " + jComboBoxReturnType.getSelectedItem() + "( " + exp + " )"; 482 } 483 else if (expObj2.getClassType().equals( expObj1.getClassType()) && 484 !expObj2.getClassType().equals("java.lang.Number")) 485 { 486 exp = "new " + expObj2.getClassType() + "( " + exp + " )"; 487 } 488 else 489 { 490 if (isInteger(expObj2.getClassType()) && isInteger(expObj1.getClassType())) 491 { 492 exp = "new Integer( " + exp + " )"; 493 } 494 else 495 { 496 exp = "new Double( " + exp + " )"; 497 } 498 } 499 500 501 this.setExpression( exp ); 502 } 503 504 505 this.setDialogResult( JOptionPane.OK_OPTION); 506 this.dialog.setVisible(false); 507 this.dialog.dispose(); 508 509 510 } 512 private boolean isInteger(String type) 513 { 514 if (type.equals( "java.lang.Number")) return true; 515 if (type.equals( "java.lang.BigInteger")) return true; 516 if (type.equals( "java.lang.Byte")) return true; 517 if (type.equals( "java.lang.Integer")) return true; 518 if (type.equals( "java.lang.Long")) return true; 519 if (type.equals( "java.lang.Short")) return true; 520 521 return false; 522 } 523 524 private void jButtonCancelActionPerformed(java.awt.event.ActionEvent evt) { 526 if (dialog != null) 527 { 528 dialog.setVisible(false); 529 dialog.dispose(); 530 } 531 532 } 534 private void jList1ValueChanged(javax.swing.event.ListSelectionEvent evt) { 536 537 } 539 private void jToggleButton1ActionPerformed(java.awt.event.ActionEvent evt) { 541 updateAdvancedOptionsStatus( jToggleButton1.isSelected() ); 542 543 } 545 546 private javax.swing.JButton jButtonCancel; 548 private javax.swing.JButton jButtonOk; 549 private javax.swing.JComboBox jComboBoxOperation; 550 private javax.swing.JComboBox jComboBoxReturnType; 551 private javax.swing.JComboBox jComboBoxType1; 552 private javax.swing.JComboBox jComboBoxType2; 553 private javax.swing.JLabel jLabel1; 554 private javax.swing.JLabel jLabel2; 555 private javax.swing.JLabel jLabelAdv1; 556 private javax.swing.JLabel jLabelAdv2; 557 private javax.swing.JLabel jLabelReturnType; 558 private javax.swing.JList jList1; 559 private javax.swing.JList jList2; 560 private javax.swing.JPanel jPanel1; 561 private javax.swing.JPanel jPanelReturnType; 562 private javax.swing.JPanel jPanelValue1; 563 private javax.swing.JPanel jPanelValue2; 564 private javax.swing.JScrollPane jScrollPane1; 565 private javax.swing.JScrollPane jScrollPane2; 566 private javax.swing.JSeparator jSeparator1; 567 private javax.swing.JSeparator jSeparator2; 568 private javax.swing.JToggleButton jToggleButton1; 569 571 572 public void updateAdvancedOptionsStatus(boolean b) 573 { 574 jPanelReturnType.setVisible(b); 575 jLabelAdv1.setVisible(b); 576 jLabelAdv2.setVisible(b); 577 jComboBoxType1.setVisible(b); 578 jComboBoxType2.setVisible(b); 579 580 if (b) 581 { 582 jToggleButton1.setText( I18n.getString("FewerOptions", "Fewer options")); 583 } 584 else 585 { 586 jToggleButton1.setText( I18n.getString("MoreOptions", "More options")); 587 } 588 } 589 590 public int getDialogResult() { 591 return dialogResult; 592 } 593 594 public void setDialogResult(int dialogResult) { 595 this.dialogResult = dialogResult; 596 } 597 598 public String getExpression() { 599 return expression; 600 } 601 602 public void setExpression(String expression) { 603 this.expression = expression; 604 } 605 606 public String getLanguage() { 607 return language; 608 } 609 610 public void setLanguage(String language) { 611 this.language = language; 612 } 613 614 public JDialog getDialog() { 615 return dialog; 616 } 617 618 public void setDialog(JDialog dialog) { 619 this.dialog = dialog; 620 } 621 622 623 public void applyI18n(){ 624 jButtonCancel.setText(I18n.getString("arithmeticOperationHelper.buttonCancel","Cancel")); 626 jButtonOk.setText(I18n.getString("arithmeticOperationHelper.buttonOk","Ok")); 627 jLabel1.setText(I18n.getString("arithmeticOperationHelper.label1","Value 1")); 628 jLabel2.setText(I18n.getString("arithmeticOperationHelper.label2","Value 2")); 629 jLabelAdv1.setText(I18n.getString("arithmeticOperationHelper.labelAdv1","Consider this number as:")); 630 jLabelAdv2.setText(I18n.getString("arithmeticOperationHelper.labelAdv2","Consider this number as:")); 631 jLabelReturnType.setText(I18n.getString("arithmeticOperationHelper.labelReturnType","Return type:")); 632 } 634 } 635 | Popular Tags |