Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/CloneLessonsAction.java =================================================================== diff -u -r7a038b413299c10aa5b3dd168e35811597f44173 -r222473f7592051059387c31c2c4947909f48a1b9 --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/CloneLessonsAction.java (.../CloneLessonsAction.java) (revision 7a038b413299c10aa5b3dd168e35811597f44173) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/CloneLessonsAction.java (.../CloneLessonsAction.java) (revision 222473f7592051059387c31c2c4947909f48a1b9) @@ -30,7 +30,6 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; @@ -46,13 +45,10 @@ import org.lamsfoundation.lams.usermanagement.OrganisationState; import org.lamsfoundation.lams.usermanagement.OrganisationType; import org.lamsfoundation.lams.usermanagement.Role; -import org.lamsfoundation.lams.usermanagement.User; -import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.exception.UserAccessDeniedException; +import org.lamsfoundation.lams.usermanagement.exception.UserException; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.util.WebUtil; -import org.lamsfoundation.lams.web.session.SessionManager; -import org.lamsfoundation.lams.web.util.AttributeNames; /** * @author jliew @@ -106,7 +102,7 @@ // default action Integer groupId = WebUtil.readIntParam(request, "groupId", false); request.setAttribute("org", userManagementService.findById(Organisation.class, groupId)); - + return mapping.findForward("start"); } @@ -197,7 +193,7 @@ } public ActionForward clone(ActionMapping mapping, ActionForm form, HttpServletRequest request, - HttpServletResponse response) throws UserAccessDeniedException { + HttpServletResponse response) throws Exception { Integer groupId = WebUtil.readIntParam(request, "groupId", false); String lessons = request.getParameter("lessons"); @@ -218,113 +214,20 @@ } monitoringService = AdminServiceProxy.getMonitoringService(getServlet().getServletContext()); - String error = null; - List errors = new ArrayList(); int result = 0; Organisation group = (Organisation) userManagementService.findById(Organisation.class, groupId); if (group != null) { - for (String l : lessonIds) { - Lesson lesson = lessonService.getLesson(Long.valueOf(l)); - if (lesson != null) { - HttpSession ss = SessionManager.getSession(); - if (ss != null) { - UserDTO userDto = (UserDTO) ss.getAttribute(AttributeNames.USER); - if (userDto != null) { - if ((!addAllStaff && staffIds.length > 0) || addAllStaff) { - // create staff LessonClass - String staffGroupName = group.getName() + " Staff"; - List staffUsers = createStaffGroup(groupId, addAllStaff, staffIds); - - if ((!addAllLearners && learnerIds.length > 0) || addAllLearners) { - // create learner LessonClass for lesson - String learnerGroupName = group.getName() + " Learners"; - List learnerUsers = createLearnerGroup(groupId, addAllLearners, learnerIds); - - // init Lesson with user as creator - Lesson newLesson = monitoringService.initializeLesson(lesson.getLessonName(), - lesson.getLessonDescription(), lesson.getLearnerExportAvailable(), lesson - .getLearningDesign().getLearningDesignId(), groupId, userDto - .getUserID(), null, lesson.getLearnerPresenceAvailable(), lesson - .getLearnerImAvailable(), lesson.getLiveEditEnabled()); - - // save LessonClasses - newLesson = monitoringService.createLessonClassForLesson(newLesson.getLessonId(), - group, learnerGroupName, learnerUsers, staffGroupName, staffUsers, userDto - .getUserID()); - - // start Lessons - // TODO user-specified creator; must be someone in staff group - monitoringService - .startLesson(newLesson.getLessonId(), staffUsers.get(0).getUserId()); - - result++; - } else { - error = "No learners specified, can't create any Lessons."; - } - } else { - error = "No staff specified, can't create any Lessons."; - } - } else { - error = "No UserDTO in session, can't create any Lessons."; - } - } - } else { - error = "Couldn't find Lesson based on id=" + l; - } - } + result = monitoringService + .cloneLessons(lessonIds, addAllStaff, addAllLearners, staffIds, learnerIds, group); } else { - error = "Couldn't find Organisation based on id=" + groupId; + throw new UserException("Couldn't find Organisation based on id=" + groupId); } - if (error != null) { - log.error(error); - errors.add(error); - } - request.setAttribute("errors", errors); request.setAttribute("org", group); request.setAttribute("result", result); return mapping.findForward("result"); } - private List createLearnerGroup(Integer groupId, Boolean addAllLearners, String[] learnerIds) { - List learnerUsers = new ArrayList(); - if (addAllLearners) { - Vector learnerVector = userManagementService.getUsersFromOrganisationByRole(groupId, Role.LEARNER, false, - true); - learnerUsers.addAll(learnerVector); - } else { - User user = null; - for (String l : learnerIds) { - user = (User) userManagementService.findById(User.class, Integer.parseInt(l)); - if (user != null) { - learnerUsers.add(user); - } else { - log.error("Couldn't find User based on id=" + l); - } - } - } - return learnerUsers; - } - - private List createStaffGroup(Integer groupId, Boolean addAllStaff, String[] staffIds) { - List staffUsers = new ArrayList(); - if (addAllStaff) { - Vector staffVector = userManagementService.getUsersFromOrganisationByRole(groupId, Role.MONITOR, false, - true); - staffUsers.addAll(staffVector); - } else { - User user = null; - for (String s : staffIds) { - user = (User) userManagementService.findById(User.class, Integer.parseInt(s)); - if (user != null) { - staffUsers.add(user); - } else { - log.error("Couldn't find User based on id=" + s); - } - } - } - return staffUsers; - } } Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml =================================================================== diff -u -r2f21856ec2ab85b47c93cfcc3fa2c8769be65077 -r222473f7592051059387c31c2c4947909f48a1b9 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml (.../monitoringApplicationContext.xml) (revision 2f21856ec2ab85b47c93cfcc3fa2c8769be65077) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml (.../monitoringApplicationContext.xml) (revision 222473f7592051059387c31c2c4947909f48a1b9) @@ -67,6 +67,7 @@ PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED,readOnly + PROPAGATION_REQUIRED Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java =================================================================== diff -u -r2f21856ec2ab85b47c93cfcc3fa2c8769be65077 -r222473f7592051059387c31c2c4947909f48a1b9 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision 2f21856ec2ab85b47c93cfcc3fa2c8769be65077) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision 222473f7592051059387c31c2c4947909f48a1b9) @@ -42,7 +42,6 @@ import org.lamsfoundation.lams.usermanagement.Organisation; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.exception.UserAccessDeniedException; -import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.util.MessageService; /** @@ -881,4 +880,19 @@ /** Get Organisation Name */ public String getOrganisationName(Integer organisationId); + /** + * Used in admin to clone lessons using the given lesson Ids (from another group) into the given group. Given staff + * and learner ids should already be members of the group. + * + * @param lessonIds + * @param addAllStaff + * @param addAllLearners + * @param staffIds + * @param learnerIds + * @param group + * @return + * @throws MonitoringServiceException + */ + public int cloneLessons(String[] lessonIds, Boolean addAllStaff, Boolean addAllLearners, String[] staffIds, + String[] learnerIds, Organisation group) throws MonitoringServiceException; } Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java =================================================================== diff -u -r2f21856ec2ab85b47c93cfcc3fa2c8769be65077 -r222473f7592051059387c31c2c4947909f48a1b9 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 2f21856ec2ab85b47c93cfcc3fa2c8769be65077) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 222473f7592051059387c31c2c4947909f48a1b9) @@ -44,6 +44,8 @@ import java.util.TreeSet; import java.util.Vector; +import javax.servlet.http.HttpSession; + import org.apache.log4j.Logger; import org.lamsfoundation.lams.authoring.service.IAuthoringService; import org.lamsfoundation.lams.dao.IBaseDAO; @@ -101,6 +103,7 @@ import org.lamsfoundation.lams.util.wddx.WDDXProcessor; import org.lamsfoundation.lams.util.wddx.WDDXProcessorConversionException; import org.lamsfoundation.lams.util.wddx.WDDXTAGS; +import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; import org.quartz.JobDetail; import org.quartz.Scheduler; @@ -2885,4 +2888,118 @@ Organisation org = (Organisation) baseDAO.find(Organisation.class, organisationId); return org.getName(); } + + /** + * Used in admin to clone lessons using the given lesson Ids (from another group) into the given group. Given staff + * and learner ids should already be members of the group. + * + * @param lessonIds + * @param addAllStaff + * @param addAllLearners + * @param staffIds + * @param learnerIds + * @param group + * @return number of lessons created. + * @throws MonitoringServiceException + */ + public int cloneLessons(String[] lessonIds, Boolean addAllStaff, Boolean addAllLearners, String[] staffIds, + String[] learnerIds, Organisation group) throws MonitoringServiceException { + int result = 0; + for (String l : lessonIds) { + Lesson lesson = lessonService.getLesson(Long.valueOf(l)); + if (lesson != null) { + HttpSession ss = SessionManager.getSession(); + if (ss != null) { + UserDTO userDto = (UserDTO) ss.getAttribute(AttributeNames.USER); + if (userDto != null) { + if ((!addAllStaff && staffIds.length > 0) || addAllStaff) { + // create staff LessonClass + String staffGroupName = group.getName() + " Staff"; + List staffUsers = createStaffGroup(group.getOrganisationId(), addAllStaff, staffIds); + + if ((!addAllLearners && learnerIds.length > 0) || addAllLearners) { + // create learner LessonClass for lesson + String learnerGroupName = group.getName() + " Learners"; + List learnerUsers = createLearnerGroup(group.getOrganisationId(), addAllLearners, + learnerIds); + + // init Lesson with user as creator + Lesson newLesson = this.initializeLesson(lesson.getLessonName(), lesson + .getLessonDescription(), lesson.getLearnerExportAvailable(), lesson + .getLearningDesign().getLearningDesignId(), group.getOrganisationId(), userDto + .getUserID(), null, lesson.getLearnerPresenceAvailable(), lesson + .getLearnerImAvailable(), lesson.getLiveEditEnabled()); + + // save LessonClasses + newLesson = this + .createLessonClassForLesson(newLesson.getLessonId(), group, learnerGroupName, + learnerUsers, staffGroupName, staffUsers, userDto.getUserID()); + + // start Lessons + // TODO user-specified creator; must be someone in staff group + this.startLesson(newLesson.getLessonId(), staffUsers.get(0).getUserId()); + + result++; + } else { + throw new MonitoringServiceException("No learners specified, can't create any Lessons."); + } + } else { + throw new MonitoringServiceException("No staff specified, can't create any Lessons."); + } + } else { + throw new MonitoringServiceException("No UserDTO in session, can't create any Lessons."); + } + } + } else { + throw new MonitoringServiceException("Couldn't find Lesson based on id=" + l); + } + } + return result; + } + + /* + * Used in cloneLessons. + */ + private List createLearnerGroup(Integer groupId, Boolean addAllLearners, String[] learnerIds) { + List learnerUsers = new ArrayList(); + if (addAllLearners) { + Vector learnerVector = userManagementService.getUsersFromOrganisationByRole(groupId, Role.LEARNER, false, + true); + learnerUsers.addAll(learnerVector); + } else { + User user = null; + for (String l : learnerIds) { + user = (User) userManagementService.findById(User.class, Integer.parseInt(l)); + if (user != null) { + learnerUsers.add(user); + } else { + log.error("Couldn't find User based on id=" + l); + } + } + } + return learnerUsers; + } + + /* + * Used in cloneLessons. + */ + private List createStaffGroup(Integer groupId, Boolean addAllStaff, String[] staffIds) { + List staffUsers = new ArrayList(); + if (addAllStaff) { + Vector staffVector = userManagementService.getUsersFromOrganisationByRole(groupId, Role.MONITOR, false, + true); + staffUsers.addAll(staffVector); + } else { + User user = null; + for (String s : staffIds) { + user = (User) userManagementService.findById(User.class, Integer.parseInt(s)); + if (user != null) { + staffUsers.add(user); + } else { + log.error("Couldn't find User based on id=" + s); + } + } + } + return staffUsers; + } } \ No newline at end of file