{
if (context == null)
{
// Step 1: Find the parent cell.
final LayoutController cellController = findParentCell();
if (cellController == null)
{
LOGGER.warn("Image is not contained in a table. Unable to calculate the image-size.");
return null;
}
final Element tableCell = (Element) cellController.getNode();
final int rowSpan = TextUtilities.parseInt((String) tableCell.getAttribute(OfficeNamespaces.TABLE_NS, "number-rows-spanned"), 1);
final int colSpan = TextUtilities.parseInt((String) tableCell.getAttribute(OfficeNamespaces.TABLE_NS, "number-columns-spanned"), 1);
if (rowSpan < 1 || colSpan < 1)
{
LOGGER.warn("Rowspan or colspan for image-size calculation was invalid.");
return null;
}
final LayoutController rowController = cellController.getParent();
if (rowController == null)
{
LOGGER.warn("Table-Cell has no parent. Unable to calculate the image-size.");
return null;
}
final Section tableRow = (Section) rowController.getNode();
// we are now making the assumption, that the row is a section, that contains the table-cell.
// This breaks the ability to return nodes or to construct reports on the fly, but the OO-report format
// is weird anyway and wont support such advanced techniques for the next few centuries ..
final int columnPos = findNodeInSection(tableRow, tableCell, OfficeToken.COVERED_TABLE_CELL);
if (columnPos == -1)
{
LOGGER.warn("Table-Cell is not a direct child of the table-row. Unable to calculate the image-size.");
return null;
}
final LayoutController tableController = rowController.getParent();
if (tableController == null)
{
LOGGER.warn("Table-Row has no Table. Unable to calculate the image-size.");
return null;
}
final Section table = (Section) tableController.getNode();
// ok, we got a table, so as next we have to search for the columns now.
final Section columns = (Section) table.findFirstChild(OfficeNamespaces.TABLE_NS, OfficeToken.TABLE_COLUMNS);
if (columns.getNodeCount() <= columnPos + colSpan)
{
// the colspan is to large. The table definition is therefore invalid. We do not try to fix this.