[CST-7756] removed subscriptions for items

This commit is contained in:
Mykhaylo
2023-02-02 19:23:54 +01:00
parent edcb771ef2
commit 00b53923a6
14 changed files with 206 additions and 457 deletions

View File

@@ -0,0 +1,38 @@
/**
* 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.eperson;
import java.util.Arrays;
import org.apache.commons.codec.binary.StringUtils;
public enum FrequencyType {
DAY("D"),
WEEK("W"),
MONTH("M");
private String shortName;
private FrequencyType(String shortName) {
this.shortName = shortName;
}
public static boolean isSupportedFrequencyType(String value) {
for (FrequencyType ft : Arrays.asList(FrequencyType.values())) {
if (StringUtils.equals(ft.getShortName(), value)) {
return true;
}
}
return false;
}
public String getShortName() {
return shortName;
}
}

View File

@@ -152,15 +152,13 @@ public class SubscribeServiceImpl implements SubscribeService {
} }
@Override @Override
public Subscription updateSubscription(Context context, Integer id, EPerson eperson, DSpaceObject dSpaceObject, public Subscription updateSubscription(Context context, Integer id, String subscriptionType,
List<SubscriptionParameter> subscriptionParameterList, String type) List<SubscriptionParameter> subscriptionParameterList)
throws SQLException { throws SQLException {
Subscription subscriptionDB = subscriptionDAO.findByID(context, Subscription.class, id); Subscription subscriptionDB = subscriptionDAO.findByID(context, Subscription.class, id);
subscriptionDB.removeParameterList(); subscriptionDB.removeParameterList();
subscriptionDB.setSubscriptionType(type); subscriptionDB.setSubscriptionType(subscriptionType);
subscriptionDB.setDSpaceObject(dSpaceObject);
subscriptionParameterList.forEach(x -> subscriptionDB.addParameter(x)); subscriptionParameterList.forEach(x -> subscriptionDB.addParameter(x));
subscriptionDB.setEPerson(eperson);
subscriptionDAO.save(context, subscriptionDB); subscriptionDAO.save(context, subscriptionDB);
return subscriptionDB; return subscriptionDB;
} }

View File

@@ -159,14 +159,12 @@ public interface SubscribeService {
* *
* @param context DSpace context * @param context DSpace context
* @param id Integer id * @param id Integer id
* @param eperson EPerson eperson
* @param dSpaceObject DSpaceObject dSpaceObject
* @param subscriptionParameterList List<SubscriptionParameter> subscriptionParameterList * @param subscriptionParameterList List<SubscriptionParameter> subscriptionParameterList
* @param type String type * @param subscriptionType type
* @throws SQLException An exception that provides information on a database access error or other errors. * @throws SQLException An exception that provides information on a database access error or other errors.
*/ */
public Subscription updateSubscription(Context context, Integer id, EPerson eperson, DSpaceObject dSpaceObject, public Subscription updateSubscription(Context context, Integer id, String subscriptionType,
List<SubscriptionParameter> subscriptionParameterList, String type) throws SQLException; List<SubscriptionParameter> subscriptionParameterList) throws SQLException;
/** /**
* Adds a parameter to a subscription * Adds a parameter to a subscription

View File

@@ -51,8 +51,7 @@ public class ContentGenerator implements SubscriptionGenerator<IndexableObject>
@Override @Override
public void notifyForSubscriptions(Context context, EPerson ePerson, public void notifyForSubscriptions(Context context, EPerson ePerson,
List<IndexableObject> indexableComm, List<IndexableObject> indexableComm,
List<IndexableObject> indexableColl, List<IndexableObject> indexableColl) {
List<IndexableObject> indexableItems) {
try { try {
if (Objects.nonNull(ePerson)) { if (Objects.nonNull(ePerson)) {
Locale supportedLocale = I18nUtil.getEPersonLocale(ePerson); Locale supportedLocale = I18nUtil.getEPersonLocale(ePerson);
@@ -60,7 +59,6 @@ public class ContentGenerator implements SubscriptionGenerator<IndexableObject>
email.addRecipient(ePerson.getEmail()); email.addRecipient(ePerson.getEmail());
email.addArgument(generateBodyMail(context, indexableComm)); email.addArgument(generateBodyMail(context, indexableComm));
email.addArgument(generateBodyMail(context, indexableColl)); email.addArgument(generateBodyMail(context, indexableColl));
email.addArgument(generateBodyMail(context, indexableItems));
email.send(); email.send();
} }
} catch (Exception e) { } catch (Exception e) {

View File

@@ -9,13 +9,13 @@ package org.dspace.subscriptions;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
import java.util.UUID; import java.util.UUID;
import org.apache.commons.cli.ParseException; import org.apache.commons.cli.ParseException;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.eperson.EPerson; import org.dspace.eperson.EPerson;
import org.dspace.eperson.FrequencyType;
import org.dspace.eperson.factory.EPersonServiceFactory; import org.dspace.eperson.factory.EPersonServiceFactory;
import org.dspace.scripts.DSpaceRunnable; import org.dspace.scripts.DSpaceRunnable;
import org.dspace.utils.DSpace; import org.dspace.utils.DSpace;
@@ -52,10 +52,10 @@ public class SubscriptionEmailNotification
if (StringUtils.isBlank(frequencyOption)) { if (StringUtils.isBlank(frequencyOption)) {
throw new IllegalArgumentException("Option frequency f must be set"); throw new IllegalArgumentException("Option frequency f must be set");
} }
Set<String> supportedValues = subscriptionEmailNotificationService
.getSubscriptionParameterValuesByName("frequency"); if (!FrequencyType.isSupportedFrequencyType(frequencyOption)) {
if (!supportedValues.contains(frequencyOption)) { throw new IllegalArgumentException(
throw new IllegalArgumentException("Option f must be one of following values:" + supportedValues); "Option f must be one of following values D(Day), W(Week) or M(Month)");
} }
subscriptionEmailNotificationService.perform(getContext(), handler, "content", frequencyOption); subscriptionEmailNotificationService.perform(getContext(), handler, "content", frequencyOption);
} }

View File

@@ -21,8 +21,4 @@ public interface SubscriptionEmailNotificationService {
public Set<String> getSupportedSubscriptionTypes(); public Set<String> getSupportedSubscriptionTypes();
public boolean isSupportedSubscriptionParameterName(String name);
public Set<String> getSubscriptionParameterValuesByName(String name);
} }

View File

@@ -9,11 +9,9 @@ package org.dspace.subscriptions;
import static org.dspace.core.Constants.COLLECTION; import static org.dspace.core.Constants.COLLECTION;
import static org.dspace.core.Constants.COMMUNITY; import static org.dspace.core.Constants.COMMUNITY;
import static org.dspace.core.Constants.ITEM;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@@ -26,7 +24,6 @@ import org.apache.logging.log4j.Logger;
import org.dspace.content.Collection; import org.dspace.content.Collection;
import org.dspace.content.Community; import org.dspace.content.Community;
import org.dspace.content.DSpaceObject; import org.dspace.content.DSpaceObject;
import org.dspace.content.Item;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.discovery.IndexableObject; import org.dspace.discovery.IndexableObject;
import org.dspace.eperson.Subscription; import org.dspace.eperson.Subscription;
@@ -46,13 +43,6 @@ public class SubscriptionEmailNotificationServiceImpl implements SubscriptionEma
private static final Logger log = LogManager.getLogger(SubscriptionEmailNotificationServiceImpl.class); private static final Logger log = LogManager.getLogger(SubscriptionEmailNotificationServiceImpl.class);
/**
* The map contains supported {SubscriptionParameter}
* into the key configured {SubscriptionParameter.name}
* instead into value configured a set of values {SubscriptionParameter.value}
* related to {SubscriptionParameter.name}
*/
private Map<String, Set<String>> param2values = new HashMap<>();
private Map<String, DSpaceObjectUpdates> contentUpdates = new HashMap<>(); private Map<String, DSpaceObjectUpdates> contentUpdates = new HashMap<>();
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
private Map<String, SubscriptionGenerator> subscriptionType2generators = new HashMap<>(); private Map<String, SubscriptionGenerator> subscriptionType2generators = new HashMap<>();
@@ -61,17 +51,14 @@ public class SubscriptionEmailNotificationServiceImpl implements SubscriptionEma
private SubscribeService subscribeService; private SubscribeService subscribeService;
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
public SubscriptionEmailNotificationServiceImpl(Map<String, Set<String>> param2values, public SubscriptionEmailNotificationServiceImpl(Map<String, DSpaceObjectUpdates> contentUpdates,
Map<String, DSpaceObjectUpdates> contentUpdates,
Map<String, SubscriptionGenerator> subscriptionType2generators) { Map<String, SubscriptionGenerator> subscriptionType2generators) {
this.param2values = param2values;
this.contentUpdates = contentUpdates; this.contentUpdates = contentUpdates;
this.subscriptionType2generators = subscriptionType2generators; this.subscriptionType2generators = subscriptionType2generators;
} }
@SuppressWarnings({ "rawtypes", "unchecked" }) @SuppressWarnings({ "rawtypes", "unchecked" })
public void perform(Context context, DSpaceRunnableHandler handler, String subscriptionType, String frequency) { public void perform(Context context, DSpaceRunnableHandler handler, String subscriptionType, String frequency) {
List<IndexableObject> items = new ArrayList<>();
List<IndexableObject> communities = new ArrayList<>(); List<IndexableObject> communities = new ArrayList<>();
List<IndexableObject> collections = new ArrayList<>(); List<IndexableObject> collections = new ArrayList<>();
try { try {
@@ -90,9 +77,6 @@ public class SubscriptionEmailNotificationServiceImpl implements SubscriptionEma
} else if (dSpaceObject.getType() == COLLECTION) { } else if (dSpaceObject.getType() == COLLECTION) {
collections.addAll(contentUpdates.get(Collection.class.getSimpleName()) collections.addAll(contentUpdates.get(Collection.class.getSimpleName())
.findUpdates(context, dSpaceObject, frequency)); .findUpdates(context, dSpaceObject, frequency));
} else if (dSpaceObject.getType() == ITEM) {
items.addAll(contentUpdates.get(Item.class.getSimpleName())
.findUpdates(context, dSpaceObject, frequency));
} }
var ePerson = subscription.getEPerson(); var ePerson = subscription.getEPerson();
@@ -103,15 +87,14 @@ public class SubscriptionEmailNotificationServiceImpl implements SubscriptionEma
continue; continue;
} else { } else {
subscriptionType2generators.get(subscriptionType) subscriptionType2generators.get(subscriptionType)
.notifyForSubscriptions(context, ePerson, communities, collections, items); .notifyForSubscriptions(context, ePerson, communities, collections);
communities.clear(); communities.clear();
collections.clear(); collections.clear();
items.clear();
} }
} else { } else {
//in the end of the iteration //in the end of the iteration
subscriptionType2generators.get(subscriptionType) subscriptionType2generators.get(subscriptionType)
.notifyForSubscriptions(context, ePerson, communities, collections, items); .notifyForSubscriptions(context, ePerson, communities, collections);
} }
iterator++; iterator++;
} }
@@ -154,14 +137,4 @@ public class SubscriptionEmailNotificationServiceImpl implements SubscriptionEma
return subscriptionType2generators.keySet(); return subscriptionType2generators.keySet();
} }
@Override
public Set<String> getSubscriptionParameterValuesByName(String name) {
return param2values.containsKey(name) ? param2values.get(name) : Collections.emptySet();
}
@Override
public boolean isSupportedSubscriptionParameterName(String name) {
return param2values.containsKey(name);
}
} }

