Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@
- 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)
- Update profiles to use local dictionaries instead of id.loc.gov [MODLD-1027](https://folio-org.atlassian.net/browse/MODLD-1027)
- Use LabelGeneratorService to compute the label of PROVIDER_EVENT resource [MODLD-1020](https://folio-org.atlassian.net/browse/MODLD-1020)

## 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)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package org.folio.linked.data.mapper.dto.resource.common.instance.sub;

import static java.util.Objects.nonNull;
import static java.util.Optional.ofNullable;
import static org.folio.ld.dictionary.PredicateDictionary.PE_DISTRIBUTION;
import static org.folio.ld.dictionary.PredicateDictionary.PE_MANUFACTURE;
import static org.folio.ld.dictionary.PredicateDictionary.PE_PRODUCTION;
Expand All @@ -12,10 +10,8 @@
import static org.folio.ld.dictionary.PropertyDictionary.PROVIDER_DATE;
import static org.folio.ld.dictionary.PropertyDictionary.SIMPLE_PLACE;
import static org.folio.ld.dictionary.ResourceTypeDictionary.PROVIDER_EVENT;
import static org.folio.linked.data.util.ResourceUtils.getFirstValue;
import static org.folio.linked.data.util.ResourceUtils.putProperty;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import lombok.RequiredArgsConstructor;
Expand All @@ -25,6 +21,7 @@
import org.folio.linked.data.mapper.dto.resource.base.CoreMapper;
import org.folio.linked.data.mapper.dto.resource.base.MapperUnit;
import org.folio.linked.data.model.entity.Resource;
import org.folio.linked.data.service.label.ResourceEntityLabelService;
import org.folio.linked.data.service.resource.hash.HashService;
import org.springframework.stereotype.Component;
import tools.jackson.databind.JsonNode;
Expand All @@ -40,6 +37,7 @@ public class ProviderEventMapperUnit implements InstanceSubResourceMapperUnit {

private final CoreMapper coreMapper;
private final HashService hashService;
private final ResourceEntityLabelService labelService;

@Override
public <P> P toDto(Resource resourceToConvert, P parentDto, ResourceMappingContext context) {
Expand All @@ -63,23 +61,14 @@ public <P> P toDto(Resource resourceToConvert, P parentDto, ResourceMappingConte
public Resource toEntity(Object dto, Resource parentEntity) {
var providerEvent = (ProviderEventRequest) dto;
var resource = new Resource();
resource.setLabel(getFirstValue(() -> getPossibleLabels(providerEvent)));
resource.addTypes(PROVIDER_EVENT);
resource.setDoc(getDoc(providerEvent));
coreMapper.addOutgoingEdges(resource, ProviderEventRequest.class, providerEvent.getProviderPlace(), PROVIDER_PLACE);
labelService.assignLabelToResource(resource);
resource.setIdAndRefreshEdges(hashService.hash(resource));
return resource;
}

private List<String> getPossibleLabels(ProviderEventRequest providerEvent) {
var result = new ArrayList<String>();
ofNullable(providerEvent.getName()).ifPresent(result::addAll);
ofNullable(providerEvent.getSimplePlace()).ifPresent(result::addAll);
ofNullable(providerEvent.getProviderPlace()).ifPresent(
pp -> result.addAll(pp.stream().filter(p -> nonNull(p.getLabel())).flatMap(p -> p.getLabel().stream()).toList()));
return result;
}

private JsonNode getDoc(ProviderEventRequest dto) {
var map = new HashMap<String, List<String>>();
putProperty(map, DATE, dto.getDate());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -843,16 +843,17 @@ private void validatePrimaryTitle(ResourceEdge edge, Resource source) {
}

private void validateProviderEvent(ResourceEdge edge, Resource source, PredicateDictionary predicate,
String expectedCode, String expectedLabel) {
String countryCode, String providerPlace) {
var type = predicate.getUri().substring(predicate.getUri().indexOf("library/") + 8);
var expectedLabel = type + " name, " + type + " simple place, " + type + " date";
assertThat(edge.getId()).isNotNull();
assertThat(edge.getSource()).isEqualTo(source);
assertThat(edge.getPredicate().getUri()).isEqualTo(predicate.getUri());
var providerEvent = edge.getTarget();
assertThat(providerEvent.getLabel()).isEqualTo(type + " name");
assertThat(providerEvent.getLabel()).isEqualTo(expectedLabel);
assertThat(providerEvent.getTypes().iterator().next().getUri()).isEqualTo(PROVIDER_EVENT.getUri());
assertThat(providerEvent.getId()).isEqualTo(hashService.hash(providerEvent));
assertThat(providerEvent.getDoc().size()).isEqualTo(4);
assertThat(providerEvent.getDoc().size()).isEqualTo(5);
assertThat(providerEvent.getDoc().get(DATE.getValue()).size()).isEqualTo(1);
assertThat(providerEvent.getDoc().get(DATE.getValue()).get(0).asString()).isEqualTo(type + " date");
assertThat(providerEvent.getDoc().get(NAME.getValue()).size()).isEqualTo(1);
Expand All @@ -862,9 +863,10 @@ private void validateProviderEvent(ResourceEdge edge, Resource source, Predicate
.isEqualTo(type + " provider date");
assertThat(providerEvent.getDoc().get(SIMPLE_PLACE.getValue()).size()).isEqualTo(1);
assertThat(providerEvent.getDoc().get(SIMPLE_PLACE.getValue()).get(0).asString()).isEqualTo(type + " simple place");
Comment thread
pkjacob marked this conversation as resolved.
assertThat(providerEvent.getDoc().get(LABEL.getValue()).get(0).asString()).isEqualTo(expectedLabel);
assertThat(providerEvent.getOutgoingEdges()).hasSize(1);
validateProviderPlace(providerEvent.getOutgoingEdges().iterator().next(), providerEvent, expectedCode,
expectedLabel);
validateProviderPlace(providerEvent.getOutgoingEdges().iterator().next(), providerEvent, countryCode,
providerPlace);
}

private void validateProviderPlace(ResourceEdge edge, Resource source, String expectedCode, String expectedLabel) {
Expand Down
Loading