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();
}
/*