blob: 4b8abd1cb261d633cb8ef6337088be6760766cc7 [file] [log] [blame]
/*******************************************************************************
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*******************************************************************************/
package org.apache.ofbiz.pricat.sample;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.apache.poi.POIXMLException;
import org.apache.poi.hssf.usermodel.HSSFDataFormatter;
import org.apache.poi.ss.util.CellReference;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.commons.fileupload.FileItem;
import org.apache.ofbiz.pricat.AbstractPricatParser;
import org.apache.ofbiz.htmlreport.InterfaceReport;
import org.apache.ofbiz.order.finaccount.FinAccountHelper;
import org.apache.ofbiz.base.util.Debug;
import org.apache.ofbiz.base.util.UtilMisc;
import org.apache.ofbiz.base.util.UtilProperties;
import org.apache.ofbiz.base.util.UtilValidate;
import org.apache.ofbiz.entity.Delegator;
import org.apache.ofbiz.entity.GenericEntityException;
import org.apache.ofbiz.entity.GenericValue;
import org.apache.ofbiz.entity.transaction.GenericTransactionException;
import org.apache.ofbiz.service.LocalDispatcher;
import org.apache.ofbiz.service.ServiceUtil;
/**
* Sample pricat excel parser.
*
*/
public class SamplePricatParser extends AbstractPricatParser {
public static final String module = SamplePricatParser.class.getName();
public static final Map<String, List<Object[]>> ColNamesList = UtilMisc.toMap("V1.1", genExcelHeaderNames("V1.1"));
public static final int headerRowNo = 4;
private List<String> headerColNames = new ArrayList<String>();
public SamplePricatParser(LocalDispatcher dispatcher, Delegator delegator, Locale locale, InterfaceReport report, Map<String, String[]> facilities, File pricatFile, GenericValue userLogin) {
super(dispatcher, delegator, locale, report, facilities, pricatFile, userLogin);
}
/**
* Parse pricat excel file in xlsx format.
*
*/
public void parsePricatExcel(boolean writeFile) {
XSSFWorkbook workbook = null;
try {
// 1. read the pricat excel file
FileInputStream is = new FileInputStream(pricatFile);
// 2. use POI to load this bytes
report.print(UtilProperties.getMessage(resource, "ParsePricatFileStatement", new Object[] { pricatFile.getName() }, locale), InterfaceReport.FORMAT_DEFAULT);
try {
workbook = new XSSFWorkbook(is);
report.println(UtilProperties.getMessage(resource, "ok", locale), InterfaceReport.FORMAT_OK);
} catch(IOException e) {
report.println(e);
report.println(UtilProperties.getMessage(resource, "PricatSuggestion", locale), InterfaceReport.FORMAT_ERROR);
return;
} catch(POIXMLException e) {
report.println(e);
report.println(UtilProperties.getMessage(resource, "PricatSuggestion", locale), InterfaceReport.FORMAT_ERROR);
return;
}
// 3. only first sheet will be parsed
// 3.1 verify the file has a sheet at least
formatter = new HSSFDataFormatter(locale);
isNumOfSheetsOK(workbook);
// 3.2 verify the version is supported
XSSFSheet sheet = workbook.getSheetAt(0);
if (!isVersionSupported(sheet)) {
return;
}
// 3.3 get currencyId
existsCurrencyId(sheet);
// 3.4 verify the table header row is just the same as column names, if not, print error and return
if (!isTableHeaderMatched(sheet)) {
return;
}
// 3.5 verify the first table has 6 rows at least
containsDataRows(sheet);
if (UtilValidate.isNotEmpty(errorMessages)) {
report.println(UtilProperties.getMessage(resource, "HeaderContainsError", locale), InterfaceReport.FORMAT_ERROR);
return;
}
// 4. parse data
// 4.1 parse row by row and store the contents into database
parseRowByRow(sheet);
if (UtilValidate.isNotEmpty(errorMessages)) {
report.println(UtilProperties.getMessage(resource, "DataContainsError", locale), InterfaceReport.FORMAT_ERROR);
if (writeFile) {
sequenceNum = report.getSequenceNum();
writeCommentsToFile(workbook, sheet);
}
}
// 5. clean up the log files and commented Excel files
cleanupLogAndCommentedExcel();
} catch (IOException e) {
report.println(e);
Debug.logError(e, module);
} finally {
if (UtilValidate.isNotEmpty(fileItems)) {
// remove tmp files
FileItem fi = null;
for (int i = 0; i < fileItems.size(); i++) {
fi = fileItems.get(i);
fi.delete();
}
}
if (workbook != null) {
try {
workbook.close();
} catch (IOException e) {
Debug.logError(e, module);
}
}
}
}
public boolean existsCurrencyId(XSSFSheet sheet) {
report.print(UtilProperties.getMessage(resource, "StartCheckCurrencyId", locale), InterfaceReport.FORMAT_NOTE);
XSSFCell currencyIdCell = sheet.getRow(2).getCell(1);
currencyId = currencyIdCell.getStringCellValue().trim().toUpperCase();
if (UtilValidate.isEmpty(currencyId)) {
String errorMessage = UtilProperties.getMessage(resource, "CurrencyIdRequired", locale);
report.println(errorMessage, InterfaceReport.FORMAT_ERROR);
errorMessages.put(new CellReference(currencyIdCell), errorMessage);
return false;
} else {
try {
GenericValue currencyUom = delegator.findOne("Uom", UtilMisc.toMap("uomId", currencyId), false);
if (!"CURRENCY_MEASURE".equals(currencyUom.getString("uomTypeId"))) {
String errorMessage = UtilProperties.getMessage(resource, "CurrencyIdNotCurrency", new Object[] {currencyId}, locale);
report.println(errorMessage, InterfaceReport.FORMAT_ERROR);
errorMessages.put(new CellReference(currencyIdCell), errorMessage);
return false;
}
} catch(GenericEntityException e) {
String errorMessage = UtilProperties.getMessage(resource, "CurrencyIdNotFound", new Object[] {currencyId}, locale);
report.println(errorMessage, InterfaceReport.FORMAT_ERROR);
errorMessages.put(new CellReference(currencyIdCell), errorMessage);
return false;
}
report.print(UtilProperties.getMessage(resource, "CurrencyIdIs", new Object[] {currencyId}, locale), InterfaceReport.FORMAT_NOTE);
report.println(" ... " + UtilProperties.getMessage(resource, "ok", locale), InterfaceReport.FORMAT_OK);
}
return true;
}
public void parseRowByRow(XSSFSheet sheet) {
int rows = sheet.getPhysicalNumberOfRows();
List<Object[]> colNames = ColNamesList.get(pricatFileVersion);
int colNumber = colNames.size();
int emptyRowStart = -1;
int emptyRowEnd = -1;
for (int i = headerRowNo + 1; i < rows; i++) {
XSSFRow row = sheet.getRow(i);
if (UtilValidate.isEmpty(row) || isEmptyRow(row, colNumber, false)) {
if (emptyRowStart == -1) {
report.print("(" + (i + 1) + ") ", InterfaceReport.FORMAT_NOTE);
emptyRowStart = i;
} else {
emptyRowEnd = i;
}
continue;
} else {
if (emptyRowStart != -1) {
if (emptyRowEnd != -1) {
report.print(" - (" + (emptyRowEnd + 1) + ") ", InterfaceReport.FORMAT_NOTE);
}
report.print(UtilProperties.getMessage(resource, "ExcelEmptyRow", locale), InterfaceReport.FORMAT_NOTE);
report.println(" ... " + UtilProperties.getMessage(resource, "skipped", locale), InterfaceReport.FORMAT_NOTE);
emptyRowStart = -1;
emptyRowEnd = -1;
}
}
report.print("(" + (i + 1) + ") ", InterfaceReport.FORMAT_NOTE);
List<Object> cellContents = getCellContents(row, colNames, colNumber);
try {
if (parseCellContentsAndStore(row, cellContents)) {
report.println(" ... " + UtilProperties.getMessage(resource, "ok", locale), InterfaceReport.FORMAT_OK);
} else {
report.println(" ... " + UtilProperties.getMessage(resource, "skipped", locale), InterfaceReport.FORMAT_NOTE);
}
} catch (GenericTransactionException e) {
report.println(e);
}
}
if (emptyRowEnd != -1) {
report.print(" - (" + (emptyRowEnd + 1) + ") ", InterfaceReport.FORMAT_NOTE);
report.print(UtilProperties.getMessage(resource, "ExcelEmptyRow", locale), InterfaceReport.FORMAT_NOTE);
report.println(" ... " + UtilProperties.getMessage(resource, "skipped", locale), InterfaceReport.FORMAT_NOTE);
}
}
/**
* Check data according to business logic. If data is ok, store it.
*
* @param row
* @param cellContents
* @return
* @throws GenericTransactionException
*/
public boolean parseCellContentsAndStore(XSSFRow row, List<Object> cellContents) throws GenericTransactionException {
if (UtilValidate.isEmpty(cellContents)) {
return false;
}
switch(pricatFileVersion) {
case "V1.1":
default:
return parseCellContentsAndStoreV1_X(row, cellContents);
}
}
private boolean parseCellContentsAndStoreV1_X(XSSFRow row, List<Object> cellContents) throws GenericTransactionException {
if (UtilValidate.isEmpty(cellContents)) {
return false;
}
// 1. check if facilityId is in the facilities belong to the user, or if the name is correct for the id
String facilityName = (String) getCellContent(cellContents, "Facility Name");
String facilityId = (String) getCellContent(cellContents, "FacilityId");
if (!isFacilityOk(row, facilityName, facilityId))
return false;
// 2. get productCategoryId
String ownerPartyId = facilities.get(facilityId)[1];
String productCategoryId = getProductCategoryId(cellContents, ownerPartyId);
// 3. get productFeatureId of brand
String brandName = (String) getCellContent(cellContents, "Brand");
String brandId = getBrandId(brandName, ownerPartyId);
if (UtilValidate.isEmpty(brandId)) {
return false;
}
// 4. get productId from brandId, model name
String modelName = (String) getCellContent(cellContents, "Style No");
String productName = (String) getCellContent(cellContents, "Product Name");
BigDecimal listPrice = (BigDecimal) getCellContent(cellContents, "List Price");
String productId = getProductId(row, brandId, modelName, productName, productCategoryId, ownerPartyId, listPrice);
if (UtilValidate.isEmpty(productId) || UtilValidate.isEmpty(listPrice)) {
return false;
}
// 5. update color and size if necessary
String color = (String) getCellContent(cellContents, "Color");
if (UtilValidate.isEmpty(color) || UtilValidate.isEmpty(color.trim())) {
color = defaultColorName;
}
String dimension = (String) getCellContent(cellContents, "Size");
if (UtilValidate.isEmpty(dimension) || UtilValidate.isEmpty(dimension.trim())) {
dimension = defaultDimensionName;
}
Map<String, Object> features = updateColorAndDimension(productId, ownerPartyId, color, dimension);
if (ServiceUtil.isError(features)) {
if (features.containsKey("index") && String.valueOf(features.get("index")).contains("0")) {
int cell = headerColNames.indexOf("Color");
XSSFCell colorCell = row.getCell(cell);
errorMessages.put(new CellReference(colorCell), UtilProperties.getMessage(resource, "PricatColorError", locale));
}
if (features.containsKey("index") && String.valueOf(features.get("index")).contains("1")) {
int cell = headerColNames.indexOf("Size");
XSSFCell colorCell = row.getCell(cell);
errorMessages.put(new CellReference(colorCell), UtilProperties.getMessage(resource, "PricatDimensionError", locale));
}
return false;
}
String colorId = (String) features.get("colorId");
String dimensionId = (String) features.get("dimensionId");
// 6. update skuIds by productId
String barcode = (String) getCellContent(cellContents, "Barcode");
BigDecimal inventory = (BigDecimal) getCellContent(cellContents, "Stock Qty");
BigDecimal averageCost = (BigDecimal) getCellContent(cellContents, "Average Cost");
String skuId = updateSku(row, productId, ownerPartyId, facilityId, barcode, inventory, colorId, color, dimensionId, dimension, listPrice, averageCost);
if (UtilValidate.isEmpty(skuId)) {
return false;
}
// 7. store prices
BigDecimal memberPrice = (BigDecimal) getCellContent(cellContents, "Member Price");
Map<String, Object> results = updateSkuPrice(skuId, ownerPartyId, memberPrice);
if (ServiceUtil.isError(results)) {
return false;
}
return true;
}
public String updateSku(XSSFRow row, String productId, String ownerPartyId, String facilityId, String barcode, BigDecimal inventory,
String colorId, String color, String dimensionId, String dimension, BigDecimal listPrice, BigDecimal averageCost) {
return "sampleSkuId";
}
public String getProductId(XSSFRow row, String brandId, String modelName, String productName, String productCategoryId, String ownerPartyId, BigDecimal listPrice) {
return "sampleProductId";
}
public Object getCellContent(List<Object> cellContents, String colName) {
if (UtilValidate.isNotEmpty(headerColNames) && headerColNames.contains(colName)) {
return cellContents.get(headerColNames.indexOf(colName));
}
return null;
}
public String getProductCategoryId(List<Object> cellContents, String ownerPartyId) {
return "sampleProductCategoryId";
}
public boolean isFacilityOk(XSSFRow row, String facilityName, String facilityId) {
if (!facilities.containsKey(facilityId)) {
if (UtilValidate.isEmpty(facilityId) && facilities.keySet().size() == 1) {
if (UtilValidate.isEmpty(facilityName)) {
return true;
} else {
String theFacilityId = (String) facilities.keySet().toArray()[0];
String name = facilities.get(theFacilityId)[0];
if (!name.equals(facilityName)) {
String errorMessage = UtilProperties.getMessage(resource, "FacilityNameNotMatchId", new Object[]{theFacilityId, name, facilityName}, locale);
report.println();
report.print(errorMessage, InterfaceReport.FORMAT_ERROR);
XSSFCell cell = row.getCell(0);
errorMessages.put(new CellReference(cell), errorMessage);
return false;
}
}
} else {
String errorMessage = UtilProperties.getMessage(resource, "FacilityNotBelongToYou", new Object[]{facilityName, facilityId}, locale);
report.println();
report.print(errorMessage, InterfaceReport.FORMAT_ERROR);
XSSFCell cell = row.getCell(1);
errorMessages.put(new CellReference(cell), errorMessage);
return false;
}
} else {
String name = facilities.get(facilityId)[0];
if (!name.equals(facilityName)) {
String errorMessage = UtilProperties.getMessage(resource, "FacilityNameNotMatchId", new Object[]{facilityId, name, facilityName}, locale);
report.println();
report.print(errorMessage, InterfaceReport.FORMAT_ERROR);
XSSFCell cell = row.getCell(0);
errorMessages.put(new CellReference(cell), errorMessage);
return false;
}
}
return true;
}
public boolean isTableHeaderMatched(XSSFSheet sheet) {
List<Object[]> columnNames = ColNamesList.get(pricatFileVersion);
short cols = sheet.getRow(headerRowNo).getLastCellNum();
report.print(UtilProperties.getMessage(resource, "StartCheckHeaderColNum", new Object[] {pricatFileVersion}, locale), InterfaceReport.FORMAT_NOTE);
if (cols != columnNames.size()) {
report.print(UtilProperties.getMessage(resource, "HeaderColNumNotMatch", new Object[] {String.valueOf(cols), String.valueOf(columnNames.size())}, locale), InterfaceReport.FORMAT_WARNING);
if (cols < columnNames.size()) {
report.println(UtilProperties.getMessage(resource, "HeaderColNumShortThanRequired", new Object[] {String.valueOf(columnNames.size())}, locale), InterfaceReport.FORMAT_ERROR);
return false;
} else {
report.println(UtilProperties.getMessage(resource, "UseHeaderColNum", new Object[] {String.valueOf(columnNames.size())}, locale), InterfaceReport.FORMAT_WARNING);
cols = (short) columnNames.size();
}
} else {
report.println(UtilProperties.getMessage(resource, "ok", locale), InterfaceReport.FORMAT_OK);
}
report.print(UtilProperties.getMessage(resource, "StartCheckHeaderColLabel", new Object[] {pricatFileVersion}, locale), InterfaceReport.FORMAT_NOTE);
boolean foundLabelNotMatch = false;
for (int i = 0; i < cols; i++) {
String coltext = sheet.getRow(headerRowNo).getCell(i).getStringCellValue().trim();
headerColNames.add(coltext);
Object[] versionColumn = columnNames.get(i);
if (!coltext.equals(versionColumn[0])) {
report.println(UtilProperties.getMessage(resource, "HeaderColLabelNotMatch", new Object[] {String.valueOf(headerRowNo + 1), String.valueOf(i + 1), coltext, versionColumn[0]}, locale), InterfaceReport.FORMAT_ERROR);
foundLabelNotMatch = true;
} else {
report.print(" " + coltext, InterfaceReport.FORMAT_NOTE);
if (i < cols - 1) {
report.print(",", InterfaceReport.FORMAT_NOTE);
}
}
}
if (foundLabelNotMatch) {
report.println();
return false;
}
report.println(" ... " + UtilProperties.getMessage(resource, "ok", locale), InterfaceReport.FORMAT_OK);
return true;
}
public boolean isVersionSupported(XSSFSheet sheet) {
report.print(UtilProperties.getMessage(resource, "StartCheckPricatVersion", locale), InterfaceReport.FORMAT_NOTE);
pricatFileVersion = sheet.getRow(2).getCell(0).getStringCellValue().trim();
if (ColNamesList.containsKey(pricatFileVersion)) {
report.print(" " + pricatFileVersion + " ... ", InterfaceReport.FORMAT_NOTE);
report.println(UtilProperties.getMessage(resource, "ok", locale), InterfaceReport.FORMAT_OK);
} else {
report.println(UtilProperties.getMessage(resource, "error", locale), InterfaceReport.FORMAT_ERROR);
report.println(UtilProperties.getMessage(resource, "PricatVersionNotSupport", new Object[] {pricatFileVersion}, locale), InterfaceReport.FORMAT_ERROR);
return false;
}
return true;
}
public boolean containsDataRows(XSSFSheet sheet) {
int rows = sheet.getPhysicalNumberOfRows();
if (rows > headerRowNo + 1) {
report.println(UtilProperties.getMessage(resource, "PricatTableRows", new Object[] {String.valueOf(headerRowNo + 1), String.valueOf(rows - headerRowNo - 1), sheet.getSheetName()}, locale), InterfaceReport.FORMAT_NOTE);
} else {
report.println(UtilProperties.getMessage(resource, "PricatNoDataRows", new Object[] {sheet.getSheetName()}, locale), InterfaceReport.FORMAT_ERROR);
return false;
}
return true;
}
/**
* The Object[] have 4 elements, they are:
* 1. Header Label Name.
* 2. Cell data type to return.
* 3. Boolean value to indicate whether the column is required.
* 4. Boolean value to indicate whether the column is a price when cell data type is BigDecimal, this element is optional.
*
* @param version
* @return List of Object[]
*/
private static List<Object[]> genExcelHeaderNames(String version){
switch (version) {
case "V1.1":
default:
return genExcelHeaderNamesV1_1();
}
}
/**
* Get V1.1 pricat excel header names and attributes.
*
* @return list of Object[]
*/
private static List<Object[]> genExcelHeaderNamesV1_1() {
List<Object[]> listHeaderName = new ArrayList<Object[]>();
listHeaderName.add(new Object[] {"Facility Name",
XSSFCell.CELL_TYPE_STRING,
Boolean.TRUE});
listHeaderName.add(new Object[] {"FacilityId",
XSSFCell.CELL_TYPE_STRING,
Boolean.TRUE});
listHeaderName.add(new Object[] {"Category L1",
XSSFCell.CELL_TYPE_STRING,
Boolean.FALSE});
listHeaderName.add(new Object[] {"Category L2",
XSSFCell.CELL_TYPE_STRING,
Boolean.FALSE});
listHeaderName.add(new Object[] {"Category L3",
XSSFCell.CELL_TYPE_STRING,
Boolean.FALSE});
listHeaderName.add(new Object[] {"Category L4",
XSSFCell.CELL_TYPE_STRING,
Boolean.FALSE});
listHeaderName.add(new Object[] {"Brand",
XSSFCell.CELL_TYPE_STRING,
Boolean.TRUE});
listHeaderName.add(new Object[] {"Style No",
XSSFCell.CELL_TYPE_STRING,
Boolean.TRUE});
listHeaderName.add(new Object[] {"Product Name",
XSSFCell.CELL_TYPE_STRING,
Boolean.TRUE});
listHeaderName.add(new Object[] {"Color",
XSSFCell.CELL_TYPE_STRING,
Boolean.FALSE});
listHeaderName.add(new Object[] {"Size",
XSSFCell.CELL_TYPE_STRING,
Boolean.FALSE});
listHeaderName.add(new Object[] {"Barcode",
XSSFCell.CELL_TYPE_STRING,
Boolean.FALSE});
listHeaderName.add(new Object[] {"Stock Qty",
XSSFCell.CELL_TYPE_NUMERIC,
Boolean.TRUE});
listHeaderName.add(new Object[] {"Average Cost",
XSSFCell.CELL_TYPE_NUMERIC,
Boolean.TRUE,
Boolean.TRUE});
listHeaderName.add(new Object[] {"List Price",
XSSFCell.CELL_TYPE_NUMERIC,
Boolean.TRUE,
Boolean.TRUE});
listHeaderName.add(new Object[] {"Member Price",
XSSFCell.CELL_TYPE_NUMERIC,
Boolean.FALSE,
Boolean.TRUE});
return listHeaderName;
}
@Override
public void parsePricatExcel() {
parsePricatExcel(true);
}
/**
* Get data by version definition.
*
* @param row
* @param colNames
* @param size
* @return
*/
public List<Object> getCellContents(XSSFRow row, List<Object[]> colNames, int size) {
List<Object> results = new ArrayList<Object>();
boolean foundError = false;
if (isEmptyRow(row, size, true)) {
return null;
}
// check and get data
for (int i = 0; i < size; i++) {
XSSFCell cell = null;
if (row.getPhysicalNumberOfCells() > i) {
cell = row.getCell(i);
}
if (cell == null) {
if (((Boolean) colNames.get(i)[2]).booleanValue() && (facilities.keySet().size() > 1 || (facilities.keySet().size() == 1 && i >= 2))) {
report.print(UtilProperties.getMessage(resource, "ErrorColCannotEmpty", new Object[] {colNames.get(i)[0]}, locale), InterfaceReport.FORMAT_WARNING);
cell = row.createCell(i);
errorMessages.put(new CellReference(cell), UtilProperties.getMessage(resource, "ErrorColCannotEmpty", new Object[] {colNames.get(i)[0]}, locale));
foundError = true;
results.add(null);
continue;
} else {
cell = row.createCell(i);
}
}
int cellType = cell.getCellType();
String cellValue = formatter.formatCellValue(cell);
if (UtilValidate.isNotEmpty(cellValue) && UtilValidate.isNotEmpty(cellValue.trim())) {
if (cellType == XSSFCell.CELL_TYPE_FORMULA) {
try {
cellValue = BigDecimal.valueOf(cell.getNumericCellValue()).setScale(FinAccountHelper.decimals, FinAccountHelper.rounding).toString();
} catch (IllegalStateException e) {
try {
cellValue = cell.getStringCellValue();
} catch (IllegalStateException e1) {
// do nothing
}
}
report.print(((i == 0)?"":", ") + cellValue, InterfaceReport.FORMAT_NOTE);
} else {
report.print(((i == 0)?"":", ") + cellValue, InterfaceReport.FORMAT_NOTE);
}
} else {
report.print(((i == 0)?"":","), InterfaceReport.FORMAT_NOTE);
}
if (((Boolean) colNames.get(i)[2]).booleanValue() && UtilValidate.isEmpty(cellValue) && (facilities.keySet().size() > 1 || (facilities.keySet().size() == 1 && i >= 2))) {
report.print(UtilProperties.getMessage(resource, "ErrorColCannotEmpty", new Object[] {colNames.get(i)[0]}, locale), InterfaceReport.FORMAT_WARNING);
errorMessages.put(new CellReference(cell), UtilProperties.getMessage(resource, "ErrorColCannotEmpty", new Object[] {colNames.get(i)[0]}, locale));
foundError = true;
results.add(null);
continue;
}
if (((Boolean) colNames.get(i)[2]).booleanValue() && cellType != (int) colNames.get(i)[1]) {
// String warningMessage = "";
if ((int) colNames.get(i)[1] == XSSFCell.CELL_TYPE_STRING) {
if (UtilValidate.isNotEmpty(cellValue) && UtilValidate.isNotEmpty(cellValue.trim())) {
results.add(cellValue);
} else {
results.add(null);
}
} else if ((int) colNames.get(i)[1] == XSSFCell.CELL_TYPE_NUMERIC) {
if (cell.getCellType() != XSSFCell.CELL_TYPE_STRING) {
cell.setCellType(XSSFCell.CELL_TYPE_STRING);
}
try {
results.add(BigDecimal.valueOf(Double.parseDouble(cell.getStringCellValue())).setScale(FinAccountHelper.decimals, FinAccountHelper.rounding));
} catch (NumberFormatException e) {
results.add(null);
errorMessages.put(new CellReference(cell), UtilProperties.getMessage(resource, "ErrorParseValueToNumeric", locale));
}
}
} else {
if (UtilValidate.isEmpty(cellValue) || UtilValidate.isEmpty(cellValue.trim())) {
results.add(null);
continue;
}
if ((int) colNames.get(i)[1] == XSSFCell.CELL_TYPE_STRING) {
if (cell.getCellType() == XSSFCell.CELL_TYPE_STRING) {
cellValue = cell.getStringCellValue().trim();
results.add(cellValue);
} else {
results.add(cellValue.trim());
}
} else if ((int) colNames.get(i)[1] == XSSFCell.CELL_TYPE_NUMERIC) {
if (cell.getCellType() == XSSFCell.CELL_TYPE_STRING) {
try {
results.add(BigDecimal.valueOf(Double.valueOf(cell.getStringCellValue())));
} catch (NumberFormatException e) {
results.add(null);
errorMessages.put(new CellReference(cell), UtilProperties.getMessage(resource, "ErrorParseValueToNumeric", locale));
}
} else if (cell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) {
try {
results.add(BigDecimal.valueOf(cell.getNumericCellValue()).setScale(FinAccountHelper.decimals, FinAccountHelper.rounding));
} catch (NumberFormatException e) {
results.add(null);
errorMessages.put(new CellReference(cell), UtilProperties.getMessage(resource, "ErrorParseValueToNumeric", locale));
}
} else {
try {
results.add(BigDecimal.valueOf(Double.valueOf(cellValue)).setScale(FinAccountHelper.decimals, FinAccountHelper.rounding));
} catch (NumberFormatException e) {
results.add(null);
errorMessages.put(new CellReference(cell), UtilProperties.getMessage(resource, "ErrorParseValueToNumeric", locale));
}
}
}
}
}
if (foundError) {
return null;
}
return results;
}
protected int getHeaderRowNo() {
return headerRowNo;
}
}