[displaytag-cvs] SF.net SVN: displaytag: [1098] trunk/displaytag/src/main/java/org/ displaytag/dec
Brought to you by:
fgiust
From: <rap...@us...> - 2007-08-11 00:29:24
|
Revision: 1098 http://displaytag.svn.sourceforge.net/displaytag/?rev=1098&view=rev Author: rapruitt Date: 2007-08-10 17:29:22 -0700 (Fri, 10 Aug 2007) Log Message: ----------- suppress total row when there are no totaled columns Modified Paths: -------------- trunk/displaytag/src/main/java/org/displaytag/decorator/MultilevelTotalTableDecorator.java Modified: trunk/displaytag/src/main/java/org/displaytag/decorator/MultilevelTotalTableDecorator.java =================================================================== --- trunk/displaytag/src/main/java/org/displaytag/decorator/MultilevelTotalTableDecorator.java 2007-08-11 00:23:20 UTC (rev 1097) +++ trunk/displaytag/src/main/java/org/displaytag/decorator/MultilevelTotalTableDecorator.java 2007-08-11 00:29:22 UTC (rev 1098) @@ -40,6 +40,11 @@ { /** + * If there are no columns that are totaled, we should not issue a totals row. + */ + private boolean containsTotaledColumns = false; + + /** * No current reset group. */ private static final int NO_RESET_GROUP = 4200; @@ -119,6 +124,7 @@ for (Iterator iterator = headerCells.iterator(); iterator.hasNext();) { HeaderCell headerCell = (HeaderCell) iterator.next(); + containsTotaledColumns = containsTotaledColumns || headerCell.isTotaled(); if (headerCell.getGroup() > 0) { groupNumberToGroupTotal.put(new Integer(headerCell.getGroup()), new GroupTotals(headerCell @@ -214,23 +220,26 @@ public void startOfGroup(String value, int group) { - StringBuffer tr = new StringBuffer(); - tr.append("<tr>"); - GroupTotals groupTotals = (GroupTotals) groupNumberToGroupTotal.get(new Integer(group)); - int myColumnNumber = groupTotals.columnNumber; - for (int i = 0; i < myColumnNumber; i++) + if (containsTotaledColumns) { - tr.append("<td></td>\n"); + StringBuffer tr = new StringBuffer(); + tr.append("<tr>"); + GroupTotals groupTotals = (GroupTotals) groupNumberToGroupTotal.get(new Integer(group)); + int myColumnNumber = groupTotals.columnNumber; + for (int i = 0; i < myColumnNumber; i++) + { + tr.append("<td></td>\n"); + } + tr.append("<td class=\"").append(getSubtotalHeaderClass()).append(" group-").append(group).append("\" >"); + tr.append(value).append("</td>\n"); + List headerCells = tableModel.getHeaderCellList(); + for (int i = myColumnNumber; i < headerCells.size() - 1; i++) + { + tr.append("<td></td>\n"); + } + tr.append("</tr>\n"); + headerRows.add(tr); } - tr.append("<td class=\"").append(getSubtotalHeaderClass()).append(" group-").append(group).append("\" >"); - tr.append(value).append("</td>\n"); - List headerCells = tableModel.getHeaderCellList(); - for (int i = myColumnNumber; i < headerCells.size() - 1; i++) - { - tr.append("<td></td>\n"); - } - tr.append("</tr>\n"); - headerRows.add(tr); } public String displayGroupedValue(String value, short groupingStatus, int columnNumber) @@ -266,37 +275,40 @@ public String finishRow() { - String returnValue; - if (innermostGroup > 0 && deepestResetGroup != NO_RESET_GROUP) + String returnValue = ""; + if (containsTotaledColumns) { - StringBuffer out = new StringBuffer(); - // Starting with the deepest group, print the current total and reset. Do not reset unaffected groups. - for (int i = innermostGroup; i >= deepestResetGroup; i--) + if (innermostGroup > 0 && deepestResetGroup != NO_RESET_GROUP) { - Integer groupNumber = new Integer(i); + StringBuffer out = new StringBuffer(); + // Starting with the deepest group, print the current total and reset. Do not reset unaffected groups. + for (int i = innermostGroup; i >= deepestResetGroup; i--) + { + Integer groupNumber = new Integer(i); - GroupTotals totals = (GroupTotals) groupNumberToGroupTotal.get(groupNumber); - if (totals == null) - { - logger.warn("There is a gap in the defined groups - no group defined for " + groupNumber); - continue; + GroupTotals totals = (GroupTotals) groupNumberToGroupTotal.get(groupNumber); + if (totals == null) + { + logger.warn("There is a gap in the defined groups - no group defined for " + groupNumber); + continue; + } + totals.printTotals(getListIndex(), out); + totals.setStartRow(getListIndex() + 1); } - totals.printTotals(getListIndex(), out); - totals.setStartRow(getListIndex() + 1); + returnValue = out.toString(); } - returnValue = out.toString(); + else + { + returnValue = null; + } + deepestResetGroup = NO_RESET_GROUP; + headerRows.clear(); + if (isLastRow()) + { + returnValue = StringUtils.defaultString(returnValue); + returnValue += totalAllRows(); + } } - else - { - returnValue = null; - } - deepestResetGroup = NO_RESET_GROUP; - headerRows.clear(); - if (isLastRow()) - { - returnValue = StringUtils.defaultString(returnValue); - returnValue += totalAllRows(); - } return returnValue; } @@ -306,38 +318,45 @@ */ protected String totalAllRows() { - List headerCells = tableModel.getHeaderCellList(); - StringBuffer output = new StringBuffer(); - int currentRow = getListIndex(); - output.append(TagConstants.TAG_OPEN + TagConstants.TAGNAME_ROW - + " class=\"grandtotal-row\"" + TagConstants.TAG_CLOSE); - boolean first = true; - for (Iterator iterator = headerCells.iterator(); iterator.hasNext();) + if (containsTotaledColumns) { - HeaderCell headerCell = (HeaderCell) iterator.next(); - if (first) + List headerCells = tableModel.getHeaderCellList(); + StringBuffer output = new StringBuffer(); + int currentRow = getListIndex(); + output.append(TagConstants.TAG_OPEN + TagConstants.TAGNAME_ROW + + " class=\"grandtotal-row\"" + TagConstants.TAG_CLOSE); + boolean first = true; + for (Iterator iterator = headerCells.iterator(); iterator.hasNext();) { - output.append(getTotalsTdOpen(headerCell, getGrandTotalLabel())); - output.append(getGrandTotalDescription()); - first = false; + HeaderCell headerCell = (HeaderCell) iterator.next(); + if (first) + { + output.append(getTotalsTdOpen(headerCell, getGrandTotalLabel())); + output.append(getGrandTotalDescription()); + first = false; + } + else if (headerCell.isTotaled()) + { + // a total if the column should be totaled + Object total = getTotalForColumn(headerCell.getColumnNumber(), 0, currentRow); + output.append(getTotalsTdOpen(headerCell, getGrandTotalSum())); + output.append(formatTotal(headerCell, total)); + } + else + { + // blank, if it is not a totals column + output.append(getTotalsTdOpen(headerCell, getGrandTotalNoSum())); + } + output.append(TagConstants.TAG_OPENCLOSING + TagConstants.TAGNAME_COLUMN + TagConstants.TAG_CLOSE); } - else if (headerCell.isTotaled()) - { - // a total if the column should be totaled - Object total = getTotalForColumn(headerCell.getColumnNumber(), 0, currentRow); - output.append(getTotalsTdOpen(headerCell, getGrandTotalSum())); - output.append(formatTotal(headerCell, total)); - } - else - { - // blank, if it is not a totals column - output.append(getTotalsTdOpen(headerCell, getGrandTotalNoSum())); - } - output.append(TagConstants.TAG_OPENCLOSING + TagConstants.TAGNAME_COLUMN + TagConstants.TAG_CLOSE); + output.append("\n</tr>\n"); + + return output.toString(); } - output.append("\n</tr>\n"); - - return output.toString(); + else + { + return ""; + } } protected String getCellValue(int columnNumber, int rowNumber) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |