Skip to content
Snippets Groups Projects
Commit 04fd5b5f authored by Maaike Visser's avatar Maaike Visser
Browse files

Commit

parent b4b99ace
Branches
Tags
No related merge requests found
package nl.tudelft.ewi.queue;
import nl.tudelft.ewi.queue.model.*;
import nl.tudelft.ewi.queue.repository.AssignmentRepository;
import nl.tudelft.ewi.queue.repository.CourseRepository;
import nl.tudelft.ewi.queue.repository.GroupRepository;
import nl.tudelft.ewi.queue.repository.LabRepository;
import nl.tudelft.ewi.queue.repository.RequestRepository;
import nl.tudelft.ewi.queue.repository.RequestTypeRepository;
......@@ -11,6 +11,7 @@ import nl.tudelft.ewi.queue.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;
import sun.net.www.MimeTable;
import javax.annotation.PostConstruct;
import java.time.LocalDateTime;
......@@ -23,9 +24,6 @@ public class DatabaseLoader {
@Autowired
private UserRepository userRepository;
@Autowired
private GroupRepository groupRepository;
@Autowired
private LabRepository labRepository;
......@@ -41,6 +39,9 @@ public class DatabaseLoader {
@Autowired
private RoomRepository roomRepository;
@Autowired
private AssignmentRepository assignmentRepository;
public DatabaseLoader() {
}
......@@ -89,17 +90,14 @@ public class DatabaseLoader {
// Course
Course course1 = new Course("Algorithms & Datastructures", "TI1316");
course1.setHasGroups(true);
Assignment assignment1 = new Assignment(course1, "Assembly programming");
course1.addAssignment(assignment1);
course1.setHasGroups(true);
courseRepository.save(course1);
Course course2 = new Course("Concepts of Programming Languages", "TI2606");
course2.addAssignment(new Assignment(course2, "Interpreter implementation pt1"));
course2.addAssignment(new Assignment(course2, "Interpreter implementation pt2"));
course2.setHasGroups(true);
course2.addAssignment(new Assignment(course2, "Interpreter implementation"));
courseRepository.save(course2);
......@@ -126,11 +124,8 @@ public class DatabaseLoader {
student1.addRole(new Student(student1, course1, LocalDateTime.now()));
student2.addRole(new Student(student2, course1, LocalDateTime.now()));
student3.addRole(new Student(student3, course1, LocalDateTime.now()));
student3.addRole(new Student(student3, course2, LocalDateTime.now()));
student4.addRole(new Student(student4, course1, LocalDateTime.now()));
student4.addRole(new Student(student4, course2, LocalDateTime.now()));
student5.addRole(new Student(student5, course1, LocalDateTime.now()));
student5.addRole(new Student(student5, course2, LocalDateTime.now()));
student6.addRole(new Assistant(student6, course1));
student7.addRole(new Assistant(student7, course1));
......@@ -147,8 +142,6 @@ public class DatabaseLoader {
teacher3.addRole(new Teacher(teacher3, course2));
teacher4.addRole(new Teacher(teacher4, course2));
teacher1.addRole(new Teacher(teacher1, course3));
userRepository.save(student1);
userRepository.save(student2);
userRepository.save(student3);
......@@ -174,26 +167,6 @@ public class DatabaseLoader {
userRepository.save(admin1);
userRepository.save(admin2);
Group group1 = new Group("group1", course1);
group1.addMember(student1);
group1.addMember(student2);
groupRepository.save(group1);
course1.addGroup(group1);
Group group2 = new Group("group2", course2);
group2.addMember(student3);
group2.addMember(student4);
groupRepository.save(group2);
Group group3 = new Group("group3", course2);
group3.addMember(student5);
groupRepository.save(group3);
course2.addGroup(group2);
course2.addGroup(group3);
// RequestTypes
RequestType requestType = new RequestType();
requestType.setName("Submission");
requestTypeRepository.save(requestType);
......@@ -202,51 +175,34 @@ public class DatabaseLoader {
requestTypeRepository.save(questionType);
// Labs
Lab lab1 = new Lab();
lab1.setCourse(course1);
lab1.setSlot(new LabSlot(LocalDateTime.now(), LocalDateTime.now().plusHours(4)));
lab1.setSignOffIntervals(true);
lab1.setIntervalTime(15L);
lab1.setCapacity(3L);
lab1.addAssignment(course1.getAssignments().get(0));
Lab lab = new Lab();
lab.setCourse(course1);
lab.setSlot(new LabSlot(LocalDateTime.now(), LocalDateTime.now().plusHours(4)));
lab.setSignOffIntervals(true);
lab.setIntervalTime(15L);
lab.setCapacity(3L);
lab.addAssignment(course1.getAssignments().get(0));
ArrayList<RequestType> requestTypes = new ArrayList<>();
requestTypes.add(requestType);
requestTypes.add(questionType);
lab1.setAllowedRequestTypes(requestTypes);
lab.setAllowedRequestTypes(requestTypes);
Room room1 = new Room("DW-PC 4 (060 1verd)");
Room room2 = new Room("DW-PC 3 (010 1verd)");
Room room3 = new Room("DW-PC 2 (200BG)");
lab1.addRoom(room1);
lab1.addRoom(room2);
lab1.addRoom(room3);
lab1.setDirection(Direction.STUDENT_VISIT_TA);
lab.addRoom(room1);
lab.addRoom(room2);
lab.addRoom(room3);
lab.setDirection(Direction.STUDENT_VISIT_TA);
roomRepository.save(room1);
roomRepository.save(room2);
roomRepository.save(room3);
labRepository.save(lab1);
Lab lab2 = new Lab();
lab2.setCourse(course2);
lab2.setSlot(new LabSlot(LocalDateTime.now(), LocalDateTime.now().plusHours(4)));
lab2.setSignOffIntervals(true);
lab2.setIntervalTime(5L);
lab2.setCapacity(2L);
lab2.setAllowWithoutMentorGroup(true);
lab2.addAssignment(course2.getAssignments().get(0));
lab2.addAssignment(course2.getAssignments().get(1));
lab2.setAllowedRequestTypes(requestTypes);
Room room4 = new Room("DW-PC 1");
lab2.addRoom(room4);
lab2.setDirection(Direction.STUDENT_VISIT_TA);
lab2.setIsFeedbackLab(true);
roomRepository.save(room4);
labRepository.save(lab2);
//Requests
Request request1 = new Request(student1, assignment1, room1, requestType, "", lab1);
requestRepository.save(request1);
labRepository.save(lab);
Request request = new Request(student1, assignment1, room1, requestType, "", lab);
requestRepository.save(request);
assignmentRepository.save(assignment1);
}
}
......@@ -16,7 +16,6 @@ import nl.tudelft.ewi.queue.service.LabService;
import nl.tudelft.ewi.queue.service.RequestService;
import nl.tudelft.ewi.queue.validator.ParticipantValidator;
import nl.tudelft.ewi.queue.viewmodel.AssignmentViewModel;
import org.bouncycastle.ocsp.Req;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -43,6 +42,7 @@ import javax.persistence.EntityNotFoundException;
import javax.validation.Valid;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
......@@ -315,7 +315,12 @@ public class CourseController {
public String uploadEnqueue(@PathVariable("id") Long id,
@RequestParam("csv") MultipartFile csv,
@RequestParam("uploadEnqueue") Long assignmentId) throws IOException {
List<RequestEntity> users = groupService.importUsersFromCsv(getCourse(id), csv);
Course course = getCourse(id);
groupService.importCsv(course, csv);
List<Group> groups = course.getGroups();
// List<Group> groups = groupService.importGroupsFromCsv(getCourse(id), csv);
Assignment assignment = assignmentRepository.findOne(assignmentId);
......@@ -325,8 +330,8 @@ public class CourseController {
}
}
for(RequestEntity user : users) {
labService.randomEnqueue(assignment, user);
for(Group group : groups) {
labService.randomEnqueue(assignment, group);
}
......
......@@ -105,6 +105,11 @@ public class Lab implements Serializable {
this.isFeedbackLab = feedbackLab;
}
// public Lab(Course course, LabSlot slot, List<Room> rooms, boolean isFeedbackLab,
// List<Assignment> assignments) {
// this.course = course;
// }
public Long getId() {
return id;
}
......
......@@ -296,4 +296,7 @@ public class User extends RequestEntity {
return username;
}
public void setFirstYearStudent(FirstYearStudent firstYearStudent) {
this.firstYearStudent = firstYearStudent;
}
}
......@@ -13,4 +13,6 @@ public interface FirstYearStudentRepository extends CrudRepository<FirstYearStud
FirstYearStudent findByUser(User user);
FirstYearStudent findByNetId(String netId);
boolean existsByNetId(String netId);
}
......@@ -3,36 +3,46 @@ package nl.tudelft.ewi.queue.service;
import nl.tudelft.ewi.queue.helper.BrightspaceCsvHelper;
import nl.tudelft.ewi.queue.model.Course;
import nl.tudelft.ewi.queue.model.DefaultRole;
import nl.tudelft.ewi.queue.model.FirstYearStudent;
import nl.tudelft.ewi.queue.model.Group;
import nl.tudelft.ewi.queue.model.RequestEntity;
import nl.tudelft.ewi.queue.model.Student;
import nl.tudelft.ewi.queue.model.User;
import nl.tudelft.ewi.queue.repository.CourseRepository;
import nl.tudelft.ewi.queue.repository.FirstYearStudentRepository;
import nl.tudelft.ewi.queue.repository.GroupRepository;
import nl.tudelft.ewi.queue.repository.UserRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@Service
public class GroupService {
private static final Logger logger = LoggerFactory.getLogger(GroupService.class);
@Autowired
private UserRepository userRepository;
@Autowired
private GroupRepository groupRepository;
@Autowired
private CourseRepository courseRepository;
@Autowired
private CourseService courseService;
@Autowired
private FirstYearStudentRepository firstYearStudentRepository;
private void deleteOldGroups(Course course) {
groupRepository.delete(course.getGroups());
course.getGroups().clear();
courseRepository.save(course);
}
public void importCsv(Course course, MultipartFile csvFile) throws IOException {
......@@ -49,21 +59,40 @@ public class GroupService {
course.addGroup(group);
}
}
groupRepository.save(course.getGroups());
}
public List<RequestEntity> importUsersFromCsv(Course course, MultipartFile csv) throws IOException {
List<RequestEntity> users = new ArrayList<>();
/**
* Reads a CSV file and creates groups from the contents. If the groups were not yet enrolled
* in the course, they are afterwards.
*
* @param course
* @param csv
* @return
* @throws IOException
*/
public List<Group> importGroupsFromCsv(Course course, MultipartFile csv) throws IOException {
Set<Group> groups = new HashSet<>();
ArrayList<BrightspaceCsvHelper> csvLines = processCsvFile(csv);
for (BrightspaceCsvHelper csvLine : csvLines) {
User student = findOrCreateUser(csvLine);
Group group = findOrCreateGroup(csvLine, student, course);
if (course.isGroupOfThisCourse(group)) {
users.add(group);
} else {
users.add(student);
if (!course.getStudents().contains(student.getRole(course))) {
student.addRole(new Student(student, course, LocalDateTime.now()));
}
try {
userRepository.save(student);
} catch (DataIntegrityViolationException e) {
logger.error("Name: {}", student.getDisplayName());
e.printStackTrace();
}
return users;
Group group = findOrCreateGroup(csvLine, student, course);
course.addGroup(group);
groups.add(group);
}
return new ArrayList(groups);
}
......@@ -82,6 +111,11 @@ public class GroupService {
user = new User(student.getNetID(), "", displayName, student.getEmail(), role, student.getStudentNumber());
userRepository.save(user);
}
if (firstYearStudentRepository.existsByNetId(user.getUsername())) {
FirstYearStudent firstYearStudent = firstYearStudentRepository.findByNetId(user.getUsername());
firstYearStudent.setUser(user);
user.setFirstYearStudent(firstYearStudent);
}
return user;
}
......
......@@ -2,7 +2,6 @@ package nl.tudelft.ewi.queue.service;
import nl.tudelft.ewi.queue.exception.AlreadyEnqueuedException;
import nl.tudelft.ewi.queue.exception.InvalidSlotException;
import nl.tudelft.ewi.queue.helper.EmailHelper;
import nl.tudelft.ewi.queue.model.*;
import nl.tudelft.ewi.queue.repository.AssignmentRepository;
import nl.tudelft.ewi.queue.repository.CourseRepository;
......@@ -181,8 +180,7 @@ public class LabService {
}
labRepository.save(lab);
if (weekRepeat.isPresent())
repeatLabFor(weekRepeat.get(), lab);
weekRepeat.ifPresent(wr -> repeatLabFor(wr, lab));
}
/**
......@@ -293,18 +291,24 @@ public class LabService {
*/
public Optional<Lab> randomEnqueue(Assignment assignment, RequestEntity entity) {
List<Lab> labs = labRepository.findAll()
List<Lab> labsWithAssignment = labRepository.findAll()
.stream()
.filter(l -> l.getAssignments().contains(assignment))
.filter(l -> l.getAssignments().contains(assignment)).collect(Collectors.toList());
List<Lab> labsWithSlot = labsWithAssignment.stream()
.filter(l ->
getIntervalsForLab(l)
.stream()
.anyMatch(l::slotIsAvailable)
&&
l.entityAllowedForThisLab(entity)).collect(Collectors.toList());
.anyMatch(l::slotIsAvailable)).collect(Collectors.toList());
List<Lab> labs =
labsWithSlot.stream().filter(l -> l.entityAllowedForThisLab(entity)).collect(Collectors.toList());
Random r = new Random();
Optional<Lab> lab = Optional.ofNullable(labs.get(r.nextInt(labs.size())));
int labSize = labs.size();
if (labSize > 0) {
Optional<Lab> lab = Optional.ofNullable(labs.get(r.nextInt(labSize)));
if (lab.isPresent()) {
......@@ -333,19 +337,20 @@ public class LabService {
enqueue(request);
if (entity instanceof User) {
EmailHelper.getInstance().notifyStudentOfTimeSlot((User) entity,
slot.get(), assignment);
} else if (entity instanceof Group) {
EmailHelper.getInstance().notifyGroupOfTimeSlot((Group) entity,
slot.get(), assignment);
}
// if (entity instanceof User) {
// EmailHelper.getInstance().notifyStudentOfTimeSlot((User) entity,
// slot.get(), assignment);
// } else if (entity instanceof Group) {
// EmailHelper.getInstance().notifyGroupOfTimeSlot((Group) entity,
// slot.get(), assignment);
// }
return lab;
} else {
logger.error("There were no free slots.");
}
}
}
return Optional.empty();
}
}
......@@ -12,7 +12,7 @@ server.error.whitelabel.enabled=false
spring.jackson.serialization.write_dates_as_timestamps=false
# JPA
spring.jpa.show-sql=true
#spring.jpa.show-sql=true
#spring.datasource.url = jdbc:mysql://localhost:3306/queue?serverTimezone=UTC
#spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment