From dfd7b01335646a5f86413bebd5e8eb1f16b2e53e Mon Sep 17 00:00:00 2001 From: Daniel Gerhardt <code@dgerhardt.net> Date: Fri, 16 Aug 2019 17:13:40 +0200 Subject: [PATCH] Add external filter 'notInContentGroupOfRoomId' for contents The `ContentFindQueryService` now supports filtering contents of a room that are not part of any content group. --- .../arsnova/service/ContentFindQueryService.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/thm/arsnova/service/ContentFindQueryService.java b/src/main/java/de/thm/arsnova/service/ContentFindQueryService.java index ad668a81f..c1df6a20e 100644 --- a/src/main/java/de/thm/arsnova/service/ContentFindQueryService.java +++ b/src/main/java/de/thm/arsnova/service/ContentFindQueryService.java @@ -21,6 +21,7 @@ package de.thm.arsnova.service; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; import org.springframework.stereotype.Service; import de.thm.arsnova.model.Content; @@ -30,15 +31,28 @@ import de.thm.arsnova.model.FindQuery; public class ContentFindQueryService implements FindQueryService<Content> { private RoomService roomService; private ContentService contentService; + private ContentGroupService contentGroupService; - public ContentFindQueryService(final RoomService roomService, final ContentService contentService) { + public ContentFindQueryService(final RoomService roomService, final ContentService contentService, + final ContentGroupService contentGroupService) { this.roomService = roomService; this.contentService = contentService; + this.contentGroupService = contentGroupService; } @Override public Set<String> resolveQuery(final FindQuery<Content> findQuery) { final Set<String> contentIds = new HashSet<>(); + + if (findQuery.getExternalFilters().get("notInContentGroupOfRoomId") instanceof String) { + final String roomId = (String) findQuery.getExternalFilters().get("notInContentGroupOfRoomId"); + final Set<String> idsWithGroup = contentGroupService.getByRoomId(roomId).stream() + .flatMap(cg -> cg.getContentIds().stream()).collect(Collectors.toSet()); + final Set<String> idsWithoutGroup = contentService.getByRoomId(roomId).stream() + .map(Content::getId).filter(id -> !idsWithGroup.contains(id)).collect(Collectors.toSet()); + contentIds.addAll(idsWithoutGroup); + } + if (findQuery.getProperties().getRoomId() != null) { final List<Content> contentList = contentService.getByRoomId(findQuery.getProperties().getRoomId()); for (final Content c : contentList) { -- GitLab