From 42c38a630f0d3ef3ad3575a9f400f79692c22d58 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=20K=C3=A4sler?= <tom.kaesler@mni.thm.de>
Date: Mon, 13 Aug 2018 11:41:52 +0200
Subject: [PATCH] put content without group in a no-name contentgroup when
 querying a room

---
 .../thm/arsnova/service/RoomServiceImpl.java  | 32 +++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/src/main/java/de/thm/arsnova/service/RoomServiceImpl.java b/src/main/java/de/thm/arsnova/service/RoomServiceImpl.java
index 5546c98c6..6df577940 100644
--- a/src/main/java/de/thm/arsnova/service/RoomServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/RoomServiceImpl.java
@@ -59,6 +59,9 @@ import java.util.Comparator;
 import java.util.List;
 import java.util.UUID;
 import java.util.stream.Collectors;
+import java.util.Map;
+import java.util.Set;
+import java.util.HashSet;
 
 /**
  * Performs all room related operations.
@@ -165,6 +168,35 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
 		}
 	}
 
+	/**
+	 * Fetches the room.
+	 * Adds content from this room that is in no content group to a no-name group.
+	 * @param id room id to fetch
+	 * @return Room with no-name content group
+	 */
+	@Override
+	public Room get(final String id) {
+		Room r = super.get(id);
+		// creates a set from all room content groups
+		Set<String> cIdsWithGroup = r.getContentGroups().values().stream()
+				.map(Room.ContentGroup::getContentIds)
+				.flatMap(ids -> ids.stream())
+				.collect(Collectors.toSet());
+
+		Set<String> cIds = new HashSet<String>(contentRepository.findIdsByRoomId(id));
+		cIds.removeAll(cIdsWithGroup);
+
+		if (!cIds.isEmpty()) {
+			Map<String, Room.ContentGroup> cgs = r.getContentGroups();
+			Room.ContentGroup defaultGroup = new Room.ContentGroup();
+			defaultGroup.setContentIds(cIds);
+			defaultGroup.setAutoSort(true);
+			cgs.put("", defaultGroup);
+		}
+
+		return r;
+	}
+
 	@Override
 	public Room join(final String id, final UUID socketId) {
 		Room room = null != id ? roomRepository.findOne(id) : null;
-- 
GitLab