diff --git a/src/main/java/org/folio/bulkops/processor/ElectronicAccessUpdaterFactory.java b/src/main/java/org/folio/bulkops/processor/ElectronicAccessUpdaterFactory.java index 5d53dda5..cca8b98a 100644 --- a/src/main/java/org/folio/bulkops/processor/ElectronicAccessUpdaterFactory.java +++ b/src/main/java/org/folio/bulkops/processor/ElectronicAccessUpdaterFactory.java @@ -17,18 +17,18 @@ @Component public class ElectronicAccessUpdaterFactory { - public Updater updater(UpdateOptionType option, Action action, HoldingsDataProcessor holdingsDataProcessor) { + public Updater updater(UpdateOptionType option, Action action) { return switch (option) { - case ELECTRONIC_ACCESS_URL_RELATIONSHIP -> updateUrlRelationship(option, action, holdingsDataProcessor); - case ELECTRONIC_ACCESS_URI -> updateUri(option, action, holdingsDataProcessor); - case ELECTRONIC_ACCESS_LINK_TEXT -> updateLinkText(option, action, holdingsDataProcessor); - case ELECTRONIC_ACCESS_MATERIALS_SPECIFIED -> updateMaterialsSpecified(option, action, holdingsDataProcessor); - case ELECTRONIC_ACCESS_URL_PUBLIC_NOTE -> updatePublicNote(option, action, holdingsDataProcessor); + case ELECTRONIC_ACCESS_URL_RELATIONSHIP -> updateUrlRelationship(option, action); + case ELECTRONIC_ACCESS_URI -> updateUri(option, action); + case ELECTRONIC_ACCESS_LINK_TEXT -> updateLinkText(option, action); + case ELECTRONIC_ACCESS_MATERIALS_SPECIFIED -> updateMaterialsSpecified(option, action); + case ELECTRONIC_ACCESS_URL_PUBLIC_NOTE -> updatePublicNote(option, action); default -> notSupported(option, action); }; } - private Updater updateUrlRelationship(UpdateOptionType option, Action action, HoldingsDataProcessor holdingsDataProcessor) { + private Updater updateUrlRelationship(UpdateOptionType option, Action action) { return switch (action.getType()) { case CLEAR_FIELD -> electronicAccessEntity -> ofNullable(electronicAccessEntity.getElectronicAccess()) .ifPresent(list -> list.forEach(electronicAccess -> electronicAccess.setRelationshipId(null))); @@ -41,15 +41,12 @@ private Updater updateUrlRelationship(UpdateOp .filter(electronicAccess -> equalsIgnoreCase(electronicAccess.getRelationshipId(), action.getInitial())) .forEach(electronicAccess -> electronicAccess.setRelationshipId(action.getUpdated()))); case REPLACE_WITH -> electronicAccessEntity -> ofNullable(electronicAccessEntity.getElectronicAccess()) - .ifPresent(list -> list.forEach(electronicAccess -> { - electronicAccess.setRelationshipId(action.getUpdated()); - electronicAccess.setTenantId(holdingsDataProcessor.getTenantFromAction(action)); - })); + .ifPresent(list -> list.forEach(electronicAccess -> electronicAccess.setRelationshipId(action.getUpdated()))); default -> notSupported(option, action); }; } - private Updater updateUri(UpdateOptionType option, Action action, HoldingsDataProcessor holdingsDataProcessor) { + private Updater updateUri(UpdateOptionType option, Action action) { return switch (action.getType()) { case CLEAR_FIELD -> electronicAccessEntity -> ofNullable(electronicAccessEntity.getElectronicAccess()) .ifPresent(list -> list.forEach(electronicAccess -> electronicAccess.setUri(EMPTY))); @@ -62,15 +59,12 @@ private Updater updateUri(UpdateOptionType opt .filter(electronicAccess -> Objects.equals(electronicAccess.getUri(), action.getInitial())) .forEach(electronicAccess -> electronicAccess.setUri(isNull(action.getUpdated()) ? EMPTY : action.getUpdated()))); case REPLACE_WITH -> electronicAccessEntity -> ofNullable(electronicAccessEntity.getElectronicAccess()) - .ifPresent(list -> list.forEach(electronicAccess -> { - electronicAccess.setUri(isNull(action.getUpdated()) ? EMPTY : action.getUpdated()); - electronicAccess.setTenantId(holdingsDataProcessor.getTenantFromAction(action)); - })); + .ifPresent(list -> list.forEach(electronicAccess -> electronicAccess.setUri(isNull(action.getUpdated()) ? EMPTY : action.getUpdated()))); default -> notSupported(option, action); }; } - private Updater updateLinkText(UpdateOptionType option, Action action, HoldingsDataProcessor holdingsDataProcessor) { + private Updater updateLinkText(UpdateOptionType option, Action action) { return switch (action.getType()) { case CLEAR_FIELD -> electronicAccessEntity -> ofNullable(electronicAccessEntity.getElectronicAccess()) .ifPresent(list -> list.forEach(electronicAccess -> electronicAccess.setLinkText(null))); @@ -83,15 +77,12 @@ private Updater updateLinkText(UpdateOptionTyp .filter(electronicAccess -> Objects.equals(electronicAccess.getLinkText(), action.getInitial())) .forEach(electronicAccess -> electronicAccess.setLinkText(action.getUpdated()))); case REPLACE_WITH -> electronicAccessEntity -> ofNullable(electronicAccessEntity.getElectronicAccess()) - .ifPresent(list -> list.forEach(electronicAccess -> { - electronicAccess.setLinkText(action.getUpdated()); - electronicAccess.setTenantId(holdingsDataProcessor.getTenantFromAction(action)); - })); + .ifPresent(list -> list.forEach(electronicAccess -> electronicAccess.setLinkText(action.getUpdated()))); default -> notSupported(option, action); }; } - private Updater updateMaterialsSpecified(UpdateOptionType option, Action action, HoldingsDataProcessor holdingsDataProcessor) { + private Updater updateMaterialsSpecified(UpdateOptionType option, Action action) { return switch (action.getType()) { case CLEAR_FIELD -> electronicAccessEntity -> ofNullable(electronicAccessEntity.getElectronicAccess()) .ifPresent(list -> list.forEach(electronicAccess -> electronicAccess.setMaterialsSpecification(null))); @@ -104,15 +95,12 @@ private Updater updateMaterialsSpecified(Updat .filter(electronicAccess -> Objects.equals(electronicAccess.getMaterialsSpecification(), action.getInitial())) .forEach(electronicAccess -> electronicAccess.setMaterialsSpecification(action.getUpdated()))); case REPLACE_WITH -> electronicAccessEntity -> ofNullable(electronicAccessEntity.getElectronicAccess()) - .ifPresent(list -> list.forEach(electronicAccess -> { - electronicAccess.setMaterialsSpecification(action.getUpdated()); - electronicAccess.setTenantId(holdingsDataProcessor.getTenantFromAction(action)); - })); + .ifPresent(list -> list.forEach(electronicAccess -> electronicAccess.setMaterialsSpecification(action.getUpdated()))); default -> notSupported(option, action); }; } - private Updater updatePublicNote(UpdateOptionType option, Action action, HoldingsDataProcessor holdingsDataProcessor) { + private Updater updatePublicNote(UpdateOptionType option, Action action) { return switch (action.getType()) { case CLEAR_FIELD -> electronicAccessEntity -> ofNullable(electronicAccessEntity.getElectronicAccess()) .ifPresent(list -> list.forEach(electronicAccess -> electronicAccess.setPublicNote(null))); @@ -125,10 +113,7 @@ private Updater updatePublicNote(UpdateOptionT .filter(electronicAccess -> Objects.equals(electronicAccess.getPublicNote(), action.getInitial())) .forEach(electronicAccess -> electronicAccess.setPublicNote(action.getUpdated()))); case REPLACE_WITH -> electronicAccessEntity -> ofNullable(electronicAccessEntity.getElectronicAccess()) - .ifPresent(list -> list.forEach(electronicAccess -> { - electronicAccess.setPublicNote(action.getUpdated()); - electronicAccess.setTenantId(holdingsDataProcessor.getTenantFromAction(action)); - })); + .ifPresent(list -> list.forEach(electronicAccess -> electronicAccess.setPublicNote(action.getUpdated()))); default -> notSupported(option, action); }; } diff --git a/src/main/java/org/folio/bulkops/processor/HoldingsDataProcessor.java b/src/main/java/org/folio/bulkops/processor/HoldingsDataProcessor.java index d85a05da..e71bbcca 100644 --- a/src/main/java/org/folio/bulkops/processor/HoldingsDataProcessor.java +++ b/src/main/java/org/folio/bulkops/processor/HoldingsDataProcessor.java @@ -87,7 +87,8 @@ public Validator validator(Extended public Updater updater(UpdateOptionType option, Action action, ExtendedHoldingsRecord entity, boolean forPreview) throws RuleValidationTenantsException { if (isElectronicAccessUpdate(option)) { - return (Updater) electronicAccessUpdaterFactory.updater(option, action, this); + entity.getEntity().getElectronicAccess().forEach(el -> el.setTenantId(getTenantFromAction(action))); + return (Updater) electronicAccessUpdaterFactory.updater(option, action); } else if (REPLACE_WITH == action.getType()) { return extendedHoldingsRecord -> { var locationId = action.getUpdated(); diff --git a/src/test/java/org/folio/bulkops/processor/HoldingsDataProcessorTest.java b/src/test/java/org/folio/bulkops/processor/HoldingsDataProcessorTest.java index fe9169f6..20a67689 100644 --- a/src/test/java/org/folio/bulkops/processor/HoldingsDataProcessorTest.java +++ b/src/test/java/org/folio/bulkops/processor/HoldingsDataProcessorTest.java @@ -675,6 +675,7 @@ void shouldReplaceElectronicAccessFields(UpdateOptionType option, String newValu var holdingsRecord = buildHoldingsWithElectronicAccess(); var extendedHoldingsRecord = ExtendedHoldingsRecord.builder().entity(holdingsRecord).tenantId("tenant").build(); var processor = new HoldingsDataProcessor(null, null, null, new ElectronicAccessUpdaterFactory(), null); + processor.folioExecutionContext = folioExecutionContext; var action = new Action().type(REPLACE_WITH).updated(newValue); processor.updater(option, action, extendedHoldingsRecord, false).apply(extendedHoldingsRecord);