From 014271d7dbb749855cb960f96aa0b5b448456c7a Mon Sep 17 00:00:00 2001 From: Jon Brisbin Date: Fri, 20 Jul 2012 16:42:53 -0500 Subject: [PATCH] Make parameter names for sorting and paging and what repositories to export configurable. --- .../rest/repository/RepositoryExporter.java | 2 +- .../data/rest/webmvc/PagingAndSorting.java | 14 ++-- ...agingAndSortingMethodArgumentResolver.java | 44 +++---------- .../webmvc/RepositoryRestConfiguration.java | 66 +++++++++++++++++++ 4 files changed, 81 insertions(+), 45 deletions(-) create mode 100644 spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryRestConfiguration.java diff --git a/spring-data-rest-repository/src/main/java/org/springframework/data/rest/repository/RepositoryExporter.java b/spring-data-rest-repository/src/main/java/org/springframework/data/rest/repository/RepositoryExporter.java index 6bb74b3fb..90266b13f 100644 --- a/spring-data-rest-repository/src/main/java/org/springframework/data/rest/repository/RepositoryExporter.java +++ b/spring-data-rest-repository/src/main/java/org/springframework/data/rest/repository/RepositoryExporter.java @@ -123,7 +123,7 @@ public abstract class RepositoryExporter, E exte repositories = new Repositories(applicationContext); repositoryMetadata = new HashMap(); for (Class domainType : repositories) { - if (exportOnlyTheseClasses.isEmpty() || !exportOnlyTheseClasses.contains(domainType.getName())) { + if (exportOnlyTheseClasses.isEmpty() || exportOnlyTheseClasses.contains(domainType.getName())) { Class repoClass = repositories.getRepositoryInformationFor(domainType).getRepositoryInterface(); String name = StringUtils.uncapitalize(repoClass.getSimpleName().replaceAll("Repository", "")); RestResource resourceAnno = repoClass.getAnnotation(RestResource.class); diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/PagingAndSorting.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/PagingAndSorting.java index 690064bcd..b69cc4117 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/PagingAndSorting.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/PagingAndSorting.java @@ -14,18 +14,12 @@ import org.springframework.web.util.UriComponentsBuilder; */ public class PagingAndSorting implements Pageable { - final String pageParameter; - final String limitParameter; - final String orderParameter; + private final RepositoryRestConfiguration config; private final PageRequest pageRequest; - public PagingAndSorting(String pageParameter, - String limitParameter, - String orderParameter, + public PagingAndSorting(RepositoryRestConfiguration config, PageRequest pageRequest) { - this.pageParameter = pageParameter; - this.limitParameter = limitParameter; - this.orderParameter = orderParameter; + this.config = config; this.pageRequest = pageRequest; } @@ -35,7 +29,7 @@ public class PagingAndSorting implements Pageable { Iterator iter = sort.iterator(); while (iter.hasNext()) { Sort.Order order = iter.next(); - urib.queryParam(orderParameter, order.getProperty()); + urib.queryParam(config.getSortParamName(), order.getProperty()); try { urib.queryParam(URLEncoder.encode(order.getProperty() + ".dir", "ISO-8859-1"), order.getDirection().toString().toLowerCase()); diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/PagingAndSortingMethodArgumentResolver.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/PagingAndSortingMethodArgumentResolver.java index 6485a9f5d..e1163cd8c 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/PagingAndSortingMethodArgumentResolver.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/PagingAndSortingMethodArgumentResolver.java @@ -22,37 +22,13 @@ import org.springframework.web.method.support.ModelAndViewContainer; public class PagingAndSortingMethodArgumentResolver implements HandlerMethodArgumentResolver { private static final int DEFAULT_PAGE = 1; // We're 1-based, not 0-based - private static final int DEFAULT_LIMIT = 20; - private String pageParameter = "page"; - private String limitParameter = "limit"; - private String sortParameter = "sort"; + private RepositoryRestConfiguration config = RepositoryRestConfiguration.DEFAULT; - public String getPageParameter() { - return pageParameter; - } - - public PagingAndSortingMethodArgumentResolver setPageParameter(String pageParameter) { - this.pageParameter = pageParameter; - return this; - } - - public String getLimitParameter() { - return limitParameter; - } - - public PagingAndSortingMethodArgumentResolver setLimitParameter(String limitParameter) { - this.limitParameter = limitParameter; - return this; - } - - public String getSortParameter() { - return sortParameter; - } - - public PagingAndSortingMethodArgumentResolver setSortParameter(String sortParameter) { - this.sortParameter = sortParameter; - return this; + public PagingAndSortingMethodArgumentResolver(RepositoryRestConfiguration config) { + if (null != config) { + this.config = config; + } } @Override public boolean supportsParameter(MethodParameter parameter) { @@ -76,14 +52,14 @@ public class PagingAndSortingMethodArgumentResolver implements HandlerMethodArgu } if (null == pr) { int page = DEFAULT_PAGE; - String sPage = request.getParameter(pageParameter); + String sPage = request.getParameter(config.getPageParamName()); if (StringUtils.hasText(sPage)) { try { page = Integer.parseInt(sPage); } catch (NumberFormatException ignored) {} } - int limit = DEFAULT_LIMIT; - String sLimit = request.getParameter(limitParameter); + int limit = config.getDefaultPageSize(); + String sLimit = request.getParameter(config.getLimitParamName()); if (StringUtils.hasText(sLimit)) { try { limit = Integer.parseInt(sLimit); @@ -92,7 +68,7 @@ public class PagingAndSortingMethodArgumentResolver implements HandlerMethodArgu Sort sort = null; List orders = new ArrayList(); - String[] orderValues = request.getParameterValues(sortParameter); + String[] orderValues = request.getParameterValues(config.getSortParamName()); if (null != orderValues) { for (String orderParam : orderValues) { String sortDir = request.getParameter(orderParam + ".dir"); @@ -111,7 +87,7 @@ public class PagingAndSortingMethodArgumentResolver implements HandlerMethodArgu } } - return new PagingAndSorting(pageParameter, limitParameter, sortParameter, pr); + return new PagingAndSorting(config, pr); } } diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryRestConfiguration.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryRestConfiguration.java new file mode 100644 index 000000000..24c85e139 --- /dev/null +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/RepositoryRestConfiguration.java @@ -0,0 +1,66 @@ +package org.springframework.data.rest.webmvc; + +import java.util.Collections; +import java.util.List; + +import org.springframework.http.converter.HttpMessageConverter; + +/** + * @author Jon Brisbin + */ +public class RepositoryRestConfiguration { + + public static final RepositoryRestConfiguration DEFAULT = new RepositoryRestConfiguration(); + + private int defaultPageSize = 20; + private String pageParamName = "page"; + private String limitParamName = "limit"; + private String sortParamName = "sort"; + private List> customConverters = Collections.emptyList(); + + public int getDefaultPageSize() { + return defaultPageSize; + } + + public RepositoryRestConfiguration setDefaultPageSize( int defaultPageSize ) { + this.defaultPageSize = defaultPageSize; + return this; + } + + public String getPageParamName() { + return pageParamName; + } + + public RepositoryRestConfiguration setPageParamName( String pageParamName ) { + this.pageParamName = pageParamName; + return this; + } + + public String getLimitParamName() { + return limitParamName; + } + + public RepositoryRestConfiguration setLimitParamName( String limitParamName ) { + this.limitParamName = limitParamName; + return this; + } + + public String getSortParamName() { + return sortParamName; + } + + public RepositoryRestConfiguration setSortParamName( String sortParamName ) { + this.sortParamName = sortParamName; + return this; + } + + public List> getCustomConverters() { + return customConverters; + } + + public RepositoryRestConfiguration setCustomConverters( List> customConverters ) { + this.customConverters = customConverters; + return this; + } + +}