diff --git a/src/main/java/de/thm/arsnova/service/ContentFindQueryService.java b/src/main/java/de/thm/arsnova/service/ContentFindQueryService.java index ad668a81f3f7903fe2724dc8e66abfcaaf81f235..c1df6a20ebf2b699ec266c06b4de4b64cf3462ee 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) {