diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/SubscriptionRestRepository.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/SubscriptionRestRepository.java index 69ada3e106..2342b02624 100644 --- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/SubscriptionRestRepository.java +++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/SubscriptionRestRepository.java @@ -178,26 +178,9 @@ public class SubscriptionRestRepository extends DSpaceRestRepository subscriptionParameterList = subscriptionRest.getSubscriptionParameterList(); if (CollectionUtils.isNotEmpty(subscriptionParameterList)) { List subscriptionParameters = new ArrayList<>(); - for (SubscriptionParameterRest subscriptionParameterRest : subscriptionParameterList) { - SubscriptionParameter subscriptionParameter = new SubscriptionParameter(); - var name = subscriptionParameterRest.getName(); - var value = subscriptionParameterRest.getValue(); - if (!nameAndValueAreSupported(name, value)) { - throw new UnprocessableEntityException("Provided SubscriptionParameter name:" + name + - " or value: " + value + " is not supported!"); - } - subscriptionParameter.setName(name); - subscriptionParameter.setValue(value); - subscriptionParameters.add(subscriptionParameter); - } - - var type = subscriptionRest.getSubscriptionType(); - if (!subscriptionEmailNotificationService.getSupportedSubscriptionTypes().contains(type)) { - throw new UnprocessableEntityException("Provided subscriptionType:" + type + " is not supported!" + - " Must be one of: " + subscriptionEmailNotificationService.getSupportedSubscriptionTypes()); - } - - subscription = subscribeService.subscribe(context, ePerson, dSpaceObject, subscriptionParameters, type); + validateParameters(subscriptionRest, subscriptionParameterList, subscriptionParameters); + subscription = subscribeService.subscribe(context, ePerson, dSpaceObject, subscriptionParameters, + subscriptionRest.getSubscriptionType()); } context.commit(); return converter.toRest(subscription, utils.obtainProjection()); @@ -208,6 +191,29 @@ public class SubscriptionRestRepository extends DSpaceRestRepository subscriptionParameterList, + List subscriptionParameters) { + for (SubscriptionParameterRest subscriptionParameterRest : subscriptionParameterList) { + SubscriptionParameter subscriptionParameter = new SubscriptionParameter(); + var name = subscriptionParameterRest.getName(); + var value = subscriptionParameterRest.getValue(); + if (!nameAndValueAreSupported(name, value)) { + throw new UnprocessableEntityException("Provided SubscriptionParameter name:" + name + + " or value: " + value + " is not supported!"); + } + subscriptionParameter.setName(name); + subscriptionParameter.setValue(value); + subscriptionParameters.add(subscriptionParameter); + } + + var type = subscriptionRest.getSubscriptionType(); + if (!subscriptionEmailNotificationService.getSupportedSubscriptionTypes().contains(type)) { + throw new UnprocessableEntityException("Provided subscriptionType:" + type + " is not supported!" + + " Must be one of: " + subscriptionEmailNotificationService.getSupportedSubscriptionTypes()); + } + } + private boolean nameAndValueAreSupported(String name, String value) { return subscriptionEmailNotificationService.isSupportedSubscriptionParameterName(name) && subscriptionEmailNotificationService.getSubscriptionParameterValuesByName(name).contains(value); @@ -238,22 +244,18 @@ public class SubscriptionRestRepository extends DSpaceRestRepository subscriptionParameterList = new ArrayList<>(); - for (SubscriptionParameterRest subscriptionParamRest : subscriptionRest.getSubscriptionParameterList()) { - SubscriptionParameter subscriptionParameter = new SubscriptionParameter(); - subscriptionParameter.setSubscription(subscription); - subscriptionParameter.setValue(subscriptionParamRest.getValue()); - subscriptionParameter.setName(subscriptionParamRest.getName()); - subscriptionParameterList.add(subscriptionParameter); - } + List subscriptionParameters = new ArrayList<>(); + List subscriptionParameterList = subscriptionRest.getSubscriptionParameterList(); + validateParameters(subscriptionRest, subscriptionParameterList, subscriptionParameters); subscription = subscribeService.updateSubscription(context, id, ePerson, dSpaceObject, - subscriptionParameterList, subscriptionRest.getSubscriptionType()); + subscriptionParameters, subscriptionRest.getSubscriptionType()); context.commit(); return converter.toRest(subscription, utils.obtainProjection()); } else {