use of org.xwiki.rendering.block.TableRowBlock in project xwiki-platform by xwiki.
the class AbstractTableBlockDataSource method getRowKeys.
/**
* @param tableBlock The table block to parse.
* @param startRow The first row to include.
* @param endRow The last row to include.
* @param startColumn The first column to include.
* @param datasetBuilder The dataset builder.
* @throws MacroExecutionException if there are any errors in the table.
*/
private void getRowKeys(TableBlock tableBlock, int startRow, int endRow, int startColumn, TableDatasetBuilder datasetBuilder) throws MacroExecutionException {
datasetBuilder.setNumberOfRows(endRow - startRow + 1);
if (startColumn > 0) {
Set<String> rowKeySet = new HashSet<String>();
for (int i = startRow; i <= endRow; i++) {
TableRowBlock tableRow = (TableRowBlock) tableBlock.getChildren().get(i);
String key = cellContentAsString((TableCellBlock) tableRow.getChildren().get(startColumn - 1));
datasetBuilder.setRowHeading(i - startRow, key);
}
} else {
for (int i = startRow; i <= endRow; i++) {
datasetBuilder.setRowHeading(i - startRow, "R" + i);
}
}
}
use of org.xwiki.rendering.block.TableRowBlock in project xwiki-platform by xwiki.
the class AbstractTableBlockDataSource method getColumnKeys.
/**
* @param tableBlock The table block to parse.
* @param startColumn The first column to include.
* @param endColumn The last column to include.
* @param startRow The first row to include.
* @param datasetBuilder The dataset builder.
* @throws MacroExecutionException if there are any errors in the table.
*/
private void getColumnKeys(TableBlock tableBlock, int startColumn, int endColumn, int startRow, TableDatasetBuilder datasetBuilder) throws MacroExecutionException {
datasetBuilder.setNumberOfColumns(endColumn - startColumn + 1);
if (startRow > 0) {
TableRowBlock tableRow = (TableRowBlock) tableBlock.getChildren().get(startRow - 1);
for (int i = startColumn; i <= endColumn; i++) {
String key = cellContentAsString((TableCellBlock) tableRow.getChildren().get(i));
datasetBuilder.setColumnHeading(i - startColumn, key);
}
} else {
for (int i = startColumn; i <= endColumn; i++) {
datasetBuilder.setColumnHeading(i - startColumn, "C" + i);
}
}
}
use of org.xwiki.rendering.block.TableRowBlock in project xwiki-platform by xwiki.
the class AbstractTableBlockDataSource method buildDataset.
/**
* Build a category dataset.
*
* @param tableBlock The table block to parse.
* @param dataRange The data range.
* @param datasetBuilder The dataset builder.
* @throws MacroExecutionException if there are any errors.
*/
private void buildDataset(TableBlock tableBlock, int[] dataRange, TableDatasetBuilder datasetBuilder) throws MacroExecutionException {
int startRow = dataRange[0];
int startColumn = dataRange[1];
int endRow = dataRange[2];
int endColumn = dataRange[3];
if (startRow == 0 && datasetBuilder.forceRowHeadings()) {
startRow = 1;
}
if (startColumn == 0 && datasetBuilder.forceColumnHeadings()) {
startColumn = 1;
}
getRowKeys(tableBlock, startRow, endRow, startColumn, datasetBuilder);
getColumnKeys(tableBlock, startColumn, endColumn, startRow, datasetBuilder);
for (int i = startRow; i <= endRow; i++) {
if (i < tableBlock.getChildren().size()) {
TableRowBlock tableRow = (TableRowBlock) tableBlock.getChildren().get(i);
for (int j = startColumn; j <= endColumn; j++) {
if (j < tableRow.getChildren().size()) {
Number value = cellContentAsNumber((TableCellBlock) tableRow.getChildren().get(j));
datasetBuilder.setValue(i - startRow, j - startColumn, value);
} else {
throw new MacroExecutionException("Data range (columns) overflow.");
}
}
} else {
throw new MacroExecutionException("Data range (rows) overflow.");
}
}
}
use of org.xwiki.rendering.block.TableRowBlock in project xwiki-platform by xwiki.
the class AbstractTableBlockDataSource method getDataRange.
/**
* Calculates the data-range that is to be used for plotting the chart.
*
* @param tableBlock the {@link TableBlock}.
* @return an integer array consisting of start-row, start-column, end-row and end-column of the data range.
* @throws MacroExecutionException if it's not possible to determine the data range correctly.
*/
protected int[] getDataRange(TableBlock tableBlock) throws MacroExecutionException {
Integer[] r = getDataRangeFromParameter();
int rowCount = tableBlock.getChildren().size();
if (rowCount > 0) {
TableRowBlock firstRow = (TableRowBlock) tableBlock.getChildren().get(0);
int columnCount = firstRow.getChildren().size();
if (columnCount > 0) {
return new int[] { r[0] != null ? r[0] : 0, r[1] != null ? r[1] : 0, r[2] != null ? r[2] : rowCount - 1, r[3] != null ? r[3] : columnCount - 1 };
}
}
throw new MacroExecutionException("Data table is incomplete.");
}
Aggregations