1 package com.calipso.reportgenerator.userinterface; 2 3 import com.calipso.reportgenerator.common.DimensionValueNode; 4 import com.calipso.reportgenerator.common.HeaderTableModel; 5 6 import javax.swing.*; 7 import javax.swing.plaf.basic.BasicTableUI ; 8 import java.awt.*; 9 import java.util.Iterator ; 10 import java.util.Map ; 11 import java.util.Vector ; 12 13 16 17 public abstract class HeaderTableUI extends BasicTableUI { 18 19 protected int count=0; 21 protected int iterations = 0; 23 protected Vector endings = null; 25 26 public HeaderTableUI() { 27 } 28 29 33 protected HeaderTableModel getModel() { 34 return (HeaderTableModel) table.getModel(); 35 } 36 37 38 42 protected int getMode() { 43 return getModel().getMode(); 44 } 45 46 50 protected Map getAllSubNodes() { 51 return getModel().getDimensionValueNode().getAllSubNodes(); 52 } 53 54 55 60 public void paint(Graphics g, JComponent c) { 61 table.clearSelection(); 62 paintCells(g); 63 } 64 65 66 70 protected void paintCells(Graphics g) { 71 int from = getFromCell(); 72 int to = getToCell(); 73 DimensionValueNode root = getModel().getDimensionValueNode(); 74 int[] rowIndexes = new int[root.getDimensionCount()]; 75 int[] rowSizes = new int[root.getDimensionCount()]; 76 count = 0; 77 paintNode(root, g, rowIndexes, rowSizes, from, to); 78 } 79 80 84 protected abstract int getToCell(); 85 86 90 protected abstract int getFromCell(); 91 92 124 125 134 protected void paintNode(DimensionValueNode node, Graphics g, int[] rowIndexes, int[] rowSizes, int from, int to) { 135 if (!node.getCollapsed()) { 136 for (Iterator iterator = node.getSubNodesList().iterator(); iterator.hasNext();) { 137 DimensionValueNode dimensionValueNode = (DimensionValueNode) iterator.next(); 138 paintNode(dimensionValueNode, g, rowIndexes, rowSizes, from, to); 139 } 140 } 141 else { 142 if (!getModel().getWithTotals()) { 143 for (int i = node.getDimesionIndex() + 1; i < getModel().getDimensionCount(); i++) { 144 if (getMode() == HeaderTableModel.MODE_ROW){ 145 rowIndexes[i]++; 146 } 147 else { 148 rowIndexes[i]+= getModel().getVisibleMetricsCount(); 149 } 150 } 151 for (int i = 0; i <= node.getDimesionIndex(); i++) { 152 if (getMode() == HeaderTableModel.MODE_ROW){ 153 rowSizes[i]++; 154 } 155 else { 156 rowSizes[i]+= getModel().getVisibleMetricsCount(); 157 } 158 } 159 } 160 } 161 doPaintNode(node, g, rowIndexes, rowSizes, from, to); 162 if (node.getDimesionIndex() >= 0) { 163 rowSizes[node.getDimesionIndex()] = 0; 164 } 165 } 166 167 214 215 225 protected abstract void doPaintNode(DimensionValueNode node, Graphics g, int[] indexes, int[] sizes, int from, int to); 226 274 275 280 protected Object getGroupFooterCaption(DimensionValueNode node) { 281 return getModel().getGroupFooterCaption(node.getDimesionIndex()); 282 } 283 284 289 protected boolean getNodeIsCollapsable(DimensionValueNode node) { 290 return getModel().getNodeIsCollapsable(node); 291 } 292 293 301 protected Rectangle getRectangleFromNode(DimensionValueNode node, int index, int size) { 302 int[][] cells = ((HeaderTableModel) table.getModel()).getNodeCells(node, index, size); 303 Rectangle rect = doGetRectangle(cells); 304 return rect; 305 } 306 307 314 protected Rectangle getTotalRectangleFromNode(DimensionValueNode node, int lastRow) { 315 int[][] cells = ((HeaderTableModel) table.getModel()).getTotalNodeCells(node, lastRow); 316 Rectangle rect = doGetRectangle(cells); 317 return rect; 318 } 319 320 325 protected Rectangle doGetRectangle(int[][] cells) { 326 Rectangle rect = null; 327 328 for (int index = 0; index < cells.length; index++) { 329 if (rect == null) { 330 rect = table.getCellRect(cells[index][0], cells[index][1], true); 331 } 332 else { 333 rect = rect.union(table.getCellRect(cells[index][0], cells[index][1], true)); 334 } 335 } 336 return rect; 337 } 338 339 346 protected void paintRectangle(Rectangle rect, Graphics g, Object value, boolean isCollapsable, boolean isCollapsed) { 347 HeaderTableRenderer renderer = (HeaderTableRenderer) table.getDefaultRenderer(Object .class); 348 JComponent comp = (JComponent) renderer.getCellComponent(table, value, isCollapsable, isCollapsed); 349 rendererPane.paintComponent(g, comp, table, rect.x, rect.y, rect.width, rect.height, true); 350 } 351 352 protected Vector getEndingsVector(){ 353 if(endings==null){ 354 endings = new Vector (); 355 iterations = 0; 356 fillEndingCellForGroups(endings, getModel().getWithTotals(), getModel().getDimensionValueNode()); 357 } 358 return endings; 359 } 360 361 protected abstract void fillEndingCellForGroups(Vector finals, boolean withTotals, DimensionValueNode dimensionValueNode); 362 363 public void resetFinals(){ 364 endings = null; 365 } 366 367 } | Popular Tags |