Index: lams_build/lib/lams/lams-monitoring.jar =================================================================== diff -u -rb128694883b5db515c3f98f6803b573e04d203d2 -r1b3256ab2070e6b8b91c1c5df04b5ad0e52635a2 Binary files differ Index: lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java =================================================================== diff -u -r3d3c8abbcf06fbea4ab6c43ccc6e3d1b7a3e335b -r1b3256ab2070e6b8b91c1c5df04b5ad0e52635a2 --- lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java (.../LessonManagerServlet.java) (revision 3d3c8abbcf06fbea4ab6c43ccc6e3d1b7a3e335b) +++ lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java (.../LessonManagerServlet.java) (revision 1b3256ab2070e6b8b91c1c5df04b5ad0e52635a2) @@ -186,7 +186,14 @@ element = document.createElement(CentralConstants.ELEM_LESSON); element.setAttribute(CentralConstants.ATTR_LESSON_ID, lessonId.toString()); + + } else if (method.equals(CentralConstants.METHOD_CLONE)) { + lsId = new Long(lsIdStr); + Long lessonId = cloneLesson(serverId, datetime, hashValue, username, lsId, courseId); + element = document.createElement(CentralConstants.ELEM_LESSON); + element.setAttribute(CentralConstants.ATTR_LESSON_ID, lessonId.toString()); + } else if (method.equals(CentralConstants.METHOD_DELETE) || method.equals(CentralConstants.METHOD_REMOVE_LESSON)) { verifyPostRequestMethod(request); @@ -401,7 +408,34 @@ throw new RemoteException(e.getMessage(), e); } } + + private Long cloneLesson(String serverId, String datetime, String hashValue, String username, long lsId, + String courseId) throws RemoteException { + try { + ExtServerOrgMap serverMap = LessonManagerServlet.integrationService.getExtServerOrgMap(serverId); + Authenticator.authenticate(serverMap, datetime, username, hashValue); + ExtUserUseridMap userMap = LessonManagerServlet.integrationService.getExtUserUseridMap(serverMap, username); + ExtCourseClassMap orgMap = LessonManagerServlet.integrationService.getExtCourseClassMap(serverMap.getSid(), + courseId); + if (orgMap == null) { + LessonManagerServlet.log.debug("No course exists for: " + courseId + ". Can't delete any lessons."); + throw new Exception("Course with courseId: " + courseId + " could not be found"); + } + Organisation organisation = orgMap.getOrganisation(); + + // clone lesson + Long newLessonId = monitoringService.cloneLesson(lsId, userMap.getUser().getUserId(), true, true, null, + null, organisation); + // store information which extServer has started the lesson + LessonManagerServlet.integrationService.createExtServerLessonMap(newLessonId, serverMap); + + return newLessonId; + } catch (Exception e) { + throw new RemoteException(e.getMessage(), e); + } + } + @SuppressWarnings("unchecked") private Element getAllStudentProgress(Document document, String serverId, String datetime, String hashValue, String username, long lsId, String courseID) throws RemoteException { Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml =================================================================== diff -u -r73c1472c62db79b6ec21be7a5cba1d901f193013 -r1b3256ab2070e6b8b91c1c5df04b5ad0e52635a2 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml (.../monitoringApplicationContext.xml) (revision 73c1472c62db79b6ec21be7a5cba1d901f193013) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml (.../monitoringApplicationContext.xml) (revision 1b3256ab2070e6b8b91c1c5df04b5ad0e52635a2) @@ -75,6 +75,7 @@ PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED,readOnly + PROPAGATION_REQUIRED Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java =================================================================== diff -u -r95574f488cd396cd8e0e246a091a23dca4190e4f -r1b3256ab2070e6b8b91c1c5df04b5ad0e52635a2 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision 95574f488cd396cd8e0e246a091a23dca4190e4f) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision 1b3256ab2070e6b8b91c1c5df04b5ad0e52635a2) @@ -747,6 +747,21 @@ String[] learnerIds, Organisation group) throws MonitoringServiceException; /** + * Same as cloneLessons method, except it clones only one lesson. + * + * @param lessonId + * @param addAllStaff + * @param addAllLearners + * @param staffIds + * @param learnerIds + * @param group + * @return cloned lesson's id + * @throws MonitoringServiceException + */ + Long cloneLesson(Long lessonId, Integer creatorId, Boolean addAllStaff, Boolean addAllLearners, String[] staffIds, + String[] learnerIds, Organisation group) throws MonitoringServiceException; + + /** * Get list of users who completed the given lesson. */ List getUsersCompletedLesson(Long lessonId, Integer limit, Integer offset, boolean orderAscending); Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java =================================================================== diff -u -r95574f488cd396cd8e0e246a091a23dca4190e4f -r1b3256ab2070e6b8b91c1c5df04b5ad0e52635a2 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 95574f488cd396cd8e0e246a091a23dca4190e4f) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 1b3256ab2070e6b8b91c1c5df04b5ad0e52635a2) @@ -2414,60 +2414,73 @@ @Override 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); + HttpSession ss = SessionManager.getSession(); + if (ss != null) { + UserDTO userDto = (UserDTO) ss.getAttribute(AttributeNames.USER); + if (userDto != null) { + Integer creatorId = userDto.getUserID(); - if ((!addAllLearners && (learnerIds.length > 0)) || addAllLearners) { - // create learner LessonClass for lesson - String learnerGroupName = group.getName() + " Learners"; - List learnerUsers = createLearnerGroup(group.getOrganisationId(), addAllLearners, - learnerIds); + for (String lessonIdStr : lessonIds) { + Long lessonId = Long.parseLong(lessonIdStr); - // init Lesson with user as creator - Lesson newLesson = this.initializeLesson(lesson.getLessonName(), - lesson.getLessonDescription(), lesson.getLearningDesign().getLearningDesignId(), - group.getOrganisationId(), userDto.getUserID(), null, - lesson.isEnableLessonIntro(), lesson.isDisplayDesignImage(), - lesson.getLearnerExportAvailable(), lesson.getLearnerPresenceAvailable(), - lesson.getLearnerImAvailable(), lesson.getLiveEditEnabled(), - lesson.getEnableLessonNotifications(), lesson.getLearnerRestart(), null, null); + cloneLesson(lessonId, creatorId, addAllStaff, addAllLearners, staffIds, learnerIds, group); + result++; + } + } else { + throw new MonitoringServiceException("No UserDTO in session, can't create any Lessons."); + } + } - // save LessonClasses - newLesson = this.createLessonClassForLesson(newLesson.getLessonId(), group, - learnerGroupName, learnerUsers, staffGroupName, staffUsers, - userDto.getUserID()); + return result; + } + + @Override + public Long cloneLesson(Long lessonId, Integer creatorId, Boolean addAllStaff, Boolean addAllLearners, String[] staffIds, + String[] learnerIds, Organisation group) throws MonitoringServiceException { + Lesson newLesson = null; - // start Lessons - // TODO user-specified creator; must be someone in staff group - this.startLesson(newLesson.getLessonId(), staffUsers.get(0).getUserId()); + Lesson lesson = lessonService.getLesson(lessonId); + if (lesson != null) { - 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."); - } + 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 + newLesson = this.initializeLesson(lesson.getLessonName(), lesson.getLessonDescription(), lesson + .getLearningDesign().getLearningDesignId(), group.getOrganisationId(), creatorId, null, + lesson.isEnableLessonIntro(), lesson.isDisplayDesignImage(), lesson + .getLearnerExportAvailable(), lesson.getLearnerPresenceAvailable(), lesson + .getLearnerImAvailable(), lesson.getLiveEditEnabled(), lesson + .getEnableLessonNotifications(), lesson.getLearnerRestart(), null, null); + + // save LessonClasses + newLesson = this.createLessonClassForLesson(newLesson.getLessonId(), group, learnerGroupName, + learnerUsers, staffGroupName, staffUsers, creatorId); + + // start Lessons + // TODO user-specified creator; must be someone in staff group + this.startLesson(newLesson.getLessonId(), staffUsers.get(0).getUserId()); + + } else { + throw new MonitoringServiceException("No learners specified, can't create any Lessons."); } } else { - throw new MonitoringServiceException("Couldn't find Lesson based on id=" + l); + throw new MonitoringServiceException("No staff specified, can't create any Lessons."); } + } else { + throw new MonitoringServiceException("Couldn't find Lesson based on id=" + lessonId); } - return result; + + return newLesson.getLessonId(); } /*