diff --git a/pom.xml b/pom.xml
index 3efa4c4db9..b67f3b1640 100644
--- a/pom.xml
+++ b/pom.xml
@@ -85,7 +85,7 @@
2.2.8.RELEASE
- 0.145
+ 0.148-SNAPSHOT
0.50
1.1
1.15
diff --git a/registry-events/src/main/java/org/gbif/registry/events/collections/SubEntityCollectionEvent.java b/registry-events/src/main/java/org/gbif/registry/events/collections/SubEntityCollectionEvent.java
index 823aebd132..d455a21e9e 100644
--- a/registry-events/src/main/java/org/gbif/registry/events/collections/SubEntityCollectionEvent.java
+++ b/registry-events/src/main/java/org/gbif/registry/events/collections/SubEntityCollectionEvent.java
@@ -72,7 +72,7 @@ private SubEntityCollectionEvent(
String subEntityKey,
EventType eventType) {
super(eventType, collectionEntityClass);
- this.collectionEntityKey = Preconditions.checkNotNull(collectionEntityKey);
+ this.collectionEntityKey = collectionEntityKey;
this.subEntityClass = Preconditions.checkNotNull(subEntityClass);
this.subEntity = subEntity;
this.subEntityKey = Preconditions.checkNotNull(subEntityKey);
diff --git a/registry-integration-tests/src/test/java/org/gbif/registry/ws/it/collections/service/merge/BaseMergeServiceIT.java b/registry-integration-tests/src/test/java/org/gbif/registry/ws/it/collections/service/merge/BaseMergeServiceIT.java
index fe726ec3eb..58c8108e9f 100644
--- a/registry-integration-tests/src/test/java/org/gbif/registry/ws/it/collections/service/merge/BaseMergeServiceIT.java
+++ b/registry-integration-tests/src/test/java/org/gbif/registry/ws/it/collections/service/merge/BaseMergeServiceIT.java
@@ -58,7 +58,6 @@
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.test.context.support.WithMockUser;
import static org.gbif.registry.domain.collections.Constants.IDIGBIO_NAMESPACE;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
@@ -66,6 +65,7 @@
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
public abstract class BaseMergeServiceIT<
T extends
@@ -106,7 +106,6 @@ public BaseMergeServiceIT(
this.personService = personService;
}
- @WithMockUser(username = "aa")
@Test
public void mergeTest() {
T toReplace = createEntityToReplace();
@@ -173,8 +172,8 @@ public void mergeTest() {
assertEquals(2, replaced.getMachineTags().size());
assertEquals(1, replacementUpdated.getMachineTags().size());
assertEquals(2, replacementUpdated.getContacts().size());
- assertEquals(a2, replacementUpdated.getAddress());
- assertEquals(ma1, replacementUpdated.getMailingAddress());
+ assertTrue(a2.lenientEquals(replacementUpdated.getAddress()));
+ assertTrue(ma1.lenientEquals(replacementUpdated.getMailingAddress()));
assertEquals(replacement.getCreatedBy(), replacementUpdated.getCreatedBy());
assertNull(replacementUpdated.getDeleted());
assertEquals(1, replaced.getOccurrenceMappings().size());
diff --git a/registry-persistence/src/main/java/org/gbif/registry/persistence/mapper/collections/ChangeSuggestionMapper.java b/registry-persistence/src/main/java/org/gbif/registry/persistence/mapper/collections/ChangeSuggestionMapper.java
index 4e23bef4b4..d0ee437735 100644
--- a/registry-persistence/src/main/java/org/gbif/registry/persistence/mapper/collections/ChangeSuggestionMapper.java
+++ b/registry-persistence/src/main/java/org/gbif/registry/persistence/mapper/collections/ChangeSuggestionMapper.java
@@ -25,7 +25,7 @@ public interface ChangeSuggestionMapper {
List list(
@Param("status") Status status,
@Param("type") Type type,
- @Param("entityType") CollectionEntityType collectionEntityType,
+ @Param("collectionEntityType") CollectionEntityType collectionEntityType,
@Param("country") Country country,
@Param("proposer") String proposer,
@Param("entityKey") UUID entityKey,
@@ -34,7 +34,7 @@ List list(
long count(
@Param("status") Status status,
@Param("type") Type type,
- @Param("entityType") CollectionEntityType collectionEntityType,
+ @Param("collectionEntityType") CollectionEntityType collectionEntityType,
@Param("country") Country country,
@Param("proposer") String proposer,
@Param("entityKey") UUID entityKey);
diff --git a/registry-persistence/src/main/resources/liquibase/095-grscicoll-audit-log.xml b/registry-persistence/src/main/resources/liquibase/095-grscicoll-audit-log.xml
index 434581fc9e..d02fffd917 100644
--- a/registry-persistence/src/main/resources/liquibase/095-grscicoll-audit-log.xml
+++ b/registry-persistence/src/main/resources/liquibase/095-grscicoll-audit-log.xml
@@ -9,13 +9,16 @@
CREATE TABLE grscicoll_audit_log (
key bigserial NOT NULL PRIMARY KEY,
trace_id bigserial NOT NULL,
- entity_type enum_grscicoll_entity_type NOT NULL,
- entity_key uuid,
+ collection_entity_type enum_grscicoll_entity_type NOT NULL,
+ subEntityType varchar(50),
+ operation varchar(50) NOT NULL,
+ collection_entity_key uuid,
+ sub_entity_key varchar(36),
+ replacement_key uuid,
created timestamptz NOT NULL DEFAULT now(),
created_by varchar NOT NULL CHECK (assert_min_length(created_by, 3)),
pre_state jsonb,
- post_state jsonb,
- note text);
+ post_state jsonb)
]]>
diff --git a/registry-service/src/main/java/org/gbif/registry/service/collections/merge/BaseMergeService.java b/registry-service/src/main/java/org/gbif/registry/service/collections/merge/BaseMergeService.java
index 8d7b6b4b91..9fe3208b97 100644
--- a/registry-service/src/main/java/org/gbif/registry/service/collections/merge/BaseMergeService.java
+++ b/registry-service/src/main/java/org/gbif/registry/service/collections/merge/BaseMergeService.java
@@ -23,6 +23,7 @@
import org.gbif.api.model.registry.Commentable;
import org.gbif.api.model.registry.Identifiable;
import org.gbif.api.model.registry.Identifier;
+import org.gbif.api.model.registry.MachineTag;
import org.gbif.api.model.registry.MachineTaggable;
import org.gbif.api.model.registry.Taggable;
import org.gbif.api.service.collections.PrimaryCollectionEntityService;
@@ -35,7 +36,6 @@
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
-import java.util.Objects;
import java.util.Set;
import java.util.UUID;
import java.util.function.UnaryOperator;
@@ -109,30 +109,27 @@ && isIDigBioRecord(replacement)) {
// merge entity fields
T updatedEntityToReplace = mergeEntityFields(entityToReplace, replacement);
- updatedEntityToReplace.setModifiedBy(authentication.getName());
primaryEntityService.update(updatedEntityToReplace);
// copy the identifiers
entityToReplace
.getIdentifiers()
.forEach(
- i -> {
- i.setKey(null);
- // TODO: created must be null, create utility method to reuse
- primaryEntityService.addIdentifier(replacementKey, i);
- });
+ i ->
+ primaryEntityService.addIdentifier(
+ replacementKey, new Identifier(i.getType(), i.getIdentifier())));
// copy iDigBio machine tags
entityToReplace.getMachineTags().stream()
.filter(mt -> mt.getNamespace().equals(IDIGBIO_NAMESPACE))
.forEach(
- mt -> {
- mt.setKey(null);
- primaryEntityService.addMachineTag(replacementKey, mt);
- });
+ mt ->
+ primaryEntityService.addMachineTag(
+ replacementKey,
+ new MachineTag(mt.getNamespace(), mt.getName(), mt.getValue())));
// merge contacts
- Objects.requireNonNull(entityToReplace.getContacts()).stream()
+ entityToReplace.getContacts().stream()
.filter(c -> !replacement.getContacts().contains(c))
.forEach(c -> primaryEntityService.addContact(replacementKey, c.getKey()));
@@ -147,7 +144,9 @@ && isIDigBioRecord(replacement)) {
occMappings.forEach(
om -> {
om.setKey(null);
- primaryEntityService.addOccurrenceMapping(replacementKey, om);
+ primaryEntityService.addOccurrenceMapping(
+ replacementKey,
+ new OccurrenceMapping(om.getCode(), om.getIdentifier(), om.getDatasetKey()));
});
additionalOperations(entityToReplace, replacement);
diff --git a/registry-service/src/main/java/org/gbif/registry/service/collections/merge/CollectionMergeService.java b/registry-service/src/main/java/org/gbif/registry/service/collections/merge/CollectionMergeService.java
index e6acbe8fab..759e4654da 100644
--- a/registry-service/src/main/java/org/gbif/registry/service/collections/merge/CollectionMergeService.java
+++ b/registry-service/src/main/java/org/gbif/registry/service/collections/merge/CollectionMergeService.java
@@ -53,7 +53,6 @@ void checkMergeExtraPreconditions(Collection entityToReplace, Collection replace
replacement.getReplacedBy() == null, "Cannot do a merge with an entity that was replaced");
}
- // TODO: si uso primaryCollectionEntity lo puedo mover a la base
@Override
Collection mergeEntityFields(Collection entityToReplace, Collection replacement) {
setNullFields(replacement, entityToReplace);
@@ -85,7 +84,7 @@ Collection mergeEntityFields(Collection entityToReplace, Collection replacement)
@Override
void additionalOperations(Collection entityToReplace, Collection replacement) {
// fix primary collection of contacts
- PagingResponse persons = personService.list(null, entityToReplace.getKey(), null, null);
+ PagingResponse persons = personService.list(null, null, entityToReplace.getKey(), null);
persons
.getResults()
.forEach(
diff --git a/registry-service/src/main/java/org/gbif/registry/service/collections/merge/InstitutionMergeService.java b/registry-service/src/main/java/org/gbif/registry/service/collections/merge/InstitutionMergeService.java
index dbfd3f3f17..fd95750417 100644
--- a/registry-service/src/main/java/org/gbif/registry/service/collections/merge/InstitutionMergeService.java
+++ b/registry-service/src/main/java/org/gbif/registry/service/collections/merge/InstitutionMergeService.java
@@ -18,10 +18,13 @@
import org.gbif.api.model.collections.AlternativeCode;
import org.gbif.api.model.collections.Collection;
import org.gbif.api.model.collections.Institution;
+import org.gbif.api.model.collections.OccurrenceMapping;
import org.gbif.api.model.collections.Person;
import org.gbif.api.model.collections.request.CollectionSearchRequest;
import org.gbif.api.model.collections.view.CollectionView;
import org.gbif.api.model.common.paging.PagingResponse;
+import org.gbif.api.model.registry.Identifier;
+import org.gbif.api.model.registry.MachineTag;
import org.gbif.api.service.collections.CollectionService;
import org.gbif.api.service.collections.InstitutionService;
import org.gbif.api.service.collections.PersonService;
@@ -91,7 +94,6 @@ && isIDigBioRecord(institutionToConvert)) {
}
Collection newCollection = new Collection();
- newCollection.setKey(UUID.randomUUID());
newCollection.setCode(institutionToConvert.getCode());
newCollection.setAlternativeCodes(institutionToConvert.getAlternativeCodes());
newCollection.setName(institutionToConvert.getName());
@@ -105,17 +107,12 @@ && isIDigBioRecord(institutionToConvert)) {
newCollection.setApiUrl(institutionToConvert.getApiUrl());
newCollection.setAddress(institutionToConvert.getAddress());
newCollection.setMailingAddress(institutionToConvert.getMailingAddress());
- newCollection.setCreatedBy(authentication.getName());
- newCollection.setModifiedBy(authentication.getName());
// if there is no institution passed we need to create a new institution
if (institutionKeyForNewCollection == null) {
Institution newInstitution = new Institution();
- newInstitution.setKey(UUID.randomUUID());
newInstitution.setCode(institutionToConvert.getCode());
newInstitution.setName(newInstitutionName);
- newInstitution.setCreatedBy(authentication.getName());
- newInstitution.setModifiedBy(authentication.getName());
institutionService.create(newInstitution);
newCollection.setInstitutionKey(newInstitution.getKey());
@@ -140,19 +137,18 @@ && isIDigBioRecord(institutionToConvert)) {
institutionToConvert
.getIdentifiers()
.forEach(
- i -> {
- i.setKey(null);
- collectionService.addIdentifier(newCollection.getKey(), i);
- });
+ i ->
+ collectionService.addIdentifier(
+ newCollection.getKey(), new Identifier(i.getType(), i.getIdentifier())));
// move the machine tags
institutionToConvert
.getMachineTags()
.forEach(
- mt -> {
- mt.setKey(null);
- collectionService.addMachineTag(newCollection.getKey(), mt);
- });
+ mt ->
+ collectionService.addMachineTag(
+ newCollection.getKey(),
+ new MachineTag(mt.getNamespace(), mt.getName(), mt.getValue())));
// move the occurrence mappings
institutionToConvert
@@ -160,7 +156,9 @@ && isIDigBioRecord(institutionToConvert)) {
.forEach(
om -> {
om.setKey(null);
- collectionService.addOccurrenceMapping(newCollection.getKey(), om);
+ collectionService.addOccurrenceMapping(
+ newCollection.getKey(),
+ new OccurrenceMapping(om.getCode(), om.getIdentifier(), om.getDatasetKey()));
});
// copy the contacts