Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java
===================================================================
RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java,v
diff -u -r1.4 -r1.5
--- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java 24 Jan 2006 04:59:51 -0000 1.4
+++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java 30 Jan 2006 05:31:20 -0000 1.5
@@ -32,5 +32,6 @@
public static final String JOB_START_LESSON = "startScheduleLessonJob";
public static final String JOB_FINISH_LESSON = "finishScheduleLessonJob";
public static final String PARAM_LESSON_START_DATE = "lessonStartDate";
- public static final String PARAM_LESSON_FINISH_DATE = "lessonFinishDate";;
+ public static final String PARAM_LESSON_FINISH_DATE = "lessonFinishDate";
+ public static final String PARAM_LEARNER_ID = "learnerID";
}
Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml
===================================================================
RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml,v
diff -u -r1.7 -r1.8
--- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml 24 Jan 2006 03:30:34 -0000 1.7
+++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml 30 Jan 2006 05:31:20 -0000 1.8
@@ -51,6 +51,7 @@
+
Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java
===================================================================
RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java,v
diff -u -r1.30 -r1.31
--- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java 27 Jan 2006 06:44:10 -0000 1.30
+++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java 30 Jan 2006 05:31:20 -0000 1.31
@@ -119,8 +119,9 @@
* @param lessonId
* @param activityId force complete to this activity(this activity will be force complete as well).
* If null value, force will complete all activities in this lesson.
+ * @return success message.
*/
- public void forceCompleteLessonByUser(Integer learnerId,long lessonId,Long activityId);
+ public String forceCompleteLessonByUser(Integer learnerId,long lessonId,Long activityId);
/**
* Archive the specified the lesson. When archived, the data is retained
Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java
===================================================================
RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java,v
diff -u -r1.38 -r1.39
--- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java 27 Jan 2006 06:44:10 -0000 1.38
+++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java 30 Jan 2006 05:31:20 -0000 1.39
@@ -34,9 +34,8 @@
import org.apache.log4j.Logger;
import org.lamsfoundation.lams.authoring.service.IAuthoringService;
import org.lamsfoundation.lams.learning.service.ILearnerService;
-import org.lamsfoundation.lams.learning.service.LearnerService;
-import org.lamsfoundation.lams.learning.web.util.LessonLearnerDataManager;
import org.lamsfoundation.lams.learningdesign.Activity;
+import org.lamsfoundation.lams.learningdesign.ActivityVisitor;
import org.lamsfoundation.lams.learningdesign.ComplexActivity;
import org.lamsfoundation.lams.learningdesign.GateActivity;
import org.lamsfoundation.lams.learningdesign.Group;
@@ -556,27 +555,29 @@
* @throws LamsToolServiceException
* @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#forceCompleteLessonByUser(Integer,long,long)
*/
- public void forceCompleteLessonByUser(Integer learnerId,long lessonId,Long activityId)
+ public String forceCompleteLessonByUser(Integer learnerId,long lessonId,Long activityId)
{
-// LearnerProgress learnerProcess = learnerProgressDAO.getLearnerProgressByLearner(learner,lesson);
- List currentLessonLearners = learnerService.getActiveLearnersByLesson(lessonId);
+
+ List currentLessonLearners = learnerService.getActiveLearnersByLesson(lessonId);
User learner = userDAO.getUserById(learnerId);
Lesson newLesson = lessonDAO.getLesson(new Long(lessonId));
Set activities = newLesson.getLearningDesign().getActivities();
/*
- Every check need check session
Gate -- LearnerService.knockGate(GateActivity gate, User knocker, List lessonLearners)
Y - continue
N - Stop
Group -- getGroup -> exist?
Y - continue
N - PermissionGroup - Stop
- RandomGroup - create group, create tool session.
+ RandomGroup - create group, then complete it and continue.
*/
- String stopReason = null;
+ String stopReason = "Success to complete to the end of lesson";
for (Iterator i = activities.iterator(); i.hasNext();)
{
- Activity activity = (Activity) i.next();
+ Activity actProxy = (Activity) i.next();
+ //reload activity to get real object instead of CGLIB proxy
+ Activity activity = activityDAO.getActivityByActivityId(actProxy.getActivityId());
+
if (activity.isGroupingActivity()){
GroupingActivity groupActivity = (GroupingActivity) activity;
Grouping grouping = groupActivity.getCreateGrouping();
@@ -586,22 +587,30 @@
if(grouping.isRandomGrouping()){
//for random grouping, create then complete it. Continue
learnerService.performGrouping(groupActivity,currentLessonLearners);
- grouping = groupActivity.getCreateGrouping();
- myGroup = grouping.getGroupBy(learner);
+// grouping = groupActivity.getCreateGrouping();
+// myGroup = grouping.getGroupBy(learner);
learnerService.completeActivity(learner,activity,newLesson);
+ log.debug("Grouping activity [" + activity.getActivityId() + "] is completed.");
+ }else{
+ //except random grouping, stop here
+ stopReason = "Force complete stop at non-grouped grouping activity [" + groupActivity + "]";
+ break;
}
- //except random grouping, stop here
- stopReason = "Force complete stop at non-grouped grouping activity [" + groupActivity + "]";
- break;
+ }else{
+ //if group already exist
+ learnerService.completeActivity(learner,activity,newLesson);
+ log.debug("Grouping activity [" + activity.getActivityId() + "] is completed.");
}
}else if ( activity.isGateActivity() ) {
GateActivity gate = (GateActivity) activity;
if(learnerService.knockGate(gate,learner,currentLessonLearners)){
//the gate is opened, continue to next activity to complete
learnerService.completeActivity(learner,activity,newLesson);
+ log.debug("Gate activity [" + gate.getActivityId() + "] is completed.");
}else{
//the gate is closed, stop here
stopReason = "Force complete stop at gate activity [" + gate + "]";
+ break;
}
}else{
//left: toolActivity and complexActivity
@@ -610,7 +619,9 @@
try {
ToolSession toolSession = lamsCoreToolService.getToolSessionByActivity(learner,toolActivity);
learnerService.completeToolSession(toolSession.getToolSessionId(),new Long(learnerId.intValue()));
+ log.debug("Tool activity [" + activity.getActivityId() + "] is completed.");
} catch (LamsToolServiceException e) {
+ throw new MonitoringServiceException(e);
}
}else if(activity.isComplexActivity()){
//for complex activities:SEQUENCE ACTIVITY,PARALLEL ACTIVITY,OPTIONS ACTIVITY
@@ -621,6 +632,7 @@
Activity act = (Activity) iter.next();
forceCompleteLessonByUser(learnerId,lessonId,act.getActivityId());
}
+ log.debug("Complex activity [" + activity.getActivityId() + "] is completed.");
}
}
@@ -632,6 +644,7 @@
}
}
+ return stopReason;
}
Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java
===================================================================
RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java,v
diff -u -r1.15 -r1.16
--- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java 24 Jan 2006 04:59:51 -0000 1.15
+++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java 30 Jan 2006 05:31:20 -0000 1.16
@@ -396,6 +396,52 @@
return outputPacket(mapping,request,response,message,"details");
}
+ /**
+ *
+ *
+ *
+ * This action need a lession ID, Learner ID and Activity ID as input. Activity ID is optional, if it is
+ * null, all activities for this learner will complete to as end as possible.
+ *
+ * @param form
+ * @param request A standard Servlet HttpServletRequest class.
+ * @param response A standard Servlet HttpServletResponse class.
+ * @return An ActionForward
+ * @throws IOException
+ * @throws ServletException
+ */
+ public ActionForward forceComplete(ActionMapping mapping,
+ ActionForm form,
+ HttpServletRequest request,
+ HttpServletResponse response) throws IOException,
+ ServletException{
+ FlashMessage flashMessage = null;
+ this.monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet().getServletContext());
+ //get parameters
+ Long activityId = null;
+ String actId = request.getParameter(AttributeNames.PARAM_ACTIVITY_ID);
+ if(actId != null)
+ try{
+ activityId = new Long(Long.parseLong(actId));
+ }catch(Exception e){
+ activityId = null;
+ }
+ long lessonId = WebUtil.readLongParam(request,AttributeNames.PARAM_LESSON_ID);
+ Integer learnerId = new Integer(WebUtil.readIntParam(request,MonitoringConstants.PARAM_LEARNER_ID));
+
+ //force complete
+ try {
+ String message = monitoringService.forceCompleteLessonByUser(learnerId,lessonId,activityId);
+ flashMessage = new FlashMessage("removeLesson",message);
+ } catch (Exception e) {
+ flashMessage = new FlashMessage("forceComplete",
+ "Error occurs :" + e.toString(),
+ FlashMessage.ERROR);
+ }
+ String message = flashMessage.serializeMessage();
+ return outputPacket(mapping,request,response,message,"details");
+
+ }
public ActionForward getAllLessons(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,