diff --git a/registry-integration-tests/src/test/java/org/gbif/registry/ws/it/collections/resource/CollectionResourceIT.java b/registry-integration-tests/src/test/java/org/gbif/registry/ws/it/collections/resource/CollectionResourceIT.java index 2e2eb1600e..d638d2b697 100644 --- a/registry-integration-tests/src/test/java/org/gbif/registry/ws/it/collections/resource/CollectionResourceIT.java +++ b/registry-integration-tests/src/test/java/org/gbif/registry/ws/it/collections/resource/CollectionResourceIT.java @@ -14,6 +14,8 @@ import org.gbif.registry.search.test.EsManageServer; import org.gbif.registry.service.collections.duplicates.CollectionDuplicatesService; import org.gbif.registry.service.collections.duplicates.DuplicatesService; +import org.gbif.registry.service.collections.merge.CollectionMergeService; +import org.gbif.registry.service.collections.merge.MergeService; import org.gbif.registry.ws.client.collections.CollectionClient; import org.gbif.ws.client.filter.SimplePrincipalProvider; @@ -38,6 +40,8 @@ public class CollectionResourceIT extends PrimaryCollectionEntityResourceIT getMockPrimaryEntityService() { @@ -113,6 +117,11 @@ protected DuplicatesService getMockDuplicatesService() { return collectionDuplicatesService; } + @Override + protected MergeService getMockMergeService() { + return collectionMergeService; + } + protected CollectionClient getClient() { return (CollectionClient) baseClient; } diff --git a/registry-integration-tests/src/test/java/org/gbif/registry/ws/it/collections/resource/InstitutionResourceIT.java b/registry-integration-tests/src/test/java/org/gbif/registry/ws/it/collections/resource/InstitutionResourceIT.java index a0275caf47..93fd91bfed 100644 --- a/registry-integration-tests/src/test/java/org/gbif/registry/ws/it/collections/resource/InstitutionResourceIT.java +++ b/registry-integration-tests/src/test/java/org/gbif/registry/ws/it/collections/resource/InstitutionResourceIT.java @@ -1,6 +1,7 @@ package org.gbif.registry.ws.it.collections.resource; import org.gbif.api.model.collections.Institution; +import org.gbif.api.model.collections.merge.ConvertToCollectionParams; import org.gbif.api.model.collections.request.InstitutionSearchRequest; import org.gbif.api.model.common.paging.Pageable; import org.gbif.api.model.common.paging.PagingRequest; @@ -13,6 +14,8 @@ import org.gbif.registry.search.test.EsManageServer; import org.gbif.registry.service.collections.duplicates.DuplicatesService; import org.gbif.registry.service.collections.duplicates.InstitutionDuplicatesService; +import org.gbif.registry.service.collections.merge.InstitutionMergeService; +import org.gbif.registry.service.collections.merge.MergeService; import org.gbif.registry.ws.client.collections.InstitutionClient; import org.gbif.ws.client.filter.SimplePrincipalProvider; @@ -36,6 +39,8 @@ public class InstitutionResourceIT extends PrimaryCollectionEntityResourceIT getMockPrimaryEntityService() { @@ -114,6 +133,11 @@ protected DuplicatesService getMockDuplicatesService() { return institutionDuplicatesService; } + @Override + protected MergeService getMockMergeService() { + return institutionMergeService; + } + protected InstitutionClient getClient() { return (InstitutionClient) baseClient; } diff --git a/registry-integration-tests/src/test/java/org/gbif/registry/ws/it/collections/resource/PrimaryCollectionEntityResourceIT.java b/registry-integration-tests/src/test/java/org/gbif/registry/ws/it/collections/resource/PrimaryCollectionEntityResourceIT.java index 7b3c86f52f..fe2050b8be 100644 --- a/registry-integration-tests/src/test/java/org/gbif/registry/ws/it/collections/resource/PrimaryCollectionEntityResourceIT.java +++ b/registry-integration-tests/src/test/java/org/gbif/registry/ws/it/collections/resource/PrimaryCollectionEntityResourceIT.java @@ -24,6 +24,7 @@ import org.gbif.api.model.collections.duplicates.Duplicate; import org.gbif.api.model.collections.duplicates.DuplicatesRequest; import org.gbif.api.model.collections.duplicates.DuplicatesResult; +import org.gbif.api.model.collections.merge.MergeParams; import org.gbif.api.model.registry.Commentable; import org.gbif.api.model.registry.Identifiable; import org.gbif.api.model.registry.LenientEquals; @@ -34,6 +35,7 @@ import org.gbif.registry.persistence.mapper.collections.params.DuplicatesSearchParams; import org.gbif.registry.search.test.EsManageServer; import org.gbif.registry.service.collections.duplicates.DuplicatesService; +import org.gbif.registry.service.collections.merge.MergeService; import org.gbif.registry.ws.client.collections.BaseCollectionEntityClient; import org.gbif.registry.ws.client.collections.PrimaryCollectionEntityClient; import org.gbif.ws.client.filter.SimplePrincipalProvider; @@ -185,6 +187,16 @@ public void possibleDuplicatesTest() { assertEquals(result.getDuplicates().size(), clientResult.getDuplicates().size()); } + @Test + public void mergeTest() { + doNothing().when(getMockMergeService()).merge(any(UUID.class), any(UUID.class)); + + MergeParams mergeParams = new MergeParams(); + mergeParams.setReplacementEntityKey(UUID.randomUUID()); + assertDoesNotThrow( + () -> getPrimaryCollectionEntityClient().merge(UUID.randomUUID(), mergeParams)); + } + protected PrimaryCollectionEntityClient getPrimaryCollectionEntityClient() { return (PrimaryCollectionEntityClient) baseClient; } @@ -192,4 +204,6 @@ protected PrimaryCollectionEntityClient getPrimaryCollectionEntityClient() { protected abstract PrimaryCollectionEntityService getMockPrimaryEntityService(); protected abstract DuplicatesService getMockDuplicatesService(); + + protected abstract MergeService getMockMergeService(); } diff --git a/registry-ws-client/src/main/java/org/gbif/registry/ws/client/collections/InstitutionClient.java b/registry-ws-client/src/main/java/org/gbif/registry/ws/client/collections/InstitutionClient.java index 80cc4bf55d..751521d676 100644 --- a/registry-ws-client/src/main/java/org/gbif/registry/ws/client/collections/InstitutionClient.java +++ b/registry-ws-client/src/main/java/org/gbif/registry/ws/client/collections/InstitutionClient.java @@ -16,15 +16,19 @@ package org.gbif.registry.ws.client.collections; import org.gbif.api.model.collections.Institution; +import org.gbif.api.model.collections.merge.ConvertToCollectionParams; import org.gbif.api.model.collections.request.InstitutionSearchRequest; import org.gbif.api.model.common.paging.Pageable; import org.gbif.api.model.common.paging.PagingResponse; import org.gbif.api.model.registry.search.collections.KeyCodeNameResult; import java.util.List; +import java.util.UUID; import org.springframework.cloud.openfeign.SpringQueryMap; import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; @@ -50,4 +54,13 @@ public interface InstitutionClient extends PrimaryCollectionEntityClient suggest(@RequestParam(value = "q", required = false) String q); + + @RequestMapping( + method = RequestMethod.POST, + value = "{key}/convertToCollection", + produces = MediaType.APPLICATION_JSON_VALUE, + consumes = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + UUID convertToCollection( + @PathVariable("key") UUID entityKey, @RequestBody ConvertToCollectionParams params); } diff --git a/registry-ws-client/src/main/java/org/gbif/registry/ws/client/collections/PrimaryCollectionEntityClient.java b/registry-ws-client/src/main/java/org/gbif/registry/ws/client/collections/PrimaryCollectionEntityClient.java index b74ad06a63..49b7709849 100644 --- a/registry-ws-client/src/main/java/org/gbif/registry/ws/client/collections/PrimaryCollectionEntityClient.java +++ b/registry-ws-client/src/main/java/org/gbif/registry/ws/client/collections/PrimaryCollectionEntityClient.java @@ -21,6 +21,7 @@ import org.gbif.api.model.collections.Person; import org.gbif.api.model.collections.duplicates.DuplicatesRequest; import org.gbif.api.model.collections.duplicates.DuplicatesResult; +import org.gbif.api.model.collections.merge.MergeParams; import org.gbif.api.model.registry.Identifiable; import org.gbif.api.model.registry.MachineTaggable; import org.gbif.api.model.registry.Taggable; @@ -83,4 +84,10 @@ void deleteOccurrenceMapping( produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody DuplicatesResult findPossibleDuplicates(@SpringQueryMap DuplicatesRequest request); + + @RequestMapping( + method = RequestMethod.POST, + value = "{key}/merge", + consumes = MediaType.APPLICATION_JSON_VALUE) + void merge(@PathVariable("key") UUID entityKey, @RequestBody MergeParams params); }