Introduce filter parameter in Manager

This commit is contained in:
René Pfeuffer
2019-04-09 13:09:16 +02:00
parent f5933cb6d5
commit fbd6f4f3c7
8 changed files with 38 additions and 27 deletions

View File

@@ -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) {

View File

@@ -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) {

View File

@@ -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());
}
}

View File

@@ -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);
}

View File

@@ -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());
}
}