Index: lams_monitoring/lib/lams/lams-authoring.jar =================================================================== diff -u -r214a1446ca64680e16978f703dab68540a1c8a68 -r9618589c0aa5eb2d26007e8c14adb13e47747a49 Binary files differ Index: lams_monitoring/lib/lams/lams.jar =================================================================== diff -u -r214a1446ca64680e16978f703dab68540a1c8a68 -r9618589c0aa5eb2d26007e8c14adb13e47747a49 Binary files differ Index: lams_monitoring/lib/lams/src/lams_common_src.zip =================================================================== diff -u -r1a7c63095329d28b04079ad6b6a67c68a4141e09 -r9618589c0aa5eb2d26007e8c14adb13e47747a49 Binary files differ Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java =================================================================== diff -u -r214a1446ca64680e16978f703dab68540a1c8a68 -r9618589c0aa5eb2d26007e8c14adb13e47747a49 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 214a1446ca64680e16978f703dab68540a1c8a68) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 9618589c0aa5eb2d26007e8c14adb13e47747a49) @@ -9,6 +9,7 @@ package org.lamsfoundation.lams.monitoring.service; +import java.util.Date; import java.util.HashSet; import java.util.Iterator; import java.util.List; @@ -17,22 +18,24 @@ import org.lamsfoundation.lams.authoring.service.IAuthoringService; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.Group; -import org.lamsfoundation.lams.learningdesign.Grouping; import org.lamsfoundation.lams.learningdesign.LearningDesign; import org.lamsfoundation.lams.learningdesign.ToolActivity; import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.lesson.LessonClass; import org.lamsfoundation.lams.lesson.dao.ILessonClassDAO; import org.lamsfoundation.lams.lesson.dao.ILessonDAO; +import org.lamsfoundation.lams.tool.NonGroupedToolSession; import org.lamsfoundation.lams.tool.ToolContentIDGenerator; import org.lamsfoundation.lams.tool.ToolContentManager; +import org.lamsfoundation.lams.tool.ToolSession; +import org.lamsfoundation.lams.tool.ToolSessionManager; +import org.lamsfoundation.lams.tool.dao.IToolSessionDAO; import org.lamsfoundation.lams.usermanagement.Organisation; import org.lamsfoundation.lams.usermanagement.User; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; - /** *
This is the major service facade for all monitoring functionalities. It is
* configured as a Spring factory bean so as to utilize the Spring's IOC and
@@ -43,17 +46,21 @@
*
* @author Jacky Fang 2/02/2005
*/
-public class MonitoringService implements IMonitoringService,ApplicationContextAware
+public class MonitoringService implements
+ IMonitoringService,
+ ApplicationContextAware
{
+
//---------------------------------------------------------------------
// Instance variables
//---------------------------------------------------------------------
private ILessonDAO lessonDAO;
private ILessonClassDAO lessonClassDAO;
+ private IToolSessionDAO toolSessionDAO;
private IAuthoringService authoringService;
private ApplicationContext context;
private ToolContentIDGenerator contentIDGenerator;
-
+
//---------------------------------------------------------------------
// Inversion of Control Methods - Method injection
//---------------------------------------------------------------------
@@ -64,36 +71,47 @@
{
this.authoringService = authoringService;
}
+
/**
* @param lessonClassDAO The lessonClassDAO to set.
*/
public void setLessonClassDAO(ILessonClassDAO lessonClassDAO)
{
this.lessonClassDAO = lessonClassDAO;
}
+
/**
* @param lessonDAO The lessonDAO to set.
*/
public void setLessonDAO(ILessonDAO lessonDAO)
{
this.lessonDAO = lessonDAO;
}
+
/**
* @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
*/
public void setApplicationContext(ApplicationContext context) throws BeansException
{
- this.context=context;
+ this.context = context;
}
-
+
/**
* @param contentIDGenerator The contentIDGenerator to set.
*/
public void setContentIDGenerator(ToolContentIDGenerator contentIDGenerator)
{
this.contentIDGenerator = contentIDGenerator;
}
-
+
+ /**
+ * @param toolSessionDAO The toolSessionDAO to set.
+ */
+ public void setToolSessionDAO(IToolSessionDAO toolSessionDAO)
+ {
+ this.toolSessionDAO = toolSessionDAO;
+ }
+
//---------------------------------------------------------------------
// Service Methods
//---------------------------------------------------------------------
@@ -108,36 +126,59 @@
*
* @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#createLesson(long, org.lamsfoundation.lams.usermanagement.User, java.util.List, java.util.List)
*/
- public void createLesson(long learningDesignId,
- User user,
+ public void createLesson(long learningDesignId,
+ User user,
Organisation organisation,
- List organizationUsers,
+ List organizationUsers,
List staffs)
{
-
+ LearningDesign originalLearningDesign = authoringService.getLearningDesign(new Long(learningDesignId));
//copy the current learning design
- LearningDesign copiedLearningDesign = authoringService.copyLearningDesign(new Long(learningDesignId));
-
+ LearningDesign copiedLearningDesign = authoringService.copyLearningDesign(originalLearningDesign);
+
//copy the tool content
- for(Iterator i = copiedLearningDesign.getActivities().iterator();i.hasNext();)
+ for (Iterator i = copiedLearningDesign.getActivities().iterator(); i.hasNext();)
{
- Activity currentActivity = (Activity)i.next();
- if(currentActivity.getActivityTypeId().intValue()==Activity.TOOL_ACTIVITY_TYPE)
- copyToolContent((ToolActivity)currentActivity);
+ Activity currentActivity = (Activity) i.next();
+ if (currentActivity.isToolActivity())
+ {
+ Long newContentId = copyToolContent((ToolActivity) currentActivity);
+ ((ToolActivity) currentActivity).setToolContentId(newContentId);
+ }
}
-
- createNewLesson(user, organisation, organizationUsers, staffs, copiedLearningDesign);
+ authoringService.updateLearningDesign(copiedLearningDesign);
+ //create the new lesson
+ createNewLesson(user,
+ organisation,
+ organizationUsers,
+ staffs,
+ copiedLearningDesign);
}
-
/**
* @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#startlesson(long)
*/
public void startlesson(long lessonId)
{
- // TODO Auto-generated method stub
-
+ //we get the lesson just created
+ Lesson requestedLesson = lessonDAO.getLesson(new Long(lessonId));
+ //initialize tool sessions if necessary
+ for (Iterator i = requestedLesson.getLearningDesign()
+ .getActivities()
+ .iterator(); i.hasNext();)
+ {
+ Activity activity = (Activity) i.next();
+ if (shouldInitToolSessionFor(activity)&&this.isSurvey((ToolActivity)activity))
+ {
+ initToolSessionFor((ToolActivity) activity,
+ requestedLesson.getAllLearners());
+ }
+ }
+ //update lesson status
+ requestedLesson.setLessonStateId(Lesson.STARTED_STATE);
+
+ lessonDAO.updateLesson(requestedLesson);
}
/**
@@ -146,10 +187,9 @@
public void forceCompleteLessonByUser(long learnerProgressId)
{
// TODO Auto-generated method stub
-
+
}
-
-
+
//---------------------------------------------------------------------
// Helper Methods
//---------------------------------------------------------------------
@@ -163,24 +203,34 @@
* @param copiedLearningDesign the new run-time learning design copy
* for this lesson.
*/
- private void createNewLesson(User user, Organisation organisation, List organizationUsers, List staffs, LearningDesign copiedLearningDesign)
+ private void createNewLesson(User user,
+ Organisation organisation,
+ List organizationUsers,
+ List staffs,
+ LearningDesign copiedLearningDesign)
{
//create a new lesson object
LessonClass newLessonClass = createNewLessonClass(copiedLearningDesign);
lessonClassDAO.saveLessonClass(newLessonClass);
-
+
//setup staff group
- newLessonClass.setStaffGroup(Group.createStaffGroup(newLessonClass,new HashSet(staffs)));
+ newLessonClass.setStaffGroup(Group.createStaffGroup(newLessonClass,
+ new HashSet(staffs)));
//setup learner group
- newLessonClass.getGroups().add(Group.createLearnerGroup(newLessonClass,new HashSet(organizationUsers)));
+ newLessonClass.getGroups()
+ .add(Group.createLearnerGroup(newLessonClass,
+ new HashSet(organizationUsers)));
lessonClassDAO.updateLessonClass(newLessonClass);
-
+
//create new Lesson object
- Lesson newLesson = Lesson.createNewLesson(user, organisation, copiedLearningDesign, newLessonClass);
+ Lesson newLesson = Lesson.createNewLesson(user,
+ organisation,
+ copiedLearningDesign,
+ newLessonClass);
newLessonClass.setLesson(newLesson);
lessonDAO.saveLesson(newLesson);
}
-
+
/**
* Setup the empty lesson class according to the run-time learning design
* copy.
@@ -192,10 +242,8 @@
//make a copy of lazily initialized activities
Set activities = new HashSet(copiedLearningDesign.getActivities());
LessonClass newLessonClass = new LessonClass(null, //grouping id
- Grouping.CLASS_GROUPING_TYPE,
new HashSet(),//groups
- activities,
- null, //staff group
+ activities, null, //staff group
null);//lesson
return newLessonClass;
}
@@ -205,17 +253,19 @@
*
* @param toolActivity the tool activity defined in the design.
*/
- private void copyToolContent(ToolActivity toolActivity)
+ private Long copyToolContent(ToolActivity toolActivity)
{
- //This is just for testing purpose because only service is available
- //at the moment. TODO we need to remove this once all done.
- if(shouldCopy(toolActivity))
+ Long newToolcontentID = contentIDGenerator.getNextToolContentIDFor(toolActivity.getTool());
+ //This is just for testing purpose because surveyService is the only
+ //service is available at the moment.
+ //TODO we need to remove this once all done.
+ if (isSurvey(toolActivity))
{
- ToolContentManager contentManager = (ToolContentManager)findToolService(toolActivity);
+ ToolContentManager contentManager = (ToolContentManager) findToolService(toolActivity);
contentManager.copyToolContent(toolActivity.getToolContentId(),
- contentIDGenerator.getNextToolContentIDFor(toolActivity.getTool()));
-
+ newToolcontentID);
}
+ return newToolcontentID;
}
/**
@@ -229,16 +279,59 @@
{
return context.getBean(toolActivity.getTool().getServiceName());
}
-
+
/**
* This is more for testing purpose.
* @param toolActivity the tool activity defined in the design.
* @return
*/
- private boolean shouldCopy(ToolActivity toolActivity)
+ private boolean isSurvey(ToolActivity toolActivity)
{
return toolActivity.getTool().getServiceName().equals("surveyService");
}
+ /**
+ * @param activity
+ */
+ private void initToolSessionFor(ToolActivity activity, Set learners)
+ {
+ activity.setToolSessions(new HashSet());
+ for (Iterator i = learners.iterator(); i.hasNext();)
+ {
+ User learner = (User) i.next();
+ ToolSession toolSession = new NonGroupedToolSession(activity,
+ new Date(System.currentTimeMillis()),
+ ToolSession.STARTED_STATE,
+ learner);
+ toolSessionDAO.saveToolSession(toolSession);
+ //ask tool to create their own tool sessions using the given id.
+ notifyToolsToCreateSession(toolSession.getToolSessionId(), activity);
+ //update the hibernate persistent object
+ activity.getToolSessions().add(toolSession);
+ }
+ }
-}
+ /**
+ * @param toolSessionId
+ */
+ private void notifyToolsToCreateSession(Long toolSessionId,
+ ToolActivity activity)
+ {
+ ToolSessionManager sessionManager = (ToolSessionManager) findToolService(activity);
+ //TODO this is for testing purpose as survey is the only tool available
+ //so far.
+ sessionManager.createToolSession(toolSessionId,
+ activity.getToolContentId());
+ }
+
+ /**
+ * @param activity
+ * @return
+ */
+ private boolean shouldInitToolSessionFor(Activity activity)
+ {
+ return activity.isToolActivity()
+ && !((ToolActivity) activity).getTool().getSupportsGrouping();
+ }
+
+}
\ No newline at end of file
Index: lams_monitoring/test/java/org/lamsfoundation/lams/authoring/service/MockAuthoringService.java
===================================================================
diff -u -r214a1446ca64680e16978f703dab68540a1c8a68 -r9618589c0aa5eb2d26007e8c14adb13e47747a49
--- lams_monitoring/test/java/org/lamsfoundation/lams/authoring/service/MockAuthoringService.java (.../MockAuthoringService.java) (revision 214a1446ca64680e16978f703dab68540a1c8a68)
+++ lams_monitoring/test/java/org/lamsfoundation/lams/authoring/service/MockAuthoringService.java (.../MockAuthoringService.java) (revision 9618589c0aa5eb2d26007e8c14adb13e47747a49)
@@ -37,15 +37,15 @@
*/
public LearningDesign getLearningDesign(Long arg0)
{
- return null;
+ return learningDesignDAO.getLearningDesignById(arg0);
}
/**
* @see org.lamsfoundation.lams.authoring.service.IAuthoringService#copyLearningDesign(java.lang.Long)
*/
- public LearningDesign copyLearningDesign(Long learningDesignId)
+ public LearningDesign copyLearningDesign(LearningDesign learningDesign)
{
- return learningDesignDAO.getLearningDesignById(new Long(1));
+ return learningDesign;
}
/**
@@ -67,10 +67,9 @@
/**
* @see org.lamsfoundation.lams.authoring.service.IAuthoringService#updateLearningDesign(java.lang.Long)
*/
- public void updateLearningDesign(Long arg0)
+ public void updateLearningDesign(LearningDesign learningDesign)
{
- // TODO Auto-generated method stub
-
+ learningDesignDAO.update(learningDesign);
}
/**
Index: lams_monitoring/test/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml
===================================================================
diff -u -r214a1446ca64680e16978f703dab68540a1c8a68 -r9618589c0aa5eb2d26007e8c14adb13e47747a49
--- lams_monitoring/test/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml (.../monitoringApplicationContext.xml) (revision 214a1446ca64680e16978f703dab68540a1c8a68)
+++ lams_monitoring/test/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml (.../monitoringApplicationContext.xml) (revision 9618589c0aa5eb2d26007e8c14adb13e47747a49)
@@ -23,6 +23,7 @@
>