boolean fullList = false;
if (!MediaTypeEnum.HTML.equals(model.getMedia()) && model.getProperties().getExportFullList())
{
fullList = true;
}
RowIterator rowIterator = model.getRowIterator(fullList);
TableTotaler totalsTableDecorator = model.getTotaler();
if (totalsTableDecorator == null)
{
totalsTableDecorator = TableTotaler.NULL;
}
// iterator on rows
TableDecorator tableDecorator = model.getTableDecorator();
Row previousRow = null;
Row currentRow = null;
Row nextRow = null;
Map<Integer, CellStruct> previousRowValues = new HashMap<Integer, CellStruct>(10);
Map<Integer, CellStruct> currentRowValues = new HashMap<Integer, CellStruct>(10);
Map<Integer, CellStruct> nextRowValues = new HashMap<Integer, CellStruct>(10);
while (nextRow != null || rowIterator.hasNext())
{
// The first pass
if (currentRow == null)
{
currentRow = rowIterator.next();
}
else
{
previousRow = currentRow;
currentRow = nextRow;
}
if (previousRow != null)
{
previousRowValues.putAll(currentRowValues);
}
if (!nextRowValues.isEmpty())
{
currentRowValues.putAll(nextRowValues);
}
// handle the first pass
else
{
ColumnIterator columnIterator = currentRow.getColumnIterator(model.getHeaderCellList());
// iterator on columns
if (log.isDebugEnabled())
{
log.debug(" creating ColumnIterator on " + model.getHeaderCellList());
}
while (columnIterator.hasNext())
{
Column column = columnIterator.nextColumn();
// Get the value to be displayed for the column
column.initialize();
@SuppressWarnings("deprecation")
String cellvalue = MediaTypeEnum.HTML.equals(model.getMedia())
? column.getChoppedAndLinkedValue()
: ObjectUtils.toString(column.getValue(true));
CellStruct struct = new CellStruct(column, cellvalue);
currentRowValues.put(new Integer(column.getHeaderCell().getColumnNumber()), struct);
}
}
nextRowValues.clear();
// Populate the next row values
nextRow = rowIterator.hasNext() ? rowIterator.next() : null;
if (nextRow != null)
{
ColumnIterator columnIterator = nextRow.getColumnIterator(model.getHeaderCellList());
// iterator on columns
if (log.isDebugEnabled())
{
log.debug(" creating ColumnIterator on " + model.getHeaderCellList());
}
while (columnIterator.hasNext())
{
Column column = columnIterator.nextColumn();
column.initialize();
// Get the value to be displayed for the column
@SuppressWarnings("deprecation")
String cellvalue = MediaTypeEnum.HTML.equals(model.getMedia())
? column.getChoppedAndLinkedValue()
: ObjectUtils.toString(column.getValue(true));
CellStruct struct = new CellStruct(column, cellvalue);
nextRowValues.put(new Integer(column.getHeaderCell().getColumnNumber()), struct);
}
}
// now we are going to create the current row; reset the decorator to the current row
if (tableDecorator != null)
{
tableDecorator.initRow(currentRow.getObject(), currentRow.getRowNumber(), currentRow.getRowNumber()
+ rowIterator.getPageOffset());
}
if (totalsTableDecorator != null)
{
totalsTableDecorator.initRow(
currentRow.getRowNumber(),
currentRow.getRowNumber() + rowIterator.getPageOffset());
}
ArrayList<CellStruct> structsForRow = new ArrayList<CellStruct>(model.getHeaderCellList().size());
lowestEndedGroup = NO_RESET_GROUP;
lowestStartedGroup = NO_RESET_GROUP;