diff --git a/dspace-api/pom.xml b/dspace-api/pom.xml
index 89b74b701f..c714746337 100644
--- a/dspace-api/pom.xml
+++ b/dspace-api/pom.xml
@@ -308,15 +308,10 @@
org.dspace
handle
+
- org.eclipse.jetty.aggregate
- jetty-all
-
-
- javax.servlet
- org.eclipse.jetty.orbit
-
-
+ org.eclipse.jetty
+ jetty-server
org.dspace
@@ -489,6 +484,13 @@
org.apache.solr
solr-cell
${solr.client.version}
+
+
+
+ org.ow2.asm
+ asm-commons
+
+
diff --git a/dspace-oai/pom.xml b/dspace-oai/pom.xml
index 45bb394740..d5a129c90a 100644
--- a/dspace-oai/pom.xml
+++ b/dspace-oai/pom.xml
@@ -142,19 +142,22 @@
org.springframework.boot
spring-boot-starter-web
-
+
- org.ow2.asm
- asm
-
-
-
- org.springframework.boot
- spring-boot-configuration-processor
+ org.parboiled
+ parboiled-java
+
+
+ org.parboiled
+ parboiled-java
+ 1.3.1
+
+
org.dspace
@@ -190,10 +193,10 @@
org.apache.logging.log4j
log4j-core
-
+
org.apache.logging.log4j
log4j-web
-
+
org.apache.logging.log4j
log4j-slf4j-impl
@@ -258,12 +261,6 @@
${spring.version}
test
-
- org.parboiled
- parboiled-core
- 1.1.7
- test
-
org.xmlmatchers
xml-matchers
diff --git a/dspace-rest/pom.xml b/dspace-rest/pom.xml
index 221b9f4cc9..8f69306085 100644
--- a/dspace-rest/pom.xml
+++ b/dspace-rest/pom.xml
@@ -19,7 +19,7 @@
${basedir}/..
- 5.1.3.RELEASE
+ 5.3.1.RELEASE
@@ -104,7 +104,7 @@
${jackson.version}
-
+
org.springframework
spring-core
@@ -123,9 +123,10 @@
org.glassfish.jersey.ext
- jersey-spring4
+ jersey-spring5
${jersey.version}
+
org.springframework
spring
@@ -150,6 +151,11 @@
org.springframework
spring-aop
+
+
+ jakarta.annotation
+ jakarta.annotation-api
+
diff --git a/dspace-server-webapp/pom.xml b/dspace-server-webapp/pom.xml
index cba95214b0..88e31751f3 100644
--- a/dspace-server-webapp/pom.xml
+++ b/dspace-server-webapp/pom.xml
@@ -27,8 +27,6 @@
@
org.dspace.app.rest.Application
-
- 7.9
@@ -241,11 +239,7 @@
org.springframework.data
spring-data-rest-hal-browser
- 3.1.10.RELEASE
-
+ ${spring-hal-browser.version}
@@ -255,10 +249,8 @@
${spring-boot.version}
-
-
+
+
org.springframework.boot
spring-boot-starter
@@ -346,6 +338,7 @@
com.jayway.jsonpath
json-path-assert
+ ${json-path.version}
test
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/Application.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/Application.java
index 900324fc72..8c8fe3e335 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/Application.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/Application.java
@@ -11,7 +11,7 @@ import java.util.List;
import javax.servlet.Filter;
import org.dspace.app.rest.filter.DSpaceRequestContextFilter;
-import org.dspace.app.rest.model.hateoas.DSpaceRelProvider;
+import org.dspace.app.rest.model.hateoas.DSpaceLinkRelationProvider;
import org.dspace.app.rest.parameter.resolver.SearchFilterResolver;
import org.dspace.app.rest.utils.ApplicationConfig;
import org.dspace.app.rest.utils.DSpaceConfigurationInitializer;
@@ -26,7 +26,7 @@ import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.Bean;
import org.springframework.core.annotation.Order;
-import org.springframework.hateoas.RelProvider;
+import org.springframework.hateoas.server.LinkRelationProvider;
import org.springframework.lang.NonNull;
import org.springframework.web.context.request.RequestContextListener;
import org.springframework.web.cors.CorsConfiguration;
@@ -118,8 +118,8 @@ public class Application extends SpringBootServletInitializer {
}
@Bean
- protected RelProvider dspaceRelProvider() {
- return new DSpaceRelProvider();
+ protected LinkRelationProvider dspaceLinkRelationProvider() {
+ return new DSpaceLinkRelationProvider();
}
@Bean
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/BundleUploadBitstreamController.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/BundleUploadBitstreamController.java
index 7035e329f2..a0f5d5f71e 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/BundleUploadBitstreamController.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/BundleUploadBitstreamController.java
@@ -31,7 +31,7 @@ import org.dspace.core.Context;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.rest.webmvc.ControllerUtils;
import org.springframework.data.rest.webmvc.ResourceNotFoundException;
-import org.springframework.hateoas.ResourceSupport;
+import org.springframework.hateoas.RepresentationModel;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -86,9 +86,11 @@ public class BundleUploadBitstreamController {
*/
@RequestMapping(method = RequestMethod.POST, headers = "content-type=multipart/form-data")
@PreAuthorize("hasPermission(#uuid, 'BUNDLE', 'ADD') && hasPermission(#uuid, 'BUNDLE', 'WRITE')")
- public ResponseEntity uploadBitstream(HttpServletRequest request, @PathVariable UUID uuid,
- @RequestParam("file") MultipartFile uploadfile,
- @RequestParam(value = "properties", required = false) String properties) {
+ public ResponseEntity> uploadBitstream(
+ HttpServletRequest request,
+ @PathVariable UUID uuid,
+ @RequestParam("file") MultipartFile uploadfile,
+ @RequestParam(value = "properties", required = false) String properties) {
Context context = ContextUtil.obtainContext(request);
Bundle bundle = null;
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/CollectionGroupRestController.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/CollectionGroupRestController.java
index f10cd4eb98..d85685a188 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/CollectionGroupRestController.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/CollectionGroupRestController.java
@@ -36,7 +36,7 @@ import org.dspace.xmlworkflow.WorkflowUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.rest.webmvc.ControllerUtils;
import org.springframework.data.rest.webmvc.ResourceNotFoundException;
-import org.springframework.hateoas.ResourceSupport;
+import org.springframework.hateoas.RepresentationModel;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -83,7 +83,7 @@ public class CollectionGroupRestController {
*/
@RequestMapping(method = RequestMethod.POST, value = "/adminGroup")
@PreAuthorize("hasPermission(#uuid, 'COLLECTION', 'WRITE')")
- public ResponseEntity postAdminGroup(@PathVariable UUID uuid, HttpServletResponse response,
+ public ResponseEntity> postAdminGroup(@PathVariable UUID uuid, HttpServletResponse response,
HttpServletRequest request)
throws SQLException, AuthorizeException {
@@ -117,8 +117,9 @@ public class CollectionGroupRestController {
*/
@RequestMapping(method = RequestMethod.DELETE, value = "/adminGroup")
@PreAuthorize("hasPermission(#uuid, 'COLLECTION', 'WRITE')")
- public ResponseEntity deleteAdminGroup(@PathVariable UUID uuid, HttpServletResponse response,
- HttpServletRequest request)
+ public ResponseEntity> deleteAdminGroup(@PathVariable UUID uuid,
+ HttpServletResponse response,
+ HttpServletRequest request)
throws SQLException, AuthorizeException, IOException {
Context context = ContextUtil.obtainContext(request);
@@ -149,8 +150,9 @@ public class CollectionGroupRestController {
*/
@RequestMapping(method = RequestMethod.POST, value = "/submittersGroup")
@PreAuthorize("hasPermission(#uuid, 'COLLECTION', 'WRITE')")
- public ResponseEntity postSubmittersGroup(@PathVariable UUID uuid, HttpServletResponse response,
- HttpServletRequest request)
+ public ResponseEntity> postSubmittersGroup(@PathVariable UUID uuid,
+ HttpServletResponse response,
+ HttpServletRequest request)
throws SQLException, AuthorizeException {
Context context = ContextUtil.obtainContext(request);
@@ -183,8 +185,9 @@ public class CollectionGroupRestController {
*/
@RequestMapping(method = RequestMethod.DELETE, value = "/submittersGroup")
@PreAuthorize("hasPermission(#uuid, 'COLLECTION', 'WRITE')")
- public ResponseEntity deleteSubmittersGroup(@PathVariable UUID uuid, HttpServletResponse response,
- HttpServletRequest request)
+ public ResponseEntity> deleteSubmittersGroup(@PathVariable UUID uuid,
+ HttpServletResponse response,
+ HttpServletRequest request)
throws SQLException, AuthorizeException, IOException {
Context context = ContextUtil.obtainContext(request);
@@ -214,8 +217,9 @@ public class CollectionGroupRestController {
*/
@RequestMapping(method = RequestMethod.POST, value = "/itemReadGroup")
@PreAuthorize("hasPermission(#uuid, 'COLLECTION', 'WRITE')")
- public ResponseEntity postItemReadGroup(@PathVariable UUID uuid, HttpServletResponse response,
- HttpServletRequest request)
+ public ResponseEntity> postItemReadGroup(@PathVariable UUID uuid,
+ HttpServletResponse response,
+ HttpServletRequest request)
throws SQLException, AuthorizeException {
Context context = ContextUtil.obtainContext(request);
@@ -255,8 +259,9 @@ public class CollectionGroupRestController {
*/
@RequestMapping(method = RequestMethod.DELETE, value = "/itemReadGroup")
@PreAuthorize("hasPermission(#uuid, 'COLLECTION', 'WRITE')")
- public ResponseEntity deleteItemReadGroup(@PathVariable UUID uuid, HttpServletResponse response,
- HttpServletRequest request)
+ public ResponseEntity> deleteItemReadGroup(@PathVariable UUID uuid,
+ HttpServletResponse response,
+ HttpServletRequest request)
throws SQLException, AuthorizeException, IOException {
Context context = ContextUtil.obtainContext(request);
@@ -294,8 +299,9 @@ public class CollectionGroupRestController {
*/
@RequestMapping(method = RequestMethod.POST, value = "/bitstreamReadGroup")
@PreAuthorize("hasPermission(#uuid, 'COLLECTION', 'WRITE')")
- public ResponseEntity postBitstreamReadGroup(@PathVariable UUID uuid, HttpServletResponse response,
- HttpServletRequest request)
+ public ResponseEntity> postBitstreamReadGroup(@PathVariable UUID uuid,
+ HttpServletResponse response,
+ HttpServletRequest request)
throws SQLException, AuthorizeException {
Context context = ContextUtil.obtainContext(request);
@@ -336,9 +342,9 @@ public class CollectionGroupRestController {
*/
@RequestMapping(method = RequestMethod.DELETE, value = "/bitstreamReadGroup")
@PreAuthorize("hasPermission(#uuid, 'COLLECTION', 'WRITE')")
- public ResponseEntity deleteBitstreamReadGroup(@PathVariable UUID uuid,
- HttpServletResponse response,
- HttpServletRequest request)
+ public ResponseEntity> deleteBitstreamReadGroup(@PathVariable UUID uuid,
+ HttpServletResponse response,
+ HttpServletRequest request)
throws SQLException, AuthorizeException, IOException {
Context context = ContextUtil.obtainContext(request);
@@ -377,10 +383,10 @@ public class CollectionGroupRestController {
*/
@RequestMapping(method = RequestMethod.GET, value = "/workflowGroups/{workflowRole}")
@PreAuthorize("hasPermission(#uuid, 'COLLECTION', 'READ')")
- public ResponseEntity getWorkflowGroupForRole(@PathVariable UUID uuid,
- HttpServletResponse response,
- HttpServletRequest request,
- @PathVariable String workflowRole)
+ public ResponseEntity> getWorkflowGroupForRole(@PathVariable UUID uuid,
+ HttpServletResponse response,
+ HttpServletRequest request,
+ @PathVariable String workflowRole)
throws Exception {
Context context = ContextUtil.obtainContext(request);
Collection collection = collectionService.find(context, uuid);
@@ -407,10 +413,10 @@ public class CollectionGroupRestController {
*/
@RequestMapping(method = RequestMethod.POST, value = "/workflowGroups/{workflowRole}")
@PreAuthorize("hasPermission(#uuid, 'COLLECTION', 'READ')")
- public ResponseEntity postWorkflowGroupForRole(@PathVariable UUID uuid,
- HttpServletResponse response,
- HttpServletRequest request,
- @PathVariable String workflowRole)
+ public ResponseEntity> postWorkflowGroupForRole(@PathVariable UUID uuid,
+ HttpServletResponse response,
+ HttpServletRequest request,
+ @PathVariable String workflowRole)
throws Exception {
Context context = ContextUtil.obtainContext(request);
Collection collection = collectionService.find(context, uuid);
@@ -446,10 +452,10 @@ public class CollectionGroupRestController {
*/
@RequestMapping(method = RequestMethod.DELETE, value = "/workflowGroups/{workflowRole}")
@PreAuthorize("hasPermission(#uuid, 'COLLECTION', 'READ')")
- public ResponseEntity deleteWorkflowGroupForRole(@PathVariable UUID uuid,
- HttpServletResponse response,
- HttpServletRequest request,
- @PathVariable String workflowRole)
+ public ResponseEntity> deleteWorkflowGroupForRole(@PathVariable UUID uuid,
+ HttpServletResponse response,
+ HttpServletRequest request,
+ @PathVariable String workflowRole)
throws Exception {
Context context = ContextUtil.obtainContext(request);
Collection collection = collectionService.find(context, uuid);
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/CollectionItemtemplateController.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/CollectionItemTemplateController.java
similarity index 92%
rename from dspace-server-webapp/src/main/java/org/dspace/app/rest/CollectionItemtemplateController.java
rename to dspace-server-webapp/src/main/java/org/dspace/app/rest/CollectionItemTemplateController.java
index 8b87df6b06..6a0890fabc 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/CollectionItemtemplateController.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/CollectionItemTemplateController.java
@@ -32,7 +32,7 @@ import org.dspace.core.Context;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.rest.webmvc.ControllerUtils;
import org.springframework.data.rest.webmvc.ResourceNotFoundException;
-import org.springframework.hateoas.ResourceSupport;
+import org.springframework.hateoas.RepresentationModel;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -50,7 +50,7 @@ import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/" + CollectionRest.CATEGORY + "/" + CollectionRest.PLURAL_NAME
+ REGEX_REQUESTMAPPING_IDENTIFIER_AS_UUID + "/itemtemplate")
-public class CollectionItemtemplateController {
+public class CollectionItemTemplateController {
@Autowired
private Utils utils;
@@ -100,9 +100,9 @@ public class CollectionItemtemplateController {
*/
@PreAuthorize("hasPermission(#uuid, 'COLLECTION', 'WRITE')")
@RequestMapping(method = RequestMethod.POST)
- public ResponseEntity createTemplateItem(HttpServletRequest request,
- @PathVariable UUID uuid,
- @RequestBody(required = false) JsonNode itemBody)
+ public ResponseEntity> createTemplateItem(HttpServletRequest request,
+ @PathVariable UUID uuid,
+ @RequestBody(required = false) JsonNode itemBody)
throws SQLException, AuthorizeException {
if (itemBody == null) {
@@ -125,7 +125,7 @@ public class CollectionItemtemplateController {
context.commit();
return ControllerUtils.toResponseEntity(HttpStatus.CREATED, new HttpHeaders(),
- converter.toResource(templateItem));
+ (RepresentationModel>) converter.toResource(templateItem));
}
/**
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/CollectionLogoController.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/CollectionLogoController.java
index c0b78cdec0..c3243d8887 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/CollectionLogoController.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/CollectionLogoController.java
@@ -26,7 +26,7 @@ import org.dspace.core.Context;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.rest.webmvc.ControllerUtils;
import org.springframework.data.rest.webmvc.ResourceNotFoundException;
-import org.springframework.hateoas.ResourceSupport;
+import org.springframework.hateoas.RepresentationModel;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -89,8 +89,10 @@ public class CollectionLogoController {
@PreAuthorize("hasPermission(#uuid, 'COLLECTION', 'WRITE')")
@RequestMapping(method = RequestMethod.POST,
headers = "content-type=multipart/form-data")
- public ResponseEntity createLogo(HttpServletRequest request, @PathVariable UUID uuid,
- @RequestParam(value = "file", required = false) MultipartFile uploadfile)
+ public ResponseEntity> createLogo(
+ HttpServletRequest request,
+ @PathVariable UUID uuid,
+ @RequestParam(value = "file", required = false) MultipartFile uploadfile)
throws SQLException, IOException, AuthorizeException {
if (uploadfile == null) {
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/CommunityAdminGroupRestController.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/CommunityAdminGroupRestController.java
index bd8493e12b..2265ac941e 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/CommunityAdminGroupRestController.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/CommunityAdminGroupRestController.java
@@ -30,7 +30,7 @@ import org.dspace.core.Context;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.rest.webmvc.ControllerUtils;
import org.springframework.data.rest.webmvc.ResourceNotFoundException;
-import org.springframework.hateoas.ResourceSupport;
+import org.springframework.hateoas.RepresentationModel;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -73,7 +73,7 @@ public class CommunityAdminGroupRestController {
*/
@RequestMapping(method = RequestMethod.POST)
@PreAuthorize("hasPermission(#uuid, 'COMMUNITY', 'WRITE')")
- public ResponseEntity postAdminGroup(@PathVariable UUID uuid, HttpServletResponse response,
+ public ResponseEntity> postAdminGroup(@PathVariable UUID uuid, HttpServletResponse response,
HttpServletRequest request)
throws SQLException, AuthorizeException {
@@ -107,8 +107,9 @@ public class CommunityAdminGroupRestController {
*/
@RequestMapping(method = RequestMethod.DELETE)
@PreAuthorize("hasPermission(#uuid, 'COMMUNITY', 'WRITE')")
- public ResponseEntity deleteAdminGroup(@PathVariable UUID uuid, HttpServletResponse response,
- HttpServletRequest request)
+ public ResponseEntity> deleteAdminGroup(@PathVariable UUID uuid,
+ HttpServletResponse response,
+ HttpServletRequest request)
throws SQLException, AuthorizeException, IOException {
Context context = ContextUtil.obtainContext(request);
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/CommunityLogoController.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/CommunityLogoController.java
index baf8009006..52c0f000b6 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/CommunityLogoController.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/CommunityLogoController.java
@@ -26,7 +26,7 @@ import org.dspace.core.Context;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.rest.webmvc.ControllerUtils;
import org.springframework.data.rest.webmvc.ResourceNotFoundException;
-import org.springframework.hateoas.ResourceSupport;
+import org.springframework.hateoas.RepresentationModel;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -89,8 +89,9 @@ public class CommunityLogoController {
@PreAuthorize("hasPermission(#uuid, 'COMMUNITY', 'WRITE')")
@RequestMapping(method = RequestMethod.POST,
headers = "content-type=multipart/form-data")
- public ResponseEntity createLogo(HttpServletRequest request, @PathVariable UUID uuid,
- @RequestParam(value = "file", required = false) MultipartFile uploadfile)
+ public ResponseEntity> createLogo(HttpServletRequest request, @PathVariable UUID uuid,
+ @RequestParam(value = "file", required = false)
+ MultipartFile uploadfile)
throws SQLException, IOException, AuthorizeException {
if (uploadfile == null) {
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/DiscoverableEndpointsService.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/DiscoverableEndpointsService.java
index 6e8c674d43..1853285d71 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/DiscoverableEndpointsService.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/DiscoverableEndpointsService.java
@@ -68,10 +68,11 @@ public class DiscoverableEndpointsService {
discoverableEndpoints.add(link);
// sanity check
// FIXME improve logging for debugging
- if (rels.contains(link.getRel())) {
- throw new IllegalStateException("The rel " + link.getRel() + " is defined multiple times!");
+ if (rels.contains(link.getRel().value())) {
+ throw new IllegalStateException("The rel " + link.getRel().value()
+ + " is defined multiple times!");
}
- rels.add(link.getRel());
+ rels.add(link.getRel().value());
}
}
}
@@ -87,4 +88,4 @@ public class DiscoverableEndpointsService {
// could be used to override default implementation)
return true;
}
-}
\ No newline at end of file
+}
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/DiscoveryRestController.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/DiscoveryRestController.java
index 6be17ae24c..df1598b96a 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/DiscoveryRestController.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/DiscoveryRestController.java
@@ -34,7 +34,7 @@ import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.hateoas.Link;
-import org.springframework.hateoas.ResourceSupport;
+import org.springframework.hateoas.RepresentationModel;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@@ -171,15 +171,15 @@ public class DiscoveryRestController implements InitializingBean {
}
@RequestMapping(method = RequestMethod.GET, value = "/facets/{name}")
- public ResourceSupport getFacetValues(@PathVariable("name") String facetName,
- @RequestParam(name = "prefix", required = false) String prefix,
- @RequestParam(name = "query", required = false) String query,
- @RequestParam(name = "dsoType", required = false) String dsoType,
- @RequestParam(name = "scope", required = false) String dsoScope,
- @RequestParam(name = "configuration", required = false) String
- configuration,
- List searchFilters,
- Pageable page) throws Exception {
+ public RepresentationModel getFacetValues(@PathVariable("name") String facetName,
+ @RequestParam(name = "prefix", required = false) String prefix,
+ @RequestParam(name = "query", required = false) String query,
+ @RequestParam(name = "dsoType", required = false) String dsoType,
+ @RequestParam(name = "scope", required = false) String dsoScope,
+ @RequestParam(name = "configuration", required = false) String
+ configuration,
+ List searchFilters,
+ Pageable page) throws Exception {
if (log.isTraceEnabled()) {
log.trace("Facetting on facet " + facetName + " with scope: " + StringUtils.trimToEmpty(dsoScope)
+ ", dsoType: " + StringUtils.trimToEmpty(dsoType)
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/ExternalSourcesRestController.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/ExternalSourcesRestController.java
index db016218a9..357ea409c0 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/ExternalSourcesRestController.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/ExternalSourcesRestController.java
@@ -16,7 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PagedResourcesAssembler;
-import org.springframework.hateoas.PagedResources;
+import org.springframework.hateoas.PagedModel;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@@ -54,7 +54,7 @@ public class ExternalSourcesRestController {
* @return A paginated list of ExternalSourceEntryResource objects that comply with the params
*/
@RequestMapping(method = RequestMethod.GET, value = "/entries")
- public PagedResources getExternalSourceEntries(
+ public PagedModel getExternalSourceEntries(
@PathVariable("externalSourceName") String externalSourceName,
@RequestParam(name = "query") String query,
@RequestParam(name = "parent", required = false) String parent,
@@ -65,7 +65,7 @@ public class ExternalSourcesRestController {
Page externalSourceEntryResources = externalSourceEntryRestPage
.map(externalSourceEntryRest -> new ExternalSourceEntryResource(externalSourceEntryRest));
externalSourceEntryResources.forEach(linkService::addLinks);
- PagedResources result = assembler.toResource(externalSourceEntryResources);
+ PagedModel result = assembler.toModel(externalSourceEntryResources);
return result;
}
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/IdentifierRestController.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/IdentifierRestController.java
index 09b6468b3c..dadf2c514b 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/IdentifierRestController.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/IdentifierRestController.java
@@ -2,12 +2,12 @@
* 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;
-import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
+import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import java.io.IOException;
import java.net.URI;
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/ItemAddBundleController.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/ItemAddBundleController.java
index 12e8e057f9..5175dec5e2 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/ItemAddBundleController.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/ItemAddBundleController.java
@@ -33,7 +33,7 @@ import org.dspace.core.Context;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.rest.webmvc.ControllerUtils;
import org.springframework.data.rest.webmvc.ResourceNotFoundException;
-import org.springframework.hateoas.ResourceSupport;
+import org.springframework.hateoas.RepresentationModel;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -87,9 +87,9 @@ public class ItemAddBundleController {
*/
@RequestMapping(method = RequestMethod.POST)
@PreAuthorize("hasPermission(#uuid, 'ITEM', 'ADD')")
- public ResponseEntity addBundleToItem(@PathVariable UUID uuid,
- HttpServletRequest request,
- HttpServletResponse response)
+ public ResponseEntity> addBundleToItem(@PathVariable UUID uuid,
+ HttpServletRequest request,
+ HttpServletResponse response)
throws SQLException, AuthorizeException {
Context context = ContextUtil.obtainContext(request);
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/ItemtemplateRestController.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/ItemTemplateRestController.java
similarity index 91%
rename from dspace-server-webapp/src/main/java/org/dspace/app/rest/ItemtemplateRestController.java
rename to dspace-server-webapp/src/main/java/org/dspace/app/rest/ItemTemplateRestController.java
index fb77967b15..e297dab44c 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/ItemtemplateRestController.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/ItemTemplateRestController.java
@@ -32,7 +32,7 @@ import org.dspace.core.Context;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.rest.webmvc.ControllerUtils;
import org.springframework.data.rest.webmvc.ResourceNotFoundException;
-import org.springframework.hateoas.ResourceSupport;
+import org.springframework.hateoas.RepresentationModel;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -49,7 +49,7 @@ import org.springframework.web.bind.annotation.RestController;
*/
@RestController
@RequestMapping("/api/core/itemtemplates" + REGEX_REQUESTMAPPING_IDENTIFIER_AS_UUID)
-public class ItemtemplateRestController {
+public class ItemTemplateRestController {
@Autowired
private Utils utils;
@@ -122,8 +122,8 @@ public class ItemtemplateRestController {
*/
@PreAuthorize("hasPermission(#uuid, 'ITEM', 'WRITE')")
@RequestMapping(method = RequestMethod.PATCH)
- public ResponseEntity patch(HttpServletRequest request, @PathVariable UUID uuid,
- @RequestBody(required = true) JsonNode jsonNode)
+ public ResponseEntity> patch(HttpServletRequest request, @PathVariable UUID uuid,
+ @RequestBody(required = true) JsonNode jsonNode)
throws SQLException, AuthorizeException {
Context context = ContextUtil.obtainContext(request);
@@ -132,7 +132,7 @@ public class ItemtemplateRestController {
context.commit();
return ControllerUtils.toResponseEntity(HttpStatus.OK, new HttpHeaders(),
- converter.toResource(templateItemRest));
+ (RepresentationModel>) converter.toResource(templateItemRest));
}
/**
@@ -155,7 +155,8 @@ public class ItemtemplateRestController {
*/
@PreAuthorize("hasPermission(#uuid, 'ITEM', 'DELETE')")
@RequestMapping(method = RequestMethod.DELETE)
- public ResponseEntity deleteTemplateItem(HttpServletRequest request, @PathVariable UUID uuid)
+ public ResponseEntity> deleteTemplateItem(HttpServletRequest request,
+ @PathVariable UUID uuid)
throws SQLException, AuthorizeException, IOException {
Context context = ContextUtil.obtainContext(request);
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/RelationshipTypeRestController.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/RelationshipTypeRestController.java
index a3d3f0fb32..31d427254a 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/RelationshipTypeRestController.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/RelationshipTypeRestController.java
@@ -27,7 +27,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PagedResourcesAssembler;
-import org.springframework.hateoas.PagedResources;
+import org.springframework.hateoas.PagedModel;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@@ -71,7 +71,7 @@ public class RelationshipTypeRestController {
* @throws SQLException If something goes wrong
*/
@RequestMapping(method = RequestMethod.GET)
- public PagedResources retrieve(@PathVariable Integer id,
+ public PagedModel retrieve(@PathVariable Integer id,
HttpServletResponse response,
HttpServletRequest request,
Pageable pageable,
@@ -86,7 +86,7 @@ public class RelationshipTypeRestController {
Page relationshipTypeResources = relationshipTypeRestPage
.map(relationshipTypeRest -> new RelationshipTypeResource(relationshipTypeRest, utils));
relationshipTypeResources.forEach(halLinkService::addLinks);
- PagedResources result = assembler.toResource(relationshipTypeResources);
+ PagedModel result = assembler.toModel(relationshipTypeResources);
return result;
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/RestResourceController.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/RestResourceController.java
index ab338af966..a1684d782e 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/RestResourceController.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/RestResourceController.java
@@ -10,8 +10,8 @@ package org.dspace.app.rest;
import static org.dspace.app.rest.utils.RegexUtils.REGEX_REQUESTMAPPING_IDENTIFIER_AS_DIGIT;
import static org.dspace.app.rest.utils.RegexUtils.REGEX_REQUESTMAPPING_IDENTIFIER_AS_STRING_VERSION_STRONG;
import static org.dspace.app.rest.utils.RegexUtils.REGEX_REQUESTMAPPING_IDENTIFIER_AS_UUID;
-import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
-import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn;
+import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
+import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;
import java.io.FileNotFoundException;
import java.io.IOException;
@@ -63,15 +63,13 @@ import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.rest.webmvc.ControllerUtils;
-import org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler;
import org.springframework.data.rest.webmvc.ResourceNotFoundException;
import org.springframework.data.web.PagedResourcesAssembler;
+import org.springframework.hateoas.CollectionModel;
+import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.Link;
-import org.springframework.hateoas.PagedResources;
-import org.springframework.hateoas.Resource;
-import org.springframework.hateoas.ResourceSupport;
-import org.springframework.hateoas.Resources;
-import org.springframework.hateoas.UriTemplate;
+import org.springframework.hateoas.PagedModel;
+import org.springframework.hateoas.RepresentationModel;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -121,7 +119,7 @@ public class RestResourceController implements InitializingBean {
@Override
public void afterPropertiesSet() {
- List links = new ArrayList();
+ List links = new ArrayList<>();
for (String r : utils.getRepositories()) {
// this doesn't work as we don't have an active http request
// see https://github.com/spring-projects/spring-hateoas/issues/408
@@ -130,7 +128,7 @@ public class RestResourceController implements InitializingBean {
String plural = English.plural(split[1]);
Link l = new Link("/api/" + split[0] + "/" + plural, plural);
links.add(l);
- System.out.println(l.getRel() + " " + l.getHref());
+ log.debug(l.getRel().value() + " " + l.getHref());
}
discoverableEndpointsService.register(this, links);
}
@@ -145,13 +143,12 @@ public class RestResourceController implements InitializingBean {
* identifier
* and see {@link RestResourceController#findOne(String, String, UUID)} for uuid as identifier
*
- * @param apiCategory
- * @param model
- * @param id
- * @return
+ * @param apiCategory category from request
+ * @param model model from request
+ * @param id Identifier from request
+ * @return single DSpaceResource
*/
@RequestMapping(method = RequestMethod.GET, value = REGEX_REQUESTMAPPING_IDENTIFIER_AS_DIGIT)
- @SuppressWarnings("unchecked")
public DSpaceResource findOne(@PathVariable String apiCategory, @PathVariable String model,
@PathVariable Integer id) {
return findOneInternal(apiCategory, model, id);
@@ -177,13 +174,12 @@ public class RestResourceController implements InitializingBean {
* identifier
* and see {@link RestResourceController#findOne(String, String, UUID)} for uuid as identifier
*
- * @param apiCategory
- * @param model
- * @param id
- * @return
+ * @param apiCategory category from request
+ * @param model model from request
+ * @param id Identifier from request
+ * @return single DSpaceResource
*/
@RequestMapping(method = RequestMethod.GET, value = REGEX_REQUESTMAPPING_IDENTIFIER_AS_STRING_VERSION_STRONG)
- @SuppressWarnings("unchecked")
public DSpaceResource findOne(@PathVariable String apiCategory, @PathVariable String model,
@PathVariable String id) {
return findOneInternal(apiCategory, model, id);
@@ -198,13 +194,12 @@ public class RestResourceController implements InitializingBean {
* identifier
* and see {@link RestResourceController#findOne(String, String, String)} for string as identifier
*
- * @param apiCategory
- * @param model
- * @param uuid
- * @return
+ * @param apiCategory category from request
+ * @param model model from request
+ * @param uuid Identifier from request
+ * @return single DSpaceResource
*/
@RequestMapping(method = RequestMethod.GET, value = REGEX_REQUESTMAPPING_IDENTIFIER_AS_UUID)
- @SuppressWarnings("unchecked")
public DSpaceResource findOne(@PathVariable String apiCategory, @PathVariable String model,
@PathVariable UUID uuid) {
return findOneInternal(apiCategory, model, uuid);
@@ -213,10 +208,10 @@ public class RestResourceController implements InitializingBean {
/**
* Internal method to retrieve single resource from an identifier of generic type
*
- * @param apiCategory
- * @param model
- * @param id
- * @return
+ * @param apiCategory category from request
+ * @param model model from request
+ * @param id Identifier from request
+ * @return single DSpaceResource
*/
private DSpaceResource findOneInternal(String apiCategory,
String model, ID id) {
@@ -238,17 +233,17 @@ public class RestResourceController implements InitializingBean {
*
* Note that the regular expression in the request mapping accept a number;
*
- * @param request
- * @param apiCategory
- * @param model
- * @param id
- * @param rel
- * @param page
- * @param assembler
- * @return
+ * @param request current HTTPServletRequest
+ * @param apiCategory category from request
+ * @param model model from request
+ * @param id identifier from request
+ * @param rel relation from request
+ * @param page pagination information
+ * @param assembler PagedResourcesAssembler
+ * @return single RepresentationModel
*/
@RequestMapping(method = RequestMethod.GET, value = REGEX_REQUESTMAPPING_IDENTIFIER_AS_DIGIT + "/{rel}")
- public ResourceSupport findRel(HttpServletRequest request, HttpServletResponse response,
+ public RepresentationModel findRel(HttpServletRequest request, HttpServletResponse response,
@PathVariable String apiCategory,
@PathVariable String model, @PathVariable Integer id, @PathVariable String rel,
Pageable page,
@@ -262,18 +257,19 @@ public class RestResourceController implements InitializingBean {
* Note that the regular expression in the request mapping accept a string as identifier but not the other kind
* of identifier;
*
- * @param request
- * @param apiCategory
- * @param model
- * @param id
- * @param rel
- * @param page
- * @param assembler
- * @return
+ * @param request current HTTPServletRequest
+ * @param response HTTPServletResponse
+ * @param apiCategory category from request
+ * @param model model from request
+ * @param id identifier from request
+ * @param rel relation from request
+ * @param page pagination information
+ * @param assembler PagedResourcesAssembler
+ * @return single RepresentationModel
*/
@RequestMapping(method = RequestMethod.GET, value = REGEX_REQUESTMAPPING_IDENTIFIER_AS_STRING_VERSION_STRONG +
"/{rel}")
- public ResourceSupport findRel(HttpServletRequest request, HttpServletResponse response,
+ public RepresentationModel findRel(HttpServletRequest request, HttpServletResponse response,
@PathVariable String apiCategory,
@PathVariable String model, @PathVariable String id, @PathVariable String rel,
Pageable page,
@@ -296,7 +292,7 @@ public class RestResourceController implements InitializingBean {
* @return
*/
@RequestMapping(method = RequestMethod.GET, value = REGEX_REQUESTMAPPING_IDENTIFIER_AS_UUID + "/{rel}")
- public ResourceSupport findRel(HttpServletRequest request, HttpServletResponse response,
+ public RepresentationModel findRel(HttpServletRequest request, HttpServletResponse response,
@PathVariable String apiCategory,
@PathVariable String model, @PathVariable UUID uuid, @PathVariable String rel,
Pageable page,
@@ -338,7 +334,7 @@ public class RestResourceController implements InitializingBean {
*/
@RequestMapping(method = RequestMethod.GET, value = REGEX_REQUESTMAPPING_IDENTIFIER_AS_STRING_VERSION_STRONG +
"/{rel}/{relid}")
- public ResourceSupport findRel(HttpServletRequest request, HttpServletResponse response,
+ public RepresentationModel findRel(HttpServletRequest request, HttpServletResponse response,
@PathVariable String apiCategory,
@PathVariable String model, @PathVariable String id, @PathVariable String rel,
@PathVariable String relid,
@@ -367,10 +363,10 @@ public class RestResourceController implements InitializingBean {
* @throws HttpRequestMethodNotSupportedException If something goes wrong
*/
@RequestMapping(method = RequestMethod.POST, consumes = {"application/json", "application/hal+json"})
- public ResponseEntity post(HttpServletRequest request,
- @PathVariable String apiCategory,
- @PathVariable String model,
- @RequestParam(required = false) String parent)
+ public ResponseEntity> post(HttpServletRequest request,
+ @PathVariable String apiCategory,
+ @PathVariable String model,
+ @RequestParam(required = false) String parent)
throws HttpRequestMethodNotSupportedException {
return postJsonInternal(request, apiCategory, model, parent);
}
@@ -394,9 +390,9 @@ public class RestResourceController implements InitializingBean {
* @throws HttpRequestMethodNotSupportedException If something goes wrong
*/
@RequestMapping(method = RequestMethod.POST, consumes = {"text/uri-list"})
- public ResponseEntity postWithUriListContentType(HttpServletRequest request,
- @PathVariable String apiCategory,
- @PathVariable String model)
+ public ResponseEntity> postWithUriListContentType(HttpServletRequest request,
+ @PathVariable String apiCategory,
+ @PathVariable String model)
throws HttpRequestMethodNotSupportedException {
return postUriListInternal(request, apiCategory, model);
}
@@ -411,9 +407,10 @@ public class RestResourceController implements InitializingBean {
* @return The relevant ResponseEntity for this request
* @throws HttpRequestMethodNotSupportedException If something goes wrong
*/
- public ResponseEntity postJsonInternal(HttpServletRequest request,
- String apiCategory,
- String model, String parent)
+ public ResponseEntity> postJsonInternal(HttpServletRequest request,
+ String apiCategory,
+ String model,
+ String parent)
throws HttpRequestMethodNotSupportedException {
checkModelPluralForm(apiCategory, model);
DSpaceRestRepository repository = utils.getResourceRepository(apiCategory, model);
@@ -442,9 +439,10 @@ public class RestResourceController implements InitializingBean {
* @return The relevant ResponseEntity for this request
* @throws HttpRequestMethodNotSupportedException If something goes wrong
*/
- public ResponseEntity postUriListInternal(HttpServletRequest request,
- String apiCategory,
- String model)
+ public ResponseEntity> postUriListInternal(
+ HttpServletRequest request,
+ String apiCategory,
+ String model)
throws HttpRequestMethodNotSupportedException {
checkModelPluralForm(apiCategory, model);
DSpaceRestRepository repository = utils.getResourceRepository(apiCategory, model);
@@ -482,8 +480,8 @@ public class RestResourceController implements InitializingBean {
*/
@RequestMapping(method = RequestMethod.POST, value = REGEX_REQUESTMAPPING_IDENTIFIER_AS_DIGIT, headers =
"content-type=application/x-www-form-urlencoded")
- public ResponseEntity action(HttpServletRequest request, @PathVariable String apiCategory,
- @PathVariable String model, @PathVariable Integer id)
+ public ResponseEntity> action(HttpServletRequest request, @PathVariable String apiCategory,
+ @PathVariable String model, @PathVariable Integer id)
throws HttpRequestMethodNotSupportedException, SQLException, IOException {
checkModelPluralForm(apiCategory, model);
DSpaceRestRepository repository =
@@ -525,11 +523,11 @@ public class RestResourceController implements InitializingBean {
*/
@RequestMapping(method = RequestMethod.POST, value = REGEX_REQUESTMAPPING_IDENTIFIER_AS_DIGIT, headers =
"content-type=multipart/form-data")
- public ResponseEntity upload(HttpServletRequest request,
- @PathVariable String apiCategory,
- @PathVariable String model,
- @PathVariable Integer id,
- @RequestParam("file") MultipartFile
+ public ResponseEntity> upload(HttpServletRequest request,
+ @PathVariable String apiCategory,
+ @PathVariable String model,
+ @PathVariable Integer id,
+ @RequestParam("file") MultipartFile
uploadfile)
throws HttpRequestMethodNotSupportedException {
return uploadInternal(request, apiCategory, model, id, uploadfile);
@@ -555,11 +553,11 @@ public class RestResourceController implements InitializingBean {
*/
@RequestMapping(method = RequestMethod.POST, value = REGEX_REQUESTMAPPING_IDENTIFIER_AS_UUID, headers =
"content-type=multipart/form-data")
- public ResponseEntity upload(HttpServletRequest request,
- @PathVariable String apiCategory,
- @PathVariable String model,
- @PathVariable UUID uuid,
- @RequestParam("file") MultipartFile
+ public ResponseEntity> upload(HttpServletRequest request,
+ @PathVariable String apiCategory,
+ @PathVariable String model,
+ @PathVariable UUID uuid,
+ @RequestParam("file") MultipartFile
uploadfile)
throws HttpRequestMethodNotSupportedException {
return uploadInternal(request, apiCategory, model, uuid, uploadfile);
@@ -575,10 +573,11 @@ public class RestResourceController implements InitializingBean {
* @param uploadfile
* @return
*/
- private ResponseEntity uploadInternal(HttpServletRequest request,
- String apiCategory, String model,
- ID id,
- MultipartFile uploadfile) {
+ private ResponseEntity> uploadInternal(HttpServletRequest request,
+ String apiCategory,
+ String model,
+ ID id,
+ MultipartFile uploadfile) {
checkModelPluralForm(apiCategory, model);
DSpaceRestRepository repository = utils.getResourceRepository(apiCategory, model);
RestAddressableModel modelObject = null;
@@ -613,11 +612,11 @@ public class RestResourceController implements InitializingBean {
* @throws AuthorizeException
*/
@RequestMapping(method = { RequestMethod.POST }, headers = "content-type=multipart/form-data")
- public ResponseEntity upload(HttpServletRequest request,
- @PathVariable String apiCategory,
- @PathVariable String model,
- @RequestParam("file") MultipartFile
- uploadfile)
+ public ResponseEntity> upload(
+ HttpServletRequest request,
+ @PathVariable String apiCategory,
+ @PathVariable String model,
+ @RequestParam("file") MultipartFile uploadfile)
throws SQLException, FileNotFoundException, IOException, AuthorizeException {
checkModelPluralForm(apiCategory, model);
@@ -630,7 +629,7 @@ public class RestResourceController implements InitializingBean {
DSpaceResource result = converter.toResource(modelObject);
resources.add(result);
}
- return ControllerUtils.toResponseEntity(HttpStatus.OK, new HttpHeaders(), Resources.wrap(resources));
+ return ControllerUtils.toResponseEntity(HttpStatus.OK, new HttpHeaders(), CollectionModel.wrap(resources));
}
/**
@@ -648,9 +647,9 @@ public class RestResourceController implements InitializingBean {
* @throws HttpRequestMethodNotSupportedException
*/
@RequestMapping(method = RequestMethod.PATCH, value = REGEX_REQUESTMAPPING_IDENTIFIER_AS_DIGIT)
- public ResponseEntity patch(HttpServletRequest request, @PathVariable String apiCategory,
- @PathVariable String model, @PathVariable Integer id,
- @RequestBody(required = true) JsonNode jsonNode) {
+ public ResponseEntity> patch(HttpServletRequest request, @PathVariable String apiCategory,
+ @PathVariable String model, @PathVariable Integer id,
+ @RequestBody(required = true) JsonNode jsonNode) {
return patchInternal(request, apiCategory, model, id, jsonNode);
}
@@ -669,10 +668,10 @@ public class RestResourceController implements InitializingBean {
* @throws HttpRequestMethodNotSupportedException
*/
@RequestMapping(method = RequestMethod.PATCH, value = REGEX_REQUESTMAPPING_IDENTIFIER_AS_UUID)
- public ResponseEntity patch(HttpServletRequest request, @PathVariable String apiCategory,
- @PathVariable String model,
- @PathVariable(name = "uuid") UUID id,
- @RequestBody(required = true) JsonNode jsonNode) {
+ public ResponseEntity> patch(HttpServletRequest request, @PathVariable String apiCategory,
+ @PathVariable String model,
+ @PathVariable(name = "uuid") UUID id,
+ @RequestBody(required = true) JsonNode jsonNode) {
return patchInternal(request, apiCategory, model, id, jsonNode);
}
@@ -687,10 +686,10 @@ public class RestResourceController implements InitializingBean {
* @return
* @throws HttpRequestMethodNotSupportedException
*/
- public ResponseEntity patchInternal(HttpServletRequest request,
- String apiCategory,
- String model, ID id,
- JsonNode jsonNode) {
+ public ResponseEntity> patchInternal(HttpServletRequest request,
+ String apiCategory,
+ String model, ID id,
+ JsonNode jsonNode) {
checkModelPluralForm(apiCategory, model);
DSpaceRestRepository repository = utils.getResourceRepository(apiCategory, model);
RestAddressableModel modelObject = null;
@@ -722,7 +721,7 @@ public class RestResourceController implements InitializingBean {
* @param assembler
* @return
*/
- private ResourceSupport findRelEntryInternal(HttpServletRequest request,
+ private RepresentationModel findRelEntryInternal(HttpServletRequest request,
HttpServletResponse response,
String apiCategory, String model,
String id, String rel, String relid,
@@ -745,7 +744,7 @@ public class RestResourceController implements InitializingBean {
result.add(object);
PageImpl pageResult = new PageImpl(result, page, 1);
Page halResources = pageResult.map(restObject -> converter.toResource(restObject));
- return assembler.toResource(halResources, link);
+ return assembler.toModel(halResources, link);
} catch (InvocationTargetException e) {
// This catch has been made to resolve the issue that caused AuthorizeDenied exceptions for the methods
// on the repository defined by the @PreAuthorize etc annotation to be absorbed by the reflection's
@@ -775,7 +774,7 @@ public class RestResourceController implements InitializingBean {
* @param assembler
* @return
*/
- private ResourceSupport findRelInternal(HttpServletRequest request,
+ private RepresentationModel findRelInternal(HttpServletRequest request,
HttpServletResponse response, String apiCategory,
String model, ID uuid, String subpath,
Pageable page,
@@ -785,7 +784,7 @@ public class RestResourceController implements InitializingBean {
Class domainClass = repository.getDomainClass();
LinkRest linkRest = utils.getClassLevelLinkRest(subpath, domainClass);
- PagedResources extends HALResource> result;
+ PagedModel extends HALResource> result;
if (linkRest != null) {
LinkRestRepository linkRepository = utils.getLinkResourceRepository(apiCategory, model, linkRest.name());
@@ -813,7 +812,7 @@ public class RestResourceController implements InitializingBean {
link = linkTo(this.getClass(), apiCategory, model).slash(uuid).slash(subpath).withSelfRel();
}
- return new Resource(new EmbeddedPage(link.getHref(),
+ return new EntityModel(new EmbeddedPage(link.getHref(),
pageResult.map(converter::toResource), null, subpath));
} else {
RestModel object = (RestModel) linkMethod.invoke(linkRepository, request, uuid, page,
@@ -852,10 +851,10 @@ public class RestResourceController implements InitializingBean {
for (Link l : resource.getLinks()) {
if (l.isTemplated()) {
if (l.getHref().substring(0, l.getHref().indexOf("?")).contentEquals(request.getRequestURL())) {
- rel = l.getRel();
+ rel = l.getRel().value();
}
} else if (l.getHref().contentEquals(request.getRequestURL())) {
- rel = l.getRel();
+ rel = l.getRel().value();
}
}
@@ -877,7 +876,7 @@ public class RestResourceController implements InitializingBean {
List extends RestAddressableModel> fullList = ep.getFullList();
if (fullList == null || fullList.size() == 0) {
PageImpl pageResult = new PageImpl(fullList, page, 0);
- result = assembler.toResource(pageResult);
+ result = assembler.toModel(pageResult);
return result;
}
int start = Math.toIntExact(page.getOffset());
@@ -886,12 +885,12 @@ public class RestResourceController implements InitializingBean {
.getResourceRepository(fullList.get(0).getCategory(), fullList.get(0).getType());
PageImpl pageResult = new PageImpl(fullList.subList(start, end), page,
fullList.size());
- return assembler.toResource(pageResult.map(converter::toResource));
+ return assembler.toModel(pageResult.map(converter::toResource));
} else {
if (resource.getEmbeddedResources().get(rel) == null) {
response.setStatus(HttpServletResponse.SC_NO_CONTENT);
}
- return (ResourceSupport) resource.getEmbeddedResources().get(rel);
+ return (RepresentationModel) resource.getEmbeddedResources().get(rel);
}
}
@@ -907,7 +906,7 @@ public class RestResourceController implements InitializingBean {
*/
@RequestMapping(method = RequestMethod.GET)
@SuppressWarnings("unchecked")
- public PagedResources> findAll(@PathVariable String apiCategory,
+ public PagedModel> findAll(@PathVariable String apiCategory,
@PathVariable String model,
Pageable page,
PagedResourcesAssembler assembler,
@@ -923,7 +922,7 @@ public class RestResourceController implements InitializingBean {
} catch (PaginationException pe) {
resources = new PageImpl<>(new ArrayList<>(), page, pe.getTotal());
}
- PagedResources> result = assembler.toResource(resources, link);
+ PagedModel> result = assembler.toModel(resources, link);
if (repositoryUtils.haveSearchMethods(repository)) {
result.add(linkTo(this.getClass(), apiCategory, model).slash("search").withRel("search"));
}
@@ -942,8 +941,8 @@ public class RestResourceController implements InitializingBean {
}
@RequestMapping(method = RequestMethod.GET, value = "/search")
- public ResourceSupport listSearchMethods(@PathVariable String apiCategory, @PathVariable String model) {
- ResourceSupport root = new ResourceSupport();
+ public RepresentationModel listSearchMethods(@PathVariable String apiCategory, @PathVariable String model) {
+ RepresentationModel root = new RepresentationModel();
DSpaceRestRepository repository = utils.getResourceRepository(apiCategory, model);
List searchMethods = repositoryUtils.listSearchMethods(repository);
@@ -961,14 +960,14 @@ public class RestResourceController implements InitializingBean {
@RequestMapping(method = RequestMethod.GET, value = "/search/{searchMethodName}")
@SuppressWarnings("unchecked")
- public ResourceSupport executeSearchMethods(@PathVariable String apiCategory,
- @PathVariable String model,
- @PathVariable String searchMethodName,
- HttpServletResponse response,
- Pageable pageable, Sort sort,
- PagedResourcesAssembler assembler,
- @RequestParam MultiValueMap parameters)
+ public RepresentationModel executeSearchMethods(
+ @PathVariable String apiCategory,
+ @PathVariable String model,
+ @PathVariable String searchMethodName,
+ HttpServletResponse response,
+ Pageable pageable, Sort sort,
+ PagedResourcesAssembler assembler,
+ @RequestParam MultiValueMap parameters)
throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
Link link = linkTo(this.getClass(), apiCategory, model).slash("search").slash(searchMethodName).withSelfRel();
@@ -990,7 +989,7 @@ public class RestResourceController implements InitializingBean {
.executeQueryMethod(repository, parameters, searchMethod, pageable, sort, assembler);
returnPage = searchMethod.getReturnType().isAssignableFrom(Page.class);
- ResourceSupport result = null;
+ RepresentationModel result = null;
if (returnPage) {
Page> resources;
if (searchResult == null) {
@@ -998,7 +997,7 @@ public class RestResourceController implements InitializingBean {
} else {
resources = ((Page) searchResult).map(converter::toResource);
}
- result = assembler.toResource(resources, link);
+ result = assembler.toModel(resources, link);
} else {
if (searchResult == null) {
response.setStatus(HttpServletResponse.SC_NO_CONTENT);
@@ -1009,30 +1008,16 @@ public class RestResourceController implements InitializingBean {
return result;
}
- /**
- * Sets the location header pointing to the resource representing the given instance. Will make sure we properly
- * expand the URI template potentially created as self link.
- *
- * @param headers must not be {@literal null}.
- * @param assembler must not be {@literal null}.
- * @param source must not be {@literal null}.
- */
- private void addLocationHeader(HttpHeaders headers, PersistentEntityResourceAssembler assembler, Object source) {
-
- String selfLink = assembler.getSelfLinkFor(source).getHref();
- headers.setLocation(new UriTemplate(selfLink).expand());
- }
-
@RequestMapping(method = RequestMethod.DELETE, value = REGEX_REQUESTMAPPING_IDENTIFIER_AS_DIGIT)
- public ResponseEntity delete(HttpServletRequest request, @PathVariable String apiCategory,
- @PathVariable String model, @PathVariable Integer id)
+ public ResponseEntity> delete(HttpServletRequest request, @PathVariable String apiCategory,
+ @PathVariable String model, @PathVariable Integer id)
throws HttpRequestMethodNotSupportedException {
return deleteInternal(apiCategory, model, id);
}
@RequestMapping(method = RequestMethod.DELETE, value = REGEX_REQUESTMAPPING_IDENTIFIER_AS_UUID)
- public ResponseEntity delete(HttpServletRequest request, @PathVariable String apiCategory,
- @PathVariable String model, @PathVariable UUID uuid)
+ public ResponseEntity> delete(HttpServletRequest request, @PathVariable String apiCategory,
+ @PathVariable String model, @PathVariable UUID uuid)
throws HttpRequestMethodNotSupportedException {
return deleteInternal(apiCategory, model, uuid);
}
@@ -1045,8 +1030,9 @@ public class RestResourceController implements InitializingBean {
* @param id
* @return
*/
- private ResponseEntity deleteInternal(String apiCategory, String model,
- ID id) {
+ private ResponseEntity> deleteInternal(String apiCategory,
+ String model,
+ ID id) {
checkModelPluralForm(apiCategory, model);
DSpaceRestRepository repository = utils.getResourceRepository(apiCategory, model);
repository.deleteById(id);
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/ScriptProcessesController.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/ScriptProcessesController.java
index 43788dfd1f..122fa76ac0 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/ScriptProcessesController.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/ScriptProcessesController.java
@@ -16,7 +16,7 @@ import org.dspace.app.rest.model.hateoas.ProcessResource;
import org.dspace.app.rest.repository.ScriptRestRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.rest.webmvc.ControllerUtils;
-import org.springframework.hateoas.ResourceSupport;
+import org.springframework.hateoas.RepresentationModel;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -50,7 +50,7 @@ public class ScriptProcessesController {
*/
@RequestMapping(method = RequestMethod.POST)
@PreAuthorize("hasAuthority('ADMIN')")
- public ResponseEntity startProcess(@PathVariable(name = "name") String scriptName)
+ public ResponseEntity> startProcess(@PathVariable(name = "name") String scriptName)
throws Exception {
if (log.isTraceEnabled()) {
log.trace("Starting Process for Script with name: " + scriptName);
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/StatisticsRestController.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/StatisticsRestController.java
index 9422ef32ae..5fbf053588 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/StatisticsRestController.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/StatisticsRestController.java
@@ -26,8 +26,8 @@ import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.rest.webmvc.ControllerUtils;
import org.springframework.hateoas.Link;
-import org.springframework.hateoas.PagedResources;
-import org.springframework.hateoas.ResourceSupport;
+import org.springframework.hateoas.PagedModel;
+import org.springframework.hateoas.RepresentationModel;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -75,33 +75,33 @@ public class StatisticsRestController implements InitializingBean {
}
@RequestMapping(method = RequestMethod.GET, value = "/viewevents/{uuid}")
- public PagedResources getViewEvent(@PathVariable(name = "uuid") UUID uuid) throws Exception {
+ public PagedModel getViewEvent(@PathVariable(name = "uuid") UUID uuid) throws Exception {
throw new RepositoryMethodNotImplementedException("No implementation found; Method not allowed!", "");
}
@RequestMapping(method = RequestMethod.GET, value = "/searchevents/{uuid}")
- public PagedResources getSearchEvent(@PathVariable(name = "uuid") UUID uuid) throws Exception {
+ public PagedModel getSearchEvent(@PathVariable(name = "uuid") UUID uuid) throws Exception {
throw new RepositoryMethodNotImplementedException("No implementation found; Method not allowed!", "");
}
@RequestMapping(method = RequestMethod.GET, value = "/viewevents")
- public PagedResources getViewEvents() throws Exception {
+ public PagedModel getViewEvents() throws Exception {
throw new RepositoryMethodNotImplementedException("No implementation found; Method not allowed!", "");
}
@RequestMapping(method = RequestMethod.GET, value = "/searchevents")
- public PagedResources getSearchEvents() throws Exception {
+ public PagedModel getSearchEvents() throws Exception {
throw new RepositoryMethodNotImplementedException("No implementation found; Method not allowed!", "");
}
@RequestMapping(method = RequestMethod.POST, value = "/viewevents")
- public ResponseEntity postViewEvent() throws Exception {
+ public ResponseEntity> postViewEvent() throws Exception {
ViewEventResource result = converter.toResource(viewEventRestRepository.createViewEvent());
return ControllerUtils.toResponseEntity(HttpStatus.CREATED, new HttpHeaders(), result);
}
@RequestMapping(method = RequestMethod.POST, value = "/searchevents")
- public ResponseEntity postSearchEvent() throws Exception {
+ public ResponseEntity> postSearchEvent() throws Exception {
SearchEventResource result = converter.toResource(searchEventRestRepository.createSearchEvent());
return ControllerUtils.toResponseEntity(HttpStatus.CREATED, new HttpHeaders(), result);
}
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/UUIDLookupRestController.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/UUIDLookupRestController.java
index b20848b3e4..17ce7d4c54 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/UUIDLookupRestController.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/UUIDLookupRestController.java
@@ -2,12 +2,12 @@
* 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;
-import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
+import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import java.io.IOException;
import java.net.URI;
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/WorkflowDefinitionCollectionsLinkRepository.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/WorkflowDefinitionCollectionsLinkRepository.java
index 9496e32738..1f66c0928d 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/WorkflowDefinitionCollectionsLinkRepository.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/WorkflowDefinitionCollectionsLinkRepository.java
@@ -71,7 +71,7 @@ public class WorkflowDefinitionCollectionsLinkRepository extends AbstractDSpaceR
}
collectionsMappedToWorkflow.addAll(xmlWorkflowFactory.getCollectionHandlesMappedToWorklow(context,
workflowName));
- Pageable pageable = optionalPageable != null ? optionalPageable : new PageRequest(0, 20);
+ Pageable pageable = optionalPageable != null ? optionalPageable : PageRequest.of(0, 20);
return converter.toRestPage(utils.getPage(collectionsMappedToWorkflow, pageable),
projection);
} else {
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/WorkflowDefinitionStepsLinkRepository.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/WorkflowDefinitionStepsLinkRepository.java
index fe05a4c1d0..4fdc391641 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/WorkflowDefinitionStepsLinkRepository.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/WorkflowDefinitionStepsLinkRepository.java
@@ -54,7 +54,7 @@ public class WorkflowDefinitionStepsLinkRepository extends AbstractDSpaceRestRep
Projection projection) {
try {
List steps = xmlWorkflowFactory.getWorkflowByName(workflowName).getSteps();
- Pageable pageable = optionalPageable != null ? optionalPageable : new PageRequest(0, 20);
+ Pageable pageable = optionalPageable != null ? optionalPageable : PageRequest.of(0, 20);
return converter.toRestPage(utils.getPage(steps, pageable), projection);
} catch (WorkflowConfigurationException e) {
throw new ResourceNotFoundException("No workflow with name " + workflowName + " is configured");
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/WorkflowStepActionsLinkRepository.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/WorkflowStepActionsLinkRepository.java
index b11dd929d5..8ddab1381f 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/WorkflowStepActionsLinkRepository.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/WorkflowStepActionsLinkRepository.java
@@ -51,7 +51,7 @@ public class WorkflowStepActionsLinkRepository extends AbstractDSpaceRestReposit
@Nullable Pageable optionalPageable,
Projection projection) {
List actions = xmlWorkflowFactory.getStepByName(workflowStepName).getActions();
- Pageable pageable = optionalPageable != null ? optionalPageable : new PageRequest(0, 20);
+ Pageable pageable = optionalPageable != null ? optionalPageable : PageRequest.of(0, 20);
return converter.toRestPage(utils.getPage(actions, pageable), projection);
}
}
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/converter/ConverterService.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/converter/ConverterService.java
index 295634599b..a9dc827b79 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/converter/ConverterService.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/converter/ConverterService.java
@@ -32,8 +32,8 @@ import org.springframework.core.type.filter.AssignableTypeFilter;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
+import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.Link;
-import org.springframework.hateoas.Resource;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
@@ -286,7 +286,7 @@ public class ConverterService {
// scan all resource classes and look for compatible rest classes (by naming convention),
// creating a map of resource constructors keyed by rest class, for later use.
ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false);
- provider.addIncludeFilter(new AssignableTypeFilter(Resource.class));
+ provider.addIncludeFilter(new AssignableTypeFilter(EntityModel.class));
Set beanDefinitions = provider.findCandidateComponents(
HALResource.class.getPackage().getName().replaceAll("\\.", "/"));
for (BeanDefinition beanDefinition : beanDefinitions) {
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/AuthorityEntryHalLinkFactory.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/AuthorityEntryHalLinkFactory.java
index eeca19617c..e24d70a526 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/AuthorityEntryHalLinkFactory.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/AuthorityEntryHalLinkFactory.java
@@ -7,7 +7,7 @@
*/
package org.dspace.app.rest.link;
-import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
+import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import java.util.LinkedList;
@@ -18,6 +18,7 @@ import org.dspace.app.rest.model.AuthorityRest;
import org.dspace.app.rest.model.hateoas.AuthorityEntryResource;
import org.dspace.app.rest.utils.AuthorityUtils;
import org.springframework.data.domain.Pageable;
+import org.springframework.hateoas.IanaLinkRelations;
import org.springframework.hateoas.Link;
import org.springframework.stereotype.Component;
import org.springframework.web.util.UriComponentsBuilder;
@@ -50,7 +51,7 @@ public class AuthorityEntryHalLinkFactory extends HalLinkFactory getControllerClass() {
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/DSpaceResourceHalLinkFactory.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/DSpaceResourceHalLinkFactory.java
index a2d2626734..c306691eb3 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/DSpaceResourceHalLinkFactory.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/DSpaceResourceHalLinkFactory.java
@@ -22,6 +22,7 @@ import org.dspace.app.rest.model.hateoas.DSpaceResource;
import org.dspace.app.rest.utils.Utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
+import org.springframework.hateoas.IanaLinkRelations;
import org.springframework.hateoas.Link;
import org.springframework.stereotype.Component;
@@ -80,7 +81,7 @@ public class DSpaceResourceHalLinkFactory extends HalLinkFactory getControllerClass() {
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/HalLinkFactory.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/HalLinkFactory.java
index 7b3cb71d7d..093c93a182 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/HalLinkFactory.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/HalLinkFactory.java
@@ -7,8 +7,8 @@
*/
package org.dspace.app.rest.link;
-import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
-import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn;
+import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
+import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;
import java.util.LinkedList;
import java.util.List;
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/HalLinkService.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/HalLinkService.java
index 2529d275ab..164823527f 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/HalLinkService.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/HalLinkService.java
@@ -48,7 +48,7 @@ public class HalLinkService {
links.addAll(halLinkFactory.getLinksFor(halResource, pageable));
}
- links.sort((Link l1, Link l2) -> ObjectUtils.compare(l1.getRel(), l2.getRel()));
+ links.sort((Link l1, Link l2) -> ObjectUtils.compare(l1.getRel().value(), l2.getRel().value()));
halResource.add(links);
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/RootHalLinkFactory.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/RootHalLinkFactory.java
index 420dbd622c..55751435d4 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/RootHalLinkFactory.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/RootHalLinkFactory.java
@@ -29,7 +29,8 @@ public class RootHalLinkFactory extends HalLinkFactory list) throws Exception {
for (Link endpointLink : discoverableEndpointsService.getDiscoverableEndpoints()) {
list.add(
- buildLink(endpointLink.getRel(), halResource.getContent().getDspaceRest() + endpointLink.getHref()));
+ buildLink(endpointLink.getRel().value(),
+ halResource.getContent().getDspaceRest() + endpointLink.getHref()));
}
}
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/SubmissionSectionHalLinkFactory.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/SubmissionSectionHalLinkFactory.java
index 71c77091b7..50fd250382 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/SubmissionSectionHalLinkFactory.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/SubmissionSectionHalLinkFactory.java
@@ -7,7 +7,7 @@
*/
package org.dspace.app.rest.link;
-import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
+import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import java.util.LinkedList;
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/externalsources/ExternalSourceEntryHalLinkFactory.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/externalsources/ExternalSourceEntryHalLinkFactory.java
index 44ce3b25d8..0c0f9678b8 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/externalsources/ExternalSourceEntryHalLinkFactory.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/externalsources/ExternalSourceEntryHalLinkFactory.java
@@ -13,6 +13,7 @@ import org.dspace.app.rest.ExternalSourcesRestController;
import org.dspace.app.rest.link.HalLinkFactory;
import org.dspace.app.rest.model.hateoas.ExternalSourceEntryResource;
import org.springframework.data.domain.Pageable;
+import org.springframework.hateoas.IanaLinkRelations;
import org.springframework.hateoas.Link;
import org.springframework.stereotype.Component;
@@ -27,7 +28,7 @@ public class ExternalSourceEntryHalLinkFactory
protected void addLinks(ExternalSourceEntryResource halResource, Pageable pageable, LinkedList list)
throws Exception {
- list.add(buildLink(Link.REL_SELF,
+ list.add(buildLink(IanaLinkRelations.SELF.value(),
getMethodOn().getExternalSourceEntryValue(halResource.getContent().getExternalSource(),
halResource.getContent().getId())));
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/harvest/HarvestedCollectionHalLinkFactory.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/harvest/HarvestedCollectionHalLinkFactory.java
index 12b3f89f3d..feca681ed6 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/harvest/HarvestedCollectionHalLinkFactory.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/harvest/HarvestedCollectionHalLinkFactory.java
@@ -13,6 +13,7 @@ import java.util.UUID;
import org.dspace.app.rest.model.HarvestedCollectionRest;
import org.dspace.app.rest.model.hateoas.HarvestedCollectionResource;
import org.springframework.data.domain.Pageable;
+import org.springframework.hateoas.IanaLinkRelations;
import org.springframework.hateoas.Link;
import org.springframework.stereotype.Component;
@@ -31,7 +32,7 @@ public class HarvestedCollectionHalLinkFactory
if (data != null) {
list.add(
buildLink(
- Link.REL_SELF,
+ IanaLinkRelations.SELF.value(),
getMethodOn().get(UUID.fromString(data.getCollectionRest().getUuid()), null, null)
)
);
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/search/FacetConfigurationResourceHalLinkFactory.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/search/FacetConfigurationResourceHalLinkFactory.java
index 272dc25a68..2a35be24a5 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/search/FacetConfigurationResourceHalLinkFactory.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/search/FacetConfigurationResourceHalLinkFactory.java
@@ -12,6 +12,7 @@ import java.util.LinkedList;
import org.dspace.app.rest.model.FacetConfigurationRest;
import org.dspace.app.rest.model.hateoas.FacetConfigurationResource;
import org.springframework.data.domain.Pageable;
+import org.springframework.hateoas.IanaLinkRelations;
import org.springframework.hateoas.Link;
import org.springframework.stereotype.Component;
@@ -31,7 +32,7 @@ public class FacetConfigurationResourceHalLinkFactory extends DiscoveryRestHalLi
FacetConfigurationRest data = halResource.getContent();
if (data != null) {
- list.add(buildLink(Link.REL_SELF, getMethodOn()
+ list.add(buildLink(IanaLinkRelations.SELF.value(), getMethodOn()
.getFacetsConfiguration(data.getScope(), data.getConfiguration(), page)));
}
}
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/search/FacetsResourceHalLinkFactory.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/search/FacetsResourceHalLinkFactory.java
index 91050021c7..1c2fb35058 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/search/FacetsResourceHalLinkFactory.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/search/FacetsResourceHalLinkFactory.java
@@ -16,6 +16,7 @@ import org.dspace.app.rest.model.hateoas.FacetsResource;
import org.dspace.app.rest.model.hateoas.SearchFacetEntryResource;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
+import org.springframework.hateoas.IanaLinkRelations;
import org.springframework.hateoas.Link;
import org.springframework.stereotype.Component;
@@ -34,7 +35,8 @@ public class FacetsResourceHalLinkFactory extends DiscoveryRestHalLinkFactory(facetData.getValues(), new PageRequest(0, facetData.getFacetLimit()),
+ PageImpl page = new PageImpl<>(facetData.getValues(), PageRequest.of(0, facetData.getFacetLimit()),
facetData.getValues().size() + (BooleanUtils
.isTrue(facetData.isHasMore()) ? 1 : 0));
halResource.setPageHeader(new EmbeddedPageHeader(uriBuilder, page, false));
} else {
- list.add(buildLink(Link.REL_SELF, uriBuilder.build().toUriString()));
+ list.add(buildLink(IanaLinkRelations.SELF.value(), uriBuilder.build().toUriString()));
}
}
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/search/SearchResultsResourceHalLinkFactory.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/search/SearchResultsResourceHalLinkFactory.java
index eeceafae2e..f68846c407 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/search/SearchResultsResourceHalLinkFactory.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/search/SearchResultsResourceHalLinkFactory.java
@@ -12,6 +12,7 @@ import java.util.LinkedList;
import org.dspace.app.rest.model.SearchResultsRest;
import org.dspace.app.rest.model.hateoas.SearchResultsResource;
import org.springframework.data.domain.Pageable;
+import org.springframework.hateoas.IanaLinkRelations;
import org.springframework.hateoas.Link;
import org.springframework.stereotype.Component;
@@ -26,7 +27,7 @@ public class SearchResultsResourceHalLinkFactory extends DiscoveryRestHalLinkFac
throws Exception {
SearchResultsRest resultsRest = halResource.getContent();
- list.add(buildLink(Link.REL_SELF, buildSearchBaseLink(resultsRest).toUriString()));
+ list.add(buildLink(IanaLinkRelations.SELF.value(), buildSearchBaseLink(resultsRest).toUriString()));
}
@Override
@@ -35,4 +36,4 @@ public class SearchResultsResourceHalLinkFactory extends DiscoveryRestHalLinkFac
}
-}
\ No newline at end of file
+}
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/search/SearchSupportHalLinkFactory.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/search/SearchSupportHalLinkFactory.java
index e253781d2d..94bf24d9a2 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/search/SearchSupportHalLinkFactory.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/search/SearchSupportHalLinkFactory.java
@@ -13,6 +13,7 @@ import org.dspace.app.rest.DiscoveryRestController;
import org.dspace.app.rest.link.HalLinkFactory;
import org.dspace.app.rest.model.hateoas.SearchSupportResource;
import org.springframework.data.domain.Pageable;
+import org.springframework.hateoas.IanaLinkRelations;
import org.springframework.hateoas.Link;
import org.springframework.stereotype.Component;
@@ -26,7 +27,7 @@ public class SearchSupportHalLinkFactory extends HalLinkFactory list)
throws Exception {
- list.add(buildLink(Link.REL_SELF, getMethodOn()
+ list.add(buildLink(IanaLinkRelations.SELF.value(), getMethodOn()
.getSearchSupport(null, null)));
list.add(buildLink("search", getMethodOn().getSearchConfiguration(null, null)));
list.add(buildLink("facets", getMethodOn().getFacetsConfiguration(null, null, pageable)));
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/statistics/StatisticsSupportHalLinkFactory.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/statistics/StatisticsSupportHalLinkFactory.java
index 07b75dc023..d9cdce49e4 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/statistics/StatisticsSupportHalLinkFactory.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/link/statistics/StatisticsSupportHalLinkFactory.java
@@ -13,6 +13,7 @@ import org.dspace.app.rest.StatisticsRestController;
import org.dspace.app.rest.link.HalLinkFactory;
import org.dspace.app.rest.model.hateoas.StatisticsSupportResource;
import org.springframework.data.domain.Pageable;
+import org.springframework.hateoas.IanaLinkRelations;
import org.springframework.hateoas.Link;
import org.springframework.stereotype.Component;
@@ -22,7 +23,7 @@ public class StatisticsSupportHalLinkFactory
protected void addLinks(StatisticsSupportResource halResource, Pageable pageable, LinkedList list)
throws Exception {
- list.add(buildLink(Link.REL_SELF, getMethodOn().getStatisticsSupport()));
+ list.add(buildLink(IanaLinkRelations.SELF.value(), getMethodOn().getStatisticsSupport()));
list.add(buildLink("viewevents", getMethodOn().getViewEvents()));
list.add(buildLink("searchevents", getMethodOn().getSearchEvents()));
}
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/model/BaseObjectRest.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/model/BaseObjectRest.java
index 6afc04ecd1..b728e3870d 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/model/BaseObjectRest.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/model/BaseObjectRest.java
@@ -13,22 +13,20 @@ import java.util.List;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
-import org.springframework.hateoas.Identifiable;
/**
- * Base class for any REST resource that need to be addressable
+ * Base class for any REST resource that need to be addressable and identifiable (via an ID)
*
* @param the class of the resource identifier
* @author Andrea Bollini (andrea.bollini at 4science.it)
*/
-public abstract class BaseObjectRest extends RestAddressableModel implements Identifiable {
+public abstract class BaseObjectRest extends RestAddressableModel {
protected T id;
@JsonInclude(Include.NON_EMPTY)
private List errors;
- @Override
public T getId() {
return id;
}
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/model/hateoas/DSpaceRelProvider.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/model/hateoas/DSpaceLinkRelationProvider.java
similarity index 64%
rename from dspace-server-webapp/src/main/java/org/dspace/app/rest/model/hateoas/DSpaceRelProvider.java
rename to dspace-server-webapp/src/main/java/org/dspace/app/rest/model/hateoas/DSpaceLinkRelationProvider.java
index f4afdf8bc5..a1385727ef 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/model/hateoas/DSpaceRelProvider.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/model/hateoas/DSpaceLinkRelationProvider.java
@@ -9,21 +9,22 @@ package org.dspace.app.rest.model.hateoas;
import org.dspace.app.rest.model.hateoas.annotations.RelNameDSpaceResource;
import org.springframework.core.annotation.AnnotationUtils;
-import org.springframework.hateoas.core.EvoInflectorRelProvider;
+import org.springframework.hateoas.LinkRelation;
+import org.springframework.hateoas.server.core.EvoInflectorLinkRelationProvider;
/**
- * A DSpace Relation Provider that use the RelNameDSpaceResource to use the
+ * A DSpace Link Relation Provider that use the RelNameDSpaceResource annotation to use the
* right names for the embedded collection when a DSpaceResource is requested
*
* @author Andrea Bollini (andrea.bollini at 4science.it)
*/
-public class DSpaceRelProvider extends EvoInflectorRelProvider {
+public class DSpaceLinkRelationProvider extends EvoInflectorLinkRelationProvider {
@Override
- public String getItemResourceRelFor(Class> type) {
+ public LinkRelation getItemResourceRelFor(Class> type) {
RelNameDSpaceResource nameAnnotation = AnnotationUtils.findAnnotation(type, RelNameDSpaceResource.class);
if (nameAnnotation != null) {
- return nameAnnotation.value();
+ return LinkRelation.of(nameAnnotation.value());
}
return super.getItemResourceRelFor(type);
}
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/model/hateoas/HALResource.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/model/hateoas/HALResource.java
index eb10b13ac2..31e2c672e3 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/model/hateoas/HALResource.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/model/hateoas/HALResource.java
@@ -13,13 +13,13 @@ import java.util.Map;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonUnwrapped;
+import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.Link;
-import org.springframework.hateoas.Resource;
/**
* The abstract, generic class for the HalResources
*/
-public abstract class HALResource extends Resource {
+public abstract class HALResource extends EntityModel {
public HALResource(T content) {
super(content);
@@ -46,9 +46,10 @@ public abstract class HALResource extends Resource {
}
@Override
- public void add(Link link) {
+ public EntityModel add(Link link) {
if (!hasLink(link.getRel())) {
- super.add(link);
+ return super.add(link);
}
+ return this;
}
}
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/projection/EmbedRelsProjection.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/projection/EmbedRelsProjection.java
index 1db0c6a74d..d992bd2ef0 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/projection/EmbedRelsProjection.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/projection/EmbedRelsProjection.java
@@ -44,7 +44,7 @@ public class EmbedRelsProjection extends AbstractProjection {
StringBuilder fullName = new StringBuilder();
for (Link oldLink : oldLinks) {
- fullName.append(oldLink.getRel()).append("/");
+ fullName.append(oldLink.getRel().value()).append("/");
}
fullName.append(linkRest.name());
// If the full name matches, the link can be embedded (e.g. mappedItems/owningCollection on a collection page)
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/BrowseEntryLinkRepository.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/BrowseEntryLinkRepository.java
index 8c6dca2af9..93224f78cd 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/BrowseEntryLinkRepository.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/BrowseEntryLinkRepository.java
@@ -115,7 +115,7 @@ public class BrowseEntryLinkRepository extends AbstractDSpaceRestRepository
}
BrowseInfo binfo = be.browse(bs);
- Pageable pageResultInfo = new PageRequest((binfo.getStart() - 1) / binfo.getResultsPerPage(),
+ Pageable pageResultInfo = PageRequest.of((binfo.getStart() - 1) / binfo.getResultsPerPage(),
binfo.getResultsPerPage());
Page page = new PageImpl<>(Arrays.asList(binfo.getStringResults()), pageResultInfo,
binfo.getTotal()).map(browseEntryConverter);
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/BrowseItemLinkRepository.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/BrowseItemLinkRepository.java
index 4a8c171d3b..f60178fe52 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/BrowseItemLinkRepository.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/BrowseItemLinkRepository.java
@@ -143,7 +143,7 @@ public class BrowseItemLinkRepository extends AbstractDSpaceRestRepository
BrowseInfo binfo = be.browse(bs);
Pageable pageResultInfo =
- new PageRequest((binfo.getStart() - 1) / binfo.getResultsPerPage(), binfo.getResultsPerPage());
+ PageRequest.of((binfo.getStart() - 1) / binfo.getResultsPerPage(), binfo.getResultsPerPage());
List- tmpResult = new ArrayList
- ();
for (Item bb : binfo.getBrowseItemResults()) {
tmpResult.add(bb);
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/DiscoveryRestRepository.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/DiscoveryRestRepository.java
index 145dcb1818..c0d40c4f3e 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/DiscoveryRestRepository.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/DiscoveryRestRepository.java
@@ -161,7 +161,7 @@ public class DiscoveryRestRepository extends AbstractDSpaceRestRepository {
List searchFilters) {
Context context = obtainContext();
- Pageable page = new PageRequest(1, 1);
+ Pageable page = PageRequest.of(1, 1);
IndexableObject scopeObject = scopeResolver.resolveScope(context, dsoScope);
DiscoveryConfiguration discoveryConfiguration = searchConfigurationService
.getDiscoveryConfigurationByNameOrDso(configuration, scopeObject);
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/VersionsLinkRepository.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/VersionsLinkRepository.java
index ca89a29853..4b17b46c91 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/VersionsLinkRepository.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/repository/VersionsLinkRepository.java
@@ -63,7 +63,7 @@ public class VersionsLinkRepository extends AbstractDSpaceRestRepository
" couldn't be found");
}
List versions = versioningService.getVersionsByHistory(context, versionHistory);
- Pageable pageable = optionalPageable != null ? optionalPageable : new PageRequest(0, 20);
+ Pageable pageable = optionalPageable != null ? optionalPageable : PageRequest.of(0, 20);
return converter.toRestPage(utils.getPage(versions, pageable), projection);
}
}
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/utils/RestRepositoryUtils.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/utils/RestRepositoryUtils.java
index e4cc3f1faf..a6e9b5e5be 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/utils/RestRepositoryUtils.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/utils/RestRepositoryUtils.java
@@ -29,8 +29,8 @@ import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.repository.support.QueryMethodParameterConversionException;
import org.springframework.data.web.PagedResourcesAssembler;
-import org.springframework.hateoas.core.AnnotationAttribute;
-import org.springframework.hateoas.core.MethodParameters;
+import org.springframework.hateoas.server.core.AnnotationAttribute;
+import org.springframework.hateoas.server.core.MethodParameters;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/utils/Utils.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/utils/Utils.java
index f241ba3b30..15a0237d82 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/utils/Utils.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/utils/Utils.java
@@ -9,7 +9,7 @@ package org.dspace.app.rest.utils;
import static java.lang.Integer.parseInt;
import static java.util.stream.Collectors.toList;
-import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
+import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
@@ -57,7 +57,6 @@ import org.dspace.app.rest.model.ResourcePolicyRest;
import org.dspace.app.rest.model.RestAddressableModel;
import org.dspace.app.rest.model.RestModel;
import org.dspace.app.rest.model.VersionHistoryRest;
-import org.dspace.app.rest.model.hateoas.DSpaceResource;
import org.dspace.app.rest.model.hateoas.EmbeddedPage;
import org.dspace.app.rest.model.hateoas.HALResource;
import org.dspace.app.rest.projection.CompositeProjection;
@@ -159,32 +158,64 @@ public class Utils {
* @return the existing instance if it is not null, a default pageable instance otherwise.
*/
public Pageable getPageable(@Nullable Pageable optionalPageable) {
- return optionalPageable != null ? optionalPageable : new PageRequest(0, DEFAULT_PAGE_SIZE);
- }
-
- public Link linkToSingleResource(DSpaceResource r, String rel) {
- RestAddressableModel data = r.getContent();
- return linkToSingleResource(data, rel);
+ return optionalPageable != null ? optionalPageable : PageRequest.of(0, DEFAULT_PAGE_SIZE);
}
+ /**
+ * Create a HAL Link to a single resource
+ * @param data the resource itself
+ * @param rel name of the link relation to create
+ * @return created Link object
+ */
public Link linkToSingleResource(RestAddressableModel data, String rel) {
- return linkTo(data.getController(), data.getCategory(), data.getTypePlural()).slash(data)
+ // Create link using Spring HATEOAS link builder
+ return linkTo(data.getController(), data.getCategory(), data.getTypePlural()).slash(getIdentifierForLink(data))
.withRel(rel);
}
+ /**
+ * Create a HAL Link to a subresource of given resource. This method assumes the name & link to the subresource
+ * are both the same string value. See other linkToSubResource method if they are different.
+ * @param data main resource
+ * @param rel name/subpath of the subresource (assumed to be the same)
+ * @return created Link object
+ */
public Link linkToSubResource(RestAddressableModel data, String rel) {
return linkToSubResource(data, rel, rel);
}
+ /**
+ * Create a HAL Link to a subresource of given resource using given path name and link name
+ * @param data main resource
+ * @param rel name of the subresource link relation to create
+ * @param path subpath for the subresource
+ * @return created Link object
+ */
public Link linkToSubResource(RestAddressableModel data, String rel, String path) {
- return linkTo(data.getController(), data.getCategory(), data.getTypePlural()).slash(data).slash(path)
+ // Create link using Spring HATEOAS link builder
+ return linkTo(data.getController(), data.getCategory(), data.getTypePlural()).slash(getIdentifierForLink(data))
+ .slash(path)
.withRel(rel);
}
+ /**
+ * Returns an identifier for a given resource, to be used in a Link.
+ * @param data resource to identify
+ * @return identifier, which is either an ID (if exists) or string representation of the object.
+ */
+ private Serializable getIdentifierForLink(RestAddressableModel data) {
+ // If the resource is identifiable by an ID, use it. Otherwise use toString() to represent it.
+ Serializable identifier = data.toString();
+ if (data instanceof BaseObjectRest) {
+ identifier = ((BaseObjectRest) data).getId();
+ }
+ return identifier;
+ }
+
/**
* Retrieve the {@link DSpaceRestRepository} for the specified category and model in the plural form as used in the endpoints.
* If the model is available in its singular form use {@link #getResourceRepositoryByCategoryAndModel(String, String)}
- *
+ *
* @param apiCategory
* @param modelPlural
* @return
@@ -197,7 +228,7 @@ public class Utils {
/**
* Retrieve the {@link DSpaceRestRepository} for the specified category and model. The model is in the singular form
* as returned by the {@link RestAddressableModel#getType()} method
- *
+ *
* @param apiCategory
* @param modelSingular
* @return
@@ -278,7 +309,7 @@ public class Utils {
/**
* Create a temporary file from a multipart file upload
- *
+ *
* @param multipartFile
* the multipartFile representing the uploaded file. Please note that it is a complex object including
* additional information other than the binary like the orginal file name and the mimetype
@@ -312,7 +343,7 @@ public class Utils {
/**
* Return the filename part from a multipartFile upload that could eventually contains the fullpath on the client
- *
+ *
* @param multipartFile
* the file uploaded
* @return the filename part of the file on the client filesystem
@@ -771,23 +802,23 @@ public class Utils {
return new EmbeddedPage(link.getHref(), page.map((restObject) -> {
restObject.setEmbedLevel(childEmbedLevel);
return converter.toResource(restObject, newList);
- }), null, link.getRel());
+ }), null, link.getRel().value());
} else if (linkedObject instanceof List) {
// The full list has been retrieved and we need to provide the first page for embedding
List list = (List) linkedObject;
if (list.size() > 0) {
PageImpl page = new PageImpl(
list.subList(0, list.size() > DEFAULT_PAGE_SIZE ? DEFAULT_PAGE_SIZE : list.size()),
- new PageRequest(0, DEFAULT_PAGE_SIZE), list.size());
+ PageRequest.of(0, DEFAULT_PAGE_SIZE), list.size());
return new EmbeddedPage(link.getHref(),
page.map((restObject) -> {
restObject.setEmbedLevel(childEmbedLevel);
return converter.toResource(restObject, newList);
}),
- list, link.getRel());
+ list, link.getRel().value());
} else {
PageImpl page = new PageImpl(list);
- return new EmbeddedPage(link.getHref(), page, list, link.getRel());
+ return new EmbeddedPage(link.getHref(), page, list, link.getRel().value());
}
} else {
return linkedObject;
@@ -823,7 +854,7 @@ public class Utils {
/**
* Convert the input string in the primary key class according to the repository interface
- *
+ *
* @param repository
* @param pkStr
* @return
@@ -837,7 +868,7 @@ public class Utils {
* rest object is supported by a {@link DSpaceRestRepository} that also implement the
* {@link ReloadableEntityObjectRepository} interface. If this is not the case the method will throw an
* IllegalArgumentException
- *
+ *
* @param context
* the DSpace Context
* @param restObj
@@ -859,7 +890,7 @@ public class Utils {
/**
* Get the rest object associated with the specified URI
- *
+ *
* @param context the DSpace context
* @param uri the uri of a {@link BaseObjectRest}
* @return the {@link BaseObjectRest} identified by the provided uri
diff --git a/dspace-server-webapp/src/test/java/org/dspace/app/rest/converter/ConverterServiceIT.java b/dspace-server-webapp/src/test/java/org/dspace/app/rest/converter/ConverterServiceIT.java
index c0555d1e57..80e3c8be7f 100644
--- a/dspace-server-webapp/src/test/java/org/dspace/app/rest/converter/ConverterServiceIT.java
+++ b/dspace-server-webapp/src/test/java/org/dspace/app/rest/converter/ConverterServiceIT.java
@@ -34,8 +34,8 @@ import org.dspace.app.rest.test.AbstractControllerIntegrationTest;
import org.junit.Test;
import org.mockito.Mock;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.Link;
-import org.springframework.hateoas.Resource;
/**
* Tests functionality of {@link ConverterService}.
@@ -153,7 +153,7 @@ public class ConverterServiceIT extends AbstractControllerIntegrationTest {
assertHasEmbeds(resource, new String[] {
"restPropUnannotated" // embedded; unannotated properties can't be omitted by projections
}, new Class[] {
- Resource.class
+ EntityModel.class
});
assertHasLinks(resource, new String[] {
@@ -182,7 +182,8 @@ public class ConverterServiceIT extends AbstractControllerIntegrationTest {
r0.setRestPropUnannotated(restPropUnannotatedValue);
String r0json = new ObjectMapper().writeValueAsString(r0);
- when(mockLink.getRel()).thenReturn("mockLink");
+ // return "mockLink" LinkRelation when getRel() is called
+ when(mockLink.getRel()).thenReturn(() -> "mockLink");
r0.setProjection(new MockProjection(mockLink, mockEmbeddedResource));
MockObjectResource resource = converter.toResource(r0);
@@ -198,10 +199,10 @@ public class ConverterServiceIT extends AbstractControllerIntegrationTest {
"optionallyEmbeddedChildren",
"resource" // added by MockProjection
}, new Class[] {
- Resource.class,
+ EntityModel.class,
null,
- Resource.class,
- Resource.class,
+ EntityModel.class,
+ EntityModel.class,
EmbeddedPage.class,
Object.class
});
@@ -217,9 +218,9 @@ public class ConverterServiceIT extends AbstractControllerIntegrationTest {
});
}
- private void assertHasLinks(Resource resource, String[] rels) {
+ private void assertHasLinks(EntityModel resource, String[] rels) {
Map map = new HashMap<>();
- resource.getLinks().stream().forEach((link) -> map.put(link.getRel(), link));
+ resource.getLinks().stream().forEach((link) -> map.put(link.getRel().value(), link));
assertThat(new TreeSet(map.keySet()), equalTo(new TreeSet(Sets.newHashSet(rels))));
}
diff --git a/dspace-server-webapp/src/test/java/org/dspace/app/rest/link/search/FacetConfigurationResourceHalLinkFactoryTest.java b/dspace-server-webapp/src/test/java/org/dspace/app/rest/link/search/FacetConfigurationResourceHalLinkFactoryTest.java
index 504543119f..b7069470b8 100644
--- a/dspace-server-webapp/src/test/java/org/dspace/app/rest/link/search/FacetConfigurationResourceHalLinkFactoryTest.java
+++ b/dspace-server-webapp/src/test/java/org/dspace/app/rest/link/search/FacetConfigurationResourceHalLinkFactoryTest.java
@@ -16,7 +16,7 @@ import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
-import org.springframework.hateoas.mvc.ControllerLinkBuilder;
+import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder;
/**
* This class' purpose is to test the FacetConfigurationResourceHalLinkFactory
@@ -25,7 +25,7 @@ public class FacetConfigurationResourceHalLinkFactoryTest {
@Mock
- ControllerLinkBuilder controllerLinkBuilder;
+ WebMvcLinkBuilder webMvcLinkBuilder;
@Mock
HalLinkFactory halLinkFactory;
diff --git a/dspace-server-webapp/src/test/java/org/dspace/app/rest/link/search/SearchConfigurationResourceHalLinkFactoryTest.java b/dspace-server-webapp/src/test/java/org/dspace/app/rest/link/search/SearchConfigurationResourceHalLinkFactoryTest.java
index dd1b16127e..d832b8e168 100644
--- a/dspace-server-webapp/src/test/java/org/dspace/app/rest/link/search/SearchConfigurationResourceHalLinkFactoryTest.java
+++ b/dspace-server-webapp/src/test/java/org/dspace/app/rest/link/search/SearchConfigurationResourceHalLinkFactoryTest.java
@@ -16,16 +16,15 @@ import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
-import org.springframework.hateoas.mvc.ControllerLinkBuilder;
+import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder;
/**
* This class' purpose is to test the SearchConfigurationResourceHalLinkFactory
*/
public class SearchConfigurationResourceHalLinkFactoryTest {
-
@Mock
- ControllerLinkBuilder controllerLinkBuilder;
+ WebMvcLinkBuilder webMvcLinkBuilder;
@Mock
HalLinkFactory halLinkFactory;
diff --git a/dspace-server-webapp/src/test/java/org/dspace/app/rest/test/AbstractControllerIntegrationTest.java b/dspace-server-webapp/src/test/java/org/dspace/app/rest/test/AbstractControllerIntegrationTest.java
index 183fb27b8c..de9003b2fe 100644
--- a/dspace-server-webapp/src/test/java/org/dspace/app/rest/test/AbstractControllerIntegrationTest.java
+++ b/dspace-server-webapp/src/test/java/org/dspace/app/rest/test/AbstractControllerIntegrationTest.java
@@ -11,7 +11,6 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilder
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup;
-import java.nio.charset.StandardCharsets;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
@@ -58,7 +57,7 @@ import org.springframework.web.context.WebApplicationContext;
* @author Tim Donohue
* @see org.dspace.app.rest.test.AbstractWebClientIntegrationTest
*/
-// Run tests with JUnit 4 and Spring TestContext Framework
+// Run tests with JUnit and Spring TestContext Framework
@RunWith(SpringRunner.class)
// Specify main class to use to load Spring ApplicationContext
// NOTE: By default, Spring caches and reuses ApplicationContext for each integration test (to speed up tests)
@@ -81,7 +80,7 @@ public class AbstractControllerIntegrationTest extends AbstractIntegrationTestWi
public static final String BASE_REST_SERVER_URL = "http://localhost";
protected MediaType contentType = new MediaType(MediaTypes.HAL_JSON.getType(),
- MediaTypes.HAL_JSON.getSubtype(), StandardCharsets.UTF_8);
+ MediaTypes.HAL_JSON.getSubtype());
protected MediaType textUriContentType = RestMediaTypes.TEXT_URI_LIST;
@@ -121,7 +120,7 @@ public class AbstractControllerIntegrationTest extends AbstractIntegrationTestWi
if (StringUtils.isNotBlank(authToken)) {
mockMvcBuilder.defaultRequest(
- get("").header(AUTHORIZATION_HEADER, AUTHORIZATION_TYPE + authToken));
+ get("/").header(AUTHORIZATION_HEADER, AUTHORIZATION_TYPE + authToken));
}
return mockMvcBuilder
diff --git a/dspace-server-webapp/src/test/java/org/dspace/app/rest/utils/DiscoverQueryBuilderTest.java b/dspace-server-webapp/src/test/java/org/dspace/app/rest/utils/DiscoverQueryBuilderTest.java
index ba503b053f..195cc31027 100644
--- a/dspace-server-webapp/src/test/java/org/dspace/app/rest/utils/DiscoverQueryBuilderTest.java
+++ b/dspace-server-webapp/src/test/java/org/dspace/app/rest/utils/DiscoverQueryBuilderTest.java
@@ -168,7 +168,7 @@ public class DiscoverQueryBuilderTest {
query = "my test case";
searchFilter = new SearchFilter("subject", "equals", "Java");
- page = new PageRequest(1, 10, Sort.Direction.ASC, "dc.title");
+ page = PageRequest.of(1, 10, Sort.Direction.ASC, "dc.title");
queryBuilder.afterPropertiesSet();
}
@@ -230,7 +230,7 @@ public class DiscoverQueryBuilderTest {
@Test
public void testSortByScore() throws Exception {
- page = new PageRequest(2, 10, Sort.Direction.ASC, "SCORE");
+ page = PageRequest.of(2, 10, Sort.Direction.ASC, "SCORE");
DiscoverQuery discoverQuery =
queryBuilder.buildQuery(context, null, discoveryConfiguration, null, null, null, page);
@@ -346,4 +346,4 @@ public class DiscoverQueryBuilderTest {
}
};
}
-}
\ No newline at end of file
+}
diff --git a/dspace/modules/server/pom.xml b/dspace/modules/server/pom.xml
index f59e4d55ce..06d466f522 100644
--- a/dspace/modules/server/pom.xml
+++ b/dspace/modules/server/pom.xml
@@ -234,39 +234,16 @@ just adding new jar in the classloader
war
-
- org.springframework.boot
- spring-boot-starter-tomcat
- provided
- ${spring-boot.version}
-
-
- org.springframework
- spring-test
- test
-
+
org.springframework.boot
spring-boot-starter-test
-
-
-
- org.json
- json
-
-
-
- com.jayway.jsonpath
- json-path
-
-
test
com.jayway.jsonpath
json-path-assert
+ ${json-path.version}
test
@@ -279,10 +256,69 @@ just adding new jar in the classloader
h2
test
+
+ org.mockito
+ mockito-core
+ test
+
org.apache.solr
solr-cell
test
+
+
+ org.eclipse.jetty
+ jetty-continuation
+
+
+ org.eclipse.jetty
+ jetty-deploy
+
+
+ org.eclipse.jetty
+ jetty-http
+
+
+ org.eclipse.jetty
+ jetty-io
+
+
+ org.eclipse.jetty
+ jetty-jmx
+
+
+ org.eclipse.jetty
+ jetty-rewrite
+
+
+ org.eclipse.jetty
+ jetty-security
+
+
+ org.eclipse.jetty
+ jetty-server
+
+
+ org.eclipse.jetty
+ jetty-servlet
+
+
+ org.eclipse.jetty
+ jetty-servlets
+
+
+ org.eclipse.jetty
+ jetty-util
+
+
+ org.eclipse.jetty
+ jetty-webapp
+
+
+ org.eclipse.jetty
+ jetty-xml
+
+
diff --git a/pom.xml b/pom.xml
index cd5d0d4e46..3c50f65136 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,34 +17,50 @@
- UTF-8
- ${project.build.sourceEncoding}
+
11
- 2.0.15
- 3.17
- 42.2.9
-
- 2.13.0
- 2.3.1
- 2.3.1
- 1.3.2
- 1.2.22
- 2.3.4
- 2.11.2
- 1.7.25
-
- 2.10.2
- 2.28
+ 5.2.5.RELEASE
+ 2.2.6.RELEASE
5.4.10.Final
- 6.0.17.Final
+ 6.0.18.Final
+ 42.2.9
7.3.1
- 5.1.9.RELEASE
- 2.1.8.RELEASE
-
+
+ 1.2.22
+ 2.3.4
+
+ 2.10.2
+ 1.3.2
+ 2.3.1
+ 2.3.1
+
+ 9.4.8.v20171121
+ 2.11.2
+ 2.0.15
+ 3.17
+ 1.7.25
+
+
+
+ 3.2.6.RELEASE
+
2.4.0
+
+ 7.9
+
+
+
+ 2.13.0
+
+ 2.30.1
+
+
+ UTF-8
+ ${project.build.sourceEncoding}
${basedir}
@@ -1064,7 +1080,7 @@
org.ow2.asm
asm
- 5.1
+ 7.1
@@ -1168,21 +1184,22 @@
org.springframework.boot
spring-boot-starter-test
${spring-boot.version}
+ test
-
+
- org.json
- json
+ org.junit.jupiter
+ junit-jupiter
-
- com.jayway.jsonpath
- json-path
+ org.junit.vintage
+ junit-vintage-engine
+
+
+ org.mockito
+ mockito-junit-jupiter
- test
@@ -1199,19 +1216,6 @@
test
-
- com.jayway.jsonpath
- json-path-assert
- ${json-path.version}
- test
-
-
- com.jayway.jsonpath
- json-path
- ${json-path.version}
- test
-
-
org.apache.ant
ant
@@ -1234,16 +1238,11 @@
handle
9.1.0.v20190416
+
- org.eclipse.jetty.aggregate
- jetty-all
- 8.1.22.v20160922
-
-
- javax.servlet
- org.eclipse.jetty.orbit
-
-
+ org.eclipse.jetty
+ jetty-server
+ ${jetty.version}
org.dspace
@@ -1576,7 +1575,7 @@
org.mockito
mockito-core
- 2.28.2
+ 3.1.0
test