Skip to content

Commit 3a374ed

Browse files
authored
Merge pull request #471 from Breeding-Insight/bug/BI-2632
Bug/bi 2632
2 parents aac64d8 + b424fbf commit 3a374ed

2 files changed

Lines changed: 58 additions & 0 deletions

File tree

src/main/java/org/breedinginsight/brapi/v2/BrAPIGermplasmController.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,26 @@ public HttpResponse<Response<DataResponse<List<BrAPIGermplasm>>>> getGermplasm(
222222
}
223223
}
224224

225+
@Get("/programs/{programId}/germplasm/lists/{listDbId}/export{?fileExtension}")
226+
@Produces(value = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
227+
@ProgramSecured(roleGroups = {ProgramSecuredRoleGroup.PROGRAM_SCOPED_ROLES})
228+
public HttpResponse<StreamedFile> germplasmListExport(
229+
@PathVariable("programId") UUID programId, @PathVariable("listDbId") String listDbId, @QueryValue(defaultValue = "XLSX") String fileExtension) {
230+
String downloadErrorMessage = "An error occurred while generating the download file. Contact the development team at bidevteam@cornell.edu.";
231+
try {
232+
FileType extension = Enum.valueOf(FileType.class, fileExtension);
233+
DownloadFile germplasmListFile = germplasmService.exportGermplasmList(programId, listDbId, extension);
234+
HttpResponse<StreamedFile> germplasmListExport = HttpResponse.ok(germplasmListFile.getStreamedFile()).header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename="+germplasmListFile.getFileName()+extension.getExtension());
235+
return germplasmListExport;
236+
}
237+
catch (Exception e) {
238+
log.info(e.getMessage(), e);
239+
e.printStackTrace();
240+
HttpResponse response = HttpResponse.status(HttpStatus.INTERNAL_SERVER_ERROR, downloadErrorMessage).contentType(MediaType.TEXT_PLAIN).body(downloadErrorMessage);
241+
return response;
242+
}
243+
}
244+
225245
@Get("/programs/{programId}/germplasm/export{?fileExtension,list}")
226246
@Produces(value = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
227247
@ProgramSecured(roleGroups = {ProgramSecuredRoleGroup.PROGRAM_SCOPED_ROLES})

src/test/java/org/breedinginsight/brapi/v2/GermplasmControllerIntegrationTest.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,22 @@
2525
import org.breedinginsight.model.Program;
2626
import org.breedinginsight.model.Species;
2727
import org.breedinginsight.services.SpeciesService;
28+
import org.breedinginsight.utilities.FileUtil;
2829
import org.breedinginsight.utilities.response.mappers.GermplasmQueryMapper;
2930
import org.jooq.DSLContext;
3031
import org.junit.jupiter.api.*;
32+
import org.junit.jupiter.params.ParameterizedTest;
33+
import org.junit.jupiter.params.provider.CsvSource;
3134

3235
import javax.inject.Inject;
36+
import java.io.ByteArrayInputStream;
3337
import java.io.File;
3438
import java.time.OffsetDateTime;
3539
import java.util.ArrayList;
3640
import java.util.List;
3741
import java.util.Map;
42+
import java.util.Objects;
43+
import tech.tablesaw.api.Table;
3844

3945
import static io.micronaut.http.HttpRequest.GET;
4046
import static io.micronaut.http.HttpRequest.POST;
@@ -238,6 +244,38 @@ public void getAllGermplasmListsSuccess() {
238244
}
239245
}
240246

247+
@ParameterizedTest
248+
@CsvSource(value = {"CSV", "XLSX", "XLS"})
249+
@SneakyThrows
250+
public void germplasmListExport(String extension) {
251+
String programId = validProgram.getId().toString();
252+
String germplasmListDbId = fetchGermplasmListDbId(programId);
253+
254+
// Build the endpoint to get germplasm by germplasm list.
255+
String endpoint = String.format("/programs/%s/germplasm/lists/%s/export?fileExtension=%s", programId, germplasmListDbId, extension);
256+
257+
// Get germplasm by list.
258+
Flowable<HttpResponse<byte[]>> call = client.exchange(
259+
GET(endpoint).cookie(new NettyCookie("phylo-token", "test-registered-user")), byte[].class
260+
);
261+
262+
HttpResponse<byte[]> response = call.blockingFirst();
263+
264+
assertEquals(HttpStatus.OK, response.getStatus());
265+
266+
267+
ByteArrayInputStream bodyStream = new ByteArrayInputStream(Objects.requireNonNull(response.body()));
268+
269+
Table download = Table.create();
270+
if (extension.equals("CSV")) {
271+
download = FileUtil.parseTableFromCsv(bodyStream);
272+
}
273+
if (extension.equals("XLS") || extension.equals("XLSX")) {
274+
download = FileUtil.parseTableFromExcel(bodyStream, 0);
275+
}
276+
int dataSize = download.rowCount();
277+
assertEquals(3, dataSize, "Wrong number of germplasm were returned");
278+
}
241279
@Test
242280
@SneakyThrows
243281
public void getAllGermplasmByListSuccess() {

0 commit comments

Comments
 (0)