View File

@@ -1,193 +0,0 @@
/**
* 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.subscriptions.dSpaceObjectsUpdates;
import static org.apache.commons.lang3.StringUtils.trimToEmpty;
import java.sql.SQLException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.dspace.content.DSpaceObject;
import org.dspace.content.Item;
import org.dspace.content.service.CollectionService;
import org.dspace.content.service.CommunityService;
import org.dspace.content.service.ItemService;
import org.dspace.core.Context;
import org.dspace.discovery.DiscoverQuery;
import org.dspace.discovery.DiscoverResult;
import org.dspace.discovery.IndexableObject;
import org.dspace.discovery.SearchService;
import org.dspace.discovery.configuration.DiscoveryConfiguration;
import org.dspace.discovery.configuration.DiscoveryConfigurationService;
import org.dspace.discovery.configuration.DiscoveryRelatedItemConfiguration;
import org.dspace.discovery.configuration.DiscoverySortConfiguration;
import org.dspace.discovery.configuration.DiscoverySortFieldConfiguration;
import org.dspace.discovery.configuration.DiscoverySortFunctionConfiguration;
import org.dspace.discovery.indexobject.IndexableCollection;
import org.dspace.discovery.indexobject.IndexableCommunity;
import org.dspace.discovery.indexobject.IndexableItem;
import org.dspace.subscriptions.service.DSpaceObjectUpdates;
/**
* Class which will be used to find
* all item objects updated related with subscribed DSO
*
* @author Alba Aliu
*/
public class ItemUpdates implements DSpaceObjectUpdates {
private final Logger log = LogManager.getLogger(ItemUpdates.class);
private final CollectionService collectionService;
private final CommunityService communityService;
private final ItemService itemService;
private DiscoveryConfigurationService searchConfigurationService;
private SearchService searchService;
@Override
@SuppressWarnings("rawtypes")
public List<IndexableObject> findUpdates(Context context, DSpaceObject dSpaceObject, String frequency) {
List<IndexableObject> list = new ArrayList<>();
// entity type found
String inverseRelationName = "RELATION." + itemService.getEntityTypeLabel((Item) dSpaceObject);
List<DiscoveryConfiguration> discoveryConfigurationList =
searchConfigurationService.getDiscoveryConfigurationWithPrefixName(inverseRelationName);
DiscoverQuery discoverQuery = null;
DiscoverResult searchResult = null;
IndexableObject indexableObject = resolveScope(context, dSpaceObject.getID().toString());
try {
for (DiscoveryConfiguration discoveryConfiguration : discoveryConfigurationList) {
discoverQuery = buildDiscoveryQuery(discoveryConfiguration, indexableObject);
discoverQuery.addFilterQueries("lastModified_dt:" + this.findLastFrequency(frequency));
searchResult = searchService.search(context, discoverQuery);
list.addAll(searchResult.getIndexableObjects());
}
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return list;
}
private IndexableObject<?, ?> resolveScope(Context context, String scope) {
IndexableObject<?, ?> scopeObj = null;
if (StringUtils.isBlank(scope)) {
return scopeObj;
}
try {
UUID uuid = UUID.fromString(scope);
scopeObj = new IndexableCommunity(communityService.find(context, uuid));
if (scopeObj.getIndexedObject() == null) {
scopeObj = new IndexableCollection(collectionService.find(context, uuid));
}
if (scopeObj.getIndexedObject() == null) {
scopeObj = new IndexableItem(itemService.find(context, uuid));
}
} catch (IllegalArgumentException e) {
log.error("The given scope string " + trimToEmpty(scope) + " is not a UUID");
} catch (SQLException e) {
log.error("Unable to retrieve DSpace Object with ID " + trimToEmpty(scope) + " from the database");
}
return scopeObj;
}
private DiscoverQuery buildDiscoveryQuery(DiscoveryConfiguration discoveryConfiguration, IndexableObject<?,?> scope)
throws SQLException {
DiscoverQuery discoverQuery = buildBaseQuery(discoveryConfiguration, scope);
discoverQuery.addDSpaceObjectFilter(IndexableItem.TYPE);
configureSorting(discoverQuery, discoveryConfiguration.getSearchSortConfiguration(), scope);
return discoverQuery;
}
@SuppressWarnings("rawtypes")
private void configureSorting(DiscoverQuery queryArgs, DiscoverySortConfiguration searchSortConfiguration,
final IndexableObject scope) {
String sortBy = getDefaultSortField(searchSortConfiguration);
String sortOrder = getDefaultSortDirection(searchSortConfiguration);
//Update Discovery query
DiscoverySortFieldConfiguration sortFieldConfiguration = searchSortConfiguration
.getSortFieldConfiguration(sortBy);
if (Objects.nonNull(sortFieldConfiguration)) {
String sortField;
if (DiscoverySortFunctionConfiguration.SORT_FUNCTION.equals(sortFieldConfiguration.getType())) {
sortField = MessageFormat.format(
((DiscoverySortFunctionConfiguration) sortFieldConfiguration).getFunction(scope.getID()),
scope.getID());
} else {
var type = sortFieldConfiguration.getType();
var metadataField = sortFieldConfiguration.getMetadataField();
sortField = searchService.toSortFieldIndex(metadataField, type);
}
if ("asc".equalsIgnoreCase(sortOrder)) {
queryArgs.setSortField(sortField, DiscoverQuery.SORT_ORDER.asc);
} else if ("desc".equalsIgnoreCase(sortOrder)) {
queryArgs.setSortField(sortField, DiscoverQuery.SORT_ORDER.desc);
} else {
log.error(sortOrder + " is not a valid sort order");
}
} else {
log.error(sortBy + " is not a valid sort field");
}
}
private String getDefaultSortDirection(DiscoverySortConfiguration searchSortConfiguration) {
return searchSortConfiguration.getSortFields().iterator().next().getDefaultSortOrder().toString();
}
private String getDefaultSortField(DiscoverySortConfiguration searchSortConfiguration) {
String sortBy;// Attempt to find the default one, if none found we use SCORE
sortBy = "score";
if (Objects.nonNull(searchSortConfiguration.getSortFields()) &&
!searchSortConfiguration.getSortFields().isEmpty()) {
DiscoverySortFieldConfiguration defaultSort = searchSortConfiguration.getSortFields().get(0);
if (org.apache.commons.lang.StringUtils.isBlank(defaultSort.getMetadataField())) {
return sortBy;
}
sortBy = defaultSort.getMetadataField();
}
return sortBy;
}
private DiscoverQuery buildBaseQuery(DiscoveryConfiguration discoveryConfiguration, IndexableObject<?, ?> scope) {
DiscoverQuery discoverQuery = new DiscoverQuery();
if (Objects.isNull(discoveryConfiguration)) {
return discoverQuery;
}
discoverQuery.setDiscoveryConfigurationName(discoveryConfiguration.getId());
List<String> filterQueries = discoveryConfiguration.getDefaultFilterQueries();
for (String filterQuery : filterQueries) {
if (discoveryConfiguration instanceof DiscoveryRelatedItemConfiguration) {
discoverQuery.addFilterQueries(MessageFormat.format(filterQuery, scope.getID()));
} else {
discoverQuery.addFilterQueries(filterQuery);
}
}
return discoverQuery;
}
public ItemUpdates(CollectionService collectionService, CommunityService communityService, ItemService itemService,
DiscoveryConfigurationService searchConfigurationService, SearchService searchService) {
this.collectionService = collectionService;
this.communityService = communityService;
this.itemService = itemService;
this.searchConfigurationService = searchConfigurationService;
this.searchService = searchService;
}
}

View File

@@ -20,6 +20,6 @@ import org.dspace.eperson.EPerson;
*/ */
public interface SubscriptionGenerator<T> { public interface SubscriptionGenerator<T> {
public void notifyForSubscriptions(Context c, EPerson ePerson, List<T> comm, List<T> coll, List<T> items); public void notifyForSubscriptions(Context c, EPerson ePerson, List<T> comm, List<T> coll);
} }

View File

@@ -9,6 +9,8 @@ package org.dspace.app.rest.repository;
import static org.dspace.app.rest.model.SubscriptionRest.CATEGORY; import static org.dspace.app.rest.model.SubscriptionRest.CATEGORY;
import static org.dspace.app.rest.model.SubscriptionRest.NAME; import static org.dspace.app.rest.model.SubscriptionRest.NAME;
import static org.dspace.core.Constants.COLLECTION;
import static org.dspace.core.Constants.COMMUNITY;
import java.io.IOException; import java.io.IOException;
import java.sql.SQLException; import java.sql.SQLException;
@@ -24,6 +26,7 @@ import javax.ws.rs.BadRequestException;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.dspace.app.rest.DiscoverableEndpointsService; import org.dspace.app.rest.DiscoverableEndpointsService;
import org.dspace.app.rest.Parameter; import org.dspace.app.rest.Parameter;
import org.dspace.app.rest.SearchRestMethod; import org.dspace.app.rest.SearchRestMethod;
@@ -33,11 +36,10 @@ import org.dspace.app.rest.model.SubscriptionParameterRest;
import org.dspace.app.rest.model.SubscriptionRest; import org.dspace.app.rest.model.SubscriptionRest;
import org.dspace.app.rest.utils.DSpaceObjectUtils; import org.dspace.app.rest.utils.DSpaceObjectUtils;
import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeException;
import org.dspace.authorize.service.AuthorizeService;
import org.dspace.content.DSpaceObject; import org.dspace.content.DSpaceObject;
import org.dspace.core.Constants;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.eperson.EPerson; import org.dspace.eperson.EPerson;
import org.dspace.eperson.FrequencyType;
import org.dspace.eperson.Subscription; import org.dspace.eperson.Subscription;
import org.dspace.eperson.SubscriptionParameter; import org.dspace.eperson.SubscriptionParameter;
import org.dspace.eperson.service.EPersonService; import org.dspace.eperson.service.EPersonService;
@@ -66,8 +68,6 @@ public class SubscriptionRestRepository extends DSpaceRestRepository<Subscriptio
@Autowired @Autowired
private EPersonService ePersonService; private EPersonService ePersonService;
@Autowired @Autowired
private AuthorizeService authorizeService;
@Autowired
private SubscribeService subscribeService; private SubscribeService subscribeService;
@Autowired @Autowired
private DSpaceObjectUtils dspaceObjectUtil; private DSpaceObjectUtils dspaceObjectUtil;
@@ -103,7 +103,7 @@ public class SubscriptionRestRepository extends DSpaceRestRepository<Subscriptio
} }
@SearchRestMethod(name = "findByEPerson") @SearchRestMethod(name = "findByEPerson")
@PreAuthorize("hasPermission(#epersonId, 'AdminOrOwner', 'READ')") @PreAuthorize("hasPermission(#epersonId, 'EPERSON', 'READ')")
public Page<SubscriptionRest> findSubscriptionsByEPerson(@Parameter(value = "uuid", required = true) UUID epersonId, public Page<SubscriptionRest> findSubscriptionsByEPerson(@Parameter(value = "uuid", required = true) UUID epersonId,
Pageable pageable) throws Exception { Pageable pageable) throws Exception {
Long total = null; Long total = null;
@@ -122,7 +122,7 @@ public class SubscriptionRestRepository extends DSpaceRestRepository<Subscriptio
} }
@SearchRestMethod(name = "findByEPersonAndDso") @SearchRestMethod(name = "findByEPersonAndDso")
@PreAuthorize("hasPermission(#epersonId, 'AdminOrOwner', 'READ')") @PreAuthorize("hasPermission(#epersonId, 'EPERSON', 'READ')")
public Page<SubscriptionRest> findByEPersonAndDso(@Parameter(value = "eperson_id", required = true) UUID epersonId, public Page<SubscriptionRest> findByEPersonAndDso(@Parameter(value = "eperson_id", required = true) UUID epersonId,
@Parameter(value = "resource",required = true) UUID dsoId, @Parameter(value = "resource",required = true) UUID dsoId,
Pageable pageable) throws Exception { Pageable pageable) throws Exception {
@@ -143,6 +143,7 @@ public class SubscriptionRestRepository extends DSpaceRestRepository<Subscriptio
} }
@Override @Override
@PreAuthorize("@subscriptionSecurity.isEnabelToCreateSubscription(#context) && hasAuthority('AUTHENTICATED')")
protected SubscriptionRest createAndReturn(Context context) throws SQLException, AuthorizeException { protected SubscriptionRest createAndReturn(Context context) throws SQLException, AuthorizeException {
HttpServletRequest req = getRequestService().getCurrentRequest().getHttpServletRequest(); HttpServletRequest req = getRequestService().getCurrentRequest().getHttpServletRequest();
String epersonId = req.getParameter("eperson_id"); String epersonId = req.getParameter("eperson_id");
@@ -159,31 +160,23 @@ public class SubscriptionRestRepository extends DSpaceRestRepository<Subscriptio
throw new BadRequestException("Id of person or dspace object must represents reals ids"); throw new BadRequestException("Id of person or dspace object must represents reals ids");
} }
// user must have read permissions to dataspace object if (dSpaceObject.getType() == COMMUNITY || dSpaceObject.getType() == COLLECTION) {
if (!authorizeService.authorizeActionBoolean(context, ePerson, dSpaceObject, Constants.READ, true)) { Subscription subscription = null;
throw new AuthorizeException("The user has not READ rights on this DSO"); ServletInputStream input = req.getInputStream();
} SubscriptionRest subscriptionRest = new ObjectMapper().readValue(input, SubscriptionRest.class);
List<SubscriptionParameterRest> subscriptionParameterList = subscriptionRest
// if user is admin do not make this control, .getSubscriptionParameterList();
// otherwise make this control because normal user can only subscribe with their own ID of user. if (CollectionUtils.isNotEmpty(subscriptionParameterList)) {
if (!authorizeService.isAdmin(context)) { List<SubscriptionParameter> subscriptionParameters = new ArrayList<>();
if (!ePerson.equals(context.getCurrentUser())) { validateParameters(subscriptionRest, subscriptionParameterList, subscriptionParameters);
throw new AuthorizeException("Only administrator can subscribe for other persons"); subscription = subscribeService.subscribe(context, ePerson, dSpaceObject, subscriptionParameters,
subscriptionRest.getSubscriptionType());
} }
context.commit();
return converter.toRest(subscription, utils.obtainProjection());
} else {
throw new BadRequestException("Currently subscription is supported only for Community and Collection");
} }
Subscription subscription = null;
ServletInputStream input = req.getInputStream();
SubscriptionRest subscriptionRest = new ObjectMapper().readValue(input, SubscriptionRest.class);
List<SubscriptionParameterRest> subscriptionParameterList = subscriptionRest.getSubscriptionParameterList();
if (CollectionUtils.isNotEmpty(subscriptionParameterList)) {
List<SubscriptionParameter> subscriptionParameters = new ArrayList<>();
validateParameters(subscriptionRest, subscriptionParameterList, subscriptionParameters);
subscription = subscribeService.subscribe(context, ePerson, dSpaceObject, subscriptionParameters,
subscriptionRest.getSubscriptionType());
}
context.commit();
return converter.toRest(subscription, utils.obtainProjection());
} catch (SQLException sqlException) { } catch (SQLException sqlException) {
throw new SQLException(sqlException.getMessage(), sqlException); throw new SQLException(sqlException.getMessage(), sqlException);
} catch (IOException ioException) { } catch (IOException ioException) {
@@ -198,7 +191,7 @@ public class SubscriptionRestRepository extends DSpaceRestRepository<Subscriptio
SubscriptionParameter subscriptionParameter = new SubscriptionParameter(); SubscriptionParameter subscriptionParameter = new SubscriptionParameter();
var name = subscriptionParameterRest.getName(); var name = subscriptionParameterRest.getName();
var value = subscriptionParameterRest.getValue(); var value = subscriptionParameterRest.getValue();
if (!nameAndValueAreSupported(name, value)) { if (!StringUtils.equals("frequency", name) || !FrequencyType.isSupportedFrequencyType(value)) {
throw new UnprocessableEntityException("Provided SubscriptionParameter name:" + name + throw new UnprocessableEntityException("Provided SubscriptionParameter name:" + name +
" or value: " + value + " is not supported!"); " or value: " + value + " is not supported!");
} }
@@ -214,20 +207,11 @@ public class SubscriptionRestRepository extends DSpaceRestRepository<Subscriptio
} }
} }
private boolean nameAndValueAreSupported(String name, String value) {
return subscriptionEmailNotificationService.isSupportedSubscriptionParameterName(name) &&
subscriptionEmailNotificationService.getSubscriptionParameterValuesByName(name).contains(value);
}
@Override @Override
@PreAuthorize("hasPermission(#id, 'subscription', 'WRITE')") @PreAuthorize("hasPermission(#id, 'subscription', 'WRITE')")
protected SubscriptionRest put(Context context, HttpServletRequest request, String apiCategory, String model, protected SubscriptionRest put(Context context, HttpServletRequest request, String apiCategory, String model,
Integer id, JsonNode jsonNode) throws SQLException { Integer id, JsonNode jsonNode) throws SQLException {
HttpServletRequest req = getRequestService().getCurrentRequest().getHttpServletRequest();
String epersonId = req.getParameter("eperson_id");
String dsoId = req.getParameter("resource");
SubscriptionRest subscriptionRest; SubscriptionRest subscriptionRest;
try { try {
subscriptionRest = new ObjectMapper().readValue(jsonNode.toString(), SubscriptionRest.class); subscriptionRest = new ObjectMapper().readValue(jsonNode.toString(), SubscriptionRest.class);
@@ -240,22 +224,12 @@ public class SubscriptionRestRepository extends DSpaceRestRepository<Subscriptio
throw new ResourceNotFoundException(apiCategory + "." + model + " with id: " + id + " not found"); throw new ResourceNotFoundException(apiCategory + "." + model + " with id: " + id + " not found");
} }
EPerson ePerson = ePersonService.findByIdOrLegacyId(context, epersonId);
if (Objects.isNull(ePerson)) {
throw new ResourceNotFoundException("There is not ePerson with uuid:" + epersonId);
}
DSpaceObject dSpaceObject = dspaceObjectUtil.findDSpaceObject(context, UUID.fromString(dsoId));
if (Objects.isNull(dSpaceObject)) {
throw new ResourceNotFoundException("There is not DSpaceObject with uuid:" + dsoId);
}
if (id.equals(subscription.getID())) { if (id.equals(subscription.getID())) {
List<SubscriptionParameter> subscriptionParameters = new ArrayList<>(); List<SubscriptionParameter> subscriptionParameters = new ArrayList<>();
List<SubscriptionParameterRest> subscriptionParameterList = subscriptionRest.getSubscriptionParameterList(); List<SubscriptionParameterRest> subscriptionParameterList = subscriptionRest.getSubscriptionParameterList();
validateParameters(subscriptionRest, subscriptionParameterList, subscriptionParameters); validateParameters(subscriptionRest, subscriptionParameterList, subscriptionParameters);
subscription = subscribeService.updateSubscription(context, id, ePerson, dSpaceObject, subscription = subscribeService.updateSubscription(context, id, subscriptionRest.getSubscriptionType(),
subscriptionParameters, subscriptionRest.getSubscriptionType()); subscriptionParameters);
context.commit(); context.commit();
return converter.toRest(subscription, utils.obtainProjection()); return converter.toRest(subscription, utils.obtainProjection());
} else { } else {

View File

@@ -1,73 +0,0 @@
/**
* 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.app.rest.security;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.Objects;
import java.util.UUID;
import org.apache.commons.lang3.StringUtils;
import org.dspace.app.rest.utils.ContextUtil;
import org.dspace.authorize.service.AuthorizeService;
import org.dspace.core.Context;
import org.dspace.eperson.EPerson;
import org.dspace.services.RequestService;
import org.dspace.services.model.Request;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component;
/**
* @author Mykhaylo Boychuk (mykhaylo.boychuk@4science.com)
*/
@Component
public class SubscriptionAdminAndOwnerPermissionEvaluatorPlugin extends RestObjectPermissionEvaluatorPlugin {
private static final Logger log = LoggerFactory.getLogger(SubscriptionAdminAndOwnerPermissionEvaluatorPlugin.class);
@Autowired
private RequestService requestService;
@Autowired
private AuthorizeService authorizeService;
@Override
public boolean hasDSpacePermission(Authentication authentication, Serializable targetId,
String targetType, DSpaceRestPermission permission) {
DSpaceRestPermission restPermission = DSpaceRestPermission.convert(permission);
if (!DSpaceRestPermission.READ.equals(restPermission) &&
!DSpaceRestPermission.WRITE.equals(restPermission) &&
!DSpaceRestPermission.DELETE.equals(restPermission) ||
!StringUtils.equals(targetType, "AdminOrOwner")) {
return false;
}
Request request = requestService.getCurrentRequest();
Context context = ContextUtil.obtainContext(request.getHttpServletRequest());
UUID dsoId = UUID.fromString(targetId.toString());
EPerson currentUser = context.getCurrentUser();
// anonymous user
if (Objects.isNull(currentUser)) {
return false;
}
try {
return dsoId.equals(currentUser.getID()) || authorizeService.isAdmin(context, currentUser);
} catch (SQLException e) {
log.error(e.getMessage(), e);
}
return false;
}
}

View File

@@ -0,0 +1,75 @@
/**
* 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.app.rest.security;
import java.sql.SQLException;
import java.util.Objects;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import org.dspace.app.rest.utils.DSpaceObjectUtils;
import org.dspace.authorize.service.AuthorizeService;
import org.dspace.content.DSpaceObject;
import org.dspace.core.Constants;
import org.dspace.core.Context;
import org.dspace.eperson.EPerson;
import org.dspace.eperson.service.EPersonService;
import org.dspace.services.RequestService;
import org.dspace.utils.DSpace;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* Methods of this class are used on PreAuthorize annotations
* to check security on subscriptions endpoint
*
* @author Mykhaylo Boychuk (mykhaylo.boychuk at 4science.it)
*/
@Component(value = "subscriptionSecurity")
public class SubscriptionSecurityBean {
@Autowired
private EPersonService ePersonService;
@Autowired
private AuthorizeService authorizeService;
@Autowired
private DSpaceObjectUtils dspaceObjectUtil;
public boolean isEnabelToCreateSubscription(Context context) throws SQLException {
RequestService requestService = new DSpace().getRequestService();
HttpServletRequest req = requestService.getCurrentRequest().getHttpServletRequest();
String epersonId = req.getParameter("eperson_id");
String dsoId = req.getParameter("resource");
if (Objects.isNull(dsoId) || Objects.isNull(epersonId)) {
return true;
}
try {
DSpaceObject dSpaceObject = dspaceObjectUtil.findDSpaceObject(context, UUID.fromString(dsoId));
EPerson ePerson = ePersonService.findByIdOrLegacyId(context, epersonId);
if (Objects.isNull(ePerson) || Objects.isNull(dSpaceObject)) {
return true;
}
if (!authorizeService.authorizeActionBoolean(context, ePerson, dSpaceObject, Constants.READ, true)) {
return false;
}
if (!authorizeService.isAdmin(context)) {
if (!ePerson.equals(context.getCurrentUser())) {
return false;
}
}
} catch (SQLException sqlException) {
throw new SQLException(sqlException.getMessage(), sqlException);
}
return true;
}
}

View File

@@ -33,10 +33,8 @@ import org.dspace.app.rest.test.AbstractControllerIntegrationTest;
import org.dspace.builder.CollectionBuilder; import org.dspace.builder.CollectionBuilder;
import org.dspace.builder.CommunityBuilder; import org.dspace.builder.CommunityBuilder;
import org.dspace.builder.EPersonBuilder; import org.dspace.builder.EPersonBuilder;
import org.dspace.builder.ItemBuilder;
import org.dspace.builder.SubscribeBuilder; import org.dspace.builder.SubscribeBuilder;
import org.dspace.content.Collection; import org.dspace.content.Collection;
import org.dspace.content.Item;
import org.dspace.eperson.EPerson; import org.dspace.eperson.EPerson;
import org.dspace.eperson.Subscription; import org.dspace.eperson.Subscription;
import org.dspace.eperson.SubscriptionParameter; import org.dspace.eperson.SubscriptionParameter;
@@ -44,8 +42,6 @@ import org.hamcrest.Matchers;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
/** /**
* Integration test to test the /api/config/subscriptions endpoint * Integration test to test the /api/config/subscriptions endpoint
@@ -55,7 +51,7 @@ import org.springframework.util.MultiValueMap;
*/ */
public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationTest { public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationTest {
private Item publicItem;
private Collection collection; private Collection collection;
@Before @Before
@@ -68,15 +64,9 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
.withName("Parent Community") .withName("Parent Community")
.build(); .build();
collection = CollectionBuilder.createCollection(context, parentCommunity) collection = CollectionBuilder.createCollection(context, parentCommunity)
.withName("Collection 1") .withName("Collection 1")
.build(); .withSubmitterGroup(eperson)
// creation of the item which will be the DSO related with a subscription .build();
publicItem = ItemBuilder.createItem(context, collection)
.withTitle("Test")
.withIssueDate("2010-10-17")
.withAuthor("Smith, Donald")
.withSubject("ExtraEntry")
.build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
} }
@@ -90,7 +80,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("D"); subscriptionParameter.setValue("D");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription1 = SubscribeBuilder.subscribeBuilder(context, Subscription subscription1 = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, eperson, subscriptionParameterList).build(); "content", collection, eperson, subscriptionParameterList).build();
List<SubscriptionParameter> subscriptionParameterList2 = new ArrayList<>(); List<SubscriptionParameter> subscriptionParameterList2 = new ArrayList<>();
SubscriptionParameter subscriptionParameter2 = new SubscriptionParameter(); SubscriptionParameter subscriptionParameter2 = new SubscriptionParameter();
subscriptionParameter2.setName("frequency"); subscriptionParameter2.setName("frequency");
@@ -136,7 +126,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("M"); subscriptionParameter.setValue("M");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription = SubscribeBuilder.subscribeBuilder(context, Subscription subscription = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, eperson, subscriptionParameterList).build(); "content", collection, eperson, subscriptionParameterList).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
String tokenEPerson = getAuthToken(eperson.getEmail(), password); String tokenEPerson = getAuthToken(eperson.getEmail(), password);
@@ -168,7 +158,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("W"); subscriptionParameter.setValue("W");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription = SubscribeBuilder.subscribeBuilder(context, Subscription subscription = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, admin, subscriptionParameterList).build(); "content", collection, admin, subscriptionParameterList).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
String tokenAdmin = getAuthToken(admin.getEmail(), password); String tokenAdmin = getAuthToken(admin.getEmail(), password);
@@ -199,7 +189,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("D"); subscriptionParameter.setValue("D");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription = SubscribeBuilder.subscribeBuilder(context, Subscription subscription = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, admin, subscriptionParameterList).build(); "content", collection, admin, subscriptionParameterList).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
getClient().perform(get("/api/core/subscriptions/" + subscription.getID())) getClient().perform(get("/api/core/subscriptions/" + subscription.getID()))
@@ -215,7 +205,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("W"); subscriptionParameter.setValue("W");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription = SubscribeBuilder.subscribeBuilder(context, Subscription subscription = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, admin, subscriptionParameterList).build(); "content", collection, admin, subscriptionParameterList).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
String tokenEPerson = getAuthToken(eperson.getEmail(), password); String tokenEPerson = getAuthToken(eperson.getEmail(), password);
@@ -239,7 +229,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("D"); subscriptionParameter.setValue("D");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription1 = SubscribeBuilder.subscribeBuilder(context, Subscription subscription1 = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, eperson, subscriptionParameterList).build(); "content", collection, eperson, subscriptionParameterList).build();
List<SubscriptionParameter> subscriptionParameterList2 = new ArrayList<>(); List<SubscriptionParameter> subscriptionParameterList2 = new ArrayList<>();
SubscriptionParameter subscriptionParameter2 = new SubscriptionParameter(); SubscriptionParameter subscriptionParameter2 = new SubscriptionParameter();
subscriptionParameter2.setName("frequency"); subscriptionParameter2.setName("frequency");
@@ -273,7 +263,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("M"); subscriptionParameter.setValue("M");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription1 = SubscribeBuilder.subscribeBuilder(context, Subscription subscription1 = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, eperson, subscriptionParameterList).build(); "content", collection, eperson, subscriptionParameterList).build();
List<SubscriptionParameter> subscriptionParameterList2 = new ArrayList<>(); List<SubscriptionParameter> subscriptionParameterList2 = new ArrayList<>();
SubscriptionParameter subscriptionParameter2 = new SubscriptionParameter(); SubscriptionParameter subscriptionParameter2 = new SubscriptionParameter();
subscriptionParameter2.setName("frequency"); subscriptionParameter2.setName("frequency");
@@ -306,7 +296,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setName("frequency"); subscriptionParameter.setName("frequency");
subscriptionParameter.setValue("D"); subscriptionParameter.setValue("D");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
SubscribeBuilder.subscribeBuilder(context, "content", publicItem, eperson, subscriptionParameterList).build(); SubscribeBuilder.subscribeBuilder(context, "content", collection, eperson, subscriptionParameterList).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
getClient().perform(get("/api/core/subscriptions/search/findByEPerson") getClient().perform(get("/api/core/subscriptions/search/findByEPerson")
@@ -327,7 +317,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setName("frequency"); subscriptionParameter.setName("frequency");
subscriptionParameter.setValue("D"); subscriptionParameter.setValue("D");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
SubscribeBuilder.subscribeBuilder(context, "content", publicItem, user, subscriptionParameterList).build(); SubscribeBuilder.subscribeBuilder(context, "content", collection, user, subscriptionParameterList).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
String tokenEPerson = getAuthToken(eperson.getEmail(), password); String tokenEPerson = getAuthToken(eperson.getEmail(), password);
@@ -349,16 +339,12 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
SubscriptionRest subscriptionRest = new SubscriptionRest(); SubscriptionRest subscriptionRest = new SubscriptionRest();
subscriptionRest.setSubscriptionType("content"); subscriptionRest.setSubscriptionType("content");
MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
params.add("resource", publicItem.getID().toString());
params.add("eperson_id", eperson.getID().toString());
context.restoreAuthSystemState(); context.restoreAuthSystemState();
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
getClient().perform(post("/api/core/subscriptions") getClient().perform(post("/api/core/subscriptions")
.param("resource", publicItem.getID().toString()) .param("resource", collection.getID().toString())
.param("eperson_id", eperson.getID().toString()) .param("eperson_id", eperson.getID().toString())
.content(objectMapper.writeValueAsString(subscriptionRest)) .content(objectMapper.writeValueAsString(subscriptionRest))
.contentType(contentType)) .contentType(contentType))
@@ -385,7 +371,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
try { try {
String tokenAdmin = getAuthToken(admin.getEmail(), password); String tokenAdmin = getAuthToken(admin.getEmail(), password);
getClient(tokenAdmin).perform(post("/api/core/subscriptions") getClient(tokenAdmin).perform(post("/api/core/subscriptions")
.param("resource", publicItem.getID().toString()) .param("resource", collection.getID().toString())
.param("eperson_id", eperson.getID().toString()) .param("eperson_id", eperson.getID().toString())
.content(new ObjectMapper().writeValueAsString(map)) .content(new ObjectMapper().writeValueAsString(map))
.contentType(MediaType.APPLICATION_JSON_VALUE)) .contentType(MediaType.APPLICATION_JSON_VALUE))
@@ -421,7 +407,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
try { try {
String tokenEPerson = getAuthToken(eperson.getEmail(), password); String tokenEPerson = getAuthToken(eperson.getEmail(), password);
getClient(tokenEPerson).perform(post("/api/core/subscriptions") getClient(tokenEPerson).perform(post("/api/core/subscriptions")
.param("resource", publicItem.getID().toString()) .param("resource", collection.getID().toString())
.param("eperson_id", eperson.getID().toString()) .param("eperson_id", eperson.getID().toString())
.content(new ObjectMapper().writeValueAsString(map)) .content(new ObjectMapper().writeValueAsString(map))
.contentType(MediaType.APPLICATION_JSON_VALUE)) .contentType(MediaType.APPLICATION_JSON_VALUE))
@@ -454,7 +440,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
String tokenEPerson = getAuthToken(eperson.getEmail(), password); String tokenEPerson = getAuthToken(eperson.getEmail(), password);
getClient(tokenEPerson).perform(post("/api/core/subscriptions") getClient(tokenEPerson).perform(post("/api/core/subscriptions")
.param("resource", publicItem.getID().toString()) .param("resource", collection.getID().toString())
.param("eperson_id", eperson.getID().toString()) .param("eperson_id", eperson.getID().toString())
.content(new ObjectMapper().writeValueAsString(map)) .content(new ObjectMapper().writeValueAsString(map))
.contentType(MediaType.APPLICATION_JSON_VALUE)) .contentType(MediaType.APPLICATION_JSON_VALUE))
@@ -478,7 +464,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
String tokenEPerson = getAuthToken(eperson.getEmail(), password); String tokenEPerson = getAuthToken(eperson.getEmail(), password);
getClient(tokenEPerson).perform(post("/api/core/subscriptions") getClient(tokenEPerson).perform(post("/api/core/subscriptions")
.param("resource", publicItem.getID().toString()) .param("resource", collection.getID().toString())
.param("eperson_id", eperson.getID().toString()) .param("eperson_id", eperson.getID().toString())
.content(new ObjectMapper().writeValueAsString(map)) .content(new ObjectMapper().writeValueAsString(map))
.contentType(MediaType.APPLICATION_JSON_VALUE)) .contentType(MediaType.APPLICATION_JSON_VALUE))
@@ -502,7 +488,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
String tokenEPerson = getAuthToken(eperson.getEmail(), password); String tokenEPerson = getAuthToken(eperson.getEmail(), password);
getClient(tokenEPerson).perform(post("/api/core/subscriptions") getClient(tokenEPerson).perform(post("/api/core/subscriptions")
.param("resource", publicItem.getID().toString()) .param("resource", collection.getID().toString())
.param("eperson_id", eperson.getID().toString()) .param("eperson_id", eperson.getID().toString())
.content(new ObjectMapper().writeValueAsString(map)) .content(new ObjectMapper().writeValueAsString(map))
.contentType(MediaType.APPLICATION_JSON_VALUE)) .contentType(MediaType.APPLICATION_JSON_VALUE))
@@ -526,7 +512,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
String tokenEPerson = getAuthToken(eperson.getEmail(), password); String tokenEPerson = getAuthToken(eperson.getEmail(), password);
getClient(tokenEPerson).perform(post("/api/core/subscriptions") getClient(tokenEPerson).perform(post("/api/core/subscriptions")
.param("resource", publicItem.getID().toString()) .param("resource", collection.getID().toString())
.param("eperson_id", eperson.getID().toString()) .param("eperson_id", eperson.getID().toString())
.content(new ObjectMapper().writeValueAsString(map)) .content(new ObjectMapper().writeValueAsString(map))
.contentType(MediaType.APPLICATION_JSON_VALUE)) .contentType(MediaType.APPLICATION_JSON_VALUE))
@@ -555,7 +541,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
String tokenEPerson = getAuthToken(eperson.getEmail(), password); String tokenEPerson = getAuthToken(eperson.getEmail(), password);
getClient(tokenEPerson).perform(post("/api/core/subscriptions") getClient(tokenEPerson).perform(post("/api/core/subscriptions")
.param("resource", publicItem.getID().toString()) .param("resource", collection.getID().toString())
.param("eperson_id", user.getID().toString()) .param("eperson_id", user.getID().toString())
.content(new ObjectMapper().writeValueAsString(map)) .content(new ObjectMapper().writeValueAsString(map))
.contentType(MediaType.APPLICATION_JSON_VALUE)) .contentType(MediaType.APPLICATION_JSON_VALUE))
@@ -571,7 +557,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("D"); subscriptionParameter.setValue("D");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription = SubscribeBuilder.subscribeBuilder(context, Subscription subscription = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, eperson, subscriptionParameterList).build(); "content", collection, eperson, subscriptionParameterList).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
getClient().perform(delete("/api/core/subscriptions/" + subscription.getID())) getClient().perform(delete("/api/core/subscriptions/" + subscription.getID()))
@@ -587,7 +573,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("D"); subscriptionParameter.setValue("D");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription = SubscribeBuilder.subscribeBuilder(context, Subscription subscription = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, eperson, subscriptionParameterList).build(); "content", collection, eperson, subscriptionParameterList).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
String tokenAdmin = getAuthToken(admin.getEmail(), password); String tokenAdmin = getAuthToken(admin.getEmail(), password);
@@ -607,7 +593,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("D"); subscriptionParameter.setValue("D");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription = SubscribeBuilder.subscribeBuilder(context, Subscription subscription = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, admin, subscriptionParameterList).build(); "content", collection, admin, subscriptionParameterList).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
String tokenEPerson = getAuthToken(eperson.getEmail(), password); String tokenEPerson = getAuthToken(eperson.getEmail(), password);
@@ -631,7 +617,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("ValueParameter1"); subscriptionParameter.setValue("ValueParameter1");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription = SubscribeBuilder.subscribeBuilder(context, Subscription subscription = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, admin, subscriptionParameterList).build(); "content", collection, admin, subscriptionParameterList).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
@@ -645,7 +631,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
newSubscription.put("subscriptionParameterList", list); newSubscription.put("subscriptionParameterList", list);
getClient().perform(put("/api/core/subscriptions/" + subscription.getID()) getClient().perform(put("/api/core/subscriptions/" + subscription.getID())
.param("resource", publicItem.getID().toString()) .param("resource", collection.getID().toString())
.param("eperson_id", admin.getID().toString()) .param("eperson_id", admin.getID().toString())
.content(objectMapper.writeValueAsString(newSubscription)) .content(objectMapper.writeValueAsString(newSubscription))
.contentType(MediaType.APPLICATION_JSON_VALUE)) .contentType(MediaType.APPLICATION_JSON_VALUE))
@@ -661,7 +647,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("D"); subscriptionParameter.setValue("D");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription = SubscribeBuilder.subscribeBuilder(context, Subscription subscription = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, admin, subscriptionParameterList).build(); "content", collection, admin, subscriptionParameterList).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
@@ -677,7 +663,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
String token = getAuthToken(eperson.getEmail(), password); String token = getAuthToken(eperson.getEmail(), password);
getClient(token).perform(put("/api/core/subscriptions/" + subscription.getID()) getClient(token).perform(put("/api/core/subscriptions/" + subscription.getID())
.param("eperson_id", admin.getID().toString()) .param("eperson_id", admin.getID().toString())
.param("resource", publicItem.getID().toString()) .param("resource", collection.getID().toString())
.content(objectMapper.writeValueAsString(newSubscription)) .content(objectMapper.writeValueAsString(newSubscription))
.contentType(MediaType.APPLICATION_JSON_VALUE)) .contentType(MediaType.APPLICATION_JSON_VALUE))
.andExpect(status().isForbidden()); .andExpect(status().isForbidden());
@@ -692,7 +678,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("D"); subscriptionParameter.setValue("D");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription = SubscribeBuilder.subscribeBuilder(context, Subscription subscription = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, eperson, subscriptionParameterList).build(); "content", collection, eperson, subscriptionParameterList).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
@@ -707,7 +693,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
String tokenSubscriber = getAuthToken(eperson.getEmail(), password); String tokenSubscriber = getAuthToken(eperson.getEmail(), password);
getClient(tokenSubscriber).perform(put("/api/core/subscriptions/" + subscription.getID()) getClient(tokenSubscriber).perform(put("/api/core/subscriptions/" + subscription.getID())
.param("resource", publicItem.getID().toString()) .param("resource", collection.getID().toString())
.param("eperson_id", eperson.getID().toString()) .param("eperson_id", eperson.getID().toString())
.content(objectMapper.writeValueAsString(newSubscription)) .content(objectMapper.writeValueAsString(newSubscription))
.contentType(MediaType.APPLICATION_JSON_VALUE)) .contentType(MediaType.APPLICATION_JSON_VALUE))
@@ -729,7 +715,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("D"); subscriptionParameter.setValue("D");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription = SubscribeBuilder.subscribeBuilder(context, Subscription subscription = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, eperson, subscriptionParameterList).build(); "content", collection, eperson, subscriptionParameterList).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
@@ -744,7 +730,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
String tokenSubscriber = getAuthToken(eperson.getEmail(), password); String tokenSubscriber = getAuthToken(eperson.getEmail(), password);
getClient(tokenSubscriber).perform(put("/api/core/subscriptions/" + subscription.getID()) getClient(tokenSubscriber).perform(put("/api/core/subscriptions/" + subscription.getID())
.param("resource", publicItem.getID().toString()) .param("resource", collection.getID().toString())
.param("eperson_id", eperson.getID().toString()) .param("eperson_id", eperson.getID().toString())
.content(objectMapper.writeValueAsString(newSubscription)) .content(objectMapper.writeValueAsString(newSubscription))
.contentType(MediaType.APPLICATION_JSON_VALUE)) .contentType(MediaType.APPLICATION_JSON_VALUE))
@@ -760,7 +746,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("D"); subscriptionParameter.setValue("D");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription = SubscribeBuilder.subscribeBuilder(context, Subscription subscription = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, eperson, subscriptionParameterList).build(); "content", collection, eperson, subscriptionParameterList).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
@@ -775,7 +761,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
String tokenSubscriber = getAuthToken(eperson.getEmail(), password); String tokenSubscriber = getAuthToken(eperson.getEmail(), password);
getClient(tokenSubscriber).perform(put("/api/core/subscriptions/" + subscription.getID()) getClient(tokenSubscriber).perform(put("/api/core/subscriptions/" + subscription.getID())
.param("resource", publicItem.getID().toString()) .param("resource", collection.getID().toString())
.param("eperson_id", eperson.getID().toString()) .param("eperson_id", eperson.getID().toString())
.content(objectMapper.writeValueAsString(newSubscription)) .content(objectMapper.writeValueAsString(newSubscription))
.contentType(MediaType.APPLICATION_JSON_VALUE)) .contentType(MediaType.APPLICATION_JSON_VALUE))
@@ -791,7 +777,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("D"); subscriptionParameter.setValue("D");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription = SubscribeBuilder.subscribeBuilder(context, Subscription subscription = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, eperson, subscriptionParameterList).build(); "content", collection, eperson, subscriptionParameterList).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
@@ -806,7 +792,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
String tokenSubscriber = getAuthToken(eperson.getEmail(), password); String tokenSubscriber = getAuthToken(eperson.getEmail(), password);
getClient(tokenSubscriber).perform(put("/api/core/subscriptions/" + subscription.getID()) getClient(tokenSubscriber).perform(put("/api/core/subscriptions/" + subscription.getID())
.param("resource", publicItem.getID().toString()) .param("resource", collection.getID().toString())
.param("eperson_id", eperson.getID().toString()) .param("eperson_id", eperson.getID().toString())
.content(objectMapper.writeValueAsString(newSubscription)) .content(objectMapper.writeValueAsString(newSubscription))
.contentType(MediaType.APPLICATION_JSON_VALUE)) .contentType(MediaType.APPLICATION_JSON_VALUE))
@@ -822,7 +808,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("D"); subscriptionParameter.setValue("D");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription = SubscribeBuilder.subscribeBuilder(context, Subscription subscription = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, eperson, subscriptionParameterList).build(); "content", collection, eperson, subscriptionParameterList).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
@@ -837,7 +823,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
String tokenAdmin = getAuthToken(admin.getEmail(), password); String tokenAdmin = getAuthToken(admin.getEmail(), password);
getClient(tokenAdmin).perform(put("/api/core/subscriptions/" + subscription.getID()) getClient(tokenAdmin).perform(put("/api/core/subscriptions/" + subscription.getID())
.param("resource", publicItem.getID().toString()) .param("resource", collection.getID().toString())
.param("eperson_id", eperson.getID().toString()) .param("eperson_id", eperson.getID().toString())
.content(objectMapper.writeValueAsString(newSubscription)) .content(objectMapper.writeValueAsString(newSubscription))
.contentType(MediaType.APPLICATION_JSON_VALUE)) .contentType(MediaType.APPLICATION_JSON_VALUE))
@@ -859,7 +845,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("M"); subscriptionParameter.setValue("M");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription = SubscribeBuilder.subscribeBuilder(context, Subscription subscription = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, eperson, subscriptionParameterList).build(); "content", collection, eperson, subscriptionParameterList).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
String tokenAdmin = getAuthToken(admin.getEmail(), password); String tokenAdmin = getAuthToken(admin.getEmail(), password);
@@ -877,7 +863,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("M"); subscriptionParameter.setValue("M");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription = SubscribeBuilder.subscribeBuilder(context, Subscription subscription = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, eperson, subscriptionParameterList).build(); "content", collection, eperson, subscriptionParameterList).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
String tokenEPerson = getAuthToken(eperson.getEmail(), password); String tokenEPerson = getAuthToken(eperson.getEmail(), password);
@@ -895,7 +881,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("M"); subscriptionParameter.setValue("M");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription = SubscribeBuilder.subscribeBuilder(context, Subscription subscription = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, eperson, subscriptionParameterList).build(); "content", collection, eperson, subscriptionParameterList).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
getClient().perform(get("/api/core/subscriptions/" + subscription.getID() + "/eperson")) getClient().perform(get("/api/core/subscriptions/" + subscription.getID() + "/eperson"))
@@ -911,7 +897,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("W"); subscriptionParameter.setValue("W");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription = SubscribeBuilder.subscribeBuilder(context, Subscription subscription = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, admin, subscriptionParameterList).build(); "content", collection, admin, subscriptionParameterList).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
String tokenEPerson = getAuthToken(eperson.getEmail(), password); String tokenEPerson = getAuthToken(eperson.getEmail(), password);
@@ -935,18 +921,15 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("W"); subscriptionParameter.setValue("W");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription = SubscribeBuilder.subscribeBuilder(context, Subscription subscription = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, eperson, subscriptionParameterList).build(); "content", collection, eperson, subscriptionParameterList).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
String tokenAdmin = getAuthToken(admin.getEmail(), password); String tokenAdmin = getAuthToken(admin.getEmail(), password);
getClient(tokenAdmin).perform(get("/api/core/subscriptions/" + subscription.getID() + "/resource")) getClient(tokenAdmin).perform(get("/api/core/subscriptions/" + subscription.getID() + "/resource"))
.andExpect(status().isOk()) .andExpect(status().isOk())
.andExpect(jsonPath("$.uuid", Matchers.is(publicItem.getID().toString()))) .andExpect(jsonPath("$.uuid", Matchers.is(collection.getID().toString())))
.andExpect(jsonPath("$.name", Matchers.is(publicItem.getName()))) .andExpect(jsonPath("$.name", Matchers.is(collection.getName())))
.andExpect(jsonPath("$.withdrawn", Matchers.is(false))) .andExpect(jsonPath("$.type", Matchers.is("collection")));
.andExpect(jsonPath("$.discoverable", Matchers.is(true)))
.andExpect(jsonPath("$.inArchive", Matchers.is(true)))
.andExpect(jsonPath("$.type", Matchers.is("item")));
} }
@Test @Test
@@ -958,18 +941,15 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("W"); subscriptionParameter.setValue("W");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription = SubscribeBuilder.subscribeBuilder(context, Subscription subscription = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, eperson, subscriptionParameterList).build(); "content", collection, eperson, subscriptionParameterList).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
String tokenAdmin = getAuthToken(eperson.getEmail(), password); String tokenAdmin = getAuthToken(eperson.getEmail(), password);
getClient(tokenAdmin).perform(get("/api/core/subscriptions/" + subscription.getID() + "/resource")) getClient(tokenAdmin).perform(get("/api/core/subscriptions/" + subscription.getID() + "/resource"))
.andExpect(status().isOk()) .andExpect(status().isOk())
.andExpect(jsonPath("$.uuid", Matchers.is(publicItem.getID().toString()))) .andExpect(jsonPath("$.uuid", Matchers.is(collection.getID().toString())))
.andExpect(jsonPath("$.name", Matchers.is(publicItem.getName()))) .andExpect(jsonPath("$.name", Matchers.is(collection.getName())))
.andExpect(jsonPath("$.withdrawn", Matchers.is(false))) .andExpect(jsonPath("$.type", Matchers.is("collection")));
.andExpect(jsonPath("$.discoverable", Matchers.is(true)))
.andExpect(jsonPath("$.inArchive", Matchers.is(true)))
.andExpect(jsonPath("$.type", Matchers.is("item")));
} }
@Test @Test
@@ -981,7 +961,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("W"); subscriptionParameter.setValue("W");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription = SubscribeBuilder.subscribeBuilder(context, Subscription subscription = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, eperson, subscriptionParameterList).build(); "content", collection, eperson, subscriptionParameterList).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
getClient().perform(get("/api/core/subscriptions/" + subscription.getID() + "/resource")) getClient().perform(get("/api/core/subscriptions/" + subscription.getID() + "/resource"))
@@ -997,7 +977,7 @@ public class SubscriptionRestRepositoryIT extends AbstractControllerIntegrationT
subscriptionParameter.setValue("D"); subscriptionParameter.setValue("D");
subscriptionParameterList.add(subscriptionParameter); subscriptionParameterList.add(subscriptionParameter);
Subscription subscription = SubscribeBuilder.subscribeBuilder(context, Subscription subscription = SubscribeBuilder.subscribeBuilder(context,
"content", publicItem, admin, subscriptionParameterList).build(); "content", collection, admin, subscriptionParameterList).build();
context.restoreAuthSystemState(); context.restoreAuthSystemState();
String tokenEPerson = getAuthToken(eperson.getEmail(), password); String tokenEPerson = getAuthToken(eperson.getEmail(), password);

