From d3acb21e8cbbd4fff180c3db402120726c58cd7e Mon Sep 17 00:00:00 2001 From: "michele.artini" Date: Thu, 3 Oct 2024 14:22:37 +0200 Subject: [PATCH] extend methods for subcommunities --- .../community/CommunityApiController.java | 593 ++++++++++-------- 1 file changed, 328 insertions(+), 265 deletions(-) diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityApiController.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityApiController.java index 3826e070..84c55d46 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityApiController.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityApiController.java @@ -15,6 +15,7 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.data.domain.Page; @@ -275,6 +276,333 @@ public class CommunityApiController extends AbstractExporterController { } } + // COMMON PROPERTIES + + @PostMapping("/community/{id}/subjects") + @Operation(summary = "associate a subject to a community or a sub-community", description = "associate a subject to a community or a sub-community", tags = { + C, C_SUB, W + }) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "404", description = "not found"), + @ApiResponse(responseCode = "500", description = "unexpected error") + }) + public CommunityDetails addCommunitySubjects( + @PathVariable final String id, + @RequestParam(required = false) final String subCommunityId, + @RequestBody final String[] subjects) throws CommunityException { + + if (subCommunityId != null && !id.equals(CommunityMappingUtils.calculateMainCommunityId(subCommunityId))) { + throw new CommunityException("The sub-collection id does not start with " + id); + } + + try { + return communityService.addCommunitySubjects(ObjectUtils.firstNonNull(subCommunityId, id), subjects); + } catch (final ResourceNotFoundException e) { + throw e; + } catch (final Throwable e) { + throw new CommunityException(e); + } + } + + @DeleteMapping("/community/{id}/subjects") + @Operation(summary = "remove subjects from a community or a sub-community", description = "remove subjects from a community or a sub-community", tags = { + C, C_SUB, W + }) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "404", description = "not found"), + @ApiResponse(responseCode = "500", description = "unexpected error") + }) + public CommunityDetails removeCommunitySubjects( + @PathVariable final String id, + @RequestParam(required = false) final String subCommunityId, + @RequestBody final String[] subjects) throws CommunityException { + + if (subCommunityId != null && !id.equals(CommunityMappingUtils.calculateMainCommunityId(subCommunityId))) { + throw new CommunityException("The sub-collection id does not start with " + id); + } + + try { + return communityService.removeCommunitySubjects(ObjectUtils.firstNonNull(subCommunityId, id), subjects); + } catch (final ResourceNotFoundException e) { + throw e; + } catch (final Throwable e) { + throw new CommunityException(e); + } + } + + @PostMapping("/community/{id}/fos") + @Operation(summary = "associate a fos to a community or a sub-community", description = "associate a fos to a community or a sub-community", tags = { + C, C_SUB, W + }) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "404", description = "not found"), + @ApiResponse(responseCode = "500", description = "unexpected error") + }) + public CommunityDetails addCommunityFOS( + @PathVariable final String id, + @RequestParam(required = false) final String subCommunityId, + @RequestBody final String[] subjects) throws CommunityException { + + if (subCommunityId != null && !id.equals(CommunityMappingUtils.calculateMainCommunityId(subCommunityId))) { + throw new CommunityException("The sub-collection id does not start with " + id); + } + + try { + return communityService.addCommunityFOS(ObjectUtils.firstNonNull(subCommunityId, id), subjects); + } catch (final ResourceNotFoundException e) { + throw e; + } catch (final Throwable e) { + throw new CommunityException(e); + } + } + + @DeleteMapping("/community/{id}/fos") + @Operation(summary = "remove fos from a community or a sub-community", description = "remove fos from a community or a sub-community", tags = { + C, C_SUB, W + }) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "404", description = "not found"), + @ApiResponse(responseCode = "500", description = "unexpected error") + }) + public CommunityDetails removeCommunityFOS( + @PathVariable final String id, + @RequestParam(required = false) final String subCommunityId, + @RequestBody final String[] subjects) throws CommunityException { + + if (subCommunityId != null && !id.equals(CommunityMappingUtils.calculateMainCommunityId(subCommunityId))) { + throw new CommunityException("The sub-collection id does not start with " + id); + } + + try { + return communityService.removeCommunityFOS(ObjectUtils.firstNonNull(subCommunityId, id), subjects); + } catch (final ResourceNotFoundException e) { + throw e; + } catch (final Throwable e) { + throw new CommunityException(e); + } + } + + @PostMapping("/community/{id}/sdg") + @Operation(summary = "associate a sdg to a community or a sub-community", description = "associate a sdg to the community or a sub-community", tags = { + C, C_SUB, W + }) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "404", description = "not found"), + @ApiResponse(responseCode = "500", description = "unexpected error") + }) + public CommunityDetails addCommunitySDG( + @PathVariable final String id, + @RequestParam(required = false) final String subCommunityId, + @RequestBody final String[] subjects) throws CommunityException { + + if (subCommunityId != null && !id.equals(CommunityMappingUtils.calculateMainCommunityId(subCommunityId))) { + throw new CommunityException("The sub-collection id does not start with " + id); + } + + try { + return communityService.addCommunitySDG(ObjectUtils.firstNonNull(subCommunityId, id), subjects); + } catch (final ResourceNotFoundException e) { + throw e; + } catch (final Throwable e) { + throw new CommunityException(e); + } + } + + @DeleteMapping("/community/{id}/sdg") + @Operation(summary = "remove sdg from a community or a sub-community", description = "remove sdg from a community or a sub-community", tags = { + C, C_SUB, W + }) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "404", description = "not found"), + @ApiResponse(responseCode = "500", description = "unexpected error") + }) + public CommunityDetails removeCommunitySDG( + @PathVariable final String id, + @RequestParam(required = false) final String subCommunityId, + @RequestBody final String[] subjects) throws CommunityException { + + if (subCommunityId != null && !id.equals(CommunityMappingUtils.calculateMainCommunityId(subCommunityId))) { + throw new CommunityException("The sub-collection id does not start with " + id); + } + + try { + return communityService.removeCommunitySDG(ObjectUtils.firstNonNull(subCommunityId, id), subjects); + } catch (final ResourceNotFoundException e) { + throw e; + } catch (final Throwable e) { + throw new CommunityException(e); + } + } + + @PostMapping("/community/{id}/advancedConstraint") + @Operation(summary = "the set of constraints to be used to extend the association between result and community or sub-community", description = "the set of constraints to be used to extend the association between result and community or sub-community", tags = { + C, C_SUB, W + }) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "404", description = "not found"), + @ApiResponse(responseCode = "500", description = "unexpected error") + }) + public CommunityDetails addAdvancedConstraint( + @PathVariable final String id, + @RequestParam(required = false) final String subCommunityId, + @RequestBody final SelectionCriteria advancedConstraint) throws CommunityException { + + if (subCommunityId != null && !id.equals(CommunityMappingUtils.calculateMainCommunityId(subCommunityId))) { + throw new CommunityException("The sub-collection id does not start with " + id); + } + + try { + return communityService.addCommunityAdvancedConstraint(ObjectUtils.firstNonNull(subCommunityId, id), advancedConstraint); + } catch (final ResourceNotFoundException e) { + throw e; + } catch (final Throwable e) { + throw new CommunityException(e); + } + } + + @DeleteMapping("/community/{id}/advancedConstraint") + @Operation(summary = "remove the constraints to extend the association result community from a community or a sub-community", description = "remove the constraints to extend the association result community from a community or a sub-community", tags = { + C, C_SUB, W + }) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "404", description = "not found"), + @ApiResponse(responseCode = "500", description = "unexpected error") + }) + public CommunityDetails removeAdvancedConstraint( + @PathVariable final String id, + @RequestParam(required = false) final String subCommunityId) throws CommunityException { + + if (subCommunityId != null && !id.equals(CommunityMappingUtils.calculateMainCommunityId(subCommunityId))) { + throw new CommunityException("The sub-collection id does not start with " + id); + } + + try { + return communityService.removeCommunityAdvancedConstraint(ObjectUtils.firstNonNull(subCommunityId, id)); + } catch (final ResourceNotFoundException e) { + throw e; + } catch (final Throwable e) { + throw new CommunityException(e); + } + } + + @PostMapping("/community/{id}/removeConstraint") + @Operation(summary = "the set of constraints to be used to remove the association between result and community or sub-community", description = "the set of constraints to be used to remove the association between result and community or sub-community", tags = { + C, C_SUB, W + }) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "404", description = "not found"), + @ApiResponse(responseCode = "500", description = "unexpected error") + }) + public CommunityDetails addRemoveConstraint( + @PathVariable final String id, + @RequestParam(required = false) final String subCommunityId, + @RequestBody final SelectionCriteria removeConstraint) throws CommunityException { + + if (subCommunityId != null && !id.equals(CommunityMappingUtils.calculateMainCommunityId(subCommunityId))) { + throw new CommunityException("The sub-collection id does not start with " + id); + } + + try { + return communityService.addCommunityRemoveConstraint(ObjectUtils.firstNonNull(subCommunityId, id), removeConstraint); + } catch (final ResourceNotFoundException e) { + throw e; + } catch (final Throwable e) { + throw new CommunityException(e); + } + } + + @DeleteMapping("/community/{id}/removeConstraint") + @Operation(summary = "remove the constraints to remove the association beetween result and community or sub-community", description = "remove the constraints to remove the association beetween result and community or sub-community", tags = { + C, C_SUB, W + }) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "404", description = "not found"), + @ApiResponse(responseCode = "500", description = "unexpected error") + }) + public CommunityDetails removeRemoveConstraint(@PathVariable final String id, @RequestParam(required = false) final String subCommunityId) + throws CommunityException { + + if (subCommunityId != null && !id.equals(CommunityMappingUtils.calculateMainCommunityId(subCommunityId))) { + throw new CommunityException("The sub-collection id does not start with " + id); + } + + try { + return communityService.removeCommunityRemoveConstraint(ObjectUtils.firstNonNull(subCommunityId, id)); + } catch (final ResourceNotFoundException e) { + throw e; + } catch (final Throwable e) { + throw new CommunityException(e); + } + } + + @PostMapping("/community/{id}/zenodocommunities") + @Operation(summary = "associate a Zenodo community to a community or a sub-community", description = "associate a Zenodo community to the community or a sub-community", tags = { + C_ZC, C_SUB, W + }) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "404", description = "not found"), + @ApiResponse(responseCode = "500", description = "unexpected error") + }) + public CommunityDetails addCommunityZenodoCommunity( + @PathVariable final String id, + @RequestParam(required = false) final String subCommunityId, + @RequestParam(required = false, defaultValue = "false") final boolean main, + @RequestParam final String zenodocommunity) throws CommunityException { + + if (subCommunityId != null && !id.equals(CommunityMappingUtils.calculateMainCommunityId(subCommunityId))) { + throw new CommunityException("The sub-collection id does not start with " + id); + } + + try { + return communityService.addCommunityZenodoCommunity(ObjectUtils.firstNonNull(subCommunityId, id), zenodocommunity, main); + } catch (final ResourceNotFoundException e) { + throw e; + } catch (final Throwable e) { + throw new CommunityException(e); + } + + } + + @DeleteMapping("/community/{id}/zenodocommunities") + @Operation(summary = "remove a Zenodo community from a community or a sub-community", description = "remove a Zenodo community from a community or a sub-community", tags = { + C_ZC, C_SUB, W + }) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "404", description = "not found"), + @ApiResponse(responseCode = "500", description = "unexpected error") + }) + public void removeCommunityZenodoCommunity( + @PathVariable final String id, + @RequestParam(required = false) final String subCommunityId, + @RequestParam(required = false, defaultValue = "false") final boolean main, + @RequestParam final String zenodocommunity) throws CommunityException { + if (subCommunityId != null && !id.equals(CommunityMappingUtils.calculateMainCommunityId(subCommunityId))) { + throw new CommunityException("The sub-collection id does not start with " + id); + } + + try { + communityService.removeCommunityZenodoCommunity(ObjectUtils.firstNonNull(subCommunityId, id), zenodocommunity, main); + } catch (final ResourceNotFoundException e) { + throw e; + } catch (final Throwable e) { + throw new CommunityException(e); + } + } + + // PROJECTS + @GetMapping("/community/{id}/projects/{page}/{size}") @Operation(summary = "get community projects", description = "get community projects", tags = { C_PJ, R @@ -300,8 +628,6 @@ public class CommunityApiController extends AbstractExporterController { } } - // PROJECTS - @PostMapping("/community/{id}/projects") @Operation(summary = "associate a project to the community, provide all the fields or the method will overwrite with nulls the fields that are missing", description = "associate a project to the community, provide all the fields or the method will overwrite with nulls the fields that are missing", tags = { C_PJ, W @@ -729,269 +1055,6 @@ public class CommunityApiController extends AbstractExporterController { // ********************** - @PostMapping("/community/{id}/subjects") - @Operation(summary = "associate a subject to the community", description = "associate a subject to the community", tags = { - C, W - }) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "OK"), - @ApiResponse(responseCode = "404", description = "not found"), - @ApiResponse(responseCode = "500", description = "unexpected error") - }) - public CommunityDetails addCommunitySubjects( - @PathVariable final String id, - @RequestBody final String[] subjects) throws CommunityException { - - try { - return communityService.addCommunitySubjects(id, subjects); - } catch (final ResourceNotFoundException e) { - throw e; - } catch (final Throwable e) { - throw new CommunityException(e); - } - } - - @DeleteMapping("/community/{id}/subjects") - @Operation(summary = "remove subjects from a community", description = "remove subjects from a community", tags = { - C, W - }) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "OK"), - @ApiResponse(responseCode = "404", description = "not found"), - @ApiResponse(responseCode = "500", description = "unexpected error") - }) - public CommunityDetails removeCommunitySubjects( - @PathVariable final String id, - @RequestBody final String[] subjects) throws CommunityException { - - try { - return communityService.removeCommunitySubjects(id, subjects); - } catch (final ResourceNotFoundException e) { - throw e; - } catch (final Throwable e) { - throw new CommunityException(e); - } - } - - @PostMapping("/community/{id}/fos") - @Operation(summary = "associate a fos to the community", description = "associate a fos to the community", tags = { - C, W - }) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "OK"), - @ApiResponse(responseCode = "404", description = "not found"), - @ApiResponse(responseCode = "500", description = "unexpected error") - }) - public CommunityDetails addCommunityFOS( - @PathVariable final String id, - @RequestBody final String[] subjects) throws CommunityException { - - try { - return communityService.addCommunityFOS(id, subjects); - } catch (final ResourceNotFoundException e) { - throw e; - } catch (final Throwable e) { - throw new CommunityException(e); - } - } - - @DeleteMapping("/community/{id}/fos") - @Operation(summary = "remove fos from a community", description = "remove fos from a community", tags = { - C, W - }) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "OK"), - @ApiResponse(responseCode = "404", description = "not found"), - @ApiResponse(responseCode = "500", description = "unexpected error") - }) - public CommunityDetails removeCommunityFOS( - @PathVariable final String id, - @RequestBody final String[] subjects) throws CommunityException { - - try { - return communityService.removeCommunityFOS(id, subjects); - } catch (final ResourceNotFoundException e) { - throw e; - } catch (final Throwable e) { - throw new CommunityException(e); - } - } - - @PostMapping("/community/{id}/sdg") - @Operation(summary = "associate a sdg to the community", description = "associate a sdg to the community", tags = { - C, W - }) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "OK"), - @ApiResponse(responseCode = "404", description = "not found"), - @ApiResponse(responseCode = "500", description = "unexpected error") - }) - public CommunityDetails addCommunitySDG( - @PathVariable final String id, - @RequestBody final String[] subjects) throws CommunityException { - - try { - return communityService.addCommunitySDG(id, subjects); - } catch (final ResourceNotFoundException e) { - throw e; - } catch (final Throwable e) { - throw new CommunityException(e); - } - } - - @DeleteMapping("/community/{id}/sdg") - @Operation(summary = "remove sdg from a community", description = "remove sdg from a community", tags = { - C, W - }) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "OK"), - @ApiResponse(responseCode = "404", description = "not found"), - @ApiResponse(responseCode = "500", description = "unexpected error") - }) - public CommunityDetails removeCommunitySDG( - @PathVariable final String id, - @RequestBody final String[] subjects) throws CommunityException { - - try { - return communityService.removeCommunitySDG(id, subjects); - } catch (final ResourceNotFoundException e) { - throw e; - } catch (final Throwable e) { - throw new CommunityException(e); - } - } - - @PostMapping("/community/{id}/advancedConstraint") - @Operation(summary = "the set of constraints to be used to extend the association between result and community", description = "the set of constraints to be used to extend the association between result and community", tags = { - C, W - }) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "OK"), - @ApiResponse(responseCode = "404", description = "not found"), - @ApiResponse(responseCode = "500", description = "unexpected error") - }) - public CommunityDetails addAdvancedConstraint( - @PathVariable final String id, - @RequestBody final SelectionCriteria advancedConstraint) throws CommunityException { - - try { - return communityService.addCommunityAdvancedConstraint(id, advancedConstraint); - } catch (final ResourceNotFoundException e) { - throw e; - } catch (final Throwable e) { - throw new CommunityException(e); - } - } - - @DeleteMapping("/community/{id}/advancedConstraint") - @Operation(summary = "remove the constraints to extend the association result community from a community", description = "remove the constraints to extend the association result community from a community", tags = { - C, W - }) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "OK"), - @ApiResponse(responseCode = "404", description = "not found"), - @ApiResponse(responseCode = "500", description = "unexpected error") - }) - public CommunityDetails removeAdvancedConstraint( - @PathVariable final String id) throws CommunityException { - - try { - return communityService.removeCommunityAdvancedConstraint(id); - } catch (final ResourceNotFoundException e) { - throw e; - } catch (final Throwable e) { - throw new CommunityException(e); - } - } - - @PostMapping("/community/{id}/removeConstraint") - @Operation(summary = "the set of constraints to be used to remove the association between result and community", description = "the set of constraints to be used to remove the association between result and community", tags = { - C, W - }) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "OK"), - @ApiResponse(responseCode = "404", description = "not found"), - @ApiResponse(responseCode = "500", description = "unexpected error") - }) - public CommunityDetails addRemoveConstraint( - @PathVariable final String id, - @RequestBody final SelectionCriteria removeConstraint) throws CommunityException { - - try { - return communityService.addCommunityRemoveConstraint(id, removeConstraint); - } catch (final ResourceNotFoundException e) { - throw e; - } catch (final Throwable e) { - throw new CommunityException(e); - } - } - - @DeleteMapping("/community/{id}/removeConstraint") - @Operation(summary = "remove the constraints to remove the association beetween result and community", description = "remove the constraints to remove the association beetween result and community", tags = { - C, W - }) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "OK"), - @ApiResponse(responseCode = "404", description = "not found"), - @ApiResponse(responseCode = "500", description = "unexpected error") - }) - public CommunityDetails removeRemoveConstraint(@PathVariable final String id) throws CommunityException { - - try { - return communityService.removeCommunityRemoveConstraint(id); - } catch (final ResourceNotFoundException e) { - throw e; - } catch (final Throwable e) { - throw new CommunityException(e); - } - } - - @PostMapping("/community/{id}/zenodocommunities") - @Operation(summary = "associate a Zenodo community to the community", description = "associate a Zenodo community to the community", tags = { - C_ZC, W - }) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "OK"), - @ApiResponse(responseCode = "404", description = "not found"), - @ApiResponse(responseCode = "500", description = "unexpected error") - }) - public CommunityDetails addCommunityZenodoCommunity( - @PathVariable final String id, - @RequestParam(required = false, defaultValue = "false") final boolean main, - @RequestParam final String zenodocommunity) throws CommunityException { - - try { - return communityService.addCommunityZenodoCommunity(id, zenodocommunity, main); - } catch (final ResourceNotFoundException e) { - throw e; - } catch (final Throwable e) { - throw new CommunityException(e); - } - - } - - @DeleteMapping("/community/{id}/zenodocommunities") - @Operation(summary = "remove a Zenodo community from a community", description = "remove a Zenodo community from a community", tags = { - C_ZC, W - }) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "OK"), - @ApiResponse(responseCode = "404", description = "not found"), - @ApiResponse(responseCode = "500", description = "unexpected error") - }) - public void removeCommunityZenodoCommunity( - @PathVariable final String id, - @RequestParam(required = false, defaultValue = "false") final boolean main, - @RequestParam final String zenodocommunity) throws CommunityException { - try { - communityService.removeCommunityZenodoCommunity(id, zenodocommunity, main); - } catch (final ResourceNotFoundException e) { - throw e; - } catch (final Throwable e) { - throw new CommunityException(e); - } - } - @GetMapping("/community/{zenodoId}/openairecommunities") @Operation(summary = "get the list of OpenAIRE communities associated to a given Zenodo community", description = "get the list of OpenAIRE communities associated to a given Zenodo community", tags = { C_ZC, R