diff --git a/NEWS.md b/NEWS.md
index c3dcadcff..31239e0a7 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -112,6 +112,7 @@
- Use system user context for processing kafka messages [MODLD-1026](https://folio-org.atlassian.net/browse/MODLD-1026)
- Update dimensions property URI [MODLD-1024](https://folio-org.atlassian.net/browse/MODLD-1024)
- Use GitHub Workflows for Maven [MODLD-971](https://folio-org.atlassian.net/browse/MODLD-971)
+- Get rid of RESOURCE_PREFERRED property [MODLD-1028](https://folio-org.atlassian.net/browse/MODLD-1028)
## 1.0.4 (04-24-2025)
- Work Edit form - Instance read-only section: "Notes about the instance" data is not shown [MODLD-716](https://folio-org.atlassian.net/browse/MODLD-716)
diff --git a/src/main/java/org/folio/linked/data/mapper/dto/resource/common/ReferenceMapperUnit.java b/src/main/java/org/folio/linked/data/mapper/dto/resource/common/ReferenceMapperUnit.java
index 6a8ef1cbd..5b06c9f59 100644
--- a/src/main/java/org/folio/linked/data/mapper/dto/resource/common/ReferenceMapperUnit.java
+++ b/src/main/java/org/folio/linked/data/mapper/dto/resource/common/ReferenceMapperUnit.java
@@ -1,5 +1,6 @@
package org.folio.linked.data.mapper.dto.resource.common;
+import static java.util.Objects.nonNull;
import static org.folio.linked.data.util.ResourceUtils.ensureLatestReplaced;
import lombok.RequiredArgsConstructor;
@@ -9,7 +10,6 @@
import org.folio.linked.data.model.entity.Resource;
import org.folio.linked.data.model.entity.ResourceTypeEntity;
import org.folio.linked.data.service.reference.ReferenceService;
-import org.folio.linked.data.util.ResourceUtils;
@RequiredArgsConstructor
public abstract class ReferenceMapperUnit implements SingleResourceMapperUnit {
@@ -21,7 +21,7 @@ protected ReferenceResponse toReference(Resource resource) {
return new ReferenceResponse()
.id(String.valueOf(latestResource.getId()))
.label(latestResource.getLabel())
- .isPreferred(isPreferred(latestResource))
+ .isPreferred(isFolioResource(latestResource))
.types(latestResource.getTypes().stream().map(ResourceTypeEntity::getUri).toList());
}
@@ -31,7 +31,7 @@ public Resource toEntity(Object dto, Resource parentEntity) {
return referenceService.resolveReference(reference);
}
- protected boolean isPreferred(Resource resource) {
- return ResourceUtils.isPreferred(resource);
+ protected boolean isFolioResource(Resource resource) {
+ return nonNull(resource.getFolioMetadata());
}
}
diff --git a/src/main/java/org/folio/linked/data/mapper/dto/resource/common/agent/AgentMapperUnit.java b/src/main/java/org/folio/linked/data/mapper/dto/resource/common/agent/AgentMapperUnit.java
index 963573fa8..fff2a37bf 100644
--- a/src/main/java/org/folio/linked/data/mapper/dto/resource/common/agent/AgentMapperUnit.java
+++ b/src/main/java/org/folio/linked/data/mapper/dto/resource/common/agent/AgentMapperUnit.java
@@ -1,10 +1,10 @@
package org.folio.linked.data.mapper.dto.resource.common.agent;
+import static java.util.Objects.nonNull;
import static java.util.Optional.ofNullable;
import static org.folio.ld.dictionary.PredicateDictionary.CONTRIBUTOR;
import static org.folio.ld.dictionary.PredicateDictionary.CREATOR;
import static org.folio.linked.data.util.ResourceUtils.ensureLatestReplaced;
-import static org.folio.linked.data.util.ResourceUtils.isPreferred;
import java.util.Set;
import lombok.RequiredArgsConstructor;
@@ -35,7 +35,7 @@ public
P toDto(Resource resourceToConvert, P parentDto, ResourceMappingConte
.id(String.valueOf(resourceToConvert.getId()))
.label(resourceToConvert.getLabel())
.type(resourceToConvert.getTypes().iterator().next().getUri())
- .isPreferred(isPreferred(resourceToConvert));
+ .isPreferred(nonNull(resourceToConvert.getFolioMetadata()));
agentRoleAssigner.assignRoles(agent, context.parentResource());
if (context.predicate().getUri().equals(CREATOR.getUri())) {
diff --git a/src/main/java/org/folio/linked/data/mapper/dto/resource/common/work/sub/reference/SubjectMapperUnit.java b/src/main/java/org/folio/linked/data/mapper/dto/resource/common/work/sub/reference/SubjectMapperUnit.java
index 6d60080a0..a3a84675d 100644
--- a/src/main/java/org/folio/linked/data/mapper/dto/resource/common/work/sub/reference/SubjectMapperUnit.java
+++ b/src/main/java/org/folio/linked/data/mapper/dto/resource/common/work/sub/reference/SubjectMapperUnit.java
@@ -1,14 +1,10 @@
package org.folio.linked.data.mapper.dto.resource.common.work.sub.reference;
-import static java.util.Optional.ofNullable;
import static org.folio.ld.dictionary.PredicateDictionary.FOCUS;
import static org.folio.ld.dictionary.PredicateDictionary.SUBJECT;
import static org.folio.ld.dictionary.PredicateDictionary.SUB_FOCUS;
-import static org.folio.ld.dictionary.PropertyDictionary.RESOURCE_PREFERRED;
import static org.folio.ld.dictionary.ResourceTypeDictionary.CONCEPT;
-import static org.folio.linked.data.util.ResourceUtils.copyWithoutPreferred;
-import java.util.Optional;
import java.util.Set;
import org.folio.linked.data.domain.dto.Reference;
import org.folio.linked.data.domain.dto.WorkRequest;
@@ -20,7 +16,6 @@
import org.folio.linked.data.service.reference.ReferenceService;
import org.folio.linked.data.service.resource.hash.HashService;
import org.springframework.stereotype.Component;
-import tools.jackson.databind.JsonNode;
@Component
@MapperUnit(type = CONCEPT, predicate = SUBJECT, requestDto = Reference.class)
@@ -55,17 +50,9 @@ public
P toDto(Resource resourceToConvert, P parentDto, ResourceMappingConte
}
@Override
- public boolean isPreferred(Resource resource) {
- return getPreferredFromDoc(resource)
- .orElseGet(() -> hasNoSubFocusEdges(resource) && isFocusEdgePreferred(resource));
- }
-
- private Optional getPreferredFromDoc(Resource resource) {
- return ofNullable(resource.getDoc())
- .map(doc -> doc.get(RESOURCE_PREFERRED.getValue()))
- .filter(jsonNode -> !jsonNode.isEmpty())
- .map(jsonNode -> jsonNode.get(0))
- .map(JsonNode::asBoolean);
+ public boolean isFolioResource(Resource resource) {
+ return super.isFolioResource(resource)
+ || hasNoSubFocusEdges(resource) && isFocusEdgeFolioResource(resource);
}
private boolean hasNoSubFocusEdges(Resource resource) {
@@ -74,19 +61,19 @@ private boolean hasNoSubFocusEdges(Resource resource) {
.noneMatch(predicate -> predicate.equals(SUB_FOCUS.getUri()));
}
- private boolean isFocusEdgePreferred(Resource resource) {
+ private boolean isFocusEdgeFolioResource(Resource resource) {
return resource.getOutgoingEdges().stream()
.filter(edge -> edge.getPredicate().getUri().equals(FOCUS.getUri()))
.findFirst()
.map(ResourceEdge::getTarget)
- .flatMap(this::getPreferredFromDoc)
+ .map(super::isFolioResource)
.orElse(false);
}
private Resource wrapWithConcept(Resource subject) {
var concept = new Resource()
.setLabel(subject.getLabel())
- .setDoc(copyWithoutPreferred(subject))
+ .setDoc(subject.getDoc().deepCopy())
.addTypes(CONCEPT);
subject.getTypes().forEach(concept::addType);
concept.addOutgoingEdge(new ResourceEdge(concept, subject, FOCUS));
diff --git a/src/main/java/org/folio/linked/data/service/resource/graph/ResourceGraphServiceImpl.java b/src/main/java/org/folio/linked/data/service/resource/graph/ResourceGraphServiceImpl.java
index 9c4e28409..c0337d710 100644
--- a/src/main/java/org/folio/linked/data/service/resource/graph/ResourceGraphServiceImpl.java
+++ b/src/main/java/org/folio/linked/data/service/resource/graph/ResourceGraphServiceImpl.java
@@ -5,8 +5,6 @@
import static java.util.stream.Collectors.toCollection;
import static org.apache.commons.lang3.ObjectUtils.notEqual;
import static org.folio.ld.dictionary.PredicateDictionary.REPLACED_BY;
-import static org.folio.ld.dictionary.PropertyDictionary.RESOURCE_PREFERRED;
-import static org.folio.linked.data.util.ResourceUtils.isPreferred;
import static org.springframework.transaction.annotation.Propagation.REQUIRES_NEW;
import java.util.LinkedHashSet;
@@ -110,7 +108,7 @@ private ResourceSaveResult updateResource(Resource existingResource, Resource in
existingResource.setDoc(mergeDocs(existingResource, incomingResource));
existingResource.setActive(incomingResource.isActive());
addFolioMetadataIfAbsent(existingResource, incomingResource.getFolioMetadata());
- removeReplacedByEdgeIfPreferred(existingResource);
+ removeReplacedByEdgeIfFolioResource(existingResource);
return ResourceSaveResult.updated(existingResource);
}
@@ -127,20 +125,11 @@ private void addFolioMetadataIfAbsent(Resource existingResource, FolioMetadata i
}
private JsonNode mergeDocs(Resource existingResource, Resource incomingResource) {
- var mergedDoc = JsonUtils.merge(existingResource.getDoc(), incomingResource.getDoc());
- resetPreferredFlagWithIncomingValue(incomingResource, mergedDoc);
- return mergedDoc;
+ return JsonUtils.merge(existingResource.getDoc(), incomingResource.getDoc());
}
- private void resetPreferredFlagWithIncomingValue(Resource incomingResource, JsonNode mergedDoc) {
- var resourcePreferred = RESOURCE_PREFERRED.getValue();
- ofNullable(incomingResource.getDoc())
- .flatMap(incomingDoc -> JsonUtils.getProperty(incomingDoc, resourcePreferred))
- .ifPresent(incomingPreferredFlag -> JsonUtils.setProperty(mergedDoc, resourcePreferred, incomingPreferredFlag));
- }
-
- private void removeReplacedByEdgeIfPreferred(Resource resource) {
- if (isPreferred(resource)) {
+ private void removeReplacedByEdgeIfFolioResource(Resource resource) {
+ if (nonNull(resource.getFolioMetadata())) {
resource.getOutgoingEdges().removeIf(edge -> edge.getPredicate().getUri().equals(REPLACED_BY.getUri()));
}
}
diff --git a/src/main/java/org/folio/linked/data/service/resource/marc/ResourceMarcAuthorityServiceImpl.java b/src/main/java/org/folio/linked/data/service/resource/marc/ResourceMarcAuthorityServiceImpl.java
index 21c047585..4fdb509c3 100644
--- a/src/main/java/org/folio/linked/data/service/resource/marc/ResourceMarcAuthorityServiceImpl.java
+++ b/src/main/java/org/folio/linked/data/service/resource/marc/ResourceMarcAuthorityServiceImpl.java
@@ -5,7 +5,6 @@
import static org.folio.linked.data.domain.dto.AssignmentCheckResponseDto.InvalidAssignmentReasonEnum.NOT_VALID_FOR_TARGET;
import static org.folio.linked.data.domain.dto.AssignmentCheckResponseDto.InvalidAssignmentReasonEnum.UNSUPPORTED_MARC;
import static org.folio.linked.data.util.Constants.MSG_NOT_FOUND_IN;
-import static org.folio.linked.data.util.ResourceUtils.setPreferred;
import java.util.Objects;
import java.util.Optional;
@@ -171,7 +170,6 @@ private Long replaceAuthority(Resource resource) {
private Long markObsoleteAndReplace(Resource previous, Resource incoming) {
if (Objects.equals(previous.getTypes(), incoming.getTypes())) {
var previousObsolete = markObsolete(previous);
- setPreferred(incoming, true);
addReplacedByRelation(previousObsolete, incoming);
logMarcAction(incoming,
"not found by id, but found by srsId [" + incoming.getFolioMetadata().getSrsId() + "]",
@@ -180,7 +178,6 @@ private Long markObsoleteAndReplace(Resource previous, Resource incoming) {
}
markObsolete(previous);
logMarcAction(previous, "set as obsolete", "be saved");
- setPreferred(incoming, true);
var saveGraphResult = resourceGraphService.saveMergingGraph(incoming);
logMarcAction(incoming, "set as preferred", "be saved");
return saveGraphResult.rootResource().getId();
@@ -212,7 +209,6 @@ private Long saveAndPublishEvent(Resource resource, Function getTypeUris(Resource resource) {
return resource.getTypes()
.stream()
@@ -153,18 +142,6 @@ public static List getTypeUris(Resource resource) {
.toList();
}
- public static JsonNode copyWithoutPreferred(Resource subject) {
- return ofNullable(subject.getDoc())
- .map(node -> {
- var copiedDoc = node.deepCopy();
- if (copiedDoc.isObject()) {
- ((ObjectNode) copiedDoc).remove(RESOURCE_PREFERRED.getValue());
- }
- return copiedDoc;
- })
- .orElse(null);
- }
-
public static List getPropertyValues(Resource resource, PropertyDictionary property) {
return ofNullable(resource.getDoc())
.map(doc -> doc.get(property.getValue()))
diff --git a/src/test/java/org/folio/linked/data/e2e/mappings/work/subject/HubAsSubjectIT.java b/src/test/java/org/folio/linked/data/e2e/mappings/work/subject/HubAsSubjectIT.java
index e5c30269d..ddda2a8a8 100644
--- a/src/test/java/org/folio/linked/data/e2e/mappings/work/subject/HubAsSubjectIT.java
+++ b/src/test/java/org/folio/linked/data/e2e/mappings/work/subject/HubAsSubjectIT.java
@@ -8,7 +8,6 @@
import lombok.SneakyThrows;
import org.folio.linked.data.e2e.mappings.PostResourceIT;
import org.folio.linked.data.model.entity.Resource;
-import org.folio.linked.data.util.ResourceUtils;
import org.springframework.test.web.servlet.ResultActions;
public class HubAsSubjectIT extends PostResourceIT {
@@ -57,7 +56,6 @@ protected void validateGraph(Resource resource) {
assertThat(concept.getLabel()).isEqualTo("Hub AAP 😊");
validateResourceType(concept, "http://bibfra.me/vocab/lite/Concept", "http://bibfra.me/vocab/lite/Hub");
- assertThat(ResourceUtils.isPreferred(concept)).isFalse();
var hub = getFirstOutgoingResource(concept, "http://bibfra.me/vocab/lite/focus");
validateResourceType(hub, "http://bibfra.me/vocab/lite/Hub");
diff --git a/src/test/java/org/folio/linked/data/e2e/resource/AuthorityUpdateAndReadWorkIT.java b/src/test/java/org/folio/linked/data/e2e/resource/AuthorityUpdateAndReadWorkIT.java
index 466d45bbe..ed56ba252 100644
--- a/src/test/java/org/folio/linked/data/e2e/resource/AuthorityUpdateAndReadWorkIT.java
+++ b/src/test/java/org/folio/linked/data/e2e/resource/AuthorityUpdateAndReadWorkIT.java
@@ -122,8 +122,8 @@ private List readAndAssertAuthoritiesInTheDb() {
assertThat(authoritiesFromDb).hasSize(2);
var expectedLabelCreated = "bValue, aValue, cValue, qValue, dValue -- xValue -- zValue -- yValue -- vValue";
var expectedLabelUpdated = expectedLabelCreated.replace("aValue", "newAValue");
- assertAuthority(authoritiesFromDb.getFirst(), expectedLabelCreated, false, false, authoritiesFromDb.get(1));
- assertAuthority(authoritiesFromDb.get(1), expectedLabelUpdated, true, true, null);
+ assertAuthority(authoritiesFromDb.getFirst(), expectedLabelCreated, false, authoritiesFromDb.get(1));
+ assertAuthority(authoritiesFromDb.get(1), expectedLabelUpdated, true, null);
return authoritiesFromDb;
}
diff --git a/src/test/java/org/folio/linked/data/e2e/resource/MergeResourcesIT.java b/src/test/java/org/folio/linked/data/e2e/resource/MergeResourcesIT.java
index f590eb51c..7cf41aa20 100644
--- a/src/test/java/org/folio/linked/data/e2e/resource/MergeResourcesIT.java
+++ b/src/test/java/org/folio/linked/data/e2e/resource/MergeResourcesIT.java
@@ -15,13 +15,13 @@
import org.folio.ld.dictionary.PropertyDictionary;
import org.folio.ld.dictionary.ResourceTypeDictionary;
import org.folio.linked.data.e2e.base.IntegrationTest;
+import org.folio.linked.data.model.entity.FolioMetadata;
import org.folio.linked.data.model.entity.Resource;
import org.folio.linked.data.model.entity.ResourceEdge;
import org.folio.linked.data.service.resource.graph.ResourceGraphService;
import org.folio.linked.data.service.tenant.TenantScopedExecutionService;
import org.folio.linked.data.test.MonographTestUtil;
import org.folio.linked.data.test.resource.ResourceTestService;
-import org.folio.linked.data.util.JsonUtils;
import org.folio.spring.tools.kafka.KafkaAdminService;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -136,7 +136,7 @@ void testResourcesMerging1_and_2() {
}
@Test
- void should_remove_replacedBy_edge_when_resource_becomes_preferred() {
+ void shouldRemoveReplacedByEdge_whenResourceGetsFolioMetadata() {
// given
var replacedByTargetResource = createResource(2L, Map.of()).setDoc(getInitialDoc());
var lccnResource = new Resource().setIdAndRefreshEdges(3L).addTypes(ID_LCCN);
@@ -153,6 +153,7 @@ void should_remove_replacedBy_edge_when_resource_becomes_preferred() {
var newSourceResource = createResource(1L,
Map.of(PredicateDictionary.STATUS, List.of(statusResource))
).setDoc(getNewDoc());
+ newSourceResource.setFolioMetadata(new FolioMetadata(newSourceResource));
resourceGraphService.saveMergingGraph(newSourceResource);
// then
@@ -190,26 +191,15 @@ private void assertResourceDoc(String id, JsonNode expected) {
}
private JsonNode getInitialDoc() {
- return getDocWithPreferredFlag("samples/json_merge/existing.jsonl", false);
+ return TEST_JSON_MAPPER.readTree(loadResourceAsString("samples/json_merge/existing.jsonl"));
}
private JsonNode getNewDoc() {
- return getDocWithPreferredFlag("samples/json_merge/incoming.jsonl", true);
+ return TEST_JSON_MAPPER.readTree(loadResourceAsString("samples/json_merge/incoming.jsonl"));
}
private JsonNode getMergedDoc() {
- return getDocWithPreferredFlag("samples/json_merge/merged.jsonl", true);
- }
-
- private JsonNode getDocWithPreferredFlag(String docFile, boolean isPreferred) {
- var preferredJson = """
- {
- "http://library.link/vocab/resourcePreferred": [
- "$PREFERRED_FLAG"
- ]
- }
- """.replace("$PREFERRED_FLAG", String.valueOf(isPreferred));
- return JsonUtils.merge(TEST_JSON_MAPPER.readTree(loadResourceAsString(docFile)), TEST_JSON_MAPPER.readTree(preferredJson));
+ return TEST_JSON_MAPPER.readTree(loadResourceAsString("samples/json_merge/merged.jsonl"));
}
private Resource createGraph1toto2() {
diff --git a/src/test/java/org/folio/linked/data/integration/kafka/listener/handler/SourceRecordDomainEventHandlerIT.java b/src/test/java/org/folio/linked/data/integration/kafka/listener/handler/SourceRecordDomainEventHandlerIT.java
index 1c57661b1..a9764ceac 100644
--- a/src/test/java/org/folio/linked/data/integration/kafka/listener/handler/SourceRecordDomainEventHandlerIT.java
+++ b/src/test/java/org/folio/linked/data/integration/kafka/listener/handler/SourceRecordDomainEventHandlerIT.java
@@ -191,7 +191,7 @@ void shouldProcessAuthoritySourceRecordDomainCreateEvent() {
assertThat(found).isPresent();
var expectedLabel = "bValue, aaValue, cValue, qValue, dValue -- xValue -- zValue -- yValue -- vValue";
- assertAuthority(found.get(), expectedLabel, true, true, null);
+ assertAuthority(found.get(), expectedLabel, true, null);
}
@Test
@@ -229,8 +229,8 @@ void shouldProcessAuthoritySourceRecordDomainUpdateEvent() {
var updatedResource = found.getFirst();
var expectedLabelCreated = "bValue, aValue, cValue, qValue, dValue -- xValue -- zValue -- yValue -- vValue";
var expectedLabelUpdated = expectedLabelCreated.replace("aValue", "newAValue");
- assertAuthority(createdResource, expectedLabelCreated, false, false, updatedResource);
- assertAuthority(updatedResource, expectedLabelUpdated, true, true, null);
+ assertAuthority(createdResource, expectedLabelCreated, false, updatedResource);
+ assertAuthority(updatedResource, expectedLabelUpdated, true, null);
}
}
diff --git a/src/test/java/org/folio/linked/data/mapper/dto/resource/common/work/sub/reference/SubjectMapperUnitTest.java b/src/test/java/org/folio/linked/data/mapper/dto/resource/common/work/sub/reference/SubjectMapperUnitTest.java
index aef7bb25b..611112637 100644
--- a/src/test/java/org/folio/linked/data/mapper/dto/resource/common/work/sub/reference/SubjectMapperUnitTest.java
+++ b/src/test/java/org/folio/linked/data/mapper/dto/resource/common/work/sub/reference/SubjectMapperUnitTest.java
@@ -8,13 +8,13 @@
import static org.folio.ld.dictionary.ResourceTypeDictionary.PERSON;
import static org.folio.ld.dictionary.ResourceTypeDictionary.PLACE;
import static org.folio.ld.dictionary.ResourceTypeDictionary.TOPIC;
-import static org.folio.linked.data.test.TestUtil.TEST_JSON_MAPPER;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
import java.util.List;
import org.folio.linked.data.domain.dto.Reference;
import org.folio.linked.data.domain.dto.WorkResponse;
+import org.folio.linked.data.model.entity.FolioMetadata;
import org.folio.linked.data.model.entity.Resource;
import org.folio.linked.data.model.entity.ResourceEdge;
import org.folio.linked.data.model.entity.ResourceTypeEntity;
@@ -44,7 +44,6 @@ void toEntity_wrapsWithConcept_whenSubjectIsNotOfTypeConcept() {
// given
var name = "Sample Name";
var doc = JsonNodeFactory.instance.objectNode();
- doc.set("http://library.link/vocab/resourcePreferred", JsonNodeFactory.instance.arrayNode().add("true"));
doc.set("http://bibfra.me/vocab/lite/name", JsonNodeFactory.instance.arrayNode().add(name));
var resource = new Resource().setLabel("Label").addTypes(PERSON).setDoc(doc);
var subjectDto = new Reference()
@@ -57,7 +56,6 @@ void toEntity_wrapsWithConcept_whenSubjectIsNotOfTypeConcept() {
// then
assertThat(result).isNotNull();
- assertThat(result.getDoc().has("http://library.link/vocab/resourcePreferred")).isFalse();
assertThat(result.getDoc().get("http://bibfra.me/vocab/lite/name").get(0).asString()).isEqualTo(name);
assertThat(result.getTypes().stream().map(ResourceTypeEntity::getUri)).contains(CONCEPT.getUri());
assertThat(result.getOutgoingEdges())
@@ -91,14 +89,10 @@ void toDto_shouldConvertResourceToDto() {
var label = "label string";
var id = 1L;
var resource = new Resource()
- .setDoc(TEST_JSON_MAPPER.readTree("""
- {
- "http://library.link/vocab/resourcePreferred": ["true"]
- }
- """))
.setLabel(label)
.setIdAndRefreshEdges(id)
.addTypes(CONCEPT, PLACE);
+ resource.setFolioMetadata(new FolioMetadata(resource));
// when
var result = subjectMapperUnit.toDto(resource, new WorkResponse(2), null);
@@ -117,21 +111,11 @@ void toDto_preferredFlagShouldBeFalse_whenResourceHasSubFocusEdge() {
// given
var focus = new Resource()
.setLabel("John Doe")
- .addTypes(PERSON)
- .setDoc(TEST_JSON_MAPPER.readTree("""
- {
- "http://library.link/vocab/resourcePreferred": ["true"]
- }
- """));
+ .addTypes(PERSON);
var subFocus = new Resource()
.setLabel("Childhood")
- .addTypes(TOPIC)
- .setDoc(TEST_JSON_MAPPER.readTree("""
- {
- "http://library.link/vocab/resourcePreferred": ["true"]
- }
- """));
+ .addTypes(TOPIC);
var conceptWithSubFocus = new Resource()
.setLabel("John Doe -- Childhood")
@@ -154,12 +138,8 @@ void toDto_shouldFetchPreferredFlagFromFocus_whenResourceHasNoSubFocusEdges() {
// given
var focus = new Resource()
.setLabel("John Doe")
- .addTypes(PERSON)
- .setDoc(TEST_JSON_MAPPER.readTree("""
- {
- "http://library.link/vocab/resourcePreferred": ["true"]
- }
- """));
+ .addTypes(PERSON);
+ focus.setFolioMetadata(new FolioMetadata(focus));
var conceptWithoutSubFocus = new Resource()
.setLabel("John Doe")
diff --git a/src/test/java/org/folio/linked/data/service/resource/marc/ResourceMarcAuthorityServiceIT.java b/src/test/java/org/folio/linked/data/service/resource/marc/ResourceMarcAuthorityServiceIT.java
index ec868945c..f26429679 100644
--- a/src/test/java/org/folio/linked/data/service/resource/marc/ResourceMarcAuthorityServiceIT.java
+++ b/src/test/java/org/folio/linked/data/service/resource/marc/ResourceMarcAuthorityServiceIT.java
@@ -3,7 +3,6 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.folio.ld.dictionary.PredicateDictionary.REPLACED_BY;
import static org.folio.linked.data.test.TestUtil.TEST_JSON_MAPPER;
-import static org.folio.linked.data.util.ResourceUtils.isPreferred;
import java.util.Set;
import org.folio.ld.dictionary.ResourceTypeDictionary;
@@ -52,8 +51,8 @@ void testAuthorityPreferenceToggle_when_authority_is_reverted_back_to_original_s
var v1ResourceFromDb = resourceTestService.getResourceById("1", 1);
var v2ResourceFromDb = resourceTestService.getResourceById("2", 1);
validateResourceIdBySrsId(srsId, v2Resource.getId());
- assertResourceIsPreferred(v2ResourceFromDb);
- assertResourceIsNotPreferred(v1ResourceFromDb);
+ assertResourceIsActive(v2ResourceFromDb);
+ assertResourceIsNotActive(v1ResourceFromDb);
assertReplacedBy(v1ResourceFromDb, v2ResourceFromDb);
// Revert the authority back to the original (v1) version
@@ -62,8 +61,8 @@ void testAuthorityPreferenceToggle_when_authority_is_reverted_back_to_original_s
v1ResourceFromDb = resourceTestService.getResourceById("1", 1);
v2ResourceFromDb = resourceTestService.getResourceById("2", 1);
validateResourceIdBySrsId(srsId, v1Resource.getId());
- assertResourceIsPreferred(v1ResourceFromDb);
- assertResourceIsNotPreferred(v2ResourceFromDb);
+ assertResourceIsActive(v1ResourceFromDb);
+ assertResourceIsNotActive(v2ResourceFromDb);
assertReplacedBy(v2ResourceFromDb, v1ResourceFromDb);
}
@@ -72,15 +71,13 @@ private void validateResourceIdBySrsId(String srsId, Long expectedResourceId) {
assertThat(resourceIdOptional).contains(expectedResourceId);
}
- private void assertResourceIsPreferred(org.folio.linked.data.model.entity.Resource resource) {
+ private void assertResourceIsActive(org.folio.linked.data.model.entity.Resource resource) {
assertThat(resource.isActive()).isTrue();
- assertThat(isPreferred(resource)).isTrue();
assertThat(resource.getOutgoingEdges()).isEmpty();
}
- private void assertResourceIsNotPreferred(org.folio.linked.data.model.entity.Resource resource) {
+ private void assertResourceIsNotActive(org.folio.linked.data.model.entity.Resource resource) {
assertThat(resource.isActive()).isFalse();
- assertThat(isPreferred(resource)).isFalse();
}
private void assertReplacedBy(org.folio.linked.data.model.entity.Resource resource,
diff --git a/src/test/java/org/folio/linked/data/service/resource/marc/ResourceMarcAuthorityServiceImplTest.java b/src/test/java/org/folio/linked/data/service/resource/marc/ResourceMarcAuthorityServiceImplTest.java
index df926ca61..6817623ae 100644
--- a/src/test/java/org/folio/linked/data/service/resource/marc/ResourceMarcAuthorityServiceImplTest.java
+++ b/src/test/java/org/folio/linked/data/service/resource/marc/ResourceMarcAuthorityServiceImplTest.java
@@ -4,7 +4,6 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.folio.ld.dictionary.PredicateDictionary.REPLACED_BY;
-import static org.folio.ld.dictionary.PropertyDictionary.RESOURCE_PREFERRED;
import static org.folio.ld.dictionary.ResourceTypeDictionary.CONCEPT;
import static org.folio.ld.dictionary.ResourceTypeDictionary.PERSON;
import static org.folio.ld.dictionary.ResourceTypeDictionary.WORK;
@@ -172,8 +171,6 @@ void saveMarcAuthority_shouldNotReplaceOldAuthority_ifNewAuthorityHasDifferentTy
// then
assertThat(actualId).isEqualTo(newAuthority.getId());
assertThat(newAuthority.getOutgoingEdges()).isEmpty();
- assertThat(newAuthority.getDoc().get(RESOURCE_PREFERRED.getValue()).get(0).stringValue()).isEqualTo("true");
- assertThat(existedAuthority.getDoc().get(RESOURCE_PREFERRED.getValue()).get(0).stringValue()).isEqualTo("false");
}
@Test
@@ -200,11 +197,9 @@ void saveMarcAuthority_shouldCreateNewAuthorityVersionAndMarkOldAsObsolete_ifGiv
// then
assertThat(result).isEqualTo(id);
assertThat(existed.isActive()).isFalse();
- assertThat(existed.getDoc().get(RESOURCE_PREFERRED.getValue()).get(0).stringValue()).isEqualTo("false");
assertThat(existed.getFolioMetadata()).isNull();
verify(resourceGraphService).saveMergingGraph(mapped);
verify(applicationEventPublisher).publishEvent(new ResourceReplacedEvent(existed, mapped.getId()));
- assertThat(mapped.getDoc().get(RESOURCE_PREFERRED.getValue()).get(0).stringValue()).isEqualTo("true");
assertThat(mapped.getIncomingEdges()).contains(new ResourceEdge(existed, mapped, REPLACED_BY));
}
diff --git a/src/test/java/org/folio/linked/data/test/MonographTestUtil.java b/src/test/java/org/folio/linked/data/test/MonographTestUtil.java
index 47df09ded..ab99fe271 100644
--- a/src/test/java/org/folio/linked/data/test/MonographTestUtil.java
+++ b/src/test/java/org/folio/linked/data/test/MonographTestUtil.java
@@ -51,7 +51,6 @@
import static org.folio.ld.dictionary.PropertyDictionary.PROJECTED_PROVISION_DATE;
import static org.folio.ld.dictionary.PropertyDictionary.PROVIDER_DATE;
import static org.folio.ld.dictionary.PropertyDictionary.QUALIFIER;
-import static org.folio.ld.dictionary.PropertyDictionary.RESOURCE_PREFERRED;
import static org.folio.ld.dictionary.PropertyDictionary.SIMPLE_PLACE;
import static org.folio.ld.dictionary.PropertyDictionary.SOURCE;
import static org.folio.ld.dictionary.PropertyDictionary.STATEMENT_OF_RESPONSIBILITY;
@@ -341,8 +340,7 @@ public static Resource getSampleWork(Resource linkedInstance) {
var genre1 = createResource(
Map.of(
- NAME, List.of("genre 1"),
- RESOURCE_PREFERRED, List.of("true")
+ NAME, List.of("genre 1")
),
Set.of(FORM),
emptyMap()
@@ -435,22 +433,19 @@ public static Resource getSampleHub() {
}
public static Resource getSubjectPersonPreferred() {
- return getSubjectAndConcept("person", -6999093488677112301L, -3951421359442339069L, PERSON, true);
+ return getSubjectAndConcept("person", -6999093488677112301L, -3951421359442339069L, PERSON);
}
public static Resource getSubjectFormNotPreferred() {
- return getSubjectAndConcept("form", -4718450084121784027L, -354125450028352284L, FORM, false);
+ return getSubjectAndConcept("form", -4718450084121784027L, -354125450028352284L, FORM);
}
private static Resource getSubjectAndConcept(String name,
Long subjectId,
Long conceptId,
- ResourceTypeDictionary type,
- boolean isPreferred) {
+ ResourceTypeDictionary type) {
var subject = createResource(
- isPreferred
- ? Map.of(NAME, List.of("Subject " + name), RESOURCE_PREFERRED, List.of("true"))
- : Map.of(NAME, List.of("Subject " + name)),
+ Map.of(NAME, List.of("Subject " + name)),
Set.of(type),
emptyMap()
).setLabel("subject " + name)
diff --git a/src/test/java/org/folio/linked/data/test/TestUtil.java b/src/test/java/org/folio/linked/data/test/TestUtil.java
index 23d8e03de..f67b602c8 100644
--- a/src/test/java/org/folio/linked/data/test/TestUtil.java
+++ b/src/test/java/org/folio/linked/data/test/TestUtil.java
@@ -9,7 +9,6 @@
import static java.util.stream.Collectors.toCollection;
import static org.assertj.core.api.Assertions.assertThat;
import static org.folio.ld.dictionary.PredicateDictionary.REPLACED_BY;
-import static org.folio.ld.dictionary.PropertyDictionary.RESOURCE_PREFERRED;
import static org.folio.linked.data.service.lccn.LccnResourceService.LccnResourceSearchResult;
import static org.folio.linked.data.util.Constants.STANDALONE_PROFILE;
import static org.folio.linked.data.util.JsonUtils.JSON_MAPPER;
@@ -151,15 +150,11 @@ public static void awaitAndAssert(ThrowingRunnable throwingRunnable) {
public static void assertAuthority(Resource resource,
String label,
boolean isActive,
- boolean isPreferred,
Resource replacedBy) {
assertThat(resource)
.hasFieldOrPropertyWithValue("label", label)
.hasFieldOrPropertyWithValue("active", isActive)
.satisfies(r -> assertThat(r.getDoc()).isNotEmpty())
- .satisfies(r ->
- assertThat(resource.getDoc().get(RESOURCE_PREFERRED.getValue()).get(0).asBoolean()).isEqualTo(isPreferred)
- )
.satisfies(r -> assertThat(r.getOutgoingEdges()).isNotEmpty())
.extracting(Resource::getOutgoingEdges)
.satisfies(resourceEdges -> assertThat(resourceEdges)
diff --git a/src/test/java/org/folio/linked/data/util/ResourceUtilsTest.java b/src/test/java/org/folio/linked/data/util/ResourceUtilsTest.java
index 11796e312..e0a4d1757 100644
--- a/src/test/java/org/folio/linked/data/util/ResourceUtilsTest.java
+++ b/src/test/java/org/folio/linked/data/util/ResourceUtilsTest.java
@@ -23,7 +23,6 @@
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
-import tools.jackson.databind.node.JsonNodeFactory;
@UnitTest
class ResourceUtilsTest {
@@ -182,35 +181,6 @@ void extractInstancesFromWork_shouldReturnInstancesListWithEdgesToWork_ifGivenRe
assertThat(instance2.getOutgoingEdges()).containsOnly(new ResourceEdge(instance2, work, INSTANTIATES));
}
- @Test
- void test_isPreferred_when_preferred_flag_is_not_set() {
- // given
- Resource resource = new Resource();
-
- // then
- assertThat(ResourceUtils.isPreferred(resource)).isFalse();
- }
-
- @Test
- void test_isPreferred_when_preferred_flag_is_set_as_true() {
- // given
- Resource resource = new Resource();
- ResourceUtils.setPreferred(resource, true);
-
- // then
- assertThat(ResourceUtils.isPreferred(resource)).isTrue();
- }
-
- @Test
- void test_isPreferred_when_preferred_flag_is_set_as_false() {
- // given
- Resource resource = new Resource();
- ResourceUtils.setPreferred(resource, false);
-
- // then
- assertThat(ResourceUtils.isPreferred(resource)).isFalse();
- }
-
@ParameterizedTest
@MethodSource("dataProvider")
void getTypes_shouldReturn_resourceTypes(Resource resource, List expectedTypes) {
@@ -219,52 +189,6 @@ void getTypes_shouldReturn_resourceTypes(Resource resource, List expecte
.containsExactlyInAnyOrderElementsOf(expectedTypes);
}
- @Test
- void copyWithoutPreferred_removesPreferredProperty_whenDocContainsPreferred() {
- // given
- var resource = new Resource();
- var doc = JsonNodeFactory.instance.objectNode();
- doc.set("http://library.link/vocab/resourcePreferred", JsonNodeFactory.instance.arrayNode().add("true"));
- resource.setDoc(doc);
-
- // when
- var result = ResourceUtils.copyWithoutPreferred(resource);
-
- // then
- assertThat(result).isNotNull();
- assertThat(result.has("http://library.link/vocab/resourcePreferred")).isFalse();
- }
-
- @Test
- void copyWithoutPreferred_returnsNull_whenDocIsNull() {
- // given
- var resource = new Resource();
- resource.setDoc(null);
-
- // when
- var result = ResourceUtils.copyWithoutPreferred(resource);
-
- // then
- assertThat(result).isNull();
- }
-
- @Test
- void copyWithoutPreferred_returnsUnchangedCopy_whenDocDoesNotContainPreferred() {
- // given
- var resource = new Resource();
- var doc = JsonNodeFactory.instance.objectNode();
- doc.put("otherProperty", "value");
- resource.setDoc(doc);
-
- // when
- var result = ResourceUtils.copyWithoutPreferred(resource);
-
- // then
- assertThat(result).isNotNull();
- assertThat(result.has("otherProperty")).isTrue();
- assertThat(result.get("otherProperty").asString()).isEqualTo("value");
- }
-
@Test
void addProperty_createsDocAndSetsArrayValue() {
// given