View File

@@ -26,22 +26,10 @@
<map> <map>
<entry key="community" value-ref="communityUpdates"/> <entry key="community" value-ref="communityUpdates"/>
<entry key="collection" value-ref="collectionUpdates"/> <entry key="collection" value-ref="collectionUpdates"/>
<entry key="item" value-ref="itemUpdates"/>
</map>
</constructor-arg>
<constructor-arg name="param2values">
<map>
<entry key="frequency" value-ref="frequencyValues"/>
</map> </map>
</constructor-arg> </constructor-arg>
</bean> </bean>
<util:set id="frequencyValues">
<value>D</value>
<value>W</value>
<value>M</value>
</util:set>
<util:map id="generators"> <util:map id="generators">
<entry key="content" value-ref="contentNotifyGenerator"/> <entry key="content" value-ref="contentNotifyGenerator"/>
</util:map> </util:map>
@@ -51,7 +39,6 @@
<util:map id="contentUpdates"> <util:map id="contentUpdates">
<entry key="community" value-ref="communityUpdates"/> <entry key="community" value-ref="communityUpdates"/>
<entry key="collection" value-ref="collectionUpdates"/> <entry key="collection" value-ref="collectionUpdates"/>
<entry key="item" value-ref="itemUpdates"/>
</util:map> </util:map>
<util:list id="generalMetadataEntity"> <util:list id="generalMetadataEntity">
@@ -76,6 +63,4 @@
<bean id="collectionUpdates" class="org.dspace.subscriptions.dSpaceObjectsUpdates.CollectionsUpdates" /> <bean id="collectionUpdates" class="org.dspace.subscriptions.dSpaceObjectsUpdates.CollectionsUpdates" />
<bean id="itemUpdates" class="org.dspace.subscriptions.dSpaceObjectsUpdates.ItemUpdates" />
</beans> </beans>