1 32 33 package it.businesslogic.ireport.crosstab.gui; 34 35 import it.businesslogic.ireport.CrosstabReportElement; 36 import it.businesslogic.ireport.crosstab.CrosstabColumnGroup; 37 import it.businesslogic.ireport.crosstab.CrosstabGroup; 38 import it.businesslogic.ireport.crosstab.CrosstabParameter; 39 import it.businesslogic.ireport.crosstab.CrosstabRowGroup; 40 import it.businesslogic.ireport.crosstab.GroupTotal; 41 import it.businesslogic.ireport.crosstab.Measure; 42 import it.businesslogic.ireport.gui.MainFrame; 43 import it.businesslogic.ireport.gui.docking.GenericDragTargetListener; 44 import it.businesslogic.ireport.gui.event.CrosstabLayoutChangedEvent; 45 import it.businesslogic.ireport.gui.library.LibraryTreeCellRenderer; 46 import it.businesslogic.ireport.gui.library.TreeTransfertHandler; 47 import java.awt.dnd.DropTarget ; 48 import javax.swing.tree.DefaultMutableTreeNode ; 49 import javax.swing.tree.DefaultTreeModel ; 50 import javax.swing.tree.TreePath ; 51 import it.businesslogic.ireport.util.I18n; 52 53 57 public class CrosstabMeasuresView extends javax.swing.JPanel implements it.businesslogic.ireport.gui.event.CrosstabLayoutChangedListener { 58 59 60 private CrosstabReportElement crosstabReportElement = null; 61 62 63 64 public CrosstabMeasuresView() { 65 initComponents(); 66 67 DefaultMutableTreeNode root = new DefaultMutableTreeNode ("measures"); 68 69 DefaultTreeModel dtm = new DefaultTreeModel (root); 70 71 jTree.setModel( dtm ); 72 jTree.setDragEnabled(true); 73 jTree.setRootVisible( false ); 74 jTree.setTransferHandler(new TreeTransfertHandler()); 75 jTree.setCellRenderer( new LibraryTreeCellRenderer() ); 76 jTree.expandPath( new TreePath (root)); 77 78 jTree.setDropTarget(new DropTarget (this, new GenericDragTargetListener())); 79 80 } 81 82 public CrosstabReportElement getCrosstabReportElement() { 83 return crosstabReportElement; 84 } 85 86 public void setCrosstabReportElement(CrosstabReportElement crosstabReportElement) { 87 88 if (this.crosstabReportElement != null && this.crosstabReportElement != crosstabReportElement) 90 { 91 this.crosstabReportElement.removeCrosstabLayoutChangedListener( this ); 92 } 93 94 if (crosstabReportElement != null && this.crosstabReportElement != crosstabReportElement) 96 { 97 crosstabReportElement.addCrosstabLayoutChangedListener( this ); 98 } 99 100 this.crosstabReportElement = crosstabReportElement; 101 102 DefaultMutableTreeNode root = (DefaultMutableTreeNode )jTree.getModel().getRoot(); 103 root.removeAllChildren(); 104 105 if (crosstabReportElement != null) 106 { 107 108 109 for (int i=0; i<crosstabReportElement.getRowGroups().size(); ++i) 110 { 111 CrosstabGroup group = (CrosstabGroup)crosstabReportElement.getRowGroups().elementAt(i); 112 root.add(new DefaultMutableTreeNode ( group )); 113 } 114 115 for (int i=0; i<crosstabReportElement.getColumnGroups().size(); ++i) 116 { 117 CrosstabGroup group = (CrosstabGroup)crosstabReportElement.getColumnGroups().elementAt(i); 118 root.add(new DefaultMutableTreeNode ( group )); 119 } 120 121 for (int i=0; i<crosstabReportElement.getMeasures().size(); ++i) 122 { 123 Measure measure = (Measure)crosstabReportElement.getMeasures().elementAt(i); 124 root.add(new DefaultMutableTreeNode ( measure )); 125 for (int j=0; j<crosstabReportElement.getRowGroups().size(); ++j) 126 { 127 CrosstabGroup group = (CrosstabGroup)crosstabReportElement.getRowGroups().elementAt(j); 128 root.add(new DefaultMutableTreeNode ( new GroupTotal(measure.getName(), group.getName(), measure.getClassType()))); 129 } 130 for (int j=0; j<crosstabReportElement.getColumnGroups().size(); ++j) 131 { 132 CrosstabGroup group = (CrosstabGroup)crosstabReportElement.getColumnGroups().elementAt(j); 133 root.add(new DefaultMutableTreeNode ( new GroupTotal(measure.getName(), group.getName(), measure.getClassType()))); 134 } 135 } 136 137 for (int i=0; i<crosstabReportElement.getCrosstabParameters().size(); ++i) 138 { 139 CrosstabParameter parameter = (CrosstabParameter)crosstabReportElement.getCrosstabParameters().elementAt(i); 140 root.add(new DefaultMutableTreeNode ( parameter )); 141 } 142 143 } 144 145 jTree.expandPath( new TreePath (root)); 146 jTree.updateUI(); 147 } 148 149 154 private void initComponents() { 156 jPopupMenuMeasures = new javax.swing.JPopupMenu (); 157 jMenuItemEditMeasure = new javax.swing.JMenuItem (); 158 jSeparator4 = new javax.swing.JSeparator (); 159 jMenuItemNewMeasure = new javax.swing.JMenuItem (); 160 jSeparator3 = new javax.swing.JSeparator (); 161 jMenuItemCrosstabProperties = new javax.swing.JMenuItem (); 162 jSeparator1 = new javax.swing.JSeparator (); 163 jMenuItemCut = new javax.swing.JMenuItem (); 164 jMenuItemCopy = new javax.swing.JMenuItem (); 165 jMenuItemPaste = new javax.swing.JMenuItem (); 166 jMenuItemDelete = new javax.swing.JMenuItem (); 167 jSeparator2 = new javax.swing.JSeparator (); 168 jMenuItemRefresh = new javax.swing.JMenuItem (); 169 jScrollPane1 = new javax.swing.JScrollPane (); 170 jTree = new javax.swing.JTree (); 171 172 jPopupMenuMeasures.addPopupMenuListener(new javax.swing.event.PopupMenuListener () { 173 public void popupMenuCanceled(javax.swing.event.PopupMenuEvent evt) { 174 } 175 public void popupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent evt) { 176 } 177 public void popupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent evt) { 178 jPopupMenuMeasuresPopupMenuWillBecomeVisible(evt); 179 } 180 }); 181 182 jMenuItemEditMeasure.setIcon(new javax.swing.ImageIcon ("")); 183 jMenuItemEditMeasure.setText("Edit"); 184 jMenuItemEditMeasure.setActionCommand("Modify measure"); 185 jMenuItemEditMeasure.setEnabled(false); 186 jMenuItemEditMeasure.addActionListener(new java.awt.event.ActionListener () { 187 public void actionPerformed(java.awt.event.ActionEvent evt) { 188 jMenuItemEditMeasureActionPerformed(evt); 189 } 190 }); 191 192 jPopupMenuMeasures.add(jMenuItemEditMeasure); 193 194 jPopupMenuMeasures.add(jSeparator4); 195 196 jMenuItemNewMeasure.setIcon(new javax.swing.ImageIcon ("")); 197 jMenuItemNewMeasure.setText("New measure"); 198 jMenuItemNewMeasure.addActionListener(new java.awt.event.ActionListener () { 199 public void actionPerformed(java.awt.event.ActionEvent evt) { 200 jMenuItemNewMeasureActionPerformed(evt); 201 } 202 }); 203 204 jPopupMenuMeasures.add(jMenuItemNewMeasure); 205 206 jPopupMenuMeasures.add(jSeparator3); 207 208 jMenuItemCrosstabProperties.setIcon(new javax.swing.ImageIcon ("")); 209 jMenuItemCrosstabProperties.setText("Crosstab properties"); 210 jMenuItemCrosstabProperties.addActionListener(new java.awt.event.ActionListener () { 211 public void actionPerformed(java.awt.event.ActionEvent evt) { 212 jMenuItemEditActionPerformed1(evt); 213 } 214 }); 215 216 jPopupMenuMeasures.add(jMenuItemCrosstabProperties); 217 218 jPopupMenuMeasures.add(jSeparator1); 219 220 jMenuItemCut.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/cut.png"))); 221 jMenuItemCut.setText("Cut"); 222 jMenuItemCut.setEnabled(false); 223 jMenuItemCut.addActionListener(new java.awt.event.ActionListener () { 224 public void actionPerformed(java.awt.event.ActionEvent evt) { 225 jMenuItemCutActionPerformed(evt); 226 } 227 }); 228 229 jPopupMenuMeasures.add(jMenuItemCut); 230 231 jMenuItemCopy.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/copy.png"))); 232 jMenuItemCopy.setText("Copy"); 233 jMenuItemCopy.setEnabled(false); 234 jMenuItemCopy.addActionListener(new java.awt.event.ActionListener () { 235 public void actionPerformed(java.awt.event.ActionEvent evt) { 236 jMenuItemCopyActionPerformed(evt); 237 } 238 }); 239 240 jPopupMenuMeasures.add(jMenuItemCopy); 241 242 jMenuItemPaste.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/paste.png"))); 243 jMenuItemPaste.setText("Paste"); 244 jMenuItemPaste.setEnabled(false); 245 jMenuItemPaste.addActionListener(new java.awt.event.ActionListener () { 246 public void actionPerformed(java.awt.event.ActionEvent evt) { 247 jMenuItemPasteActionPerformed(evt); 248 } 249 }); 250 251 jPopupMenuMeasures.add(jMenuItemPaste); 252 253 jMenuItemDelete.setIcon(new javax.swing.ImageIcon (getClass().getResource("/it/businesslogic/ireport/icons/menu/delete.png"))); 254 jMenuItemDelete.setText("Delete"); 255 jMenuItemDelete.setEnabled(false); 256 jMenuItemDelete.addActionListener(new java.awt.event.ActionListener () { 257 public void actionPerformed(java.awt.event.ActionEvent evt) { 258 jMenuItemDeleteActionPerformed(evt); 259 } 260 }); 261 262 jPopupMenuMeasures.add(jMenuItemDelete); 263 264 jPopupMenuMeasures.add(jSeparator2); 265 266 jMenuItemRefresh.setText("Refresh"); 267 jMenuItemRefresh.addActionListener(new java.awt.event.ActionListener () { 268 public void actionPerformed(java.awt.event.ActionEvent evt) { 269 jMenuItemRefreshActionPerformed(evt); 270 } 271 }); 272 273 jPopupMenuMeasures.add(jMenuItemRefresh); 274 275 setLayout(new java.awt.BorderLayout ()); 276 277 jTree.addMouseListener(new java.awt.event.MouseAdapter () { 278 public void mouseClicked(java.awt.event.MouseEvent evt) { 279 jTreeMouseClicked(evt); 280 } 281 }); 282 283 jScrollPane1.setViewportView(jTree); 284 285 add(jScrollPane1, java.awt.BorderLayout.CENTER); 286 287 } 289 private void jTreeMouseClicked(java.awt.event.MouseEvent evt) { 291 if (evt.getClickCount() == 1 && evt.getButton() == evt.BUTTON3) 292 { 293 jPopupMenuMeasures.show(jTree, evt.getX(), evt.getY()); 294 } 295 else if (evt.getClickCount() == 2 && evt.getButton() == evt.BUTTON1) 296 { 297 jMenuItemEditMeasureActionPerformed(null); 298 } 299 } 301 private void jMenuItemEditActionPerformed1(java.awt.event.ActionEvent evt) { it.businesslogic.ireport.crosstab.gui.CrosstabPropertiesDialog cpd = new it.businesslogic.ireport.crosstab.gui.CrosstabPropertiesDialog(MainFrame.getMainInstance(),true); 303 cpd.setCurrentCrosstabReportElement( getCrosstabReportElement()); 304 cpd.setVisible(true); 305 } 307 private void jPopupMenuMeasuresPopupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent evt) { 309 jMenuItemNewMeasure.setEnabled( true ); 310 jMenuItemRefresh.setEnabled( true ); 311 312 TreePath [] paths = jTree.getSelectionPaths(); 314 315 if (paths == null || paths.length == 0) { 316 jMenuItemCut.setEnabled(false); 317 jMenuItemCopy.setEnabled(false); 318 jMenuItemDelete.setEnabled(false); 319 jMenuItemPaste.setEnabled(false); 320 jMenuItemEditMeasure.setEnabled(false); 321 return; 322 } 323 324 if (paths.length == 1 && 325 paths[0].getLastPathComponent() instanceof DefaultMutableTreeNode && 326 ( (((DefaultMutableTreeNode )paths[0].getLastPathComponent()).getUserObject() instanceof Measure )) || 327 ( (((DefaultMutableTreeNode )paths[0].getLastPathComponent()).getUserObject() instanceof CrosstabGroup ))) { 328 jMenuItemEditMeasure.setEnabled(true); 329 jMenuItemCut.setEnabled(true); 330 jMenuItemCopy.setEnabled(true); 331 jMenuItemDelete.setEnabled(true); 332 } else { 333 jMenuItemEditMeasure.setEnabled( false ); 334 jMenuItemCut.setEnabled(false); 335 jMenuItemCopy.setEnabled(false); 336 jMenuItemDelete.setEnabled(false); 337 } 338 339 jMenuItemPaste.setEnabled(false); 340 341 if (MainFrame.getMainInstance().getMeasuresClipBoard().size() > 0) 342 { 343 jMenuItemPaste.setEnabled(true); 344 } 345 346 } 348 private void jMenuItemRefreshActionPerformed(java.awt.event.ActionEvent evt) { this.setCrosstabReportElement(this.crosstabReportElement); 350 } 352 private void jMenuItemDeleteActionPerformed(java.awt.event.ActionEvent evt) { TreePath [] paths = jTree.getSelectionPaths(); 354 355 for (int i=0; i<paths.length; ++i) 356 { 357 try { 358 if (paths[i].getLastPathComponent() instanceof DefaultMutableTreeNode ) { 359 Object obj = ((DefaultMutableTreeNode )paths[i].getLastPathComponent()).getUserObject(); 360 if (obj instanceof Measure ) { 361 if (getCrosstabReportElement().getMeasures().size() > 0) 362 { 363 getCrosstabReportElement().removeMeasure((Measure)obj); 364 } 365 } 366 } 367 } catch (Exception ex) { 368 ex.printStackTrace(); 369 } 370 } 371 } 373 private void jMenuItemPasteActionPerformed(java.awt.event.ActionEvent evt) { TreePath [] paths = jTree.getSelectionPaths(); 375 376 if (paths.length == 1) { 377 if (paths[0].getLastPathComponent() instanceof DefaultMutableTreeNode ) { 378 379 for (int i=0; i< MainFrame.getMainInstance().getMeasuresClipBoard().size(); ++i) 380 { 381 Measure measure = (Measure)MainFrame.getMainInstance().getMeasuresClipBoard().elementAt(i); 382 measure = measure.cloneMe(); 383 384 String base_name = measure.getName(); 386 java.util.Vector measures = getCrosstabReportElement().getMeasures(); 387 388 for (int j = 0;; ++j) 389 { 390 391 boolean found = false; 392 393 for (int k = 0; k < measures.size(); ++k) 394 { 395 396 Measure measure1 = (Measure) measures.elementAt( 397 k); 398 399 if (j == 0) 400 { 401 402 if (measure1.getName().equals(base_name)) 403 { 404 found = true; 405 406 break; 407 } 408 } 409 else 410 { 411 412 if (measure1.getName().equals(base_name + "_" + j)) 413 { 414 found = true; 415 416 break; 417 } 418 } 419 } 420 421 if (!found) 422 { 423 measure.setName(base_name + 424 ((j == 0) 425 ? "" 426 : "_" + j)); 427 428 break; 429 } 430 } 431 433 getCrosstabReportElement().addMeasure(measure); 434 } 435 } 436 } 437 } 439 private void jMenuItemCopyActionPerformed(java.awt.event.ActionEvent evt) { TreePath [] paths = jTree.getSelectionPaths(); 441 442 boolean clearedMeasuresClipboard = false; 443 444 for (int i=0; i<paths.length; ++i) { 445 446 if (paths[i].getLastPathComponent() instanceof DefaultMutableTreeNode ) { 447 Object obj = ((DefaultMutableTreeNode )paths[i].getLastPathComponent()).getUserObject(); 448 449 if (obj instanceof Measure ) { 450 if (!clearedMeasuresClipboard) { 451 clearedMeasuresClipboard = true; 452 MainFrame.getMainInstance().getMeasuresClipBoard().removeAllElements(); 453 } 454 MainFrame.getMainInstance().getMeasuresClipBoard().add( ((Measure)obj).cloneMe() ); 455 } 456 } 457 } 458 } 460 private void jMenuItemCutActionPerformed(java.awt.event.ActionEvent evt) { TreePath [] paths = jTree.getSelectionPaths(); 462 463 boolean clearedMeasuresClipboard = false; 464 465 for (int i=0; i<paths.length; ++i) { 466 467 if (paths[i].getLastPathComponent() instanceof DefaultMutableTreeNode ) { 468 Object obj = ((DefaultMutableTreeNode )paths[i].getLastPathComponent()).getUserObject(); 469 if (obj instanceof Measure ) { 470 if (!clearedMeasuresClipboard) { 471 clearedMeasuresClipboard = true; 472 MainFrame.getMainInstance().getMeasuresClipBoard().removeAllElements(); 473 } 474 MainFrame.getMainInstance().getMeasuresClipBoard().add( ((Measure)obj).cloneMe() ); 475 getCrosstabReportElement().removeMeasure((Measure)obj); 476 } 477 } 478 } 479 } 481 private void jMenuItemNewMeasureActionPerformed(java.awt.event.ActionEvent evt) { 483 MeasureDialog jrpd = new MeasureDialog(null,MainFrame.getMainInstance(), true); 484 jrpd.setExpressionContext( ((this.getCrosstabReportElement().isUseDataset() && this.getCrosstabReportElement().getDataset() != null) ? this.getCrosstabReportElement().getDataset().getSubDataset() : null)); 485 jrpd.setVisible(true); 486 487 if (jrpd.getDialogResult() == javax.swing.JOptionPane.OK_OPTION) { 488 Measure measure = jrpd.getMeasure(); 489 getCrosstabReportElement().addMeasure( measure ); 490 } 491 492 } 494 private void jMenuItemEditMeasureActionPerformed(java.awt.event.ActionEvent evt) { TreePath [] paths = jTree.getSelectionPaths(); 497 498 if (paths == null || paths.length == 0) { 499 return; 500 } 501 502 if (paths.length == 1 && paths[0].getLastPathComponent() instanceof DefaultMutableTreeNode ) { 503 Object obj = ((DefaultMutableTreeNode )paths[0].getLastPathComponent()).getUserObject(); 504 if (obj instanceof Measure) 505 { 506 MeasureDialog jrpd = new MeasureDialog(null,MainFrame.getMainInstance(), true); 507 jrpd.setExpressionContext( ((this.getCrosstabReportElement().isUseDataset() && this.getCrosstabReportElement().getDataset() != null) ? this.getCrosstabReportElement().getDataset().getSubDataset() : null)); 508 jrpd.setMeasure((Measure)obj ); 509 jrpd.setVisible(true); 510 511 if (jrpd.getDialogResult() == javax.swing.JOptionPane.OK_OPTION) { 512 Measure measure = (Measure)obj; 513 measure.setName( jrpd.getMeasure().getName() ); 514 measure.setExpression( jrpd.getMeasure().getExpression()); 515 measure.setClassType( jrpd.getMeasure().getClassType()); 516 measure.setCalculation( jrpd.getMeasure().getCalculation()); 517 measure.setIncrementerFactoryClass( jrpd.getMeasure().getIncrementerFactoryClass()); 518 measure.setPercentageCalculatorClass( jrpd.getMeasure().getPercentageCalculatorClass()); 519 measure.setPercentageOf( jrpd.getMeasure().getPercentageOf()); 520 getCrosstabReportElement().measureModified( measure ); 521 setCrosstabReportElement(this.crosstabReportElement); 522 } 523 } 524 else if (obj instanceof CrosstabGroup) 525 { 526 CrosstabGroup rg = (CrosstabGroup)obj; 527 CrosstabGroupDialog jrpd = new CrosstabGroupDialog( 528 (rg instanceof CrosstabColumnGroup) ? CrosstabGroupDialog.COLUMNGROUP : CrosstabGroupDialog.ROWGROUP, MainFrame.getMainInstance(), true); 529 jrpd.setExpressionContext( ((this.getCrosstabReportElement().isUseDataset() && this.getCrosstabReportElement().getDataset() != null) ? this.getCrosstabReportElement().getDataset().getSubDataset() : null)); 530 jrpd.setGroup( rg ); 531 jrpd.setVisible(true); 532 533 if (jrpd.getDialogResult() == javax.swing.JOptionPane.OK_OPTION) { 534 535 CrosstabGroup group = jrpd.getGroup(); 536 String oldName = rg.getName(); 537 rg.setName( group.getName() ); 538 rg.setBucketComparatorExpression( group.getBucketComparatorExpression() ); 539 rg.setBucketExpression( group.getBucketExpression() ); 540 rg.setBucketExpressionClass( group.getBucketExpressionClass() ); 541 rg.setBucketOrder( group.getBucketOrder() ); 542 rg.setHeaderPosition( group.getHeaderPosition() ); 543 rg.setTotalPosition( group.getTotalPosition() ); 544 rg.setName( group.getName() ); 545 rg.setSize( group.getSize() ); 546 rg.setHasHeader( group.isHasHeader() ); 547 rg.setHasTotal( group.isHasTotal() ); 548 if (rg instanceof CrosstabColumnGroup) getCrosstabReportElement().modifyGroup(oldName, (CrosstabColumnGroup)rg); 549 if (rg instanceof CrosstabRowGroup) getCrosstabReportElement().modifyGroup(oldName, (CrosstabRowGroup)rg); 550 } 551 } 552 553 563 } 564 } 566 public void crosstabLayoutChanged(CrosstabLayoutChangedEvent evt) { 567 setCrosstabReportElement(crosstabReportElement); 568 } 569 570 public void crosstabMeasureChanged(CrosstabLayoutChangedEvent evt) { 571 setCrosstabReportElement(crosstabReportElement); 572 } 573 574 575 private javax.swing.JMenuItem jMenuItemCopy; 577 private javax.swing.JMenuItem jMenuItemCrosstabProperties; 578 private javax.swing.JMenuItem jMenuItemCut; 579 private javax.swing.JMenuItem jMenuItemDelete; 580 private javax.swing.JMenuItem jMenuItemEditMeasure; 581 private javax.swing.JMenuItem jMenuItemNewMeasure; 582 private javax.swing.JMenuItem jMenuItemPaste; 583 private javax.swing.JMenuItem jMenuItemRefresh; 584 private javax.swing.JPopupMenu jPopupMenuMeasures; 585 private javax.swing.JScrollPane jScrollPane1; 586 private javax.swing.JSeparator jSeparator1; 587 private javax.swing.JSeparator jSeparator2; 588 private javax.swing.JSeparator jSeparator3; 589 private javax.swing.JSeparator jSeparator4; 590 private javax.swing.JTree jTree; 591 593 public void applyI18n(){ 594 jMenuItemCopy.setText(I18n.getString("crosstabMeasuresView.menuItemCopy","Copy")); 596 jMenuItemCrosstabProperties.setText(I18n.getString("crosstabMeasuresView.menuItemCrosstabProperties","Crosstab properties")); 597 jMenuItemCut.setText(I18n.getString("crosstabMeasuresView.menuItemCut","Cut")); 598 jMenuItemDelete.setText(I18n.getString("crosstabMeasuresView.menuItemDelete","Delete")); 599 jMenuItemEditMeasure.setText(I18n.getString("crosstabMeasuresView.menuItemEditMeasure","Edit")); 600 jMenuItemNewMeasure.setText(I18n.getString("crosstabMeasuresView.menuItemNewMeasure","New measure")); 601 jMenuItemPaste.setText(I18n.getString("crosstabMeasuresView.menuItemPaste","Paste")); 602 jMenuItemRefresh.setText(I18n.getString("crosstabMeasuresView.menuItemRefresh","Refresh")); 603 } 605 } 606 | Popular Tags |