diff --git a/dspace-api/src/main/java/org/dspace/coarnotify/COARNotifyConfigurationService.java b/dspace-api/src/main/java/org/dspace/coarnotify/COARNotifyConfigurationService.java index 0844b3bd05..368f51745a 100644 --- a/dspace-api/src/main/java/org/dspace/coarnotify/COARNotifyConfigurationService.java +++ b/dspace-api/src/main/java/org/dspace/coarnotify/COARNotifyConfigurationService.java @@ -21,13 +21,13 @@ public class COARNotifyConfigurationService { * Mapping the submission step process identifier with the configuration * (see configuration at coar-notify.xml) */ - private Map> patterns; + private Map> patterns; - public Map> getPatterns() { + public Map> getPatterns() { return patterns; } - public void setPatterns(Map> patterns) { + public void setPatterns(Map> patterns) { this.patterns = patterns; } diff --git a/dspace-api/src/main/java/org/dspace/coarnotify/COARNotifySubmissionConfiguration.java b/dspace-api/src/main/java/org/dspace/coarnotify/COARNotifySubmissionConfiguration.java index c91775d16e..f68ce32162 100644 --- a/dspace-api/src/main/java/org/dspace/coarnotify/COARNotifySubmissionConfiguration.java +++ b/dspace-api/src/main/java/org/dspace/coarnotify/COARNotifySubmissionConfiguration.java @@ -26,13 +26,13 @@ public class COARNotifySubmissionConfiguration { * the map values of configured bean of COARNotifyConfigurationService * in coar-notify.xml */ - private List patterns; + private List patterns; public COARNotifySubmissionConfiguration() { } - public COARNotifySubmissionConfiguration(String id, List patterns) { + public COARNotifySubmissionConfiguration(String id, List patterns) { super(); this.id = id; this.patterns = patterns; @@ -51,7 +51,7 @@ public class COARNotifySubmissionConfiguration { * * @return the list of configured COAR Notify Patterns */ - public List getPatterns() { + public List getPatterns() { return patterns; } @@ -59,7 +59,7 @@ public class COARNotifySubmissionConfiguration { * Sets the list of configured COAR Notify Patterns * @param patterns */ - public void setPatterns(final List patterns) { + public void setPatterns(final List patterns) { this.patterns = patterns; } } diff --git a/dspace-api/src/main/java/org/dspace/coarnotify/LDNPattern.java b/dspace-api/src/main/java/org/dspace/coarnotify/LDNPattern.java new file mode 100644 index 0000000000..ca65eb86ab --- /dev/null +++ b/dspace-api/src/main/java/org/dspace/coarnotify/LDNPattern.java @@ -0,0 +1,44 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ +package org.dspace.coarnotify; + +/** + * A collection of configured patterns to be met when adding COAR Notify services. + * + * @author Mohamed Eskander (mohamed.eskander at 4science.com) + */ +public class LDNPattern { + + private String pattern; + private boolean multipleRequest; + + public LDNPattern() { + + } + + public LDNPattern(String pattern, boolean multipleRequest) { + this.pattern = pattern; + this.multipleRequest = multipleRequest; + } + + public String getPattern() { + return pattern; + } + + public void setPattern(String pattern) { + this.pattern = pattern; + } + + public boolean isMultipleRequest() { + return multipleRequest; + } + + public void setMultipleRequest(boolean multipleRequest) { + this.multipleRequest = multipleRequest; + } +} diff --git a/dspace-api/src/main/java/org/dspace/coarnotify/SubmissionCOARNotifyServiceImpl.java b/dspace-api/src/main/java/org/dspace/coarnotify/SubmissionCOARNotifyServiceImpl.java index 89e729ae2a..ba99735223 100644 --- a/dspace-api/src/main/java/org/dspace/coarnotify/SubmissionCOARNotifyServiceImpl.java +++ b/dspace-api/src/main/java/org/dspace/coarnotify/SubmissionCOARNotifyServiceImpl.java @@ -29,7 +29,7 @@ public class SubmissionCOARNotifyServiceImpl implements SubmissionCOARNotifyServ @Override public COARNotifySubmissionConfiguration findOne(String id) { - List patterns = + List patterns = coarNotifyConfigurationService.getPatterns().get(id); if (patterns == null) { diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/model/SubmissionCOARNotifyRest.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/model/SubmissionCOARNotifyRest.java index 41a8e8f25a..0f414b3724 100644 --- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/model/SubmissionCOARNotifyRest.java +++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/model/SubmissionCOARNotifyRest.java @@ -13,6 +13,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import org.dspace.app.rest.RestResourceController; import org.dspace.coarnotify.COARNotifySubmissionConfiguration; +import org.dspace.coarnotify.LDNPattern; /** * This class is the REST representation of the COARNotifySubmissionConfiguration model object @@ -26,7 +27,7 @@ public class SubmissionCOARNotifyRest extends BaseObjectRest { private String id; - private List patterns; + private List patterns; public String getId() { return id; @@ -36,11 +37,11 @@ public class SubmissionCOARNotifyRest extends BaseObjectRest { this.id = id; } - public List getPatterns() { + public List getPatterns() { return patterns; } - public void setPatterns(final List patterns) { + public void setPatterns(final List patterns) { this.patterns = patterns; } diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/submit/factory/impl/COARNotifySubmissionService.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/submit/factory/impl/COARNotifySubmissionService.java index 0000d45187..b560d5c916 100644 --- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/submit/factory/impl/COARNotifySubmissionService.java +++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/submit/factory/impl/COARNotifySubmissionService.java @@ -25,6 +25,7 @@ import org.dspace.app.rest.exception.UnprocessableEntityException; import org.dspace.app.rest.model.step.DataCOARNotify; import org.dspace.authorize.AuthorizeException; import org.dspace.coarnotify.COARNotifyConfigurationService; +import org.dspace.coarnotify.LDNPattern; import org.dspace.content.InProgressSubmission; import org.dspace.core.Context; import org.springframework.beans.factory.annotation.Autowired; @@ -106,12 +107,13 @@ public class COARNotifySubmissionService { } private boolean isContainPattern(String config, String pattern) { - List patterns = coarNotifyConfigurationService.getPatterns().get(config); + List patterns = coarNotifyConfigurationService.getPatterns().get(config); if (CollectionUtils.isEmpty(patterns)) { return false; } return patterns.stream() + .map(LDNPattern::getPattern) .anyMatch(v -> v.equals(pattern)); } diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/submit/step/validation/COARNotifyValidation.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/submit/step/validation/COARNotifyValidation.java index 1b33e1ac37..7f2d07b302 100644 --- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/submit/step/validation/COARNotifyValidation.java +++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/submit/step/validation/COARNotifyValidation.java @@ -23,6 +23,7 @@ import org.dspace.app.rest.utils.ContextUtil; import org.dspace.app.util.DCInputsReaderException; import org.dspace.app.util.SubmissionStepConfig; import org.dspace.coarnotify.COARNotifyConfigurationService; +import org.dspace.coarnotify.LDNPattern; import org.dspace.content.InProgressSubmission; import org.dspace.content.Item; import org.dspace.content.logic.LogicalStatement; @@ -51,7 +52,10 @@ public class COARNotifyValidation extends AbstractValidation { Item item = obj.getItem(); List patterns = - coarNotifyConfigurationService.getPatterns().getOrDefault(config.getId(), List.of()); + coarNotifyConfigurationService.getPatterns().getOrDefault(config.getId(), List.of()) + .stream() + .map(LDNPattern::getPattern) + .collect(Collectors.toList()); patterns.forEach(pattern -> { List services = findByItemAndPattern(context, item, pattern); diff --git a/dspace-server-webapp/src/test/java/org/dspace/app/rest/SubmissionCOARNotifyRestRepositoryIT.java b/dspace-server-webapp/src/test/java/org/dspace/app/rest/SubmissionCOARNotifyRestRepositoryIT.java index 65ec92b99f..e00d1099d3 100644 --- a/dspace-server-webapp/src/test/java/org/dspace/app/rest/SubmissionCOARNotifyRestRepositoryIT.java +++ b/dspace-server-webapp/src/test/java/org/dspace/app/rest/SubmissionCOARNotifyRestRepositoryIT.java @@ -17,6 +17,7 @@ import java.util.List; import org.dspace.app.rest.matcher.SubmissionCOARNotifyMatcher; import org.dspace.app.rest.repository.SubmissionCoarNotifyRestRepository; import org.dspace.app.rest.test.AbstractControllerIntegrationTest; +import org.dspace.coarnotify.LDNPattern; import org.hamcrest.Matchers; import org.junit.Test; @@ -41,8 +42,10 @@ public class SubmissionCOARNotifyRestRepositoryIT extends AbstractControllerInte .andExpect(status().isOk()) .andExpect(content().contentType(contentType)) .andExpect(jsonPath("$._embedded.submissioncoarnotifyconfigs", Matchers.containsInAnyOrder( - SubmissionCOARNotifyMatcher.matchCOARNotifyEntry("coarnotify", - List.of("request-review", "request-endorsement", "request-ingest")) + SubmissionCOARNotifyMatcher.matchCOARNotifyEntry("coarnotify", List.of( + new LDNPattern("request-review", true), + new LDNPattern("request-endorsement", true), + new LDNPattern("request-ingest", false))) ))); } @@ -68,8 +71,10 @@ public class SubmissionCOARNotifyRestRepositoryIT extends AbstractControllerInte .andExpect(status().isOk()) .andExpect(content().contentType(contentType)) .andExpect(jsonPath("$", Matchers.is( - SubmissionCOARNotifyMatcher.matchCOARNotifyEntry("coarnotify", - List.of("request-review", "request-endorsement", "request-ingest")) + SubmissionCOARNotifyMatcher.matchCOARNotifyEntry("coarnotify", List.of( + new LDNPattern("request-review", true), + new LDNPattern("request-endorsement", true), + new LDNPattern("request-ingest", false))) ))); } diff --git a/dspace-server-webapp/src/test/java/org/dspace/app/rest/matcher/SubmissionCOARNotifyMatcher.java b/dspace-server-webapp/src/test/java/org/dspace/app/rest/matcher/SubmissionCOARNotifyMatcher.java index 8a8bbde6ca..d425283821 100644 --- a/dspace-server-webapp/src/test/java/org/dspace/app/rest/matcher/SubmissionCOARNotifyMatcher.java +++ b/dspace-server-webapp/src/test/java/org/dspace/app/rest/matcher/SubmissionCOARNotifyMatcher.java @@ -9,10 +9,12 @@ package org.dspace.app.rest.matcher; import static com.jayway.jsonpath.matchers.JsonPathMatchers.hasJsonPath; import static org.hamcrest.Matchers.allOf; +import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.is; import java.util.List; +import org.dspace.coarnotify.LDNPattern; import org.hamcrest.Matcher; /** @@ -26,11 +28,18 @@ public class SubmissionCOARNotifyMatcher { private SubmissionCOARNotifyMatcher() { } - public static Matcher matchCOARNotifyEntry(String id, List patterns) { + public static Matcher matchCOARNotifyEntry(String id, List patterns) { return allOf( hasJsonPath("$.id", is(id)), - hasJsonPath("$.patterns", is(patterns)) - ); + hasJsonPath( + "$.patterns", contains( + patterns.stream() + .map(ldnPattern -> + allOf( + hasJsonPath("pattern", is(ldnPattern.getPattern())), + hasJsonPath("multipleRequest", is(ldnPattern.isMultipleRequest())) + )) + .toArray(Matcher[]::new)))); } } diff --git a/dspace/config/spring/api/coar-notify.xml b/dspace/config/spring/api/coar-notify.xml index a93950f037..c837ffb82c 100644 --- a/dspace/config/spring/api/coar-notify.xml +++ b/dspace/config/spring/api/coar-notify.xml @@ -10,13 +10,28 @@ - request-review - request-endorsement - request-ingest + + + + + + + + + + + + + + + + + + \ No newline at end of file