private void addColumnHeaders() { String[] columnNames = cellsHeaderExtractor.getColumnNames(); for (int i = 0; i < columnNames.length; i++) { if (columnNames[i] != null) { IGridTable columnNameForHeader = cellsHeaderExtractor.getColumnNamesTable().getColumn(i).getRow(0).getSource(); GridCellSourceCodeModule source = new GridCellSourceCodeModule(columnNameForHeader, bindingContext); SpreadsheetHeaderDefinition header = columnHeaders.get(i); if (header == null) { header = new SpreadsheetHeaderDefinition(-1, i); columnHeaders.put(i, header); } parseHeader(header, source); } } }
@Override public boolean determine(TableSyntaxNode node, TableSyntaxNode dependsOnNode) { if (isSpreadsheet(node) && isSpreadsheet(dependsOnNode)) { // Compare both spreadsheets table syntax nodes. // Check if there are usages of custom spreadsheet type // CellsHeaderExtractor extractor1 = extractNames(node); if (extractor1 == null) { return false; } String methodName2 = TableSyntaxNodeHelper.getTableName(dependsOnNode); if (StringUtils.isNotBlank(methodName2)) { if (extractor1.getDependentSignatureSpreadsheetTypes().contains(methodName2)) { return true; } } return false; } throw new IllegalStateException("Spreadsheet tables are supported only!"); }
private int calculateNonEmptyCells(SpreadsheetHeaderDefinition headerDefinition) { int fromRow = 0; int toRow = cellsHeaderExtractor.getHeight(); int fromColumn = 0; int toColumn = cellsHeaderExtractor.getWidth(); if (headerDefinition.isRow()) { fromRow = headerDefinition.getRow(); toRow = fromRow + 1; } else { fromColumn = headerDefinition.getColumn(); toColumn = fromColumn + 1; } int nonEmptyCellsCount = 0; for (int columnIndex = fromColumn; columnIndex < toColumn; columnIndex++) { for (int rowIndex = fromRow; rowIndex < toRow; rowIndex++) { ILogicalTable cell = LogicalTableHelper.mergeBounds(cellsHeaderExtractor.getRowNamesTable().getRow(rowIndex), cellsHeaderExtractor.getColumnNamesTable().getColumn(columnIndex)); String value = cell.getSource().getCell(0, 0).getStringValue(); if (value != null && value.trim().length() > 0) { nonEmptyCellsCount += 1; } } } return nonEmptyCellsCount; }
private void addRowHeaders() { String[] rowNames = cellsHeaderExtractor.getRowNames(); for (int i = 0; i < rowNames.length; i++) { if (rowNames[i] != null) { IGridTable rowNameForHeader = cellsHeaderExtractor.getRowNamesTable().getRow(i).getColumn(0).getSource(); IOpenSourceCodeModule source = new GridCellSourceCodeModule(rowNameForHeader, bindingContext); SpreadsheetHeaderDefinition header = rowHeaders.get(i); if (header == null) { header = new SpreadsheetHeaderDefinition(i, -1); rowHeaders.put(i, header); } parseHeader(header, source); } } }
componentsBuilder.getCellsHeadersExtractor().getRowNamesTable().getRow(rowIndex), componentsBuilder.getCellsHeadersExtractor().getColumnNamesTable().getColumn(columnIndex)); ICell sourceCell = cell.getSource().getCell(0, 0);
private void extractCellValues() { CellsHeaderExtractor cellsHeadersExtractor = componentsBuilder.getCellsHeadersExtractor(); int rowsCount = cellsHeadersExtractor.getHeight(); int columnsCount = cellsHeadersExtractor.getWidth(); for (int rowIndex = 0; rowIndex < rowsCount; rowIndex++) { IBindingContext rowBindingContext = getRowContext(rowIndex); for (int columnIndex = 0; columnIndex < columnsCount; columnIndex++) { boolean found = false; for (SpreadsheetCell cell : extractedCellValues) { int row = cell.getRowIndex(); int column = cell.getColumnIndex(); if (row == rowIndex && columnIndex == column) { found = true; } } if (!found) { extractCellValue(rowBindingContext, rowIndex, columnIndex); } } } }
spreadsheet.setColumnNames(componentsBuilder.getColumnNames()); spreadsheet.setRowTitles(componentsBuilder.getCellsHeadersExtractor().getRowNames()); spreadsheet.setColumnTitles(componentsBuilder.getCellsHeadersExtractor().getColumnNames()); if (spreadsheet.isCustomSpreadsheetType()) {
public String[] getRowNames() { return buildArrayForHeaders(rowHeaders, cellsHeaderExtractor.getHeight()); }
public SpreadsheetComponentsBuilder(TableSyntaxNode tableSyntaxNode, IBindingContext bindingContext) { this.tableSyntaxNode = tableSyntaxNode; CellsHeaderExtractor extractor = ((SpreadsheetHeaderNode)tableSyntaxNode.getHeader()).getCellHeadersExtractor(); if (extractor == null) { extractor = new CellsHeaderExtractor(getSignature(tableSyntaxNode), tableSyntaxNode.getTableBody().getRow(0).getColumns(1), tableSyntaxNode.getTableBody().getColumn(0).getRows(1)); } this.cellsHeaderExtractor = extractor; this.bindingContext = bindingContext; }
public String[] getColumnNames() { return buildArrayForHeaders(columnHeaders, cellsHeaderExtractor.getWidth()); }
public Set<String> getDependentSignatureSpreadsheetTypes() { if (dependentSpreadsheetTypes == null) { dependentSpreadsheetTypes = new HashSet<String>(); dependentSpreadsheetTypes.addAll(getSignatureDependencies(spreadsheetSignature)); } return dependentSpreadsheetTypes; }
cell = cellsHeaderExtractor.getRowNamesTable().getRow(headerDefinition.getRow()); } else { cell = cellsHeaderExtractor.getColumnNamesTable().getColumn(headerDefinition.getColumn());
/** * Add to {@link SpreadsheetOpenClass} fields that are represented by spreadsheet cells. * * @param spreadsheetType open class of the spreadsheet */ public void addCellFields(SpreadsheetOpenClass spreadsheetType, boolean autoType) { IBindingContext generalBindingContext = componentsBuilder.getBindingContext(); CellsHeaderExtractor cellsHeadersExtractor = componentsBuilder.getCellsHeadersExtractor(); int rowsCount = cellsHeadersExtractor.getHeight(); int columnsCount = cellsHeadersExtractor.getWidth(); // create cells according to the size of the spreadsheet cells = new SpreadsheetCell[rowsCount][columnsCount]; // create the binding context for the spreadsheet level spreadsheetBindingContext = new SpreadsheetContext(generalBindingContext, spreadsheetType); for (int rowIndex = 0; rowIndex < rowsCount; rowIndex++) { for (int columnIndex = 0; columnIndex < columnsCount; columnIndex++) { // build spreadsheet cell SpreadsheetCell spreadsheetCell = buildCell(rowIndex, columnIndex, autoType); // init cells array with appropriate cell cells[rowIndex][columnIndex] = spreadsheetCell; // create and add field of the cell to the spreadsheetType addSpreadsheetFields(spreadsheetType, spreadsheetCell, rowIndex, columnIndex); } } }
public String[] getRowNames() { if (rowNames == null) { int height = getHeight(); rowNames = new String[height]; for (int row = 0; row < height; row++) { IGridTable nameCell = rowNamesTable.getRow(row).getColumn(0).getSource(); rowNames[row] = nameCell.getCell(0, 0).getStringValue(); } } return rowNames; }
private static CellsHeaderExtractor extractNames(TableSyntaxNode tableSyntaxNode) { CellsHeaderExtractor extractor; // try to get previously stored extractor // SpreadsheetHeaderNode header = (SpreadsheetHeaderNode) tableSyntaxNode.getHeader(); extractor = header.getCellHeadersExtractor(); if (extractor == null) { ILogicalTable body = tableSyntaxNode.getTableBody(); if (body != null) { extractor = new CellsHeaderExtractor(TableSyntaxNodeHelper.getSignature(tableSyntaxNode), body.getRow(0).getColumns(1), body.getColumn(0).getRows(1)); // set cells header extractor to the table syntax node, to avoid // extracting several times // header.setCellHeadersExtractor(extractor); } } return extractor; } }
public String[] getColumnNames() { if (columnNames == null) { int width = getWidth(); columnNames = new String[width]; for (int col = 0; col < width; col++) { IGridTable nameCell = columnNamesTable.getColumn(col).getRow(0).getSource(); columnNames[col] = nameCell.getCell(0, 0).getStringValue(); } } return columnNames; }
componentsBuilder.getCellsHeadersExtractor().getRowNamesTable().getRow(rowIndex), componentsBuilder.getCellsHeadersExtractor().getColumnNamesTable().getColumn(columnIndex));