diff --git a/core/com.b2international.snowowl.core.rest/src/com/b2international/snowowl/core/rest/suggest/SuggestRestParameters.java b/core/com.b2international.snowowl.core.rest/src/com/b2international/snowowl/core/rest/suggest/SuggestRestParameters.java index 2e98b72560a..45739830f58 100644 --- a/core/com.b2international.snowowl.core.rest/src/com/b2international/snowowl/core/rest/suggest/SuggestRestParameters.java +++ b/core/com.b2international.snowowl.core.rest/src/com/b2international/snowowl/core/rest/suggest/SuggestRestParameters.java @@ -34,6 +34,9 @@ public class SuggestRestParameters { @Parameter(description = "The preferred term display in case of SNOMED CT", example = "PT", schema = @Schema(allowableValues = {"FSN", "PT", "ID_ONLY"}, defaultValue = "PT")) private String preferredDisplay = "PT"; + + @Parameter(description = "Accepted language tags, in order of preference") + private String acceptLanguage; public String getCodeSystemPath() { return codeSystemPath; @@ -67,4 +70,11 @@ public void setPreferredDisplay(String preferredDisplay) { this.preferredDisplay = preferredDisplay; } + public String getAcceptLanguage() { + return acceptLanguage; + } + + public void setAcceptLanguage(String acceptLanguage) { + this.acceptLanguage = acceptLanguage; + } } diff --git a/core/com.b2international.snowowl.core.rest/src/com/b2international/snowowl/core/rest/suggest/SuggestRestService.java b/core/com.b2international.snowowl.core.rest/src/com/b2international/snowowl/core/rest/suggest/SuggestRestService.java index 0f80da46bd3..1a5805cc056 100644 --- a/core/com.b2international.snowowl.core.rest/src/com/b2international/snowowl/core/rest/suggest/SuggestRestService.java +++ b/core/com.b2international.snowowl.core.rest/src/com/b2international/snowowl/core/rest/suggest/SuggestRestService.java @@ -18,7 +18,9 @@ import java.util.List; import java.util.stream.Collectors; +import org.elasticsearch.common.Strings; import org.springdoc.api.annotations.ParameterObject; +import org.springframework.http.HttpHeaders; import org.springframework.web.bind.annotation.*; import com.b2international.snowowl.core.codesystem.CodeSystemRequests; @@ -29,6 +31,7 @@ import com.b2international.snowowl.core.rest.AbstractRestService; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; @@ -51,9 +54,16 @@ public class SuggestRestService extends AbstractRestService { @ApiResponse(responseCode = "400", description = "Bad Request") }) @GetMapping - public Promise getSuggest(@ParameterObject final SuggestRestParameters params) { + public Promise getSuggest( + @ParameterObject + final SuggestRestParameters params, + + @Parameter(description = "Accepted language tags, in order of preference", example = "en-US;q=0.8,en-GB;q=0.6") + @RequestHeader(value=HttpHeaders.ACCEPT_LANGUAGE, defaultValue="en-US;q=0.8,en-GB;q=0.6", required=false) + final String acceptLanguage) { return CodeSystemRequests.prepareSuggestConcepts() .setLimit(params.getLimit()) + .setLocales(Strings.isNullOrEmpty(params.getAcceptLanguage()) ? acceptLanguage : params.getAcceptLanguage()) .setPreferredDisplay(params.getPreferredDisplay()) .filterByTerm(params.getTerm()) .sortBy(SORT_BY) @@ -69,9 +79,16 @@ public Promise getSuggest(@ParameterObject final SuggestRestParamet @ApiResponse(responseCode = "400", description = "Bad Request") }) @PostMapping(consumes = { AbstractRestService.JSON_MEDIA_TYPE }) - public Promise postSuggest(@RequestBody final SuggestRestParameters body) { + public Promise postSuggest( + @RequestBody + final SuggestRestParameters body, + + @Parameter(description = "Accepted language tags, in order of preference", example = "en-US;q=0.8,en-GB;q=0.6") + @RequestHeader(value=HttpHeaders.ACCEPT_LANGUAGE, defaultValue="en-US;q=0.8,en-GB;q=0.6", required=false) + final String acceptLanguage) { return CodeSystemRequests.prepareSuggestConcepts() .setLimit(body.getLimit()) + .setLocales(Strings.isNullOrEmpty(body.getAcceptLanguage()) ? acceptLanguage : body.getAcceptLanguage()) .setPreferredDisplay(body.getPreferredDisplay()) .filterByTerm(body.getTerm()) .sortBy(SORT_BY) @@ -87,10 +104,17 @@ public Promise postSuggest(@RequestBody final SuggestRestParameters @ApiResponse(responseCode = "400", description = "Bad Request") }) @PostMapping(value = "/bulk", consumes = { AbstractRestService.JSON_MEDIA_TYPE }) - public Promise> postBulkSuggest(@RequestBody final List body) { + public Promise> postBulkSuggest( + @RequestBody + final List body, + + @Parameter(description = "Accepted language tags, in order of preference", example = "en-US;q=0.8,en-GB;q=0.6") + @RequestHeader(value=HttpHeaders.ACCEPT_LANGUAGE, defaultValue="en-US;q=0.8,en-GB;q=0.6", required=false) + final String acceptLanguage) { final List> promises = body.stream().map(params -> { return CodeSystemRequests.prepareSuggestConcepts() .setLimit(params.getLimit()) + .setLocales(Strings.isNullOrEmpty(params.getAcceptLanguage()) ? acceptLanguage : params.getAcceptLanguage()) .setPreferredDisplay(params.getPreferredDisplay()) .filterByTerm(params.getTerm()) .sortBy(SORT_BY)