package fi.pyramus.services; import java.util.Date; import javax.annotation.security.RolesAllowed; import javax.ejb.Stateless; import javax.jws.WebParam; import javax.jws.WebService; import javax.xml.ws.BindingType; import org.apache.commons.lang.StringUtils; import fi.otavanopisto.pyramus.dao.DAOFactory; import fi.otavanopisto.pyramus.dao.base.EducationalTimeUnitDAO; import fi.otavanopisto.pyramus.dao.base.SchoolDAO; import fi.otavanopisto.pyramus.dao.base.SubjectDAO; import fi.otavanopisto.pyramus.dao.courses.CourseDAO; import fi.otavanopisto.pyramus.dao.courses.CourseStudentDAO; import fi.otavanopisto.pyramus.dao.grading.CourseAssessmentDAO; import fi.otavanopisto.pyramus.dao.grading.CourseAssessmentRequestDAO; import fi.otavanopisto.pyramus.dao.grading.CreditDAO; import fi.otavanopisto.pyramus.dao.grading.CreditVariableDAO; import fi.otavanopisto.pyramus.dao.grading.GradeDAO; import fi.otavanopisto.pyramus.dao.grading.GradingScaleDAO; import fi.otavanopisto.pyramus.dao.grading.TransferCreditDAO; import fi.otavanopisto.pyramus.dao.students.StudentDAO; import fi.otavanopisto.pyramus.dao.users.StaffMemberDAO; import fi.otavanopisto.pyramus.domainmodel.base.CourseOptionality; import fi.otavanopisto.pyramus.domainmodel.base.Curriculum; import fi.otavanopisto.pyramus.domainmodel.base.EducationalTimeUnit; import fi.otavanopisto.pyramus.domainmodel.base.School; import fi.otavanopisto.pyramus.domainmodel.base.Subject; 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.Credit; import fi.otavanopisto.pyramus.domainmodel.grading.Grade; import fi.otavanopisto.pyramus.domainmodel.grading.GradingScale; import fi.otavanopisto.pyramus.domainmodel.grading.TransferCredit; import fi.otavanopisto.pyramus.domainmodel.students.Student; import fi.otavanopisto.pyramus.domainmodel.users.StaffMember; import fi.pyramus.services.entities.EntityFactoryVault; import fi.pyramus.services.entities.grading.CourseAssessmentEntity; import fi.pyramus.services.entities.grading.CourseAssessmentRequestEntity; import fi.pyramus.services.entities.grading.GradeEntity; import fi.pyramus.services.entities.grading.GradingScaleEntity; import fi.pyramus.services.entities.grading.TransferCreditEntity; @Stateless @WebService @BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING) @RolesAllowed("WebServices") public class GradingService extends PyramusService { public TransferCreditEntity[] listStudentsTransferCredits(@WebParam (name = "studentId") Long studentId) { StudentDAO studentDAO = DAOFactory.getInstance().getStudentDAO(); TransferCreditDAO transferCreditDAO = DAOFactory.getInstance().getTransferCreditDAO(); return (TransferCreditEntity[]) EntityFactoryVault.buildFromDomainObjects(transferCreditDAO.listByStudent(studentDAO.findById(studentId))); } public CourseAssessmentEntity[] listStudentsCourseAssessments(@WebParam (name = "studentId") Long studentId) { StudentDAO studentDAO = DAOFactory.getInstance().getStudentDAO(); CourseAssessmentDAO courseAssessmentDAO = DAOFactory.getInstance().getCourseAssessmentDAO(); return (CourseAssessmentEntity[]) EntityFactoryVault.buildFromDomainObjects(courseAssessmentDAO.listByStudent(studentDAO.findById(studentId))); } public GradeEntity createGrade(@WebParam (name = "gradingScaleId") Long gradingScaleId, @WebParam (name = "name") String name, @WebParam (name = "description") String description, @WebParam (name = "passingGrade") Boolean passingGrade, @WebParam (name = "GPA") Double GPA, @WebParam (name = "qualification") String qualification) { GradingScaleDAO gradingScaleDAO = DAOFactory.getInstance().getGradingScaleDAO(); GradeDAO gradeDAO = DAOFactory.getInstance().getGradeDAO(); Grade grade = gradeDAO.create(gradingScaleDAO.findById(gradingScaleId), name, description, passingGrade, GPA, qualification); validateEntity(grade); return EntityFactoryVault.buildFromDomainObject(grade); } public GradingScaleEntity createGradingScale(@WebParam (name = "name") String name, @WebParam (name = "description") String description) { GradingScaleDAO gradingScaleDAO = DAOFactory.getInstance().getGradingScaleDAO(); GradingScale gradingScale = gradingScaleDAO.create(name, description); validateEntity(gradingScale); return EntityFactoryVault.buildFromDomainObject(gradingScale); } public GradeEntity getGradeById(@WebParam (name = "gradeId") Long gradeId) { GradeDAO gradeDAO = DAOFactory.getInstance().getGradeDAO(); return EntityFactoryVault.buildFromDomainObject(gradeDAO.findById(gradeId)); } public GradingScaleEntity getGradingScaleById(@WebParam (name = "gradingScaleId") Long gradingScaleId) { GradingScaleDAO gradingScaleDAO = DAOFactory.getInstance().getGradingScaleDAO(); return EntityFactoryVault.buildFromDomainObject(gradingScaleDAO.findById(gradingScaleId)); } public GradingScaleEntity[] listGradingScales() { GradingScaleDAO gradingScaleDAO = DAOFactory.getInstance().getGradingScaleDAO(); return (GradingScaleEntity[]) EntityFactoryVault.buildFromDomainObjects(gradingScaleDAO.listUnarchived()); } public void updateGrade(@WebParam (name = "gradeId") Long gradeId, @WebParam (name = "name") String name, @WebParam (name = "description") String description, @WebParam (name = "passingGrade") Boolean passingGrade, @WebParam (name = "GPA") Double GPA, @WebParam (name = "qualification") String qualification) { GradeDAO gradeDAO = DAOFactory.getInstance().getGradeDAO(); Grade grade = gradeDAO.findById(gradeId); gradeDAO.update(grade, name, description, passingGrade, GPA, qualification); validateEntity(grade); } public void updateGradingScale(@WebParam (name = "gradingScaleId") Long gradingScaleId, @WebParam (name = "name") String name, @WebParam (name = "description") String description) { GradingScaleDAO gradingScaleDAO = DAOFactory.getInstance().getGradingScaleDAO(); GradingScale gradingScale = gradingScaleDAO.findById(gradingScaleId); gradingScaleDAO.update(gradingScale, name, description); validateEntity(gradingScale); } public CourseAssessmentEntity createCourseAssessment(@WebParam (name = "courseStudentId") Long courseStudentId, @WebParam (name = "assessingUserId") Long assessingUserId, @WebParam (name = "gradeId") Long gradeId, @WebParam (name = "date") Date date, @WebParam (name = "verbalAssessment") String verbalAssessment) { StaffMemberDAO staffMemberDAO = DAOFactory.getInstance().getStaffMemberDAO(); CourseStudentDAO courseStudentDAO = DAOFactory.getInstance().getCourseStudentDAO(); GradeDAO gradeDAO = DAOFactory.getInstance().getGradeDAO(); CourseAssessmentDAO courseAssessmentDAO = DAOFactory.getInstance().getCourseAssessmentDAO(); StaffMember assessingUser = staffMemberDAO.findById(assessingUserId); Grade grade = gradeDAO.findById(gradeId); CourseStudent courseStudent = courseStudentDAO.findById(courseStudentId); CourseAssessment courseAssessment = courseAssessmentDAO.create(courseStudent, assessingUser, grade, date, verbalAssessment); validateEntity(courseAssessment); return EntityFactoryVault.buildFromDomainObject(courseAssessment); } public CourseAssessmentEntity updateCourseAssessment(@WebParam (name = "courseAssessmentId") Long courseAssessmentId, @WebParam (name = "assessingUserId") Long assessingUserId, @WebParam (name = "gradeId") Long gradeId, @WebParam (name = "date") Date date, @WebParam (name = "verbalAssessment") String verbalAssessment) { StaffMemberDAO staffMemberDAO = DAOFactory.getInstance().getStaffMemberDAO(); GradeDAO gradeDAO = DAOFactory.getInstance().getGradeDAO(); CourseAssessmentDAO courseAssessmentDAO = DAOFactory.getInstance().getCourseAssessmentDAO(); StaffMember assessingUser = staffMemberDAO.findById(assessingUserId); Grade grade = gradeDAO.findById(gradeId); CourseAssessment courseAssessment = courseAssessmentDAO.findById(courseAssessmentId); courseAssessment = courseAssessmentDAO.update(courseAssessment, assessingUser, grade, date, verbalAssessment, courseAssessment.getArchived()); validateEntity(courseAssessment); return EntityFactoryVault.buildFromDomainObject(courseAssessment); } public CourseAssessmentEntity getCourseAssessmentByCourseStudentId(@WebParam (name = "courseStudentId") Long courseStudentId) { CourseStudentDAO courseStudentDAO = DAOFactory.getInstance().getCourseStudentDAO(); CourseAssessmentDAO courseAssessmentDAO = DAOFactory.getInstance().getCourseAssessmentDAO(); CourseStudent courseStudent = courseStudentDAO.findById(courseStudentId); CourseAssessment courseAssessment = courseAssessmentDAO.findByCourseStudentAndArchived(courseStudent, Boolean.FALSE); return EntityFactoryVault.buildFromDomainObject(courseAssessment); } public TransferCreditEntity createTransferCredit(@WebParam (name = "courseName") String courseName, @WebParam (name = "courseNumber") Integer courseNumber, @WebParam (name = "courseLength") Double courseLength, @WebParam (name = "courseLengthUnitId") Long courseLengthUnitId, @WebParam (name = "schoolId") Long schoolId, @WebParam (name = "subjectId") Long subjectId, @WebParam (name = "optionality") String optionality, @WebParam (name = "studentId") Long studentId, @WebParam (name = "assessingUserId") Long assessingUserId, @WebParam (name = "gradeId") Long gradeId, @WebParam (name = "date") Date date, @WebParam (name = "verbalAssessment") String verbalAssessment) { StaffMemberDAO staffMemberDAO = DAOFactory.getInstance().getStaffMemberDAO(); StudentDAO studentDAO = DAOFactory.getInstance().getStudentDAO(); GradeDAO gradeDAO = DAOFactory.getInstance().getGradeDAO(); TransferCreditDAO transferCreditDAO = DAOFactory.getInstance().getTransferCreditDAO(); EducationalTimeUnitDAO educationalTimeUnitDAO = DAOFactory.getInstance().getEducationalTimeUnitDAO(); SchoolDAO schoolDAO = DAOFactory.getInstance().getSchoolDAO(); SubjectDAO subjectDAO = DAOFactory.getInstance().getSubjectDAO(); EducationalTimeUnit courseLengthUnit = educationalTimeUnitDAO.findById(courseLengthUnitId); School school = schoolDAO.findById(schoolId); Subject subject = subjectDAO.findById(subjectId); Student student = studentDAO.findById(studentId); StaffMember assessingUser = staffMemberDAO.findById(assessingUserId); Grade grade = gradeDAO.findById(gradeId); CourseOptionality courseOptionality = null; Curriculum curriculum = null; if (!StringUtils.isBlank(optionality)) courseOptionality = CourseOptionality.valueOf(optionality); TransferCredit transferCredit = transferCreditDAO.create(courseName, courseNumber, courseLength, courseLengthUnit, school, subject, courseOptionality, student, assessingUser, grade, date, verbalAssessment, curriculum); validateEntity(transferCredit); return EntityFactoryVault.buildFromDomainObject(transferCredit); } public CourseAssessmentRequestEntity createCourseAssessmentRequest( @WebParam (name = "courseStudentId") Long courseStudentId, @WebParam (name = "created") Date created, @WebParam (name = "requestText") String requestText) { CourseAssessmentRequestDAO courseAssessmentRequestDAO = DAOFactory.getInstance().getCourseAssessmentRequestDAO(); CourseStudentDAO courseStudentDAO = DAOFactory.getInstance().getCourseStudentDAO(); CourseStudent courseStudent = courseStudentDAO.findById(courseStudentId); CourseAssessmentRequest courseAssessmentRequest = courseAssessmentRequestDAO.create(courseStudent, created, requestText); validateEntity(courseAssessmentRequest); return EntityFactoryVault.buildFromDomainObject(courseAssessmentRequest); } public CourseAssessmentRequestEntity[] listCourseAssessmentRequestsByCourse( @WebParam (name = "courseId") Long courseId) { CourseAssessmentRequestDAO courseAssessmentRequestDAO = DAOFactory.getInstance().getCourseAssessmentRequestDAO(); CourseDAO courseDAO = DAOFactory.getInstance().getCourseDAO(); Course course = courseDAO.findById(courseId); return (CourseAssessmentRequestEntity[]) EntityFactoryVault.buildFromDomainObjects(courseAssessmentRequestDAO.listByCourse(course)); } public CourseAssessmentRequestEntity[] listCourseAssessmentRequestsByStudent( @WebParam (name = "studentId") Long studentId) { CourseAssessmentRequestDAO courseAssessmentRequestDAO = DAOFactory.getInstance().getCourseAssessmentRequestDAO(); StudentDAO studentDAO = DAOFactory.getInstance().getStudentDAO(); Student student = studentDAO.findById(studentId); return (CourseAssessmentRequestEntity[]) EntityFactoryVault.buildFromDomainObjects(courseAssessmentRequestDAO.listByStudent(student)); } public CourseAssessmentRequestEntity[] listCourseAssessmentRequestsByCourseStudent( @WebParam (name = "courseStudentId") Long courseStudentId) { CourseAssessmentRequestDAO courseAssessmentRequestDAO = DAOFactory.getInstance().getCourseAssessmentRequestDAO(); CourseStudentDAO courseStudentDAO = DAOFactory.getInstance().getCourseStudentDAO(); CourseStudent courseStudent = courseStudentDAO.findById(courseStudentId); return (CourseAssessmentRequestEntity[]) EntityFactoryVault.buildFromDomainObjects(courseAssessmentRequestDAO.listByCourseStudent(courseStudent)); } public void setCreditVariable(@WebParam (name="creditId") Long creditId, @WebParam (name="key") String key, @WebParam (name="value") String value) { CreditDAO creditDAO = DAOFactory.getInstance().getCreditDAO(); CreditVariableDAO creditVariableDAO = DAOFactory.getInstance().getCreditVariableDAO(); Credit credit = creditDAO.findById(creditId); creditVariableDAO.setCreditVariable(credit, key, value); } public String getCreditVariable(@WebParam (name="creditId") Long creditId, @WebParam (name="key") String key) { CreditDAO creditDAO = DAOFactory.getInstance().getCreditDAO(); CreditVariableDAO creditVariableDAO = DAOFactory.getInstance().getCreditVariableDAO(); Credit credit = creditDAO.findById(creditId); return creditVariableDAO.findByCreditAndKey(credit, key); } }