package fi.otavanopisto.pyramus.rest; import java.util.ArrayList; import java.util.List; import javax.ejb.Stateful; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import fi.otavanopisto.pyramus.domainmodel.courses.Course; import fi.otavanopisto.pyramus.domainmodel.courses.CourseStudent; import fi.otavanopisto.pyramus.domainmodel.grading.CourseAssessment; import fi.otavanopisto.pyramus.domainmodel.grading.CourseAssessmentRequest; import fi.otavanopisto.pyramus.domainmodel.grading.Grade; import fi.otavanopisto.pyramus.domainmodel.grading.GradingScale; import fi.otavanopisto.pyramus.domainmodel.users.StaffMember; import fi.otavanopisto.pyramus.domainmodel.users.User; import fi.otavanopisto.pyramus.rest.annotation.RESTPermit; import fi.otavanopisto.pyramus.rest.annotation.RESTPermit.Handling; import fi.otavanopisto.pyramus.rest.controller.AssessmentController; import fi.otavanopisto.pyramus.rest.controller.CommonController; import fi.otavanopisto.pyramus.rest.controller.CourseController; import fi.otavanopisto.pyramus.rest.controller.UserController; import fi.otavanopisto.pyramus.rest.controller.permissions.CommonPermissions; import fi.otavanopisto.pyramus.rest.controller.permissions.CourseAssessmentPermissions; import fi.otavanopisto.pyramus.rest.model.composite.CompositeAssessmentRequest; import fi.otavanopisto.pyramus.rest.model.composite.CompositeGrade; import fi.otavanopisto.pyramus.rest.model.composite.CompositeGradingScale; import fi.otavanopisto.pyramus.security.impl.SessionController; @Path("/composite") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @Stateful @RequestScoped public class CompositeRESTService { @Inject private AssessmentController assessmentController; @Inject private CommonController commonController; @Inject private CourseController courseController; @Inject private SessionController sessionController; @Inject private UserController userController; @Path("/gradingScales") @GET @RESTPermit (CommonPermissions.LIST_GRADINGSCALES) public Response listGrades() { List<CompositeGradingScale> compositeGradingScales = new ArrayList<CompositeGradingScale>(); List<GradingScale> gradingScales = commonController.listUnarchivedGradingScales(); for (GradingScale gradingScale : gradingScales) { List<CompositeGrade> compositeGrades = new ArrayList<CompositeGrade>(); List<Grade> grades = gradingScale.getGrades(); for (Grade grade : grades) { compositeGrades.add(new CompositeGrade(grade.getId(), grade.getName())); } compositeGradingScales.add(new CompositeGradingScale( gradingScale.getId(), gradingScale.getName(), compositeGrades)); } return Response.ok(compositeGradingScales).build(); } @Path("/course/{COURSEID:[0-9]*}/assessmentRequests") @GET @RESTPermit(CourseAssessmentPermissions.LIST_COURSEASSESSMENT) public Response listAssessmentRequestsByCourse(@PathParam("COURSEID") Long courseId, @QueryParam("courseStudentIds") String courseStudentIds) { // TODO Security Course course = courseController.findCourseById(courseId); List<CourseStudent> courseStudents; if (courseStudentIds != null) { courseStudents = new ArrayList<CourseStudent>(); String[] courseStudentIdArray = courseStudentIds.split(","); for (int i = 0; i < courseStudentIdArray.length; i++) { CourseStudent courseStudent = courseController.findCourseStudentById(new Long(courseStudentIdArray[i])); if (courseStudent != null) { courseStudents.add(courseStudent); } } } else { courseStudents = courseController.listCourseStudentsByCourse(course); } List<CompositeAssessmentRequest> assessmentRequests = new ArrayList<CompositeAssessmentRequest>(); for (CourseStudent courseStudent : courseStudents) { CourseAssessmentRequest courseAssessmentRequest = assessmentController.findCourseAssessmentRequestByCourseStudent(courseStudent); CourseAssessment courseAssessment = assessmentController.findCourseAssessmentByCourseStudentAndArchived(courseStudent, Boolean.FALSE); CompositeAssessmentRequest assessmentRequest = new CompositeAssessmentRequest(); assessmentRequest.setCourseStudentId(courseStudent.getId()); assessmentRequest.setAssessmentRequestDate(courseAssessmentRequest == null ? null : courseAssessmentRequest.getCreated()); assessmentRequest.setCourseEnrollmentDate(courseStudent.getEnrolmentTime()); assessmentRequest.setEvaluationDate(courseAssessment == null ? null : courseAssessment.getDate()); assessmentRequest.setPassing(courseAssessment != null && courseAssessment.getGrade() != null && courseAssessment.getGrade().getPassingGrade()); assessmentRequest.setCourseId(course.getId()); assessmentRequest.setCourseName(course.getName()); assessmentRequest.setCourseNameExtension(course.getNameExtension()); String firstName = courseStudent.getStudent().getFirstName(); if (courseStudent.getStudent().getNickname() != null) { firstName = String.format("%s \"%s\"", firstName, courseStudent.getStudent().getNickname()); } assessmentRequest.setFirstName(firstName); assessmentRequest.setLastName(courseStudent.getStudent().getLastName()); assessmentRequest.setStudyProgramme(courseStudent.getStudent().getStudyProgramme().getName()); assessmentRequest.setUserId(courseStudent.getStudent().getId()); assessmentRequests.add(assessmentRequest); } return Response.ok(assessmentRequests).build(); } /** * Returns a list of assessment requests directed at the given staff member. * * @param staffMemberId Staff member id * * @return A list of assessment requests directed at the given staff member */ @Path("/staffMembers/{STAFFMEMBERID:[0-9]*}/assessmentRequests") @GET @RESTPermit(handling = Handling.INLINE) public Response listAssessmentRequestsByStaffMember(@PathParam("STAFFMEMBERID") Long staffMemberId) { // Staff member must exist StaffMember staffMember = userController.findStaffMemberById(staffMemberId); if (staffMember == null || staffMember.getArchived()) { return Response.status(Status.NOT_FOUND).build(); } // Staff member should be logged in User loggedUser = sessionController.getUser(); if (loggedUser == null || !loggedUser.getId().equals(staffMember.getId())) { return Response.status(Status.FORBIDDEN).build(); } // List course assessment requests of courses of the staff member List<CompositeAssessmentRequest> assessmentRequests = new ArrayList<CompositeAssessmentRequest>(); List<Course> courses = courseController.listCoursesByStaffMember(staffMember); for (Course course : courses) { List<CourseAssessmentRequest> courseAssessmentRequests = assessmentController.listCourseAssessmentRequestsByCourseAndHandled(course, Boolean.FALSE); for (CourseAssessmentRequest courseAssessmentRequest : courseAssessmentRequests) { CourseAssessment courseAssessment = assessmentController.findCourseAssessmentByCourseStudentAndArchived(courseAssessmentRequest.getCourseStudent(), Boolean.FALSE); CompositeAssessmentRequest assessmentRequest = new CompositeAssessmentRequest(); assessmentRequest.setCourseStudentId(courseAssessmentRequest.getCourseStudent().getId()); assessmentRequest.setAssessmentRequestDate(courseAssessmentRequest.getCreated()); assessmentRequest.setCourseEnrollmentDate(courseAssessmentRequest.getCourseStudent().getEnrolmentTime()); assessmentRequest.setEvaluationDate(courseAssessment == null ? null : courseAssessment.getDate()); assessmentRequest.setPassing(courseAssessment != null && courseAssessment.getGrade() != null && courseAssessment.getGrade().getPassingGrade()); assessmentRequest.setCourseId(course.getId()); assessmentRequest.setCourseName(course.getName()); assessmentRequest.setCourseNameExtension(course.getNameExtension()); String firstName = courseAssessmentRequest.getCourseStudent().getStudent().getFirstName(); if (courseAssessmentRequest.getCourseStudent().getStudent().getNickname() != null) { firstName = String.format("%s \"%s\"", firstName, courseAssessmentRequest.getCourseStudent().getStudent().getNickname()); } assessmentRequest.setFirstName(firstName); assessmentRequest.setLastName(courseAssessmentRequest.getCourseStudent().getStudent().getLastName()); assessmentRequest.setStudyProgramme(courseAssessmentRequest.getCourseStudent().getStudent().getStudyProgramme().getName()); assessmentRequest.setUserId(courseAssessmentRequest.getCourseStudent().getStudent().getId()); assessmentRequests.add(assessmentRequest); } } return Response.ok(assessmentRequests).build(); } }