From 9fec3d3fdc43a510e11cba4be1cc1382a99b4726 Mon Sep 17 00:00:00 2001
From: Cedric <c.s.willekens@student.tudelft.nl>
Date: Sat, 20 Oct 2018 20:47:55 +0200
Subject: [PATCH] Create page where mentor groups can be seen

---
 .../nl/tudelft/ewi/queue/DatabaseLoader.java  | 41 +++++++++--------
 .../queue/controller/CourseController.java    | 45 ++++++++++---------
 .../FirstYearStudentRepository.java           |  3 ++
 .../templates/course/view/mentor-group.html   | 26 +++++++----
 4 files changed, 66 insertions(+), 49 deletions(-)

diff --git a/src/main/java/nl/tudelft/ewi/queue/DatabaseLoader.java b/src/main/java/nl/tudelft/ewi/queue/DatabaseLoader.java
index ba4f68446..78519c7c3 100644
--- a/src/main/java/nl/tudelft/ewi/queue/DatabaseLoader.java
+++ b/src/main/java/nl/tudelft/ewi/queue/DatabaseLoader.java
@@ -1,26 +1,7 @@
 package nl.tudelft.ewi.queue;
 
-import nl.tudelft.ewi.queue.model.Assignment;
-import nl.tudelft.ewi.queue.model.Assistant;
-import nl.tudelft.ewi.queue.model.Course;
-import nl.tudelft.ewi.queue.model.DefaultRole;
-import nl.tudelft.ewi.queue.model.Direction;
-import nl.tudelft.ewi.queue.model.Lab;
-import nl.tudelft.ewi.queue.model.LabSlot;
-import nl.tudelft.ewi.queue.model.Manager;
-import nl.tudelft.ewi.queue.model.Request;
-import nl.tudelft.ewi.queue.model.RequestType;
-import nl.tudelft.ewi.queue.model.Room;
-import nl.tudelft.ewi.queue.model.Student;
-import nl.tudelft.ewi.queue.model.Teacher;
-import nl.tudelft.ewi.queue.model.User;
-import nl.tudelft.ewi.queue.repository.AssignmentRepository;
-import nl.tudelft.ewi.queue.repository.CourseRepository;
-import nl.tudelft.ewi.queue.repository.LabRepository;
-import nl.tudelft.ewi.queue.repository.RequestRepository;
-import nl.tudelft.ewi.queue.repository.RequestTypeRepository;
-import nl.tudelft.ewi.queue.repository.RoomRepository;
-import nl.tudelft.ewi.queue.repository.UserRepository;
+import nl.tudelft.ewi.queue.model.*;
+import nl.tudelft.ewi.queue.repository.*;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -55,6 +36,11 @@ public class DatabaseLoader {
     @Autowired
     private RoomRepository roomRepository;
 
+    @Autowired
+    private FirstYearMentorGroupRepository firstYearMentorGroupRepository;
+
+    @Autowired FirstYearStudentRepository firstYearStudentRepository;
+
     private static final Logger logger = LoggerFactory.getLogger(DatabaseLoader.class);
 
     @Autowired
@@ -172,6 +158,19 @@ public class DatabaseLoader {
             userRepository.save(student4);
         }
 
+        FirstYearMentorGroup mentorGroup = new FirstYearMentorGroup();
+        mentorGroup.setName("a1");
+        firstYearMentorGroupRepository.save(mentorGroup);
+        FirstYearMentorGroup mentorGroup1 = new FirstYearMentorGroup();
+        mentorGroup1.setName("a2");
+        firstYearMentorGroupRepository.save(mentorGroup1);
+
+        FirstYearStudent firstYearStudent = new FirstYearStudent(students.get(0), mentorGroup);
+        firstYearStudentRepository.save(firstYearStudent);
+        FirstYearStudent firstYearStudent1 = new FirstYearStudent(students.get(1), mentorGroup1);
+        firstYearStudentRepository.save(firstYearStudent1);
+
+
         assistant1.addRole(new Assistant(assistant1, course1));
         assistant2.addRole(new Assistant(assistant2, course1));
 		assistant3.addRole(new Assistant(assistant3, course1));
diff --git a/src/main/java/nl/tudelft/ewi/queue/controller/CourseController.java b/src/main/java/nl/tudelft/ewi/queue/controller/CourseController.java
index 617814782..9ebbff663 100644
--- a/src/main/java/nl/tudelft/ewi/queue/controller/CourseController.java
+++ b/src/main/java/nl/tudelft/ewi/queue/controller/CourseController.java
@@ -4,23 +4,8 @@ import com.querydsl.core.types.dsl.BooleanExpression;
 import nl.tudelft.ewi.queue.annotation.AuthenticatedUser;
 import nl.tudelft.ewi.queue.forms.AssignmentListWrapperForm;
 import nl.tudelft.ewi.queue.forms.ParticipantForm;
-import nl.tudelft.ewi.queue.model.Assignment;
-import nl.tudelft.ewi.queue.model.Assistant;
-import nl.tudelft.ewi.queue.model.Course;
-import nl.tudelft.ewi.queue.model.Group;
-import nl.tudelft.ewi.queue.model.Lab;
-import nl.tudelft.ewi.queue.model.Manager;
-import nl.tudelft.ewi.queue.model.QCourse;
-import nl.tudelft.ewi.queue.model.Request;
-import nl.tudelft.ewi.queue.model.Role;
-import nl.tudelft.ewi.queue.model.Student;
-import nl.tudelft.ewi.queue.model.Teacher;
-import nl.tudelft.ewi.queue.model.User;
-import nl.tudelft.ewi.queue.repository.AssignmentRepository;
-import nl.tudelft.ewi.queue.repository.CourseRepository;
-import nl.tudelft.ewi.queue.repository.FirstYearStudentRepository;
-import nl.tudelft.ewi.queue.repository.RoleRepository;
-import nl.tudelft.ewi.queue.repository.UserRepository;
+import nl.tudelft.ewi.queue.model.*;
+import nl.tudelft.ewi.queue.repository.*;
 import nl.tudelft.ewi.queue.service.CourseService;
 import nl.tudelft.ewi.queue.service.GroupService;
 import nl.tudelft.ewi.queue.service.LabService;
@@ -38,6 +23,7 @@ import org.springframework.data.web.PageableDefault;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
+import org.springframework.util.MultiValueMap;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.WebDataBinder;
 import org.springframework.web.bind.annotation.InitBinder;
@@ -48,6 +34,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+import sun.rmi.runtime.Log;
 
 import javax.persistence.EntityNotFoundException;
 import javax.validation.Valid;
@@ -55,6 +42,7 @@ import java.io.IOException;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
@@ -90,6 +78,9 @@ public class CourseController {
     @Autowired
     private ParticipantValidator participantValidator;
 
+    @Autowired
+    private FirstYearMentorGroupRepository firstYearMentorGroupRepository;
+
     @Autowired
     private FirstYearStudentRepository firstYearStudentRepository;
 
@@ -490,13 +481,27 @@ public class CourseController {
     @RequestMapping(value = "/course/{id}/mentor-groups", method =
             RequestMethod.GET)
     @PreAuthorize("@permissionService.canViewMentorGroups(principal, #id)")
-    public String mentorGroups(@AuthenticatedUser User user, @PathVariable(
-            "id") Long id, Model model) {
+    public String mentorGroups(@AuthenticatedUser User user,
+                               @PathVariable("id") Long id,
+                               @RequestParam(value = "mentorgroup", required = false) String mentorGroupName,
+                               Model model) {
         Course course = getCourse(id);
 
+        logger.info("All first year students: " + firstYearMentorGroupRepository.findAll().toString());
+        model.addAttribute("students", new PagedListHolder<>());
+        if (mentorGroupName != null) {
+            logger.info("Mentor group: " + mentorGroupName);
+            FirstYearMentorGroup mentorGroup = firstYearMentorGroupRepository.findByName(mentorGroupName);
+            List<FirstYearStudent> firstYearStudents = firstYearStudentRepository.findByMentorGroup(mentorGroup);
+            if (!firstYearStudents.isEmpty()) {
+                PagedListHolder<FirstYearStudent> pagedListHolder
+                        = new PagedListHolder<>(firstYearStudents);
+                model.addAttribute("students", pagedListHolder);
+            }
+        }
         model.addAttribute("course", course);
         model.addAttribute("mentorGroups",
-                firstYearStudentRepository.findAll());
+                firstYearMentorGroupRepository.findAll());
         model.addAttribute("student", new ArrayList<>());
         return "course/view/mentor-group";
     }
diff --git a/src/main/java/nl/tudelft/ewi/queue/repository/FirstYearStudentRepository.java b/src/main/java/nl/tudelft/ewi/queue/repository/FirstYearStudentRepository.java
index 0f7a3c8d4..2dc3451c2 100644
--- a/src/main/java/nl/tudelft/ewi/queue/repository/FirstYearStudentRepository.java
+++ b/src/main/java/nl/tudelft/ewi/queue/repository/FirstYearStudentRepository.java
@@ -1,5 +1,6 @@
 package nl.tudelft.ewi.queue.repository;
 
+import nl.tudelft.ewi.queue.model.FirstYearMentorGroup;
 import nl.tudelft.ewi.queue.model.FirstYearStudent;
 import nl.tudelft.ewi.queue.model.User;
 import org.springframework.data.repository.CrudRepository;
@@ -14,5 +15,7 @@ public interface FirstYearStudentRepository extends CrudRepository<FirstYearStud
 
     List<FirstYearStudent> findByNetId(String netId);
 
+    List<FirstYearStudent> findByMentorGroup(FirstYearMentorGroup firstYearMentorGroup);
+
     boolean existsByNetId(String netId);
 }
diff --git a/src/main/resources/templates/course/view/mentor-group.html b/src/main/resources/templates/course/view/mentor-group.html
index 12f425f73..eead8571a 100644
--- a/src/main/resources/templates/course/view/mentor-group.html
+++ b/src/main/resources/templates/course/view/mentor-group.html
@@ -13,17 +13,27 @@
         </div>
     </div>
 
-    <div class="boxed-group">
-        <ul class="nav nav-pills">
-            <li th:if="${#lists.isEmpty(mentorGroups)}">There are no mentor
-                groups</li>
+    <form method="get" class="form">
+    <div class="form-group filter">
+        <label class="form-control-label" for="mentor-group-select">Mentor Group</label>
+        <select class="form-control" id="mentor-group-select" name="mentorgroup">
             <th:block th:each="group : ${mentorGroups}">
-                <li class="nav-item"><a href="#"
-                                        th:text="${group.toString()}">group
-                    1</a>
-                </li>
+                <option th:value="${group}" th:text="${group}"></option>
             </th:block>
+        </select>
+    </div>
+    <button type="submit" class="btn btn-primary">Get Students</button>
+    </form>
+
+    <div class="boxed-group" th:unless="${students.nrOfElements == 0}">
+        <h3>Students</h3>
+
+        <ul class="list-group">
+            <li class="list-group-item" th:each="student : ${students.pageList}">
+                <a th:href="@{/history/course/{courseId}/student/{id}/(courseId=${course.id},id=${student.user.id})}">[[${student.user}]]</a>
+            </li>
         </ul>
+
     </div>
 
 </section>
-- 
GitLab