mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-07 01:54:22 +00:00
Merge remote-tracking branch 'community/master' into w2p-62955_change-endpoint-to-search-relationships-by-label-update
This commit is contained in:
@@ -528,7 +528,7 @@ public class SolrServiceImpl implements SearchService, IndexingService {
|
||||
try {
|
||||
getSolr().deleteByQuery(
|
||||
"search.resourcetype:[" + Constants.ITEM + " TO " + Constants.COMMUNITY + "]" +
|
||||
" AND " +
|
||||
" OR " +
|
||||
"search.resourcetype:[" + Constants.WORKSPACEITEM + " TO " + Constants.CLAIMEDTASK + "]");
|
||||
} catch (Exception e) {
|
||||
throw new SearchServiceException(e.getMessage(), e);
|
||||
@@ -559,7 +559,7 @@ public class SolrServiceImpl implements SearchService, IndexingService {
|
||||
SolrQuery query = new SolrQuery();
|
||||
// Query for all indexed Items, Collections and Communities,
|
||||
// returning just their handle
|
||||
query.setFields(HANDLE_FIELD);
|
||||
query.setFields(HANDLE_FIELD, RESOURCE_UNIQUE_ID, RESOURCE_ID_FIELD, RESOURCE_TYPE_FIELD);
|
||||
query.setQuery(RESOURCE_TYPE_FIELD + ":" + type);
|
||||
QueryResponse rsp = getSolr().query(query, SolrRequest.METHOD.POST);
|
||||
SolrDocumentList docs = rsp.getResults();
|
||||
@@ -2207,10 +2207,14 @@ public class SolrServiceImpl implements SearchService, IndexingService {
|
||||
/**
|
||||
* Find the indexable object by type and UUID
|
||||
*
|
||||
* @param context The relevant DSpace Context.
|
||||
* @param doc the solr document
|
||||
* @param context
|
||||
* The relevant DSpace Context.
|
||||
* @param doc
|
||||
* the solr document, the following fields MUST be present RESOURCE_TYPE_FIELD, RESOURCE_ID_FIELD and
|
||||
* HANDLE_FIELD
|
||||
* @return an IndexableObject
|
||||
* @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.
|
||||
*/
|
||||
protected IndexableObject findIndexableObject(Context context, SolrDocument doc) throws SQLException {
|
||||
Integer type = (Integer) doc.getFirstValue(RESOURCE_TYPE_FIELD);
|
||||
|
@@ -31,8 +31,8 @@ import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.atteo.evo.inflector.English;
|
||||
import org.dspace.app.rest.converter.JsonPatchConverter;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.exception.PaginationException;
|
||||
import org.dspace.app.rest.exception.PatchBadRequestException;
|
||||
import org.dspace.app.rest.exception.RepositoryMethodNotImplementedException;
|
||||
import org.dspace.app.rest.exception.RepositoryNotFoundException;
|
||||
import org.dspace.app.rest.exception.RepositorySearchMethodNotFoundException;
|
||||
@@ -729,7 +729,7 @@ public class RestResourceController implements InitializingBean {
|
||||
Patch patch = patchConverter.convert(jsonNode);
|
||||
modelObject = repository.patch(request, apiCategory, model, id, patch);
|
||||
} catch (RepositoryMethodNotImplementedException | UnprocessableEntityException |
|
||||
PatchBadRequestException | ResourceNotFoundException e) {
|
||||
DSpaceBadRequestException | ResourceNotFoundException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
throw e;
|
||||
}
|
||||
@@ -832,7 +832,7 @@ public class RestResourceController implements InitializingBean {
|
||||
link = linkTo(this.getClass(), apiCategory, model).slash(uuid)
|
||||
.slash(subpath + '?' + querystring).withSelfRel();
|
||||
} else {
|
||||
link = linkTo(this.getClass(), apiCategory, model).slash(uuid).withSelfRel();
|
||||
link = linkTo(this.getClass(), apiCategory, model).slash(uuid).slash(subpath).withSelfRel();
|
||||
}
|
||||
|
||||
Page<HALResource> halResources = pageResult.map(linkRepository::wrapResource);
|
||||
|
@@ -11,21 +11,18 @@ import org.springframework.http.HttpStatus;
|
||||
import org.springframework.web.bind.annotation.ResponseStatus;
|
||||
|
||||
/**
|
||||
* Malformed patch document (taken from rfc5789#section-2.2) - When the server
|
||||
* determines that the patch document provided by the client is not properly
|
||||
* formatted, it SHOULD return a 400 (Bad Request) response. The definition of
|
||||
* badly formatted depends on the patch document chosen.
|
||||
* When a request is malformed, we use this exception to indicate this to the client
|
||||
*
|
||||
* @author Luigi Andrea Pascarelli (luigiandrea.pascarelli at 4science.it)
|
||||
*/
|
||||
@ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "Bad Request")
|
||||
public class PatchBadRequestException extends RuntimeException {
|
||||
public class DSpaceBadRequestException extends RuntimeException {
|
||||
|
||||
public PatchBadRequestException(String message) {
|
||||
public DSpaceBadRequestException(String message) {
|
||||
this(message, null);
|
||||
}
|
||||
|
||||
public PatchBadRequestException(String message, Exception e) {
|
||||
public DSpaceBadRequestException(String message, Exception e) {
|
||||
super(message, e);
|
||||
}
|
||||
}
|
@@ -1,17 +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.exception;
|
||||
|
||||
/**
|
||||
* This class creates an Exception to be used when the given DSpaceObjectType is invalid
|
||||
*/
|
||||
public class InvalidDSpaceObjectTypeException extends InvalidRequestException {
|
||||
public InvalidDSpaceObjectTypeException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
@@ -1,21 +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.exception;
|
||||
|
||||
/**
|
||||
* This class provides an exception for when the given request is invalid
|
||||
*/
|
||||
public class InvalidRequestException extends Exception {
|
||||
public InvalidRequestException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public InvalidRequestException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
}
|
@@ -1,17 +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.exception;
|
||||
|
||||
/**
|
||||
* Exception thrown when the search endpoint receives an invalid facet name
|
||||
*/
|
||||
public class InvalidSearchFacetException extends InvalidRequestException {
|
||||
public InvalidSearchFacetException(final String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
@@ -1,21 +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.exception;
|
||||
|
||||
/**
|
||||
* This class provides an exception to be used when the SearchFilter given is invalid
|
||||
*/
|
||||
public class InvalidSearchFilterException extends InvalidRequestException {
|
||||
public InvalidSearchFilterException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
public InvalidSearchFilterException(final String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
@@ -1,17 +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.exception;
|
||||
|
||||
/**
|
||||
* This class makes an Exception to be used when a certain sorting is invalid
|
||||
*/
|
||||
public class InvalidSortingException extends InvalidRequestException {
|
||||
public InvalidSortingException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
@@ -54,13 +54,13 @@ public class BrowseEntryHalLinkFactory extends HalLinkFactory<BrowseEntryResourc
|
||||
return BrowseEntryResource.class;
|
||||
}
|
||||
|
||||
// TODO use the reflaction to discover the link repository and additional information on the link annotation to
|
||||
// TODO use the reflection to discover the link repository and additional information on the link annotation to
|
||||
// build the parameters?
|
||||
private UriComponentsBuilder addFilterParams(UriComponentsBuilder uriComponentsBuilder,
|
||||
final BrowseEntryRest data) {
|
||||
UriComponentsBuilder result;
|
||||
if (data.getAuthority() != null) {
|
||||
result = uriComponentsBuilder.queryParam("filterValue", data.getAuthority());
|
||||
result = uriComponentsBuilder.queryParam("filterAuthority", data.getAuthority());
|
||||
} else {
|
||||
result = uriComponentsBuilder.queryParam("filterValue", data.getValue());
|
||||
}
|
||||
|
@@ -14,7 +14,6 @@ import java.util.List;
|
||||
import java.util.UUID;
|
||||
import javax.servlet.ServletInputStream;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.ws.rs.BadRequestException;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
@@ -23,6 +22,7 @@ import org.dspace.app.rest.Parameter;
|
||||
import org.dspace.app.rest.SearchRestMethod;
|
||||
import org.dspace.app.rest.converter.CollectionConverter;
|
||||
import org.dspace.app.rest.converter.MetadataConverter;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.exception.RepositoryMethodNotImplementedException;
|
||||
import org.dspace.app.rest.exception.UnprocessableEntityException;
|
||||
import org.dspace.app.rest.model.CollectionRest;
|
||||
@@ -191,7 +191,7 @@ public class CollectionRestRepository extends DSpaceObjectRestRepository<Collect
|
||||
|
||||
UUID parentCommunityUuid = UUIDUtils.fromString(parentCommunityString);
|
||||
if (parentCommunityUuid == null) {
|
||||
throw new BadRequestException("The given parent was invalid: "
|
||||
throw new DSpaceBadRequestException("The given parent was invalid: "
|
||||
+ parentCommunityString);
|
||||
}
|
||||
|
||||
@@ -201,7 +201,7 @@ public class CollectionRestRepository extends DSpaceObjectRestRepository<Collect
|
||||
+ parentCommunityUuid + " not found");
|
||||
}
|
||||
} else {
|
||||
throw new BadRequestException("The parent parameter cannot be left empty," +
|
||||
throw new DSpaceBadRequestException("The parent parameter cannot be left empty," +
|
||||
"collections require a parent community.");
|
||||
}
|
||||
collection = cs.create(context, parent);
|
||||
|
@@ -14,7 +14,6 @@ import java.util.List;
|
||||
import java.util.UUID;
|
||||
import javax.servlet.ServletInputStream;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.ws.rs.BadRequestException;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
@@ -23,6 +22,7 @@ import org.dspace.app.rest.Parameter;
|
||||
import org.dspace.app.rest.SearchRestMethod;
|
||||
import org.dspace.app.rest.converter.CommunityConverter;
|
||||
import org.dspace.app.rest.converter.MetadataConverter;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.exception.RepositoryMethodNotImplementedException;
|
||||
import org.dspace.app.rest.exception.UnprocessableEntityException;
|
||||
import org.dspace.app.rest.model.CommunityRest;
|
||||
@@ -92,7 +92,7 @@ public class CommunityRestRepository extends DSpaceObjectRestRepository<Communit
|
||||
|
||||
UUID parentCommunityUuid = UUIDUtils.fromString(parentCommunityString);
|
||||
if (parentCommunityUuid == null) {
|
||||
throw new BadRequestException("The given parent parameter was invalid: "
|
||||
throw new DSpaceBadRequestException("The given parent parameter was invalid: "
|
||||
+ parentCommunityString);
|
||||
}
|
||||
|
||||
|
@@ -17,7 +17,7 @@ import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.dspace.app.rest.exception.PatchBadRequestException;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.exception.RESTAuthorizationException;
|
||||
import org.dspace.app.rest.exception.RepositoryMethodNotImplementedException;
|
||||
import org.dspace.app.rest.exception.UnprocessableEntityException;
|
||||
@@ -369,10 +369,10 @@ public abstract class DSpaceRestRepository<T extends RestAddressableModel, ID ex
|
||||
* @return
|
||||
* @throws HttpRequestMethodNotSupportedException
|
||||
* @throws UnprocessableEntityException
|
||||
* @throws PatchBadRequestException
|
||||
* @throws DSpaceBadRequestException
|
||||
*/
|
||||
public T patch(HttpServletRequest request, String apiCategory, String model, ID id, Patch patch)
|
||||
throws HttpRequestMethodNotSupportedException, UnprocessableEntityException, PatchBadRequestException {
|
||||
throws HttpRequestMethodNotSupportedException, UnprocessableEntityException, DSpaceBadRequestException {
|
||||
Context context = obtainContext();
|
||||
|
||||
try {
|
||||
@@ -401,7 +401,7 @@ public abstract class DSpaceRestRepository<T extends RestAddressableModel, ID ex
|
||||
* @return the full new state of the REST object after patching
|
||||
* @throws HttpRequestMethodNotSupportedException
|
||||
* @throws UnprocessableEntityException
|
||||
* @throws PatchBadRequestException
|
||||
* @throws DSpaceBadRequestException
|
||||
* @throws RepositoryMethodNotImplementedException
|
||||
* returned by the default implementation when the operation is not supported for the entity
|
||||
*
|
||||
|
@@ -17,7 +17,6 @@ import org.dspace.app.rest.converter.DiscoverFacetResultsConverter;
|
||||
import org.dspace.app.rest.converter.DiscoverFacetsConverter;
|
||||
import org.dspace.app.rest.converter.DiscoverResultConverter;
|
||||
import org.dspace.app.rest.converter.DiscoverSearchSupportConverter;
|
||||
import org.dspace.app.rest.exception.InvalidRequestException;
|
||||
import org.dspace.app.rest.model.FacetConfigurationRest;
|
||||
import org.dspace.app.rest.model.FacetResultsRest;
|
||||
import org.dspace.app.rest.model.SearchConfigurationRest;
|
||||
@@ -91,8 +90,7 @@ public class DiscoveryRestRepository extends AbstractDSpaceRestRepository {
|
||||
|
||||
public SearchResultsRest getSearchObjects(final String query, final String dsoType, final String dsoScope,
|
||||
final String configuration,
|
||||
final List<SearchFilter> searchFilters, final Pageable page)
|
||||
throws InvalidRequestException {
|
||||
final List<SearchFilter> searchFilters, final Pageable page) {
|
||||
Context context = obtainContext();
|
||||
IndexableObject scopeObject = scopeResolver.resolveScope(context, dsoScope);
|
||||
DiscoveryConfiguration discoveryConfiguration = searchConfigurationService
|
||||
@@ -131,8 +129,7 @@ public class DiscoveryRestRepository extends AbstractDSpaceRestRepository {
|
||||
}
|
||||
|
||||
public FacetResultsRest getFacetObjects(String facetName, String prefix, String query, String dsoType,
|
||||
String dsoScope, final String configuration, List<SearchFilter> searchFilters, Pageable page)
|
||||
throws InvalidRequestException {
|
||||
String dsoScope, final String configuration, List<SearchFilter> searchFilters, Pageable page) {
|
||||
|
||||
Context context = obtainContext();
|
||||
|
||||
@@ -158,7 +155,7 @@ public class DiscoveryRestRepository extends AbstractDSpaceRestRepository {
|
||||
}
|
||||
|
||||
public SearchResultsRest getAllFacets(String query, String dsoType, String dsoScope, String configuration,
|
||||
List<SearchFilter> searchFilters) throws InvalidRequestException {
|
||||
List<SearchFilter> searchFilters) {
|
||||
|
||||
Context context = obtainContext();
|
||||
Pageable page = new PageRequest(1, 1);
|
||||
|
@@ -15,7 +15,6 @@ import java.util.List;
|
||||
import java.util.UUID;
|
||||
import javax.servlet.ServletInputStream;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.ws.rs.BadRequestException;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
@@ -23,6 +22,7 @@ import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.dspace.app.rest.converter.ItemConverter;
|
||||
import org.dspace.app.rest.converter.MetadataConverter;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.exception.RepositoryMethodNotImplementedException;
|
||||
import org.dspace.app.rest.exception.UnprocessableEntityException;
|
||||
import org.dspace.app.rest.model.ItemRest;
|
||||
@@ -199,12 +199,12 @@ public class ItemRestRepository extends DSpaceObjectRestRepository<Item, ItemRes
|
||||
}
|
||||
|
||||
if (itemRest.getInArchive() == false) {
|
||||
throw new BadRequestException("InArchive attribute should not be set to false for the create");
|
||||
throw new DSpaceBadRequestException("InArchive attribute should not be set to false for the create");
|
||||
}
|
||||
UUID owningCollectionUuid = UUIDUtils.fromString(owningCollectionUuidString);
|
||||
Collection collection = collectionService.find(context, owningCollectionUuid);
|
||||
if (collection == null) {
|
||||
throw new BadRequestException("The given owningCollection parameter is invalid: "
|
||||
throw new DSpaceBadRequestException("The given owningCollection parameter is invalid: "
|
||||
+ owningCollectionUuid);
|
||||
}
|
||||
WorkspaceItem workspaceItem = workspaceItemService.create(context, collection, false);
|
||||
|
@@ -22,7 +22,7 @@ import com.google.gson.Gson;
|
||||
import org.dspace.app.rest.Parameter;
|
||||
import org.dspace.app.rest.SearchRestMethod;
|
||||
import org.dspace.app.rest.converter.MetadataFieldConverter;
|
||||
import org.dspace.app.rest.exception.PatchBadRequestException;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.exception.UnprocessableEntityException;
|
||||
import org.dspace.app.rest.model.MetadataFieldRest;
|
||||
import org.dspace.app.rest.model.hateoas.MetadataFieldResource;
|
||||
@@ -127,7 +127,7 @@ public class MetadataFieldRestRepository extends DSpaceRestRepository<MetadataFi
|
||||
MetadataFieldRest.class
|
||||
);
|
||||
} catch (IOException excIO) {
|
||||
throw new PatchBadRequestException("error parsing request body", excIO);
|
||||
throw new DSpaceBadRequestException("error parsing request body", excIO);
|
||||
}
|
||||
|
||||
// validate fields
|
||||
|
@@ -19,7 +19,7 @@ import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.google.gson.Gson;
|
||||
import org.dspace.app.rest.converter.MetadataSchemaConverter;
|
||||
import org.dspace.app.rest.exception.PatchBadRequestException;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.exception.UnprocessableEntityException;
|
||||
import org.dspace.app.rest.model.MetadataSchemaRest;
|
||||
import org.dspace.app.rest.model.hateoas.MetadataSchemaResource;
|
||||
@@ -101,7 +101,7 @@ public class MetadataSchemaRestRepository extends DSpaceRestRepository<MetadataS
|
||||
MetadataSchemaRest.class
|
||||
);
|
||||
} catch (IOException excIO) {
|
||||
throw new PatchBadRequestException("error parsing request body", excIO);
|
||||
throw new DSpaceBadRequestException("error parsing request body", excIO);
|
||||
}
|
||||
|
||||
// validate fields
|
||||
|
@@ -19,7 +19,7 @@ import org.apache.log4j.Logger;
|
||||
import org.dspace.app.rest.Parameter;
|
||||
import org.dspace.app.rest.SearchRestMethod;
|
||||
import org.dspace.app.rest.converter.WorkflowItemConverter;
|
||||
import org.dspace.app.rest.exception.PatchBadRequestException;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.exception.RESTAuthorizationException;
|
||||
import org.dspace.app.rest.exception.UnprocessableEntityException;
|
||||
import org.dspace.app.rest.model.ErrorRest;
|
||||
@@ -238,7 +238,7 @@ public class WorkflowItemRestRepository extends DSpaceRestRepository<WorkflowIte
|
||||
String section = path[1];
|
||||
evaluatePatch(context, request, source, wsi, section, op);
|
||||
} else {
|
||||
throw new PatchBadRequestException(
|
||||
throw new DSpaceBadRequestException(
|
||||
"Patch path operation need to starts with '" + OPERATION_PATH_SECTIONS + "'");
|
||||
}
|
||||
}
|
||||
@@ -273,7 +273,7 @@ public class WorkflowItemRestRepository extends DSpaceRestRepository<WorkflowIte
|
||||
stepProcessing.doPatchProcessing(context, getRequestService().getCurrentRequest(), source, op);
|
||||
stepProcessing.doPostProcessing(context, source);
|
||||
} else {
|
||||
throw new PatchBadRequestException(
|
||||
throw new DSpaceBadRequestException(
|
||||
"The submission step class specified by '" + stepConfig.getProcessingClassName() +
|
||||
"' does not extend the class org.dspace.submit.AbstractProcessingStep!" +
|
||||
" Therefore it cannot be used by the Configurable Submission as the <processing-class>!");
|
||||
|
@@ -26,7 +26,7 @@ import org.apache.logging.log4j.Logger;
|
||||
import org.dspace.app.rest.Parameter;
|
||||
import org.dspace.app.rest.SearchRestMethod;
|
||||
import org.dspace.app.rest.converter.WorkspaceItemConverter;
|
||||
import org.dspace.app.rest.exception.PatchBadRequestException;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.model.ErrorRest;
|
||||
import org.dspace.app.rest.model.WorkspaceItemRest;
|
||||
import org.dspace.app.rest.model.hateoas.WorkspaceItemResource;
|
||||
@@ -280,7 +280,7 @@ public class WorkspaceItemRestRepository extends DSpaceRestRepository<WorkspaceI
|
||||
String section = path[1];
|
||||
evaluatePatch(context, request, source, wsi, section, op);
|
||||
} else {
|
||||
throw new PatchBadRequestException(
|
||||
throw new DSpaceBadRequestException(
|
||||
"Patch path operation need to starts with '" + OPERATION_PATH_SECTIONS + "'");
|
||||
}
|
||||
}
|
||||
@@ -315,7 +315,7 @@ public class WorkspaceItemRestRepository extends DSpaceRestRepository<WorkspaceI
|
||||
stepProcessing.doPatchProcessing(context, getRequestService().getCurrentRequest(), source, op);
|
||||
stepProcessing.doPostProcessing(context, source);
|
||||
} else {
|
||||
throw new PatchBadRequestException(
|
||||
throw new DSpaceBadRequestException(
|
||||
"The submission step class specified by '" + stepConfig.getProcessingClassName() +
|
||||
"' does not extend the class org.dspace.submit.AbstractProcessingStep!" +
|
||||
" Therefore it cannot be used by the Configurable Submission as the <processing-class>!");
|
||||
|
@@ -9,7 +9,7 @@ package org.dspace.app.rest.repository.patch;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.dspace.app.rest.exception.PatchBadRequestException;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.exception.UnprocessableEntityException;
|
||||
import org.dspace.app.rest.model.RestModel;
|
||||
import org.dspace.app.rest.model.patch.Operation;
|
||||
@@ -28,7 +28,7 @@ public abstract class AbstractResourcePatch<R extends RestModel> {
|
||||
* @param restModel the rest resource to patch
|
||||
* @param operations list of patch operations
|
||||
* @throws UnprocessableEntityException
|
||||
* @throws PatchBadRequestException
|
||||
* @throws DSpaceBadRequestException
|
||||
*/
|
||||
public R patch(R restModel, List<Operation> operations) {
|
||||
|
||||
@@ -53,7 +53,7 @@ public abstract class AbstractResourcePatch<R extends RestModel> {
|
||||
continue ops;
|
||||
default:
|
||||
// JsonPatchConverter should have thrown error before this point.
|
||||
throw new PatchBadRequestException("Missing or illegal patch operation: " + op.getOp());
|
||||
throw new DSpaceBadRequestException("Missing or illegal patch operation: " + op.getOp());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,14 +63,14 @@ public abstract class AbstractResourcePatch<R extends RestModel> {
|
||||
// The default patch methods throw an error when no sub-class implementation is provided.
|
||||
|
||||
protected R add(R restModel, Operation operation)
|
||||
throws UnprocessableEntityException, PatchBadRequestException {
|
||||
throws UnprocessableEntityException, DSpaceBadRequestException {
|
||||
throw new UnprocessableEntityException(
|
||||
"The add operation is not supported."
|
||||
);
|
||||
}
|
||||
|
||||
protected R replace(R restModel, Operation operation)
|
||||
throws UnprocessableEntityException, PatchBadRequestException {
|
||||
throws UnprocessableEntityException, DSpaceBadRequestException {
|
||||
throw new UnprocessableEntityException(
|
||||
"The replace operation is not supported."
|
||||
);
|
||||
@@ -78,21 +78,21 @@ public abstract class AbstractResourcePatch<R extends RestModel> {
|
||||
|
||||
protected R remove(R restModel, Operation operation)
|
||||
|
||||
throws UnprocessableEntityException, PatchBadRequestException {
|
||||
throws UnprocessableEntityException, DSpaceBadRequestException {
|
||||
throw new UnprocessableEntityException(
|
||||
"The remove operation is not supported."
|
||||
);
|
||||
}
|
||||
|
||||
protected R copy(R restModel, Operation operation)
|
||||
throws UnprocessableEntityException, PatchBadRequestException {
|
||||
throws UnprocessableEntityException, DSpaceBadRequestException {
|
||||
throw new UnprocessableEntityException(
|
||||
"The copy operation is not supported."
|
||||
);
|
||||
}
|
||||
|
||||
protected R move(R restModel, Operation operation)
|
||||
throws UnprocessableEntityException, PatchBadRequestException {
|
||||
throws UnprocessableEntityException, DSpaceBadRequestException {
|
||||
throw new UnprocessableEntityException(
|
||||
"The move operation is not supported."
|
||||
);
|
||||
|
@@ -7,7 +7,7 @@
|
||||
*/
|
||||
package org.dspace.app.rest.repository.patch;
|
||||
|
||||
import org.dspace.app.rest.exception.PatchBadRequestException;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.exception.UnprocessableEntityException;
|
||||
import org.dspace.app.rest.model.EPersonRest;
|
||||
import org.dspace.app.rest.model.patch.Operation;
|
||||
@@ -32,7 +32,7 @@ public class EPersonPatch extends DSpaceObjectPatch<EPersonRest> {
|
||||
* @param eperson the eperson rest representation
|
||||
* @param operation the replace operation
|
||||
* @throws UnprocessableEntityException
|
||||
* @throws PatchBadRequestException
|
||||
* @throws DSpaceBadRequestException
|
||||
*/
|
||||
protected EPersonRest replace(EPersonRest eperson, Operation operation) {
|
||||
ResourcePatchOperation<EPersonRest> patchOperation =
|
||||
|
@@ -7,7 +7,7 @@
|
||||
*/
|
||||
package org.dspace.app.rest.repository.patch;
|
||||
|
||||
import org.dspace.app.rest.exception.PatchBadRequestException;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.exception.UnprocessableEntityException;
|
||||
import org.dspace.app.rest.model.ItemRest;
|
||||
import org.dspace.app.rest.model.patch.Operation;
|
||||
@@ -32,7 +32,7 @@ public class ItemPatch extends DSpaceObjectPatch<ItemRest> {
|
||||
* @param item the rest representation of the item
|
||||
* @param operation the replace operation
|
||||
* @throws UnprocessableEntityException
|
||||
* @throws PatchBadRequestException
|
||||
* @throws DSpaceBadRequestException
|
||||
*/
|
||||
protected ItemRest replace(ItemRest item, Operation operation) {
|
||||
|
||||
|
@@ -7,7 +7,7 @@
|
||||
*/
|
||||
package org.dspace.app.rest.repository.patch.factories;
|
||||
|
||||
import org.dspace.app.rest.exception.PatchBadRequestException;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.model.EPersonRest;
|
||||
import org.dspace.app.rest.repository.patch.factories.impl.EPersonCertificateReplaceOperation;
|
||||
import org.dspace.app.rest.repository.patch.factories.impl.EPersonEmailReplaceOperation;
|
||||
@@ -51,7 +51,7 @@ public class EPersonOperationFactory {
|
||||
*
|
||||
* @param path the operation path
|
||||
* @return the patch operation implementation
|
||||
* @throws PatchBadRequestException
|
||||
* @throws DSpaceBadRequestException
|
||||
*/
|
||||
public ResourcePatchOperation<EPersonRest> getReplaceOperationForPath(String path) {
|
||||
|
||||
@@ -67,7 +67,7 @@ public class EPersonOperationFactory {
|
||||
case OPERATION_SET_EMAIL:
|
||||
return emailReplaceOperation;
|
||||
default:
|
||||
throw new PatchBadRequestException("Missing patch operation for: " + path);
|
||||
throw new DSpaceBadRequestException("Missing patch operation for: " + path);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -7,7 +7,7 @@
|
||||
*/
|
||||
package org.dspace.app.rest.repository.patch.factories;
|
||||
|
||||
import org.dspace.app.rest.exception.PatchBadRequestException;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.model.ItemRest;
|
||||
import org.dspace.app.rest.repository.patch.factories.impl.ItemDiscoverableReplaceOperation;
|
||||
import org.dspace.app.rest.repository.patch.factories.impl.ItemWithdrawReplaceOperation;
|
||||
@@ -37,7 +37,7 @@ public class ItemOperationFactory {
|
||||
*
|
||||
* @param path the operation path
|
||||
* @return the patch operation implementation
|
||||
* @throws PatchBadRequestException
|
||||
* @throws DSpaceBadRequestException
|
||||
*/
|
||||
public ResourcePatchOperation<ItemRest> getReplaceOperationForPath(String path) {
|
||||
|
||||
@@ -47,7 +47,7 @@ public class ItemOperationFactory {
|
||||
case OPERATION_PATH_WITHDRAW:
|
||||
return itemWithdrawReplaceOperation;
|
||||
default:
|
||||
throw new PatchBadRequestException("Missing patch operation for: " + path);
|
||||
throw new DSpaceBadRequestException("Missing patch operation for: " + path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -7,7 +7,7 @@
|
||||
*/
|
||||
package org.dspace.app.rest.repository.patch.factories.impl;
|
||||
|
||||
import org.dspace.app.rest.exception.PatchBadRequestException;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.model.EPersonRest;
|
||||
import org.dspace.app.rest.model.patch.Operation;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -42,7 +42,7 @@ public class EPersonCertificateReplaceOperation extends ReplacePatchOperation<EP
|
||||
// So perhaps the error to throw in this case is different...IllegalStateException?
|
||||
// Or perhaps do nothing (no check is required).
|
||||
if ((Object) resource.isRequireCertificate() == null) {
|
||||
throw new PatchBadRequestException("Attempting to replace a non-existent value.");
|
||||
throw new DSpaceBadRequestException("Attempting to replace a non-existent value.");
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -7,7 +7,7 @@
|
||||
*/
|
||||
package org.dspace.app.rest.repository.patch.factories.impl;
|
||||
|
||||
import org.dspace.app.rest.exception.PatchBadRequestException;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.model.EPersonRest;
|
||||
import org.dspace.app.rest.model.patch.Operation;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -36,7 +36,7 @@ public class EPersonEmailReplaceOperation extends ReplacePatchOperation<EPersonR
|
||||
@Override
|
||||
void checkModelForExistingValue(EPersonRest resource, Operation operation) {
|
||||
if (resource.getEmail() == null) {
|
||||
throw new PatchBadRequestException("Attempting to replace a non-existent value.");
|
||||
throw new DSpaceBadRequestException("Attempting to replace a non-existent value.");
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -7,7 +7,7 @@
|
||||
*/
|
||||
package org.dspace.app.rest.repository.patch.factories.impl;
|
||||
|
||||
import org.dspace.app.rest.exception.PatchBadRequestException;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.model.EPersonRest;
|
||||
import org.dspace.app.rest.model.patch.Operation;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -38,7 +38,7 @@ public class EPersonLoginReplaceOperation extends ReplacePatchOperation<EPersonR
|
||||
@Override
|
||||
void checkModelForExistingValue(EPersonRest resource, Operation operation) {
|
||||
if ((Object) resource.isCanLogIn() == null) {
|
||||
throw new PatchBadRequestException("Attempting to replace a non-existent value.");
|
||||
throw new DSpaceBadRequestException("Attempting to replace a non-existent value.");
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -7,7 +7,7 @@
|
||||
*/
|
||||
package org.dspace.app.rest.repository.patch.factories.impl;
|
||||
|
||||
import org.dspace.app.rest.exception.PatchBadRequestException;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.model.EPersonRest;
|
||||
import org.dspace.app.rest.model.patch.Operation;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -38,7 +38,7 @@ public class EPersonNetidReplaceOperation extends ReplacePatchOperation<EPersonR
|
||||
@Override
|
||||
void checkModelForExistingValue(EPersonRest resource, Operation operation) {
|
||||
if (resource.getNetid() == null) {
|
||||
throw new PatchBadRequestException("Attempting to replace a non-existent value.");
|
||||
throw new DSpaceBadRequestException("Attempting to replace a non-existent value.");
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -8,7 +8,7 @@
|
||||
package org.dspace.app.rest.repository.patch.factories.impl;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.dspace.app.rest.exception.PatchBadRequestException;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.model.ItemRest;
|
||||
import org.dspace.app.rest.model.patch.Operation;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -42,7 +42,7 @@ public class ItemDiscoverableReplaceOperation extends ReplacePatchOperation<Item
|
||||
@Override
|
||||
void checkModelForExistingValue(ItemRest resource, Operation operation) {
|
||||
if ((Object) resource.getDiscoverable() == null) {
|
||||
throw new PatchBadRequestException("Attempting to replace a non-existent value.");
|
||||
throw new DSpaceBadRequestException("Attempting to replace a non-existent value.");
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -8,7 +8,7 @@
|
||||
package org.dspace.app.rest.repository.patch.factories.impl;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.dspace.app.rest.exception.PatchBadRequestException;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.exception.UnprocessableEntityException;
|
||||
import org.dspace.app.rest.model.ItemRest;
|
||||
import org.dspace.app.rest.model.patch.Operation;
|
||||
@@ -65,7 +65,7 @@ public class ItemWithdrawReplaceOperation extends ReplacePatchOperation<ItemRest
|
||||
@Override
|
||||
void checkModelForExistingValue(ItemRest resource, Operation operation) {
|
||||
if ((Object) resource.getWithdrawn() == null) {
|
||||
throw new PatchBadRequestException("Attempting to replace a non-existent value.");
|
||||
throw new DSpaceBadRequestException("Attempting to replace a non-existent value.");
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -8,7 +8,7 @@
|
||||
package org.dspace.app.rest.repository.patch.factories.impl;
|
||||
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
import org.dspace.app.rest.exception.PatchBadRequestException;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.model.RestModel;
|
||||
import org.dspace.app.rest.model.patch.Operation;
|
||||
|
||||
@@ -26,7 +26,7 @@ public abstract class PatchOperation<R extends RestModel, T>
|
||||
* @param resource the rest model.
|
||||
* @param operation the patch operation.
|
||||
* @return the updated rest model.
|
||||
* @throws PatchBadRequestException
|
||||
* @throws DSpaceBadRequestException
|
||||
*/
|
||||
public abstract R perform(R resource, Operation operation);
|
||||
|
||||
@@ -37,7 +37,7 @@ public abstract class PatchOperation<R extends RestModel, T>
|
||||
*/
|
||||
void checkOperationValue(Object value) {
|
||||
if (value == null) {
|
||||
throw new PatchBadRequestException("No value provided for the operation.");
|
||||
throw new DSpaceBadRequestException("No value provided for the operation.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ public abstract class PatchOperation<R extends RestModel, T>
|
||||
*
|
||||
* @param value the operation value
|
||||
* @return the original or derived boolean value
|
||||
* @throws PatchBadRequestException
|
||||
* @throws DSpaceBadRequestException
|
||||
*/
|
||||
Boolean getBooleanOperationValue(Object value) {
|
||||
Boolean bool;
|
||||
@@ -54,7 +54,8 @@ public abstract class PatchOperation<R extends RestModel, T>
|
||||
if (value instanceof String) {
|
||||
bool = BooleanUtils.toBooleanObject((String) value);
|
||||
if (bool == null) {
|
||||
throw new PatchBadRequestException("Boolean value not provided.");
|
||||
// make sure the string was converted to boolean.
|
||||
throw new DSpaceBadRequestException("Boolean value not provided.");
|
||||
}
|
||||
} else {
|
||||
bool = (Boolean) value;
|
||||
|
@@ -7,7 +7,7 @@
|
||||
*/
|
||||
package org.dspace.app.rest.repository.patch.factories.impl;
|
||||
|
||||
import org.dspace.app.rest.exception.PatchBadRequestException;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.exception.UnprocessableEntityException;
|
||||
import org.dspace.app.rest.model.RestModel;
|
||||
import org.dspace.app.rest.model.patch.Operation;
|
||||
@@ -29,7 +29,7 @@ public abstract class ReplacePatchOperation<R extends RestModel, T>
|
||||
* @param resource the rest model.
|
||||
* @param operation the replace patch operation.
|
||||
* @return the updated rest model.
|
||||
* @throws PatchBadRequestException
|
||||
* @throws DSpaceBadRequestException
|
||||
* @throws UnprocessableEntityException
|
||||
*/
|
||||
@Override
|
||||
@@ -47,7 +47,7 @@ public abstract class ReplacePatchOperation<R extends RestModel, T>
|
||||
* @param resource the rest model.
|
||||
* @param operation the replace patch operation.
|
||||
* @return the updated rest model.
|
||||
* @throws PatchBadRequestException
|
||||
* @throws DSpaceBadRequestException
|
||||
* @throws UnprocessableEntityException
|
||||
*/
|
||||
abstract R replace(R resource, Operation operation);
|
||||
@@ -59,7 +59,7 @@ public abstract class ReplacePatchOperation<R extends RestModel, T>
|
||||
* to assure that the replace operation acts only on an existing value.
|
||||
*
|
||||
* @param resource the rest model.
|
||||
* @throws PatchBadRequestException
|
||||
* @throws DSpaceBadRequestException
|
||||
*/
|
||||
abstract void checkModelForExistingValue(R resource, Operation operation);
|
||||
|
||||
|
@@ -7,7 +7,7 @@
|
||||
*/
|
||||
package org.dspace.app.rest.repository.patch.factories.impl;
|
||||
|
||||
import org.dspace.app.rest.exception.PatchBadRequestException;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.model.RestModel;
|
||||
import org.dspace.app.rest.model.patch.Operation;
|
||||
|
||||
@@ -18,6 +18,6 @@ import org.dspace.app.rest.model.patch.Operation;
|
||||
public interface ResourcePatchOperation<R extends RestModel> {
|
||||
|
||||
R perform(R resource, Operation operation)
|
||||
throws PatchBadRequestException;
|
||||
throws DSpaceBadRequestException;
|
||||
|
||||
}
|
||||
|
@@ -16,11 +16,7 @@ import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.dspace.app.rest.converter.query.SearchQueryConverter;
|
||||
import org.dspace.app.rest.exception.InvalidDSpaceObjectTypeException;
|
||||
import org.dspace.app.rest.exception.InvalidRequestException;
|
||||
import org.dspace.app.rest.exception.InvalidSearchFacetException;
|
||||
import org.dspace.app.rest.exception.InvalidSearchFilterException;
|
||||
import org.dspace.app.rest.exception.InvalidSortingException;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.parameter.SearchFilter;
|
||||
import org.dspace.core.Constants;
|
||||
import org.dspace.core.Context;
|
||||
@@ -71,7 +67,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
|
||||
DiscoveryConfiguration discoveryConfiguration,
|
||||
String query, List<SearchFilter> searchFilters,
|
||||
String dsoType, Pageable page)
|
||||
throws InvalidRequestException {
|
||||
throws DSpaceBadRequestException {
|
||||
|
||||
DiscoverQuery queryArgs = buildCommonDiscoverQuery(context, discoveryConfiguration, query, searchFilters,
|
||||
dsoType);
|
||||
@@ -104,7 +100,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
|
||||
DiscoveryConfiguration discoveryConfiguration,
|
||||
String prefix, String query, List<SearchFilter> searchFilters,
|
||||
String dsoType, Pageable page, String facetName)
|
||||
throws InvalidRequestException {
|
||||
throws DSpaceBadRequestException {
|
||||
|
||||
DiscoverQuery queryArgs = buildCommonDiscoverQuery(context, discoveryConfiguration, query, searchFilters,
|
||||
dsoType);
|
||||
@@ -129,7 +125,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
|
||||
|
||||
private DiscoverQuery addFacetingForFacets(Context context, IndexableObject scope, String prefix,
|
||||
DiscoverQuery queryArgs, DiscoveryConfiguration discoveryConfiguration, String facetName, Pageable page)
|
||||
throws InvalidSearchFacetException {
|
||||
throws DSpaceBadRequestException {
|
||||
|
||||
DiscoverySearchFilterFacet facet = discoveryConfiguration.getSidebarFacet(facetName);
|
||||
if (facet != null) {
|
||||
@@ -139,7 +135,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
|
||||
fillFacetIntoQueryArgs(context, scope, prefix, queryArgs, facet, pageSize);
|
||||
|
||||
} else {
|
||||
throw new InvalidSearchFacetException(facetName + " is not a valid search facet");
|
||||
throw new DSpaceBadRequestException(facetName + " is not a valid search facet");
|
||||
}
|
||||
|
||||
return queryArgs;
|
||||
@@ -173,7 +169,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
|
||||
private DiscoverQuery buildCommonDiscoverQuery(Context context, DiscoveryConfiguration discoveryConfiguration,
|
||||
String query,
|
||||
List<SearchFilter> searchFilters, String dsoType)
|
||||
throws InvalidSearchFilterException, InvalidDSpaceObjectTypeException {
|
||||
throws DSpaceBadRequestException {
|
||||
DiscoverQuery queryArgs = buildBaseQueryForConfiguration(discoveryConfiguration);
|
||||
|
||||
//Add search filters
|
||||
@@ -202,7 +198,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
|
||||
}
|
||||
|
||||
private void configureSorting(Pageable page, DiscoverQuery queryArgs,
|
||||
DiscoverySortConfiguration searchSortConfiguration) throws InvalidSortingException {
|
||||
DiscoverySortConfiguration searchSortConfiguration) throws DSpaceBadRequestException {
|
||||
String sortBy = null;
|
||||
String sortOrder = null;
|
||||
|
||||
@@ -237,11 +233,11 @@ public class DiscoverQueryBuilder implements InitializingBean {
|
||||
} else if ("desc".equalsIgnoreCase(sortOrder)) {
|
||||
queryArgs.setSortField(sortField, DiscoverQuery.SORT_ORDER.desc);
|
||||
} else {
|
||||
throw new InvalidSortingException(sortOrder + " is not a valid sort order");
|
||||
throw new DSpaceBadRequestException(sortOrder + " is not a valid sort order");
|
||||
}
|
||||
|
||||
} else {
|
||||
throw new InvalidSortingException(sortBy + " is not a valid sort field");
|
||||
throw new DSpaceBadRequestException(sortBy + " is not a valid sort field");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -273,16 +269,16 @@ public class DiscoverQueryBuilder implements InitializingBean {
|
||||
}
|
||||
}
|
||||
|
||||
private int getDsoTypeId(String dsoType) throws InvalidDSpaceObjectTypeException {
|
||||
private int getDsoTypeId(String dsoType) throws DSpaceBadRequestException {
|
||||
int index = ArrayUtils.indexOf(Constants.typeText, dsoType.toUpperCase());
|
||||
if (index < 0) {
|
||||
throw new InvalidDSpaceObjectTypeException(dsoType + " is not a valid DSpace Object type");
|
||||
throw new DSpaceBadRequestException(dsoType + " is not a valid DSpace Object type");
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
||||
private String[] convertFilters(Context context, DiscoveryConfiguration discoveryConfiguration,
|
||||
List<SearchFilter> searchFilters) throws InvalidSearchFilterException {
|
||||
List<SearchFilter> searchFilters) throws DSpaceBadRequestException {
|
||||
ArrayList<String> filterQueries = new ArrayList<>(CollectionUtils.size(searchFilters));
|
||||
|
||||
SearchQueryConverter searchQueryConverter = new SearchQueryConverter();
|
||||
@@ -291,7 +287,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
|
||||
for (SearchFilter searchFilter : CollectionUtils.emptyIfNull(transformedFilters)) {
|
||||
DiscoverySearchFilter filter = discoveryConfiguration.getSearchFilter(searchFilter.getName());
|
||||
if (filter == null) {
|
||||
throw new InvalidSearchFilterException(searchFilter.getName() + " is not a valid search filter");
|
||||
throw new DSpaceBadRequestException(searchFilter.getName() + " is not a valid search filter");
|
||||
}
|
||||
|
||||
DiscoverFilterQuery filterQuery = searchService.toFilterQuery(context,
|
||||
@@ -304,7 +300,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
throw new InvalidSearchFilterException("There was a problem parsing the search filters.", e);
|
||||
throw new DSpaceBadRequestException("There was a problem parsing the search filters.", e);
|
||||
}
|
||||
|
||||
return filterQueries.toArray(new String[filterQueries.size()]);
|
||||
|
@@ -387,6 +387,78 @@ public class BrowsesResourceControllerIT extends AbstractControllerIntegrationTe
|
||||
not(matchMetadata("dc.title", "Internal publication")))));
|
||||
}
|
||||
|
||||
@Test
|
||||
/**
|
||||
* This test was introduced to reproduce the bug DS-4269 Pagination links must be consistent also when there is not
|
||||
* explicit pagination parameters in the request (i.e. defaults apply)
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
public void browsePaginationWithoutExplicitParams() throws Exception {
|
||||
context.turnOffAuthorisationSystem();
|
||||
|
||||
//** GIVEN **
|
||||
//1. A community-collection structure with one parent community and one collection.
|
||||
parentCommunity = CommunityBuilder.createCommunity(context)
|
||||
.withName("Parent Community")
|
||||
.build();
|
||||
Collection col1 = CollectionBuilder.createCollection(context, parentCommunity).withName("Collection 1").build();
|
||||
|
||||
//2. Twenty-one public items that are readable by Anonymous
|
||||
for (int i = 0; i <= 20; i++) {
|
||||
ItemBuilder.createItem(context, col1)
|
||||
.withTitle("Public item " + String.format("%02d", i))
|
||||
.withIssueDate("2017-10-17")
|
||||
.withAuthor("Test, Author" + String.format("%02d", i))
|
||||
.withSubject("Java").withSubject("Unit Testing")
|
||||
.build();
|
||||
}
|
||||
|
||||
context.restoreAuthSystemState();
|
||||
|
||||
//** WHEN **
|
||||
//An anonymous user browses the items in the Browse by item endpoint
|
||||
getClient().perform(get("/api/discover/browses/title/items"))
|
||||
//** THEN **
|
||||
//The status has to be 200 OK
|
||||
.andExpect(status().isOk())
|
||||
//We expect the content type to be "application/hal+json;charset=UTF-8"
|
||||
.andExpect(content().contentType(contentType))
|
||||
//We expect 21 public items
|
||||
.andExpect(jsonPath("$.page.size", is(20)))
|
||||
.andExpect(jsonPath("$.page.totalElements", is(21)))
|
||||
.andExpect(jsonPath("$.page.totalPages", is(2)))
|
||||
.andExpect(jsonPath("$.page.number", is(0)))
|
||||
// embedded items are already checked by other test, we focus on links here
|
||||
.andExpect(jsonPath("$._links.next.href", Matchers.containsString("/api/discover/browses/title/items?")))
|
||||
.andExpect(jsonPath("$._links.last.href", Matchers.containsString("/api/discover/browses/title/items?")))
|
||||
.andExpect(
|
||||
jsonPath("$._links.first.href", Matchers.containsString("/api/discover/browses/title/items?")))
|
||||
.andExpect(jsonPath("$._links.self.href", Matchers.endsWith("/api/discover/browses/title/items")));
|
||||
|
||||
//** WHEN **
|
||||
//An anonymous user browses the items in the Browse by item endpoint
|
||||
getClient().perform(get("/api/discover/browses/author/entries"))
|
||||
//** THEN **
|
||||
//The status has to be 200 OK
|
||||
.andExpect(status().isOk())
|
||||
//We expect the content type to be "application/hal+json;charset=UTF-8"
|
||||
.andExpect(content().contentType(contentType))
|
||||
//We expect 21 public items
|
||||
.andExpect(jsonPath("$.page.size", is(20)))
|
||||
.andExpect(jsonPath("$.page.totalElements", is(21)))
|
||||
.andExpect(jsonPath("$.page.totalPages", is(2)))
|
||||
.andExpect(jsonPath("$.page.number", is(0)))
|
||||
// embedded items are already checked by other test, we focus on links here
|
||||
.andExpect(jsonPath("$._links.next.href",
|
||||
Matchers.containsString("/api/discover/browses/author/entries?")))
|
||||
.andExpect(jsonPath("$._links.last.href",
|
||||
Matchers.containsString("/api/discover/browses/author/entries?")))
|
||||
.andExpect(jsonPath("$._links.first.href",
|
||||
Matchers.containsString("/api/discover/browses/author/entries?")))
|
||||
.andExpect(jsonPath("$._links.self.href", Matchers.endsWith("/api/discover/browses/author/entries")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPaginationBrowseByDateIssuedItems() throws Exception {
|
||||
context.turnOffAuthorisationSystem();
|
||||
|
@@ -646,4 +646,80 @@ public class CollectionRestRepositoryIT extends AbstractControllerIntegrationTes
|
||||
|
||||
new MetadataPatchSuite().runWith(getClient(token), "/api/core/collections/" + col.getID(), expectedStatus);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createTestInvalidParentCommunityUUIDBadRequestException() throws Exception {
|
||||
context.turnOffAuthorisationSystem();
|
||||
|
||||
|
||||
//** GIVEN **
|
||||
//1. A community-collection structure with one parent community with sub-community and one collection.
|
||||
parentCommunity = CommunityBuilder.createCommunity(context)
|
||||
.withName("Parent Community")
|
||||
.withLogo("ThisIsSomeDummyText")
|
||||
.build();
|
||||
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
CollectionRest collectionRest = new CollectionRest();
|
||||
// We send a name but the created collection should set this to the title
|
||||
collectionRest.setName("Collection");
|
||||
|
||||
collectionRest.setMetadata(new MetadataRest()
|
||||
.put("dc.description",
|
||||
new MetadataValueRest("<p>Some cool HTML code here</p>"))
|
||||
.put("dc.description.abstract",
|
||||
new MetadataValueRest("top-level community created via the REST API"))
|
||||
.put("dc.description.tableofcontents",
|
||||
new MetadataValueRest("<p>HTML News</p>"))
|
||||
.put("dc.rights",
|
||||
new MetadataValueRest("Custom Copyright Text"))
|
||||
.put("dc.title",
|
||||
new MetadataValueRest("Title Text")));
|
||||
|
||||
String authToken = getAuthToken(admin.getEmail(), password);
|
||||
getClient(authToken).perform(post("/api/core/collections")
|
||||
.content(mapper.writeValueAsBytes(collectionRest))
|
||||
.param("parent", "123")
|
||||
.contentType(contentType))
|
||||
.andExpect(status().isBadRequest());
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void createTestWithoutParentCommunityUUIDBadRequestException() throws Exception {
|
||||
context.turnOffAuthorisationSystem();
|
||||
|
||||
|
||||
//** GIVEN **
|
||||
//1. A community-collection structure with one parent community with sub-community and one collection.
|
||||
parentCommunity = CommunityBuilder.createCommunity(context)
|
||||
.withName("Parent Community")
|
||||
.withLogo("ThisIsSomeDummyText")
|
||||
.build();
|
||||
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
CollectionRest collectionRest = new CollectionRest();
|
||||
// We send a name but the created collection should set this to the title
|
||||
collectionRest.setName("Collection");
|
||||
|
||||
collectionRest.setMetadata(new MetadataRest()
|
||||
.put("dc.description",
|
||||
new MetadataValueRest("<p>Some cool HTML code here</p>"))
|
||||
.put("dc.description.abstract",
|
||||
new MetadataValueRest("top-level community created via the REST API"))
|
||||
.put("dc.description.tableofcontents",
|
||||
new MetadataValueRest("<p>HTML News</p>"))
|
||||
.put("dc.rights",
|
||||
new MetadataValueRest("Custom Copyright Text"))
|
||||
.put("dc.title",
|
||||
new MetadataValueRest("Title Text")));
|
||||
|
||||
String authToken = getAuthToken(admin.getEmail(), password);
|
||||
getClient(authToken).perform(post("/api/core/collections")
|
||||
.content(mapper.writeValueAsBytes(collectionRest))
|
||||
.contentType(contentType))
|
||||
.andExpect(status().isBadRequest());
|
||||
|
||||
}
|
||||
}
|
||||
|
@@ -901,4 +901,45 @@ public class CommunityRestRepositoryIT extends AbstractControllerIntegrationTest
|
||||
new MetadataPatchSuite().runWith(getClient(token), "/api/core/communities/"
|
||||
+ parentCommunity.getID(), expectedStatus);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createTestInvalidParentCommunityBadRequest() throws Exception {
|
||||
context.turnOffAuthorisationSystem();
|
||||
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
CommunityRest comm = new CommunityRest();
|
||||
// We send a name but the created community should set this to the title
|
||||
comm.setName("Test Top-Level Community");
|
||||
|
||||
MetadataRest metadataRest = new MetadataRest();
|
||||
|
||||
MetadataValueRest description = new MetadataValueRest();
|
||||
description.setValue("<p>Some cool HTML code here</p>");
|
||||
metadataRest.put("dc.description", description);
|
||||
|
||||
MetadataValueRest abs = new MetadataValueRest();
|
||||
abs.setValue("Sample top-level community created via the REST API");
|
||||
metadataRest.put("dc.description.abstract", abs);
|
||||
|
||||
MetadataValueRest contents = new MetadataValueRest();
|
||||
contents.setValue("<p>HTML News</p>");
|
||||
metadataRest.put("dc.description.tableofcontents", contents);
|
||||
|
||||
MetadataValueRest copyright = new MetadataValueRest();
|
||||
copyright.setValue("Custom Copyright Text");
|
||||
metadataRest.put("dc.rights", copyright);
|
||||
|
||||
MetadataValueRest title = new MetadataValueRest();
|
||||
title.setValue("Title Text");
|
||||
metadataRest.put("dc.title", title);
|
||||
|
||||
comm.setMetadata(metadataRest);
|
||||
|
||||
String authToken = getAuthToken(admin.getEmail(), password);
|
||||
getClient(authToken).perform(post("/api/core/communities")
|
||||
.param("parent", "123")
|
||||
.content(mapper.writeValueAsBytes(comm))
|
||||
.contentType(contentType))
|
||||
.andExpect(status().isBadRequest());
|
||||
}
|
||||
}
|
||||
|
@@ -1768,4 +1768,86 @@ public class ItemRestRepositoryIT extends AbstractControllerIntegrationTest {
|
||||
new MetadataPatchSuite().runWith(getClient(token), "/api/core/items/" + item.getID(), expectedStatus);
|
||||
}
|
||||
|
||||
/**
|
||||
* This test will try creating an item with the InArchive property set to false. This endpoint does not allow
|
||||
* us to create Items which aren't final (final means that they'd be in archive) and thus it'll throw a
|
||||
* BadRequestException which is what we're testing for
|
||||
* @throws Exception If something goes wrong
|
||||
*/
|
||||
@Test
|
||||
public void testCreateItemInArchiveFalseBadRequestException() throws Exception {
|
||||
|
||||
context.turnOffAuthorisationSystem();
|
||||
|
||||
//** GIVEN **
|
||||
//1. A community-collection structure with one parent community with sub-community and two collections.
|
||||
parentCommunity = CommunityBuilder.createCommunity(context)
|
||||
.withName("Parent Community")
|
||||
.build();
|
||||
Community child1 = CommunityBuilder.createSubCommunity(context, parentCommunity)
|
||||
.withName("Sub Community")
|
||||
.build();
|
||||
Collection col1 = CollectionBuilder.createCollection(context, child1).withName("Collection 1").build();
|
||||
|
||||
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
ItemRest itemRest = new ItemRest();
|
||||
itemRest.setName("Practices of research data curation in institutional repositories:" +
|
||||
" A qualitative view from repository staff");
|
||||
itemRest.setInArchive(false);
|
||||
itemRest.setDiscoverable(true);
|
||||
itemRest.setWithdrawn(false);
|
||||
|
||||
itemRest.setMetadata(new MetadataRest()
|
||||
.put("dc.description", new MetadataValueRest("<p>Some cool HTML code here</p>"))
|
||||
.put("dc.description.abstract",
|
||||
new MetadataValueRest("Sample item created via the REST API"))
|
||||
.put("dc.description.tableofcontents", new MetadataValueRest("<p>HTML News</p>"))
|
||||
.put("dc.rights", new MetadataValueRest("Custom Copyright Text"))
|
||||
.put("dc.title", new MetadataValueRest("Title Text")));
|
||||
|
||||
String token = getAuthToken(admin.getEmail(), password);
|
||||
getClient(token).perform(post("/api/core/items?owningCollection=" + col1.getID().toString())
|
||||
.content(mapper.writeValueAsBytes(itemRest)).contentType(contentType))
|
||||
.andExpect(status().isBadRequest());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateItemInvalidCollectionBadRequestException() throws Exception {
|
||||
|
||||
context.turnOffAuthorisationSystem();
|
||||
|
||||
//** GIVEN **
|
||||
//1. A community-collection structure with one parent community with sub-community and two collections.
|
||||
parentCommunity = CommunityBuilder.createCommunity(context)
|
||||
.withName("Parent Community")
|
||||
.build();
|
||||
Community child1 = CommunityBuilder.createSubCommunity(context, parentCommunity)
|
||||
.withName("Sub Community")
|
||||
.build();
|
||||
Collection col1 = CollectionBuilder.createCollection(context, child1).withName("Collection 1").build();
|
||||
|
||||
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
ItemRest itemRest = new ItemRest();
|
||||
itemRest.setName("Practices of research data curation in institutional repositories:" +
|
||||
" A qualitative view from repository staff");
|
||||
itemRest.setInArchive(false);
|
||||
itemRest.setDiscoverable(true);
|
||||
itemRest.setWithdrawn(false);
|
||||
|
||||
itemRest.setMetadata(new MetadataRest()
|
||||
.put("dc.description", new MetadataValueRest("<p>Some cool HTML code here</p>"))
|
||||
.put("dc.description.abstract",
|
||||
new MetadataValueRest("Sample item created via the REST API"))
|
||||
.put("dc.description.tableofcontents", new MetadataValueRest("<p>HTML News</p>"))
|
||||
.put("dc.rights", new MetadataValueRest("Custom Copyright Text"))
|
||||
.put("dc.title", new MetadataValueRest("Title Text")));
|
||||
|
||||
String token = getAuthToken(admin.getEmail(), password);
|
||||
getClient(token).perform(post("/api/core/items?owningCollection=" + parentCommunity.getID().toString())
|
||||
.content(mapper.writeValueAsBytes(itemRest)).contentType(contentType))
|
||||
.andExpect(status().isBadRequest());
|
||||
}
|
||||
|
||||
}
|
@@ -23,10 +23,7 @@ import java.util.Arrays;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import org.dspace.app.rest.exception.InvalidDSpaceObjectTypeException;
|
||||
import org.dspace.app.rest.exception.InvalidSearchFacetException;
|
||||
import org.dspace.app.rest.exception.InvalidSearchFilterException;
|
||||
import org.dspace.app.rest.exception.InvalidSortingException;
|
||||
import org.dspace.app.rest.exception.DSpaceBadRequestException;
|
||||
import org.dspace.app.rest.parameter.SearchFilter;
|
||||
import org.dspace.core.Constants;
|
||||
import org.dspace.core.Context;
|
||||
@@ -245,20 +242,20 @@ public class DiscoverQueryBuilderTest {
|
||||
new ReflectionEquals(new DiscoverHitHighlightingField("fulltext", 0, 3))));
|
||||
}
|
||||
|
||||
@Test(expected = InvalidDSpaceObjectTypeException.class)
|
||||
@Test(expected = DSpaceBadRequestException.class)
|
||||
public void testInvalidDSOType() throws Exception {
|
||||
queryBuilder
|
||||
.buildQuery(context, scope, discoveryConfiguration, query, Arrays.asList(searchFilter), "TEST", page);
|
||||
}
|
||||
|
||||
@Test(expected = InvalidSortingException.class)
|
||||
@Test(expected = DSpaceBadRequestException.class)
|
||||
public void testInvalidSortField() throws Exception {
|
||||
page = new PageRequest(2, 10, Sort.Direction.ASC, "test");
|
||||
queryBuilder
|
||||
.buildQuery(context, scope, discoveryConfiguration, query, Arrays.asList(searchFilter), "ITEM", page);
|
||||
}
|
||||
|
||||
@Test(expected = InvalidSearchFilterException.class)
|
||||
@Test(expected = DSpaceBadRequestException.class)
|
||||
public void testInvalidSearchFilter1() throws Exception {
|
||||
searchFilter = new SearchFilter("test", "equals", "Smith, Donald");
|
||||
|
||||
@@ -266,7 +263,7 @@ public class DiscoverQueryBuilderTest {
|
||||
.buildQuery(context, scope, discoveryConfiguration, query, Arrays.asList(searchFilter), "ITEM", page);
|
||||
}
|
||||
|
||||
@Test(expected = InvalidSearchFilterException.class)
|
||||
@Test(expected = DSpaceBadRequestException.class)
|
||||
public void testInvalidSearchFilter2() throws Exception {
|
||||
when(searchService.toFilterQuery(any(Context.class), any(String.class), any(String.class), any(String.class)))
|
||||
.thenThrow(SQLException.class);
|
||||
@@ -297,7 +294,7 @@ public class DiscoverQueryBuilderTest {
|
||||
));
|
||||
}
|
||||
|
||||
@Test(expected = InvalidSearchFacetException.class)
|
||||
@Test(expected = DSpaceBadRequestException.class)
|
||||
public void testInvalidSearchFacet() throws Exception {
|
||||
queryBuilder.buildFacetQuery(context, scope, discoveryConfiguration, null, query,
|
||||
Arrays.asList(searchFilter), "item", page, "test");
|
||||
|
Reference in New Issue
Block a user