Skip to content
Snippets Groups Projects

chore[aou-1869]: refactor export bibliograpy endpoint

Merged Homada.Boumedane requested to merge aou-1869_update_export_bibliograpy_controller into master
1 unresolved thread
1 file
+ 32
22
Compare changes
  • Side-by-side
  • Inline
@@ -23,7 +23,10 @@
package ch.unige.aou.controller.admin;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -32,15 +35,14 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import ch.unige.solidify.controller.SolidifyController;
import ch.unige.solidify.exception.SolidifyHttpErrorException;
import ch.unige.solidify.rest.FacetPage;
import ch.unige.solidify.rest.FacetRequest;
@@ -64,7 +66,7 @@ import ch.unige.aou.service.query.QueryBuilderService;
@EveryonePermissions
@ConditionalOnBean(AdminController.class)
@RequestMapping(UrlPath.ADMIN_EXPORT_PUBLICATIONS)
public class ExportMetadataController {
public class ExportMetadataController extends SolidifyController {
private final QueryBuilderService queryBuilderService;
private final ExportMetadataService exportMetadataService;
@@ -72,7 +74,7 @@ public class ExportMetadataController {
private final IndexResourceService<String, PublicationIndexEntry> indexResourceService;
private final String indexName;
public ExportMetadataController(AouProperties aouProperties,QueryBuilderService queryBuilderService,
public ExportMetadataController(AouProperties aouProperties, QueryBuilderService queryBuilderService,
IndexResourceService<String, PublicationIndexEntry> indexResourceService,
ExportMetadataService exportMetadataService) {
this.queryBuilderService = queryBuilderService;
@@ -82,14 +84,15 @@ public class ExportMetadataController {
}
@GetMapping(value = "/" + AouActionName.EXPORT)
public HttpEntity<String> getExportBibliography(
public HttpEntity<StreamingResponseBody> getExportBibliography(
@RequestParam(name = "searches", required = false) String commaSeparatedSearchIds,
@RequestParam(name = "publicationIds", required = false) String commaSeparatedPublicationIds,
@RequestParam(name = "days", required = false) String searchFrom,
@RequestParam(name = "format") String format) {
ExportFormat exportFormat = ExportFormat.fromValue(format);
if (StringTool.isNullOrEmpty(commaSeparatedSearchIds) && StringTool.isNullOrEmpty(commaSeparatedPublicationIds) && StringTool.isNullOrEmpty(searchFrom)) {
if (StringTool.isNullOrEmpty(commaSeparatedSearchIds) && StringTool.isNullOrEmpty(commaSeparatedPublicationIds) && StringTool.isNullOrEmpty(
searchFrom)) {
throw new SolidifyHttpErrorException(HttpStatus.BAD_REQUEST, "Either one search id or one publication id or a date is required");
}
@@ -103,7 +106,8 @@ public class ExportMetadataController {
publicationIds.addAll(Arrays.stream(commaSeparatedPublicationIds.split(",")).map(String::trim).toList());
}
AouSearchCondition searchConditions = this.queryBuilderService.getSearchesOrPublicationsSearchCondition(searchFrom, searchIds, publicationIds);
AouSearchCondition searchConditions = this.queryBuilderService.getSearchesOrPublicationsSearchCondition(searchFrom, searchIds,
publicationIds);
List<FacetRequest> facetRequests = new ArrayList<>(); // not interested in facets here
List<SearchCondition> searchConditionList = this.queryBuilderService.replaceAliasesByIndexField(List.of(searchConditions));
@@ -114,21 +118,27 @@ public class ExportMetadataController {
if (!results.getContent().isEmpty()) {
result = this.exportMetadataService.exportMetadata(exportFormat, results.getContent());
}
HttpHeaders headers = this.getHeaders(exportFormat);
return new ResponseEntity<>(result, headers, HttpStatus.OK);
// convert the string result to Inputstream
InputStream is = new BufferedInputStream(new ByteArrayInputStream(result.getBytes(StandardCharsets.UTF_8)));
return this.buildDownloadResponseEntity(is, this.getFileName(exportFormat), this.getContentType(exportFormat), 0L);
}
private String getFileName(ExportFormat format) {
return switch (format) {
case XML -> "bibliography.xml";
case JSON -> "bibliography.json";
case CSV -> "bibliography.csv";
};
}
public HttpHeaders getHeaders(ExportFormat format) {
HttpHeaders headers = new HttpHeaders();
switch (format) {
case XML: headers.setContentType(MediaType.APPLICATION_XML);
break;
case JSON: headers.setContentType(MediaType.APPLICATION_JSON);
break;
case CSV: headers.setContentType(MediaType.TEXT_PLAIN);
break;
}
return headers;
private String getContentType(ExportFormat format) {
return switch (format) {
case CSV -> "text/csv";
case XML -> "application/xml";
case JSON -> "application/json";
};
}
}
Loading