This is an automated email from the ASF dual-hosted git repository. arjansh pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/metamodel.git
commit 6008e5414b919c0cad3d61a4aa9b5dee51ea3563 Author: Gerard Dellemann <g.dellem...@quadient.com> AuthorDate: Mon Dec 9 10:59:41 2019 +0100 MM-82 Detect Column Types - Refactoring based on comments in PR 2 --- .../excel/DefaultSpreadsheetReaderDelegate.java | 9 ++-- .../org/apache/metamodel/excel/ExcelUtils.java | 48 ++++++++++++---------- 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/excel/src/main/java/org/apache/metamodel/excel/DefaultSpreadsheetReaderDelegate.java b/excel/src/main/java/org/apache/metamodel/excel/DefaultSpreadsheetReaderDelegate.java index cb7595b..70bb2d9 100644 --- a/excel/src/main/java/org/apache/metamodel/excel/DefaultSpreadsheetReaderDelegate.java +++ b/excel/src/main/java/org/apache/metamodel/excel/DefaultSpreadsheetReaderDelegate.java @@ -63,7 +63,6 @@ final class DefaultSpreadsheetReaderDelegate implements SpreadsheetReaderDelegat private final Resource _resource; private final ExcelConfiguration _configuration; - private FormulaEvaluator _formulaEvaluator; public DefaultSpreadsheetReaderDelegate(Resource resource, ExcelConfiguration configuration) { _resource = resource; @@ -74,7 +73,6 @@ final class DefaultSpreadsheetReaderDelegate implements SpreadsheetReaderDelegat public Schema createSchema(String schemaName) { final MutableSchema schema = new MutableSchema(schemaName); final Workbook wb = ExcelUtils.readWorkbook(_resource, true); - _formulaEvaluator = wb.getCreationHelper().createFormulaEvaluator(); try { for (int i = 0; i < wb.getNumberOfSheets(); i++) { final Sheet currentSheet = wb.getSheetAt(i); @@ -333,7 +331,12 @@ final class DefaultSpreadsheetReaderDelegate implements SpreadsheetReaderDelegat case BOOLEAN: return ColumnType.BOOLEAN; case FORMULA: - return determineColumnTypeFromCell(_formulaEvaluator.evaluateInCell(cell)); + FormulaEvaluator formulaEvaluator = cell + .getSheet() + .getWorkbook() + .getCreationHelper() + .createFormulaEvaluator(); + return determineColumnTypeFromCell(formulaEvaluator.evaluateInCell(cell)); case STRING: // fall through case BLANK: diff --git a/excel/src/main/java/org/apache/metamodel/excel/ExcelUtils.java b/excel/src/main/java/org/apache/metamodel/excel/ExcelUtils.java index 6e3a66f..a86a646 100644 --- a/excel/src/main/java/org/apache/metamodel/excel/ExcelUtils.java +++ b/excel/src/main/java/org/apache/metamodel/excel/ExcelUtils.java @@ -192,13 +192,17 @@ final class ExcelUtils { FormulaError formulaError = FormulaError.forInt(errorCode); errorResult = formulaError.getString(); } catch (RuntimeException e) { - logger.debug("Getting error code for {} failed!: {}", getCellCoordinates(cell), e.getMessage()); + logger + .debug("Getting error code for ({},{}) failed!: {}", cell.getRowIndex(), cell.getColumnIndex(), + e.getMessage()); if (cell instanceof XSSFCell) { // hack to get error string, which is available String value = ((XSSFCell) cell).getErrorCellString(); errorResult = value; } else { - logger.error("Couldn't handle unexpected error scenario in cell: " + getCellCoordinates(cell), e); + logger + .error("Couldn't handle unexpected error scenario in cell: (" + cell.getRowIndex() + "," + + cell.getColumnIndex() + ")", e); throw e; } } @@ -226,7 +230,7 @@ final class ExcelUtils { throw new IllegalStateException("Unknown cell type: " + cell.getCellType()); } - logger.debug("cell {} resolved to value: {}", getCellCoordinates(cell), result); + logger.debug("cell ({},{}) resolved to value: {}", cell.getRowIndex(), cell.getColumnIndex(), result); return result; } @@ -251,12 +255,16 @@ final class ExcelUtils { try { errorResult = FormulaError.forInt(cell.getErrorCellValue()).getString(); } catch (final RuntimeException e) { - logger.debug("Getting error code for {} failed!: {}", getCellCoordinates(cell), e.getMessage()); + logger + .debug("Getting error code for ({},{}) failed!: {}", cell.getRowIndex(), cell.getColumnIndex(), + e.getMessage()); if (cell instanceof XSSFCell) { // hack to get error string, which is available errorResult = ((XSSFCell) cell).getErrorCellString(); } else { - logger.error("Couldn't handle unexpected error scenario in cell: " + getCellCoordinates(cell), e); + logger + .error("Couldn't handle unexpected error scenario in cell: (" + cell.getRowIndex() + "," + + cell.getColumnIndex() + ")", e); throw e; } } @@ -279,12 +287,12 @@ final class ExcelUtils { throw new IllegalStateException("Unknown cell type: " + cell.getCellType()); } - logger.debug("cell {} resolved to value: {}", getCellCoordinates(cell), result); + logger.debug("cell ({},{}) resolved to value: {}", cell.getRowIndex(), cell.getColumnIndex(), result); return result; } - public static Object getCellValueChecked(final Workbook workbook, final Cell cell, + private static Object getCellValueChecked(final Workbook workbook, final Cell cell, final ColumnType expectedColumnType) { final Object value = getCellValueAsObject(workbook, cell); if (value == null || value.getClass().equals(expectedColumnType.getJavaEquivalentClass())) { @@ -296,9 +304,9 @@ final class ExcelUtils { .getJavaEquivalentClass() .equals(Double.class)) && logger.isWarnEnabled()) { final String warning = String - .format("Cell %s has the value '%s' of data type '%s', which doesn't match the detected " - + "column's data type '%s'. This cell gets value NULL in the DataSet.", getCellCoordinates( - cell), value, value.getClass().getSimpleName(), expectedColumnType); + .format("Cell (%s,%s) has the value '%s' of data type '%s', which doesn't match the detected " + + "column's data type '%s'. This cell gets value NULL in the DataSet.", cell.getRowIndex(), + cell.getColumnIndex(), value, value.getClass().getSimpleName(), expectedColumnType); logger.warn(warning); } return null; @@ -319,8 +327,8 @@ final class ExcelUtils { try { if (logger.isInfoEnabled()) { logger - .info("cell {} is a formula. Attempting to evaluate: {}", getCellCoordinates(cell), cell - .getCellFormula()); + .info("cell ({},{}) is a formula. Attempting to evaluate: {}", cell.getRowIndex(), cell + .getColumnIndex(), cell.getCellFormula()); } final FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); @@ -331,12 +339,12 @@ final class ExcelUtils { return getCellValue(wb, evaluatedCell); } catch (RuntimeException e) { logger - .warn("Exception occurred while evaluating formula at position {}: {}", getCellCoordinates(cell), e - .getMessage()); + .warn("Exception occurred while evaluating formula at position ({},{}): {}", cell.getRowIndex(), + cell.getColumnIndex(), e.getMessage()); // Some exceptions we simply log - result will be then be the // actual formula if (e instanceof FormulaParseException) { - logger.error("Parse exception occurred while evaluating cell formula: " + cell, e); + logger.warn("Parse exception occurred while evaluating cell formula: " + cell, e); } else if (e instanceof IllegalArgumentException) { logger.error("Illegal formula argument occurred while evaluating cell formula: " + cell, e); } else { @@ -362,8 +370,8 @@ final class ExcelUtils { try { if (logger.isInfoEnabled()) { logger - .info("cell {} is a formula. Attempting to evaluate: {}", getCellCoordinates(cell), cell - .getCellFormula()); + .info("cell ({},{}) is a formula. Attempting to evaluate: {}", cell.getRowIndex(), cell + .getColumnIndex(), cell.getCellFormula()); } final FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); @@ -373,7 +381,7 @@ final class ExcelUtils { return getCellValueAsObject(workbook, evaluatedCell); } catch (final FormulaParseException e) { - logger.error("Parse exception occurred while evaluating cell formula: " + cell, e); + logger.warn("Parse exception occurred while evaluating cell formula: " + cell, e); } catch (final IllegalArgumentException e) { logger.error("Illegal formula argument occurred while evaluating cell formula: " + cell, e); } catch (final RuntimeException e) { @@ -573,8 +581,4 @@ final class ExcelUtils { final DataFormatter formatter = new DataFormatter(); return formatter.formatRawCellContents(cellValue, formatIndex, formatString); } - - private static String getCellCoordinates(Cell cell) { - return String.format("(%s,%s)", cell.getRowIndex(), cell.getColumnIndex()); - } }