/** * Extract following data form the spreadsheet source table: * row names, column names, header definitions, return cell. */ public void buildHeaders(IOpenClass spreadsheetHeaderType) { addRowHeaders(); addColumnHeaders(); buildHeaderDefinitionsTypes(); try { buildReturnCells(spreadsheetHeaderType); } catch (SyntaxNodeException e) { addError(e); } }
public String[] getColumnNames() { return buildArrayForHeaders(columnHeaders, cellsHeaderExtractor.getWidth()); }
public IResultBuilder buildResultBuilder(Spreadsheet spreadsheet) { IResultBuilder resultBuilder = null; try { resultBuilder = getResultBuilderInternal(spreadsheet); } catch (SyntaxNodeException e) { addError(e); } return resultBuilder; }
addError(error); type = type.getComponentClass(); IdentifierNode identifier = cutTypeIdentifier(typeIdentifierNode); MetaInfoReader metaInfoReader = getTableSyntaxNode().getMetaInfoReader(); if (metaInfoReader instanceof SpreadsheetMetaInfoReader) { IMetaInfo typeMeta = type.getMetaInfo();
private void parseHeader(SpreadsheetHeaderDefinition header, IOpenSourceCodeModule source) { SymbolicTypeDefinition parsed = null; try { parsed = parseHeaderElement(source); IdentifierNode name = parsed.getName(); String headerName = name.getIdentifier(); SpreadsheetHeaderDefinition h1 = headerDefinitions.get(headerName); if (h1 != null) { SyntaxNodeException error; error = SyntaxNodeExceptionUtils.createError("The header definition is duplicated", name); addError(error); throw new DuplicatedVarException(null, headerName); } else { headerDefinitions.put(headerName, header); } header.addVarHeader(parsed); } catch (SyntaxNodeException error) { addError(error); } }
private void buildReturnCells(IOpenClass spreadsheetHeaderType) throws SyntaxNodeException { SpreadsheetHeaderDefinition headerDefinition = headerDefinitions.get(SpreadsheetSymbols.RETURN_NAME.toString()); if (headerDefinition == null) { return; } int nonEmptyCellsCount = calculateNonEmptyCells(headerDefinition); IOpenClass cellType = deriveSingleCellReturnType(nonEmptyCellsCount, headerDefinition, spreadsheetHeaderType); if (headerDefinition.getType() == null) { headerDefinition.setType(cellType); } else { String message = String .format( "RETURN %s derives it's type from the Spreadsheet return type and therefore must not be defined here", headerDefinition.rowOrColumn()); throw SyntaxNodeExceptionUtils.createError(message, headerDefinition.getVars().get(0).getName()); } returnHeaderDefinition = new ReturnSpreadsheetHeaderDefinition(headerDefinition, spreadsheetHeaderType); headerDefinitions.put(SpreadsheetSymbols.RETURN_NAME.toString(), returnHeaderDefinition); }
public void preBind(IBindingContext bindingContext) throws SyntaxNodeException { if (!bindingContext.isExecutionMode()) { getTableSyntaxNode().setMetaInfoReader(new SpreadsheetMetaInfoReader(this)); } TableSyntaxNode tableSyntaxNode = getTableSyntaxNode(); validateTableBody(tableSyntaxNode, bindingContext); IOpenMethodHeader header = getHeader(); this.bindingContext = bindingContext; componentsBuilder = new SpreadsheetComponentsBuilder(tableSyntaxNode, bindingContext); componentsBuilder.buildHeaders(header.getType()); structureBuilder = new SpreadsheetStructureBuilder(componentsBuilder, header); String headerType = header.getName() + "Type"; OpenL openL = bindingContext.getOpenL(); spreadsheetOpenClass = new SpreadsheetOpenClass(headerType, openL); Boolean autoType = tableSyntaxNode.getTableProperties().getAutoType(); structureBuilder.addCellFields(spreadsheetOpenClass, autoType); }
public void finalizeBind(IBindingContext bindingContext) throws Exception { super.finalizeBind(bindingContext); ILogicalTable tableBody = getTableSyntaxNode().getTableBody(); getTableSyntaxNode().getSubTables().put(IXlsTableNames.VIEW_BUSINESS, tableBody); cells = structureBuilder.getCells(); Spreadsheet spreadsheet = (Spreadsheet) getMethod(); spreadsheet.setCells(cells); spreadsheet.setResultBuilder(componentsBuilder.buildResultBuilder(spreadsheet)); }
/** * Cut a type identifier from a type identifier containing array symbols and whitespace. * * @param typeIdentifierNode identifier with additional info * @return cleaned type identifier */ private IdentifierNode cutTypeIdentifier(IdentifierNode typeIdentifierNode) { try { IdentifierNode[] variableAndType = Tokenizer.tokenize(typeIdentifierNode.getModule(), SpreadsheetSymbols.TYPE_DELIMETER.toString()); if (variableAndType.length > 1) { IdentifierNode[] nodes = Tokenizer.tokenize(typeIdentifierNode.getModule(), " []\n\r", variableAndType[1].getLocation()); if (nodes.length > 0) { return nodes[0]; } } } catch (OpenLCompilationException e) { SyntaxNodeException error = SyntaxNodeExceptionUtils.createError("Cannot parse header", typeIdentifierNode); addError(error); } return null; }
public String[] getRowNames() { return buildArrayForHeaders(rowHeaders, cellsHeaderExtractor.getHeight()); }