Skip to content
Merged
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 @@ -82,10 +82,15 @@ public Optional<BrAPIGermplasm> getGermplasmByDBID(UUID programId, String germpl
return germplasmDAO.getGermplasmByDBID(germplasmId, programId);
}

public List<Map<String, Object>> processListData(List<BrAPIGermplasm> germplasm, BrAPIListDetails germplasmList){
public List<Map<String, Object>> processListData(List<BrAPIGermplasm> germplasm, BrAPIListDetails germplasmList, Program program){
Map<String, BrAPIGermplasm> germplasmByName = new HashMap<>();
for (BrAPIGermplasm g: germplasm) {
germplasmByName.put(g.getGermplasmName(), g);
// Use the full, unique germplasmName with programKey and accessionNumber (GID) for 2 reasons:
// 1. the BrAPI list items are full names, and
// 2. germplasmNames alone are not unique within a program, this led to unexpected behavior, see BI-2344.
String uniqueGermplasmName = String.format("%s [%s-%s]", g.getGermplasmName(), program.getKey(), g.getAccessionNumber());
g.setGermplasmName(uniqueGermplasmName); // Mutate the germplasmName in place for later use.
germplasmByName.put(uniqueGermplasmName, g);
}

List<Map<String, Object>> processedData = new ArrayList<>();
Expand All @@ -107,14 +112,13 @@ public List<Map<String, Object>> processListData(List<BrAPIGermplasm> germplasm,
for (String germplasmName: orderedGermplasmNames) {
// Increment entryNumber.
++entryNumber;
// Strip program key and accession number from germplasm name.
germplasmName = Utilities.removeUnknownProgramKey(germplasmName); // TODO: could move to the germplasmList != null codepath.
// Lookup the BrAPI germplasm in the map.
BrAPIGermplasm germplasmEntry = germplasmByName.get(germplasmName);

HashMap<String, Object> row = new HashMap<>();
row.put("GID", Integer.valueOf(germplasmEntry.getAccessionNumber()));
row.put("Germplasm Name", germplasmEntry.getGermplasmName());
// Strip programKey and accessionNumber from germplasmName for the file output.
row.put("Germplasm Name", Utilities.removeProgramKeyAnyAccession(germplasmEntry.getGermplasmName(), program.getKey()));
row.put("Breeding Method", germplasmEntry.getAdditionalInfo().get(BrAPIAdditionalInfoFields.GERMPLASM_BREEDING_METHOD).getAsString());
String source = germplasmEntry.getSeedSource();
row.put("Source", source);
Expand Down Expand Up @@ -217,7 +221,7 @@ private BrAPIGermplasm cloneBrAPIGermplasm(BrAPIGermplasm germplasm) {
return (BrAPIGermplasm) gson.fromJson(gson.toJson(germplasm), BrAPIGermplasm.class);
}

public DownloadFile exportGermplasm(UUID programId, FileType fileExtension) throws IllegalArgumentException, ApiException, IOException {
public DownloadFile exportGermplasm(UUID programId, FileType fileExtension) throws IllegalArgumentException, ApiException, IOException, DoesNotExistException {
List<Column> columns = GermplasmFileColumns.getOrderedColumns();

//Retrieve germplasm list data
Expand All @@ -238,7 +242,8 @@ public DownloadFile exportGermplasm(UUID programId, FileType fileExtension) thro

StreamedFile downloadFile;
//Convert list data to List<Map<String, Object>> data to pass into file writer
List<Map<String, Object>> processedData = processListData(germplasm, null);
Program program = programService.getById(programId).orElseThrow(() -> new DoesNotExistException("Could not find program: " + programId));
List<Map<String, Object>> processedData = processListData(germplasm, null, program);

if (fileExtension == FileType.CSV){
downloadFile = CSVWriter.writeToDownload(columns, processedData, fileExtension);
Expand All @@ -249,7 +254,7 @@ public DownloadFile exportGermplasm(UUID programId, FileType fileExtension) thro
return new DownloadFile(fileName, downloadFile);
}

public DownloadFile exportGermplasmList(UUID programId, String listId, FileType fileExtension) throws IllegalArgumentException, ApiException, IOException {
public DownloadFile exportGermplasmList(UUID programId, String listId, FileType fileExtension) throws IllegalArgumentException, ApiException, IOException, DoesNotExistException {
List<Column> columns = GermplasmFileColumns.getOrderedColumns();

//Retrieve germplasm list data
Expand All @@ -260,15 +265,12 @@ public DownloadFile exportGermplasmList(UUID programId, String listId, FileType
List<BrAPIGermplasm> germplasm = germplasmDAO.getGermplasmByRawName(germplasmNames, programId);

String listName = listData.getListName();
Optional<Program> optionalProgram = programService.getById(programId);
if (optionalProgram.isPresent()) {
Program program = optionalProgram.get();
listName = removeAppendedKey(listName, program.getKey());
}
Program program = programService.getById(programId).orElseThrow(() -> new DoesNotExistException("Could not find program: " + programId));
listName = removeAppendedKey(listName, program.getKey());
String fileName = createFileName(listData, listName);
StreamedFile downloadFile;
//Convert list data to List<Map<String, Object>> data to pass into file writer
List<Map<String, Object>> processedData = processListData(germplasm, listData);
List<Map<String, Object>> processedData = processListData(germplasm, listData, program);

if (fileExtension == FileType.CSV){
downloadFile = CSVWriter.writeToDownload(columns, processedData, fileExtension);
Expand Down