Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ private Table parseUploadedFile(CompletedFileUpload file) throws UnsupportedType
//TODO: Allow them to pass in header row index in the future
df = FileUtil.parseTableFromExcel(file.getInputStream(), 0);
} catch (IOException | ParsingException e) {
throw new HttpStatusException(HttpStatus.BAD_REQUEST, "Error parsing excel: " + e.getMessage());
throw new HttpStatusException(HttpStatus.BAD_REQUEST, String.format("Error(s) detected in file, %s. %s. Import cannot proceed.", file.getFilename(), e.getMessage()));
}
} else {
throw new UnsupportedTypeException("Unsupported mime type");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ public ProgramUpload updateTraitUpload(UUID programId, CompletedFileUpload file,
traits = parser.parseExcel(new BOMInputStream(file.getInputStream(), false));
} catch(IOException | ParsingException e) {
log.error(e.getMessage());
throw new HttpStatusException(HttpStatus.BAD_REQUEST, "Error parsing excel: " + e.getMessage());
throw new HttpStatusException( HttpStatus.BAD_REQUEST, String.format("Error(s) detected in file, %s. %s. Import cannot proceed.", file.getFilename(), e.getMessage()) );
}
} else {
throw new UnsupportedTypeException("Unsupported mime type");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,16 @@
*/
package org.breedinginsight.services.parsers;

import org.breedinginsight.utilities.FileUtil;

public enum ParsingExceptionType {

MISSING_COLUMN_NAMES("Missing column names row"),
COLUMN_NAME_NOT_STRING("Column name must be string cell"),
DUPLICATE_COLUMN_NAMES("Found duplicate column names"),
MISSING_EXPECTED_COLUMNS("Missing expected columns"),
ERROR_READING_FILE("Error reading file"),
MISSING_SHEET("Missing sheet Template"),
MISSING_SHEET( String.format("Worksheet titled '%s' is missing", FileUtil.EXCEL_DATA_SHEET_NAME) ),
EMPTY_ROW("Empty row"),
INVALID_TRAIT_STATUS("Invalid trait status value"),
INVALID_SCALE_CLASS("Invalid scale class value"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,9 @@ public class TraitFileParser {

private static final String LIST_DELIMITER = ";";
private static final String CATEGORY_DELIMITER = "=";
private static final String EXCEL_DATA_SHEET_NAME = "Template";
private static final String EXCEL_DATA_SHEET_NAME = "Data";
private static final String OLD_EXCEL_DATA_SHEET_NAME = "Template";


private static final String TRAIT_STATUS_ACTIVE = "active";
private static final String TRAIT_STATUS_ARCHIVED = "archived";
Expand All @@ -82,8 +84,13 @@ public List<Trait> parseExcel(@NonNull InputStream inputStream) throws ParsingEx
log.error(e.getMessage());
throw new ParsingException(ParsingExceptionType.ERROR_READING_FILE);
}

Sheet sheet = workbook.getSheet(EXCEL_DATA_SHEET_NAME);

// accept the old sheet name ("template") for backwards compatability
if (sheet == null){
sheet = workbook.getSheet(OLD_EXCEL_DATA_SHEET_NAME);
}

if (sheet == null) {
throw new ParsingException(ParsingExceptionType.MISSING_SHEET);
}
Expand Down
18 changes: 14 additions & 4 deletions src/main/java/org/breedinginsight/utilities/FileUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,13 @@
import java.util.*;
import java.util.stream.Collectors;


@Slf4j
public class FileUtil {
public static final String EXCEL_DATA_SHEET_NAME = "Data";
// For backward compatibility
private static final String OLD_GERMPLASM_EXCEL_DATA_SHEET_NAME = "Germplasm Import";
private static final String OLD_EXPERIMENT_EXCEL_DATA_SHEET_NAME = "Experiment Data";

public static Table parseTableFromExcel(InputStream inputStream, Integer headerRowIndex) throws ParsingException {

Expand All @@ -46,10 +51,15 @@ public static Table parseTableFromExcel(InputStream inputStream, Integer headerR
throw new ParsingException(ParsingExceptionType.ERROR_READING_FILE);
}

List<Sheet> sheets = new ArrayList<>();
workbook.sheetIterator().forEachRemaining(sheets::add);
//TODO: Gets the last sheet for now, do we want to allow them to specify which sheet to use?
Sheet sheet = workbook.getSheetAt(sheets.size() - 1);
Sheet sheet = workbook.getSheet(EXCEL_DATA_SHEET_NAME);

//For backward compatibility allow old sheet names
if( sheet == null){ sheet = workbook.getSheet(OLD_GERMPLASM_EXCEL_DATA_SHEET_NAME); }
if( sheet == null){ sheet = workbook.getSheet(OLD_EXPERIMENT_EXCEL_DATA_SHEET_NAME); }

if (sheet == null) {
throw new ParsingException(ParsingExceptionType.MISSING_SHEET);
}
Iterator<Row> rowIterator = sheet.rowIterator();

// Get into format tablesaw can use
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ void writeExcelCheckColumns() {
row.put("Test C", "C");
data.add(row);

InputStream inputStream = ExcelWriter.writeToInputStream("SheetName", columns, data, FileType.XLSX);
InputStream inputStream = ExcelWriter.writeToInputStream("Data", columns, data, FileType.XLSX);
Table resultTable = FileUtil.parseTableFromExcel(inputStream, 0);

assertEquals(1, resultTable.rowCount(), "Wrong number of rows were exported");
Expand Down