package fi.otavanopisto.pyramus.util.dataimport.scripting.api; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Currency; import java.util.Date; import java.util.List; import fi.otavanopisto.pyramus.dao.DAOFactory; import fi.otavanopisto.pyramus.dao.base.CourseBaseVariableDAO; import fi.otavanopisto.pyramus.dao.base.DefaultsDAO; import fi.otavanopisto.pyramus.dao.base.SubjectDAO; import fi.otavanopisto.pyramus.dao.courses.CourseDAO; import fi.otavanopisto.pyramus.dao.courses.CourseTypeDAO; import fi.otavanopisto.pyramus.dao.modules.ModuleDAO; import fi.otavanopisto.pyramus.dao.users.StaffMemberDAO; import fi.otavanopisto.pyramus.domainmodel.base.Subject; import fi.otavanopisto.pyramus.domainmodel.courses.Course; import fi.otavanopisto.pyramus.domainmodel.courses.CourseState; import fi.otavanopisto.pyramus.domainmodel.courses.CourseType; import fi.otavanopisto.pyramus.domainmodel.modules.Module; import fi.otavanopisto.pyramus.domainmodel.users.User; import fi.otavanopisto.pyramus.util.dataimport.scripting.InvalidScriptException; public class CourseAPI { public CourseAPI(Long loggedUserId) { this.loggedUserId = loggedUserId; } public Long create(Long moduleId, Long typeId, String name, String nameExtension, String description, String subjectCode) throws InvalidScriptException { ModuleDAO moduleDAO = DAOFactory.getInstance().getModuleDAO(); CourseDAO courseDAO = DAOFactory.getInstance().getCourseDAO(); SubjectDAO subjectDAO = DAOFactory.getInstance().getSubjectDAO(); StaffMemberDAO userDAO = DAOFactory.getInstance().getStaffMemberDAO(); DefaultsDAO defaultsDAO = DAOFactory.getInstance().getDefaultsDAO(); CourseTypeDAO courseTypeDAO = DAOFactory.getInstance().getCourseTypeDAO(); Module module = moduleDAO.findById(moduleId); if (module == null) { throw new InvalidScriptException("Module #" + moduleId + " not found."); } User loggedUser = userDAO.findById(loggedUserId); if (loggedUser == null) { throw new InvalidScriptException("Logged user not found."); } Subject subject = subjectDAO.findByCode(subjectCode); if (subject == null) { throw new InvalidScriptException("Subject by code '" + subjectCode + "' not found."); } CourseType type = typeId != null ? courseTypeDAO.findById(typeId) : null; // TODO: Add support for these: CourseState courseState = defaultsDAO.getDefaults().getInitialCourseState(); Date beginDate = null; Date endDate = null; Double distanceTeachingDays = null; Double localTeachingDays = null; Double teachingHours = null; Double distanceTeachingHours = null; Double planningHours = null; Double assessingHours = null; Date enrolmentTimeEnd = null; BigDecimal courseFee = null; Currency courseFeeCurrency = null; return courseDAO.create(module, name, nameExtension, courseState, type, subject, module.getCourseNumber(), beginDate, endDate, module.getCourseLength().getUnits(), module.getCourseLength().getUnit(), distanceTeachingDays, localTeachingDays, teachingHours, distanceTeachingHours, planningHours, assessingHours, description, module.getMaxParticipantCount(), courseFee, courseFeeCurrency, enrolmentTimeEnd, loggedUser).getId(); } public Long[] listIdsByModuleId(Long moduleId) throws InvalidScriptException { ModuleDAO moduleDAO = DAOFactory.getInstance().getModuleDAO(); CourseDAO courseDAO = DAOFactory.getInstance().getCourseDAO(); Module module = moduleDAO.findById(moduleId); if (module == null) { throw new InvalidScriptException("Module #" + moduleId + " not found."); } List<Long> result = new ArrayList<>(); List<Course> courses = courseDAO.listByModule(module); for (Course course : courses) { result.add(course.getId()); } return result.toArray(new Long[0]); } public Long[] listIds() throws InvalidScriptException { CourseDAO courseDAO = DAOFactory.getInstance().getCourseDAO(); List<Long> result = new ArrayList<>(); List<Course> courses = courseDAO.listUnarchived(); for (Course course : courses) { result.add(course.getId()); } return result.toArray(new Long[0]); } public String getVariable(Long courseId, String key) throws InvalidScriptException { CourseDAO courseDAO = DAOFactory.getInstance().getCourseDAO(); CourseBaseVariableDAO courseBaseVariableDAO = DAOFactory.getInstance().getCourseBaseVariableDAO(); Course course = courseDAO.findById(courseId); if (course == null) { throw new InvalidScriptException(String.format("Course #%d could not be found", courseId)); } return courseBaseVariableDAO.findByCourseAndVariableKey(course, key); } public void setVariable(Long courseId, String key, String value) throws InvalidScriptException { CourseDAO courseDAO = DAOFactory.getInstance().getCourseDAO(); CourseBaseVariableDAO courseBaseVariableDAO = DAOFactory.getInstance().getCourseBaseVariableDAO(); Course course = courseDAO.findById(courseId); if (course == null) { throw new InvalidScriptException(String.format("Course #%d could not be found", courseId)); } courseBaseVariableDAO.setCourseVariable(course, key, value); } private Long loggedUserId; }