mirror of
https://github.com/scm-manager/scm-manager.git
synced 2026-02-03 05:09:10 +01:00
Introduce filter parameter in Manager
This commit is contained in:
@@ -35,6 +35,7 @@ package sonia.scm;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Comparator;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
/**
|
||||
* Base interface for all manager classes.
|
||||
@@ -82,11 +83,12 @@ public interface Manager<T extends ModelObject>
|
||||
* Returns all object of the store sorted by the given {@link java.util.Comparator}
|
||||
*
|
||||
*
|
||||
* @param filter to filter the returned objects
|
||||
* @param comparator to sort the returned objects
|
||||
* @since 1.4
|
||||
* @return all object of the store sorted by the given {@link java.util.Comparator}
|
||||
*/
|
||||
Collection<T> getAll(Comparator<T> comparator);
|
||||
Collection<T> getAll(Predicate<T> filter, Comparator<T> comparator);
|
||||
|
||||
/**
|
||||
* Returns objects from the store which are starts at the given start
|
||||
@@ -125,6 +127,7 @@ public interface Manager<T extends ModelObject>
|
||||
* <p>This default implementation reads all items, first, so you might want to adapt this
|
||||
* whenever reading is expensive!</p>
|
||||
*
|
||||
* @param filter to filter returned objects
|
||||
* @param comparator to sort the returned objects
|
||||
* @param pageNumber the number of the page to be returned (zero based)
|
||||
* @param pageSize the size of the pages
|
||||
@@ -134,8 +137,8 @@ public interface Manager<T extends ModelObject>
|
||||
* page. If the requested page number exceeds the existing pages, an
|
||||
* empty page result is returned.
|
||||
*/
|
||||
default PageResult<T> getPage(Comparator<T> comparator, int pageNumber, int pageSize) {
|
||||
return PageResult.createPage(getAll(comparator), pageNumber, pageSize);
|
||||
default PageResult<T> getPage(Predicate<T> filter, Comparator<T> comparator, int pageNumber, int pageSize) {
|
||||
return PageResult.createPage(getAll(filter, comparator), pageNumber, pageSize);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -37,6 +37,7 @@ package sonia.scm;
|
||||
import java.io.IOException;
|
||||
import java.util.Collection;
|
||||
import java.util.Comparator;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
/**
|
||||
* Basic decorator for manager classes.
|
||||
@@ -104,9 +105,9 @@ public class ManagerDecorator<T extends ModelObject> implements Manager<T> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<T> getAll(Comparator<T> comparator)
|
||||
public Collection<T> getAll(Predicate<T> filter, Comparator<T> comparator)
|
||||
{
|
||||
return decorated.getAll(comparator);
|
||||
return decorated.getAll(filter, comparator);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -5,6 +5,7 @@ import org.mockito.Mock;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Comparator;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
import static java.util.stream.Collectors.toList;
|
||||
@@ -18,21 +19,22 @@ public class ManagerTest {
|
||||
|
||||
@Mock
|
||||
private Comparator comparator;
|
||||
private Predicate predicate = x -> true;
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void validatesPageNumber() {
|
||||
manager.getPage(comparator, -1, 5);
|
||||
manager.getPage(predicate, comparator, -1, 5);
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void validatesPageSize() {
|
||||
manager.getPage(comparator, 2, 0);
|
||||
manager.getPage(predicate, comparator, 2, 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getsNoPage() {
|
||||
givenItemCount = 0;
|
||||
PageResult singlePage = manager.getPage(comparator, 0, 5);
|
||||
PageResult singlePage = manager.getPage(predicate, comparator, 0, 5);
|
||||
assertEquals(0, singlePage.getEntities().size());
|
||||
assertEquals(givenItemCount, singlePage.getOverallCount());
|
||||
}
|
||||
@@ -40,7 +42,7 @@ public class ManagerTest {
|
||||
@Test
|
||||
public void getsSinglePageWithoutEnoughItems() {
|
||||
givenItemCount = 3;
|
||||
PageResult singlePage = manager.getPage(comparator, 0, 4);
|
||||
PageResult singlePage = manager.getPage(predicate, comparator, 0, 4);
|
||||
assertEquals(3, singlePage.getEntities().size() );
|
||||
assertEquals(givenItemCount, singlePage.getOverallCount());
|
||||
}
|
||||
@@ -48,7 +50,7 @@ public class ManagerTest {
|
||||
@Test
|
||||
public void getsSinglePageWithExactCountOfItems() {
|
||||
givenItemCount = 3;
|
||||
PageResult singlePage = manager.getPage(comparator, 0, 3);
|
||||
PageResult singlePage = manager.getPage(predicate, comparator, 0, 3);
|
||||
assertEquals(3, singlePage.getEntities().size() );
|
||||
assertEquals(givenItemCount, singlePage.getOverallCount());
|
||||
}
|
||||
@@ -56,11 +58,11 @@ public class ManagerTest {
|
||||
@Test
|
||||
public void getsTwoPages() {
|
||||
givenItemCount = 3;
|
||||
PageResult page1 = manager.getPage(comparator, 0, 2);
|
||||
PageResult page1 = manager.getPage(predicate, comparator, 0, 2);
|
||||
assertEquals(2, page1.getEntities().size());
|
||||
assertEquals(givenItemCount, page1.getOverallCount());
|
||||
|
||||
PageResult page2 = manager.getPage(comparator, 1, 2);
|
||||
PageResult page2 = manager.getPage(predicate, comparator, 1, 2);
|
||||
assertEquals(1, page2.getEntities().size());
|
||||
assertEquals(givenItemCount, page2.getOverallCount());
|
||||
}
|
||||
@@ -79,7 +81,7 @@ public class ManagerTest {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection getAll(Comparator comparator) { return getAll(); }
|
||||
public Collection getAll(Predicate filter, Comparator comparator) { return getAll(); }
|
||||
|
||||
@Override
|
||||
public Collection getAll(int start, int limit) { return null; }
|
||||
|
||||
@@ -12,6 +12,7 @@ import javax.ws.rs.core.Response;
|
||||
import java.net.URI;
|
||||
import java.util.Comparator;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import static javax.ws.rs.core.Response.Status.BAD_REQUEST;
|
||||
@@ -42,12 +43,12 @@ class CollectionResourceManagerAdapter<MODEL_OBJECT extends ModelObject,
|
||||
* Reads all model objects in a paged way, maps them using the given function and returns a corresponding http response.
|
||||
* This handles all corner cases, eg. missing privileges.
|
||||
*/
|
||||
public Response getAll(int page, int pageSize, String sortBy, boolean desc, Function<PageResult<MODEL_OBJECT>, CollectionDto> mapToDto) {
|
||||
PageResult<MODEL_OBJECT> pageResult = fetchPage(sortBy, desc, page, pageSize);
|
||||
public Response getAll(int page, int pageSize, Predicate<MODEL_OBJECT> filter, String sortBy, boolean desc, Function<PageResult<MODEL_OBJECT>, CollectionDto> mapToDto) {
|
||||
PageResult<MODEL_OBJECT> pageResult = fetchPage(filter, sortBy, desc, page, pageSize);
|
||||
return Response.ok(mapToDto.apply(pageResult)).build();
|
||||
}
|
||||
|
||||
private PageResult<MODEL_OBJECT> fetchPage(String sortBy, boolean desc, int pageNumber,
|
||||
private PageResult<MODEL_OBJECT> fetchPage(Predicate<MODEL_OBJECT> filter, String sortBy, boolean desc, int pageNumber,
|
||||
int pageSize) {
|
||||
AssertUtil.assertPositive(pageNumber);
|
||||
AssertUtil.assertPositive(pageSize);
|
||||
@@ -57,7 +58,7 @@ class CollectionResourceManagerAdapter<MODEL_OBJECT extends ModelObject,
|
||||
sortBy = "id";
|
||||
}
|
||||
|
||||
return manager.getPage(createComparator(sortBy, desc), pageNumber, pageSize);
|
||||
return manager.getPage(filter, createComparator(sortBy, desc), pageNumber, pageSize);
|
||||
}
|
||||
|
||||
private Comparator<MODEL_OBJECT> createComparator(String sortBy, boolean desc) {
|
||||
|
||||
@@ -45,8 +45,8 @@ class IdResourceManagerAdapter<MODEL_OBJECT extends ModelObject,
|
||||
);
|
||||
}
|
||||
|
||||
public Response getAll(int page, int pageSize, String sortBy, boolean desc, Function<PageResult<MODEL_OBJECT>, CollectionDto> mapToDto) {
|
||||
return collectionAdapter.getAll(page, pageSize, sortBy, desc, mapToDto);
|
||||
public Response getAll(int page, int pageSize, Predicate<MODEL_OBJECT> filter, String sortBy, boolean desc, Function<PageResult<MODEL_OBJECT>, CollectionDto> mapToDto) {
|
||||
return collectionAdapter.getAll(page, pageSize, filter, sortBy, desc, mapToDto);
|
||||
}
|
||||
|
||||
public Response create(DTO dto, Supplier<MODEL_OBJECT> modelObjectSupplier, Function<MODEL_OBJECT, String> uriCreator) {
|
||||
|
||||
@@ -59,6 +59,7 @@ import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
//~--- JDK imports ------------------------------------------------------------
|
||||
|
||||
@@ -250,7 +251,7 @@ public class DefaultGroupManager extends AbstractGroupManager
|
||||
@Override
|
||||
public Collection<Group> getAll()
|
||||
{
|
||||
return getAll(null);
|
||||
return getAll(group -> true, null);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -262,14 +263,14 @@ public class DefaultGroupManager extends AbstractGroupManager
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Collection<Group> getAll(Comparator<Group> comparator)
|
||||
public Collection<Group> getAll(Predicate<Group> filter, Comparator<Group> comparator)
|
||||
{
|
||||
List<Group> groups = new ArrayList<>();
|
||||
|
||||
PermissionActionCheck<Group> check = GroupPermissions.read();
|
||||
for (Group group : groupDAO.getAll())
|
||||
{
|
||||
if (check.isPermitted(group)) {
|
||||
if (filter.test(group) && check.isPermitted(group)) {
|
||||
groups.add(group.clone());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,6 +64,7 @@ import java.util.Set;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import static sonia.scm.AlreadyExistsException.alreadyExists;
|
||||
import static sonia.scm.ContextEntry.ContextBuilder.entity;
|
||||
@@ -253,13 +254,14 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Repository> getAll(Comparator<Repository> comparator) {
|
||||
public Collection<Repository> getAll(Predicate<Repository> filter, Comparator<Repository> comparator) {
|
||||
List<Repository> repositories = Lists.newArrayList();
|
||||
|
||||
PermissionActionCheck<Repository> check = RepositoryPermissions.read();
|
||||
|
||||
for (Repository repository : repositoryDAO.getAll()) {
|
||||
if (handlerMap.containsKey(repository.getType())
|
||||
&& filter.test(repository)
|
||||
&& check.isPermitted(repository)) {
|
||||
Repository r = repository.clone();
|
||||
|
||||
@@ -276,7 +278,7 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager {
|
||||
|
||||
@Override
|
||||
public Collection<Repository> getAll() {
|
||||
return getAll(null);
|
||||
return getAll(repository -> true, null);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -62,6 +62,7 @@ import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -280,7 +281,7 @@ public class DefaultUserManager extends AbstractUserManager
|
||||
@Override
|
||||
public Collection<User> getAll()
|
||||
{
|
||||
return getAll(null);
|
||||
return getAll(user -> true, null);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -292,13 +293,13 @@ public class DefaultUserManager extends AbstractUserManager
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Collection<User> getAll(Comparator<User> comparator)
|
||||
public Collection<User> getAll(Predicate<User> filter, Comparator<User> comparator)
|
||||
{
|
||||
List<User> users = new ArrayList<>();
|
||||
|
||||
PermissionActionCheck<User> check = UserPermissions.read();
|
||||
for (User user : userDAO.getAll()) {
|
||||
if (check.isPermitted(user)) {
|
||||
if (filter.test(user) && check.isPermitted(user)) {
|
||||
users.add(user.clone());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user