Index: lams_build/lib/lams/lams-learning.jar
===================================================================
diff -u -r5aff7aa069793bc34e60b304e69e9e9fceb996f5 -re5049e0948ac38f849ed086dfa9b8b7dfd8d76ae
Binary files differ
Index: lams_build/lib/lams/lams.jar
===================================================================
diff -u -rfdd3269dc819d6a0a848cb7f3e190bdf270e4ea8 -re5049e0948ac38f849ed086dfa9b8b7dfd8d76ae
Binary files differ
Index: lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILessonDAO.java
===================================================================
diff -u -r7e8b71604044e851c877e918e7d6570a9942a356 -re5049e0948ac38f849ed086dfa9b8b7dfd8d76ae
--- lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILessonDAO.java (.../ILessonDAO.java) (revision 7e8b71604044e851c877e918e7d6570a9942a356)
+++ lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILessonDAO.java (.../ILessonDAO.java) (revision e5049e0948ac38f849ed086dfa9b8b7dfd8d76ae)
@@ -129,4 +129,10 @@
* @return the list of Lessons
*/
public List getPreviewLessonsBeforeDate(final Date startDate);
+
+ /**
+ * Get the lesson that applies to this activity. Not all activities have an attached lesson.
+ */
+ public Lesson getLessonForActivity(final long activityId);
+
}
Index: lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LessonDAO.java
===================================================================
diff -u -r7fe9774aaa83d47d9cd66dca7daf4a30cbb4f3ec -re5049e0948ac38f849ed086dfa9b8b7dfd8d76ae
--- lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LessonDAO.java (.../LessonDAO.java) (revision 7fe9774aaa83d47d9cd66dca7daf4a30cbb4f3ec)
+++ lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LessonDAO.java (.../LessonDAO.java) (revision e5049e0948ac38f849ed086dfa9b8b7dfd8d76ae)
@@ -31,6 +31,7 @@
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Expression;
+import org.lamsfoundation.lams.learningdesign.Activity;
import org.lamsfoundation.lams.learningdesign.LearningDesign;
import org.lamsfoundation.lams.lesson.LearnerProgress;
import org.lamsfoundation.lams.lesson.Lesson;
@@ -58,6 +59,9 @@
private final static String COUNT_ACTIVE_LEARNERS = "select count(distinct progress.user.id)"
+ " from "+LearnerProgress.class.getName()+" progress"
+ " where progress.lesson.id = :lessonId";
+ private final static String FIND_LESSON_FOR_ACTIVITY = "select lesson from "
+ + Lesson.class.getName()+" lesson, "+ Activity.class.getName() + " activity "
+ + " where activity.activityId=:activityId and activity.learningDesign=lesson.learningDesign";
/**
* Retrieves the Lesson
@@ -279,5 +283,20 @@
List lessons = this.getHibernateTemplate().find(FIND_PREVIEW_BEFORE_START_DATE,startDate);
return lessons;
}
+ /**
+ * Get the lesson that applies to this activity. Not all activities have an attached lesson.
+ */
+ public Lesson getLessonForActivity(final long activityId)
+ {
+ HibernateTemplate hibernateTemplate = new HibernateTemplate(this.getSessionFactory());
+ return (Lesson) hibernateTemplate.execute(new HibernateCallback() {
+ public Object doInHibernate(Session session)
+ throws HibernateException {
+ Query query = session.createQuery(FIND_LESSON_FOR_ACTIVITY);
+ query.setLong("activityId", activityId);
+ return query.uniqueResult();
+ }
+ });
+ }
}
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java
===================================================================
diff -u -ra0722fe03d763f9da5efc82987034d929e6a23a1 -re5049e0948ac38f849ed086dfa9b8b7dfd8d76ae
--- lams_learning/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java (.../ILearnerService.java) (revision a0722fe03d763f9da5efc82987034d929e6a23a1)
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java (.../ILearnerService.java) (revision e5049e0948ac38f849ed086dfa9b8b7dfd8d76ae)
@@ -28,12 +28,12 @@
import org.lamsfoundation.lams.learningdesign.Activity;
import org.lamsfoundation.lams.learningdesign.GateActivity;
-import org.lamsfoundation.lams.learningdesign.GroupingActivity;
import org.lamsfoundation.lams.lesson.LearnerProgress;
import org.lamsfoundation.lams.lesson.Lesson;
import org.lamsfoundation.lams.lesson.dto.LearnerProgressDTO;
import org.lamsfoundation.lams.lesson.dto.LessonDTO;
import org.lamsfoundation.lams.usermanagement.User;
+import org.lamsfoundation.lams.usermanagement.service.IUserManagementService;
import org.lamsfoundation.lams.util.MessageService;
/**
*
@@ -45,6 +45,9 @@
/** Get the I18N service. Used by actions for internationalising errors that go back to Flash */
public MessageService getMessageService();
+ /** Get the user service. Used when the action needs the real user object, not just the userId */
+ public IUserManagementService getUserManagementService();
+
/**
* Gets the lesson object for the given key.
*
@@ -105,11 +108,10 @@
* Calculates learner progress and returns the data required to be displayed to the learner (including URL(s)).
* @param completedActivityID identifies the activity just completed
* @param learner the Learner
- * @param lessonId the Lesson in progress.
* @return the bean containing the display data for the Learner
* @throws LearnerServiceException in case of problems.
*/
- public LearnerProgress calculateProgress(Activity completedActivity, Integer learnerId, Long lessonId);
+ public LearnerProgress calculateProgress(Activity completedActivity, Integer learnerId);
/**
@@ -136,10 +138,9 @@
*
* @param learnerId the learner who are running this activity in the design.
* @param activity the activity is being run.
- * @param lesson id the lesson this learner is currently in.
* @return the url for next activity.
*/
- public String completeActivity(Integer learnerId,Long activityId,Long lessonId);
+ public String completeActivity(Integer learnerId,Long activityId);
/**
* Complete the activity in the progress engine and delegate to the progress
@@ -149,10 +150,9 @@
*
* @param learnerId the learner who are running this activity in the design.
* @param activity the activity is being run.
- * @param lessonId the lesson this learner is currently in.
* @return the url for next activity.
*/
- public String completeActivity(Integer learnerId,Activity activity,Long lessonId);
+ public String completeActivity(Integer learnerId,Activity activity);
/**
* Retrieve all lessons that has been started, suspended or finished. All
@@ -167,7 +167,8 @@
* Mark the learner progress as restarting to indicate the current learner
* has exit the lesson. Doesn't use the cached progress object in case it
*
- * @param progressId the current learner progress.
+ * @param userId
+ * @param lessonId
*/
public void exitLesson(Long progressId);
@@ -208,20 +209,18 @@
* Check up the gate status to go through the gate. This also updates the gate.
* This method should be used when we do not have an grouping activity
* that is already part of the Hibernate session.
- * @param lessonId lesson id
* @param gateid the gate that current learner is facing. It could be
* synch gate, schedule gate or permission gate.
* @param knocker the learner who wants to go through the gate.
* @param forceGate if forceGate==true and the lesson is a preview lesson then the gate is opened straight away.
* @return true if the gate is now open
*/
- public boolean knockGate(Long lessonId, Long gateActivityId, User knocker, boolean forceGate);
+ public boolean knockGate(Long gateActivityId, User knocker, boolean forceGate);
/**
* Check up the gate status to go through the gate. This also updates the gate.
* This method should be used when we do have an grouping activity
* that is already part of the Hibernate session.
- * @param lessonId lesson id
* @param gate the gate that current learner is facing. It could be
* synch gate, schedule gate or permission gate.
* Don't supply the actual gate from the cached web version
@@ -230,5 +229,20 @@
* @param forceGate if forceGate==true and the lesson is a preview lesson then the gate is opened straight away.
* @return true if the gate is now open
*/
- public boolean knockGate(Long lessonId, GateActivity gateActivity, User knocker, boolean forceGate);
+ public boolean knockGate(GateActivity gateActivity, User knocker, boolean forceGate);
+
+ /**
+ * Get the learner url for a particular activity.
+ *
+ * @param learnerId
+ * @param activityId
+ */
+ public String getLearnerActivityURL(Integer learnerId, Long activityId);
+
+ /**
+ * Get the lesson for this activity. If the activity is not part of a lesson (ie is from an authoring
+ * design then it will return null.
+ */
+ public Lesson getLessonByActivity(Activity activity);
+
}
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java
===================================================================
diff -u -ra0722fe03d763f9da5efc82987034d929e6a23a1 -re5049e0948ac38f849ed086dfa9b8b7dfd8d76ae
--- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision a0722fe03d763f9da5efc82987034d929e6a23a1)
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision e5049e0948ac38f849ed086dfa9b8b7dfd8d76ae)
@@ -35,7 +35,6 @@
import org.lamsfoundation.lams.learning.progress.ProgressEngine;
import org.lamsfoundation.lams.learning.progress.ProgressException;
import org.lamsfoundation.lams.learning.web.util.ActivityMapping;
-import org.lamsfoundation.lams.learning.web.util.LearningWebUtil;
import org.lamsfoundation.lams.learningdesign.Activity;
import org.lamsfoundation.lams.learningdesign.GateActivity;
import org.lamsfoundation.lams.learningdesign.Grouping;
@@ -308,16 +307,14 @@
* to the learner.
* @param completedActivityID identifies the activity just completed
* @param learner the Learner
- * @param lessonId the Lesson in progress.
* @return the bean containing the display data for the Learner
* @throws LamsToolServiceException
* @throws LearnerServiceException in case of problems.
*/
- public LearnerProgress calculateProgress(Activity completedActivity,
- Integer learnerId,
- Long lessonId)
+ public LearnerProgress calculateProgress(Activity completedActivity,Integer learnerId)
{
- LearnerProgress learnerProgress = learnerProgressDAO.getLearnerProgressByLearner(learnerId,lessonId);
+ Lesson lesson = getLessonByActivity(completedActivity);
+ LearnerProgress learnerProgress = learnerProgressDAO.getLearnerProgressByLearner(learnerId,lesson.getLessonId());
try
{
@@ -346,32 +343,25 @@
lamsCoreToolService.updateToolSession(toolSession);
- return completeActivity(new Integer(learnerId.intValue()), toolSession.getToolActivity(), toolSession.getLesson().getLessonId());
+ return completeActivity(new Integer(learnerId.intValue()), toolSession.getToolActivity());
}
/**
- * @see org.lamsfoundation.lams.learning.service.ILearnerService#completeActivity(java.lang.Integer, java.lang.Long, java.lang.Long)
+ * @see org.lamsfoundation.lams.learning.service.ILearnerService#completeActivity(java.lang.Integer, java.lang.Long)
*/
- public String completeActivity(Integer learnerId,Long activityId,Long lessonId) {
+ public String completeActivity(Integer learnerId,Long activityId) {
Activity activity = getActivity(activityId);
- return completeActivity(learnerId, activity,lessonId);
+ return completeActivity(learnerId, activity);
}
/**
* @see org.lamsfoundation.lams.learning.service.ILearnerService#completeActivity(java.lang.Integer, org.lamsfoundation.lams.learningdesign.Activity, java.lang.Long )
*/
- public String completeActivity(Integer learnerId,Activity activity,Long lessonId)
+ public String completeActivity(Integer learnerId,Activity activity)
{
- //build up the url for next activity.
-
- // need to update the learner progress in the special user's session or the Flash
- // side won't be notified of the correct progress (via the display activity screen).
- // this isn't nice as the service layer is calling the web layer, but as this
- // is triggered from a tool calling completeToolSession, its a bit hard to avoid.
try
{
- LearnerProgress nextLearnerProgress = calculateProgress(activity, learnerId, lessonId);
- LearningWebUtil.setLearnerProgress(nextLearnerProgress);
+ LearnerProgress nextLearnerProgress = calculateProgress(activity, learnerId);
return activityMapping.getProgressURL(nextLearnerProgress);
}
catch (UnsupportedEncodingException e)
@@ -443,7 +433,7 @@
}
} else {
- String error = "Grouping activity "+groupingActivityId+" learner "+learnerId+" does not exist. Cannot perform grouping.";
+ String error = "Grouping activity "+groupingActivity.getActivityId()+" learner "+learnerId+" does not exist. Cannot perform grouping.";
log.error(error);
throw new LearnerServiceException(error);
}
@@ -455,30 +445,31 @@
/**
- * @see org.lamsfoundation.lams.learning.service.ILearnerService#knockGate(java.lang.Long, java.lang.Long, org.lamsfoundation.lams.usermanagement.User)
+ * @see org.lamsfoundation.lams.learning.service.ILearnerService#knockGate(java.lang.Long, org.lamsfoundation.lams.usermanagement.User)
*/
- public boolean knockGate(Long lessonId, Long gateActivityId, User knocker, boolean forceGate) {
+ public boolean knockGate(Long gateActivityId, User knocker, boolean forceGate) {
GateActivity gate = (GateActivity) activityDAO.getActivityByActivityId(gateActivityId, GateActivity.class);
if ( gate != null ) {
- return knockGate(lessonId, gate,knocker, forceGate);
+ return knockGate(gate,knocker, forceGate);
}
String error = "Gate activity "+gateActivityId+" does not exist. Cannot knock on gate.";
log.error(error);
throw new LearnerServiceException(error);
}
/**
- * @see org.lamsfoundation.lams.learning.service.ILearnerService#knockGate(java.lang.Long, org.lamsfoundation.lams.learningdesign.GateActivity, org.lamsfoundation.lams.usermanagement.User)
+ * @see org.lamsfoundation.lams.learning.service.ILearnerService#knockGate(org.lamsfoundation.lams.learningdesign.GateActivity, org.lamsfoundation.lams.usermanagement.User)
*/
- public boolean knockGate(Long lessonId, GateActivity gate, User knocker, boolean forceGate)
+ public boolean knockGate(GateActivity gate, User knocker, boolean forceGate)
{
+ Lesson lesson = getLessonByActivity(gate);
+
//get all learners who have started the lesson
- List lessonLearners = getActiveLearnersByLesson(lessonId);
+ List lessonLearners = getActiveLearnersByLesson(lesson.getLessonId());
boolean gateOpen = false;
if ( forceGate ) {
- Lesson lesson = getLesson(lessonId);
if ( lesson.isPreviewLesson() ) {
// special case for preview - if forceGate is true then brute force open the gate
gateOpen = gate.forceGateOpen();
@@ -497,6 +488,43 @@
}
+ /**
+ * @see org.lamsfoundation.lams.learning.service.ILearnerService#getLearnerActivityURL(java.lang.Integer, java.lang.Long)
+ */
+ public String getLearnerActivityURL(Integer learnerId, Long activityId) {
+ User learner = userManagementService.getUserById(learnerId);
+ Activity requestedActivity = getActivity(activityId);
+ Lesson lesson = getLessonByActivity(requestedActivity);
+ return activityMapping.calculateActivityURLForProgressView(lesson,learner,requestedActivity);
+ }
+
+ /**
+ * @see org.lamsfoundation.lams.learning.service.ILearnerService#getActiveLearnersByLesson(long)
+ */
+ public List getActiveLearnersByLesson(long lessonId)
+ {
+ return lessonService.getActiveLessonLearners(lessonId);
+ }
+
+ /**
+ * @see org.lamsfoundation.lams.learning.service.ILearnerService#getCountActiveLessonLearners(long)
+ */
+ public Integer getCountActiveLearnersByLesson(long lessonId)
+ {
+ return lessonService.getCountActiveLessonLearners(lessonId);
+ }
+
+ /**
+ * Get the lesson for this activity. If the activity is not part of a lesson (ie is from an authoring
+ * design then it will return null.
+ */
+ public Lesson getLessonByActivity(Activity activity) {
+ Lesson lesson = lessonDAO.getLessonForActivity(activity.getActivityId());
+ if ( lesson == null ) {
+ log.warn("Tried to get lesson id for a non-lesson based activity. An error is likely to be thrown soon. Activity was "+activity);
+ }
+ return lesson;
+ }
//---------------------------------------------------------------------
// Helper Methods
//---------------------------------------------------------------------
@@ -580,20 +608,5 @@
return (LessonDTO[])lessonDTOList.toArray(new LessonDTO[lessonDTOList.size()]);
}
- /**
- * @see org.lamsfoundation.lams.learning.service.ILearnerService#getActiveLearnersByLesson(long)
- */
- public List getActiveLearnersByLesson(long lessonId)
- {
- return lessonService.getActiveLessonLearners(lessonId);
- }
-
- /**
- * @see org.lamsfoundation.lams.learning.service.ILearnerService#getCountActiveLessonLearners(long)
- */
- public Integer getCountActiveLearnersByLesson(long lessonId)
- {
- return lessonService.getCountActiveLessonLearners(lessonId);
- }
}
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ActivityAction.java
===================================================================
diff -u -r0737cfe898d26d4143b69f182344b713c7f36158 -re5049e0948ac38f849ed086dfa9b8b7dfd8d76ae
--- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ActivityAction.java (.../ActivityAction.java) (revision 0737cfe898d26d4143b69f182344b713c7f36158)
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ActivityAction.java (.../ActivityAction.java) (revision e5049e0948ac38f849ed086dfa9b8b7dfd8d76ae)
@@ -50,11 +50,18 @@
public static final String ACTIVITY_REQUEST_ATTRIBUTE = "activity";
public static final String LEARNER_PROGRESS_REQUEST_ATTRIBUTE = "learnerprogress";
+
+ private ILearnerService learnerService = null;
+ protected ILearnerService getLearnerService() {
+ if (learnerService == null)
+ learnerService = LearnerServiceProxy.getLearnerService(getServlet().getServletContext());
+ return learnerService;
+ }
+
public ActionForward setupProgressString(ActionForm actionForm, HttpServletRequest request) {
- LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgressByID(request,
- getServlet().getServletContext());
+ LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgress(request,getLearnerService());
ActivityForm activityForm = (ActivityForm) actionForm;
@@ -71,13 +78,6 @@
return null;
}
- /**
- * Get the learner service.
- */
- protected ILearnerService getLearnerService() {
- ILearnerService learnerService = LearnerServiceProxy.getLearnerService(this.getServlet().getServletContext());
- return learnerService;
- }
/**
* Get the ActionMappings.
@@ -87,25 +87,6 @@
return (ActivityMapping)wac.getBean("activityMapping");
}
- /**
- * Get the current learner progress. The request attributes are checked
- * first, if not in request then a new LearnerProgress is loaded using
- * the LearnerService. The LearnerProgress is also stored in the
- * session so that the Flash requests don't have to reload it.
- */
- protected LearnerProgress getLearnerProgress(HttpServletRequest request) {
-
- return LearningWebUtil.getLearnerProgressByID(request,this.getServlet().getServletContext());
- }
-
- /**
- * Sets the LearnerProgress in session so that the Flash requests don't
- * have to reload it.
- */
- protected void setLearnerProgress(HttpServletRequest request, LearnerProgress learnerProgress) {
- LearningWebUtil.setLearnerProgress(learnerProgress);
- }
-
private String getProgressSummary(LearnerProgress learnerProgress) {
StringBuffer progressSummary = new StringBuffer(100);
if ( learnerProgress == null ) {
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivityAction.java
===================================================================
diff -u -r5aff7aa069793bc34e60b304e69e9e9fceb996f5 -re5049e0948ac38f849ed086dfa9b8b7dfd8d76ae
--- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivityAction.java (.../ChooseActivityAction.java) (revision 5aff7aa069793bc34e60b304e69e9e9fceb996f5)
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/ChooseActivityAction.java (.../ChooseActivityAction.java) (revision e5049e0948ac38f849ed086dfa9b8b7dfd8d76ae)
@@ -68,21 +68,22 @@
return mapping.findForward(ActivityMapping.DOUBLE_SUBMIT_ERROR);
}
+ ILearnerService learnerService = getLearnerService();
+
// Get learner and lesson details.
Integer learner = LearningWebUtil.getUserId();
- LearnerProgress progress = getLearnerProgress(request);
+ LearnerProgress progress = LearningWebUtil.getLearnerProgress(request,learnerService);
Lesson lesson = progress.getLesson();
- Activity activity = LearningWebUtil.getActivityFromRequest(request, getLearnerService());
+ Activity activity = LearningWebUtil.getActivityFromRequest(request, learnerService);
if (activity == null) {
log.error(className+": No activity in request or session");
return mapping.findForward(ActivityMapping.ERROR);
}
- ILearnerService learnerService = getLearnerService();
progress = learnerService.chooseActivity(learner, lesson.getLessonId(), activity);
- setLearnerProgress(request,progress);
+ LearningWebUtil.putLearnerProgressInRequest(request,progress);
// need to do the choose first as the chooseActivity changes the progress details
setupProgressString(actionForm, request);
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivityAction.java
===================================================================
diff -u -r5aff7aa069793bc34e60b304e69e9e9fceb996f5 -re5049e0948ac38f849ed086dfa9b8b7dfd8d76ae
--- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivityAction.java (.../CompleteActivityAction.java) (revision 5aff7aa069793bc34e60b304e69e9e9fceb996f5)
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/CompleteActivityAction.java (.../CompleteActivityAction.java) (revision e5049e0948ac38f849ed086dfa9b8b7dfd8d76ae)
@@ -36,7 +36,6 @@
import org.lamsfoundation.lams.learning.web.util.LearningWebUtil;
import org.lamsfoundation.lams.learningdesign.Activity;
import org.lamsfoundation.lams.lesson.LearnerProgress;
-import org.lamsfoundation.lams.lesson.Lesson;
/**
* @author daveg
@@ -72,27 +71,26 @@
return mapping.findForward(ActivityMapping.DOUBLE_SUBMIT_ERROR);
}
+ ILearnerService learnerService = getLearnerService();
+
Integer learnerId = LearningWebUtil.getUserId();
- LearnerProgress progress = getLearnerProgress(request);
- Lesson lesson = progress.getLesson();
- Activity activity = LearningWebUtil.getActivityFromRequest(request, getLearnerService());
+ LearnerProgress progress = LearningWebUtil.getLearnerProgress(request, learnerService);
+ Activity activity = LearningWebUtil.getActivityFromRequest(request, learnerService);
if (activity == null) {
log.error(className+": No activity in request or session");
return mapping.findForward(ActivityMapping.ERROR);
}
- ILearnerService learnerService = getLearnerService();
-
// Set activity as complete
try {
- progress = learnerService.calculateProgress(activity, learnerId, lesson.getLessonId());
+ progress = learnerService.calculateProgress(activity, learnerId);
}
catch (LearnerServiceException e) {
return mapping.findForward("error");
}
LearningWebUtil.putActivityInRequest(request, progress.getNextActivity(), learnerService);
- setLearnerProgress(request,progress);
+ LearningWebUtil.putLearnerProgressInRequest(request,progress);
// need to do the calculateProgress first as the chooseActivity changes the progress details
setupProgressString(actionForm, request);
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayActivityAction.java
===================================================================
diff -u -r5aff7aa069793bc34e60b304e69e9e9fceb996f5 -re5049e0948ac38f849ed086dfa9b8b7dfd8d76ae
--- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayActivityAction.java (.../DisplayActivityAction.java) (revision 5aff7aa069793bc34e60b304e69e9e9fceb996f5)
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayActivityAction.java (.../DisplayActivityAction.java) (revision e5049e0948ac38f849ed086dfa9b8b7dfd8d76ae)
@@ -31,18 +31,21 @@
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
+import org.lamsfoundation.lams.learning.service.ILearnerService;
import org.lamsfoundation.lams.learning.service.LearnerServiceProxy;
import org.lamsfoundation.lams.learning.web.util.ActivityMapping;
import org.lamsfoundation.lams.learning.web.util.LearningWebUtil;
import org.lamsfoundation.lams.lesson.LearnerProgress;
+import org.lamsfoundation.lams.util.WebUtil;
+import org.lamsfoundation.lams.web.util.AttributeNames;
/**
- * Action class to display an activity. This is used when Flash calls the service to the
- * learning process. It is needed to put the activity in the request, on which
- * LoadToolActivityAction relies. If you try to go straight to LoadToolActivityAction
- * then the activity won't be the request.
+ * Action class to display an activity. This is used when Flash calls starts of the
+ * learning process. It is needed to put the learner progress and the activity in the request,
+ * on which LoadToolActivityAction relies. If you try to go straight to LoadToolActivityAction
+ * then the data won't be in the request.
*
* XDoclet definition:
*
@@ -75,11 +78,22 @@
HttpServletRequest request,
HttpServletResponse response)
{
+ ILearnerService learnerService = getLearnerService();
+
+ // Flash can only send the lessonID as that is all it has...
+ Integer learnerId = LearningWebUtil.getUserId();
+ Long lessonId = WebUtil.readLongParam(request,AttributeNames.PARAM_LESSON_ID, true );
+ // hack until Flash changes its url - current sending progressId
+ if ( lessonId == null ) {
+ lessonId = WebUtil.readLongParam(request,"progressId");
+ }
+ LearnerProgress learnerProgress = learnerService.getProgress(learnerId, lessonId);
+
+ LearningWebUtil.putLearnerProgressInRequest(request, learnerProgress);
- setupProgressString(actionForm, request);
ActivityMapping actionMappings = LearnerServiceProxy.getActivityMapping(getServlet().getServletContext());
- LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgressByID(request, getServlet().getServletContext());
- ActionForward forward =actionMappings.getProgressForward(learnerProgress,false,request,getLearnerService());
+ ActionForward forward =actionMappings.getProgressForward(learnerProgress,false,request,learnerService);
+ setupProgressString(actionForm, request);
if(log.isDebugEnabled())
log.debug(forward.toString());
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivityAction.java
===================================================================
diff -u -r5aff7aa069793bc34e60b304e69e9e9fceb996f5 -re5049e0948ac38f849ed086dfa9b8b7dfd8d76ae
--- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivityAction.java (.../DisplayOptionsActivityAction.java) (revision 5aff7aa069793bc34e60b304e69e9e9fceb996f5)
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivityAction.java (.../DisplayOptionsActivityAction.java) (revision e5049e0948ac38f849ed086dfa9b8b7dfd8d76ae)
@@ -35,6 +35,7 @@
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
+import org.lamsfoundation.lams.learning.service.ILearnerService;
import org.lamsfoundation.lams.learning.web.bean.ActivityURL;
import org.lamsfoundation.lams.learning.web.form.OptionsActivityForm;
@@ -72,8 +73,9 @@
OptionsActivityForm form = (OptionsActivityForm)actionForm;
ActivityMapping actionMappings = getActivityMapping();
- LearnerProgress learnerProgress = getLearnerProgress(request);
- Activity activity = LearningWebUtil.getActivityFromRequest(request, getLearnerService());
+ ILearnerService learnerService = getLearnerService();
+ LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgress(request, learnerService);
+ Activity activity = LearningWebUtil.getActivityFromRequest(request, learnerService);
if (!(activity instanceof OptionsActivity)) {
log.error(className+": activity not OptionsActivity "+activity.getActivityId());
return mapping.findForward(ActivityMapping.ERROR);
@@ -111,7 +113,6 @@
this.saveToken(request);
- // need to do the calculateProgress first as the chooseActivity changes the progress details
setupProgressString(form, request);
String forward = "displayOptions";
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayToolActivityAction.java
===================================================================
diff -u -r1290c6550e900eba41bd51803e59f2a7af0b521b -re5049e0948ac38f849ed086dfa9b8b7dfd8d76ae
--- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayToolActivityAction.java (.../DisplayToolActivityAction.java) (revision 1290c6550e900eba41bd51803e59f2a7af0b521b)
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayToolActivityAction.java (.../DisplayToolActivityAction.java) (revision e5049e0948ac38f849ed086dfa9b8b7dfd8d76ae)
@@ -30,6 +30,7 @@
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
+import org.lamsfoundation.lams.learning.service.ILearnerService;
import org.lamsfoundation.lams.learning.web.util.ActivityMapping;
import org.lamsfoundation.lams.learning.web.util.LearningWebUtil;
import org.lamsfoundation.lams.learningdesign.Activity;
@@ -63,8 +64,9 @@
//ActivityForm form = (ActivityForm)actionForm;
ActivityMapping actionMappings = getActivityMapping();
- LearnerProgress learnerProgress = getLearnerProgress(request);
- Activity activity = LearningWebUtil.getActivityFromRequest(request, getLearnerService());
+ ILearnerService learnerService = getLearnerService();
+ LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgress(request, learnerService);
+ Activity activity = LearningWebUtil.getActivityFromRequest(request, learnerService);
if (!(activity instanceof ToolActivity))
{
log.error(className+": activity not ToolActivity");
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DummyLearnerAction.java
===================================================================
diff -u -rdf5800a31c32417e062928bfca21c1b2c2ed1472 -re5049e0948ac38f849ed086dfa9b8b7dfd8d76ae
--- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DummyLearnerAction.java (.../DummyLearnerAction.java) (revision df5800a31c32417e062928bfca21c1b2c2ed1472)
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DummyLearnerAction.java (.../DummyLearnerAction.java) (revision e5049e0948ac38f849ed086dfa9b8b7dfd8d76ae)
@@ -158,7 +158,7 @@
log.debug("The learner ["+learner+"] joined lesson. The"
+"progress data is:"+learnerProgress.toString());
- LearningWebUtil.setLearnerProgress(learnerProgress);
+ LearningWebUtil.putLearnerProgressInRequest(request, learnerProgress);
return mapping.findForward(DISPLAY_ACTIVITY);
}
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GateAction.java
===================================================================
diff -u -ra0722fe03d763f9da5efc82987034d929e6a23a1 -re5049e0948ac38f849ed086dfa9b8b7dfd8d76ae
--- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GateAction.java (.../GateAction.java) (revision a0722fe03d763f9da5efc82987034d929e6a23a1)
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GateAction.java (.../GateAction.java) (revision e5049e0948ac38f849ed086dfa9b8b7dfd8d76ae)
@@ -42,9 +42,11 @@
import org.lamsfoundation.lams.learningdesign.PermissionGateActivity;
import org.lamsfoundation.lams.learningdesign.ScheduleGateActivity;
import org.lamsfoundation.lams.learningdesign.SynchGateActivity;
-import org.lamsfoundation.lams.lesson.LearnerProgress;
+import org.lamsfoundation.lams.lesson.Lesson;
+import org.lamsfoundation.lams.usermanagement.User;
import org.lamsfoundation.lams.util.WebUtil;
import org.lamsfoundation.lams.web.action.LamsDispatchAction;
+import org.lamsfoundation.lams.web.util.AttributeNames;
/**
@@ -119,69 +121,38 @@
HttpServletResponse response) throws IOException,
ServletException
{
- LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgressByID(request,
- getServlet().getServletContext());
- //validate pre-condition.
- validateLearnerProgress(learnerProgress);
-
boolean forceGate = WebUtil.readBooleanParam(request,PARAM_FORCE_GATE_OPEN,false);
+ Long activityId = WebUtil.readLongParam(request, AttributeNames.PARAM_ACTIVITY_ID);
//initialize service object
ILearnerService learnerService = LearnerServiceProxy.getLearnerService(getServlet().getServletContext());
- Integer totalNumActiveLearners = learnerService.getCountActiveLearnersByLesson(learnerProgress.getLesson().getLessonId());
+ Activity activity = learnerService.getActivity(activityId);
+ Lesson lesson = learnerService.getLessonByActivity(activity);
+ User learner = LearningWebUtil.getUser(learnerService);
+
+ Integer totalNumActiveLearners = learnerService.getCountActiveLearnersByLesson(lesson.getLessonId());
//knock the gate
- boolean gateOpen = learnerService.knockGate(learnerProgress.getLesson().getLessonId(),
- learnerProgress.getNextActivity().getActivityId(),
- learnerProgress.getUser(),forceGate);
+ boolean gateOpen = learnerService.knockGate(activityId,learner,forceGate);
+
// if the gate is open, let the learner go to the next activity ( updating the cached learner progress on the way )
// pass only the ids in to completeActivity, so that the service level looks up the objects.
// if we reuse our cached entries, hibernate may throw session errors (if the objects are CGLIB entities).
if(gateOpen)
{
- String nextActivityUrl = learnerService.completeActivity(learnerProgress.getUser().getUserId(),
- learnerProgress.getNextActivity().getActivityId(),
- learnerProgress.getLesson().getLessonId());
- // get the update
- LearningWebUtil.setLearnerProgress(learnerService.getProgressById(learnerProgress.getLearnerProgressId()));
+ String nextActivityUrl = learnerService.completeActivity(learner.getUserId(),activityId);
response.sendRedirect(nextActivityUrl);
return null;
}
//if the gate is closed, ask the learner to wait ( updating the cached learner progress on the way )
else {
- learnerProgress = learnerService.getProgressById(learnerProgress.getLearnerProgressId());
- LearningWebUtil.setLearnerProgress(learnerProgress);
- return findViewByGateType(mapping, (DynaActionForm)form, learnerProgress.getCurrentActivity(), totalNumActiveLearners, learnerProgress.getLesson().isPreviewLesson());
+ return findViewByGateType(mapping, (DynaActionForm)form, activity, totalNumActiveLearners, lesson.isPreviewLesson());
}
}
//---------------------------------------------------------------------
// Helper methods
//---------------------------------------------------------------------
/**
- * @param learnerProgress
- */
- private void validateLearnerProgress(LearnerProgress learnerProgress)
- {
- if(learnerProgress ==null)
- throw new LearnerServiceException("Can't perform grouping without knowing" +
- " the learner progress.");
-
- if(!isNextActivityValid(learnerProgress))
- throw new LearnerServiceException("Error in progress engine. Getting "
- +learnerProgress.getNextActivity().toString()
- +" where it should be gate activity");
- }
-
- /**
- * @param learnerProgress
- * @return
- */
- private boolean isNextActivityValid(LearnerProgress learnerProgress)
- {
- return learnerProgress.getNextActivity()!=null&&(learnerProgress.getNextActivity().isGateActivity());
- }
-
- /**
* Dispatch view the according to the gate type.
*
* @param mapping An ActionMapping class that will be used by the Action
@@ -203,6 +174,7 @@
if ( gate != null ) {
gateForm.set("totalLearners",totalNumActiveLearners);
gateForm.set("previewLesson",isPreviewLesson);
+ gateForm.set("activityId",gate.getActivityId());
if(gate.isSynchGate())
return viewSynchGate(mapping,gateForm,(SynchGateActivity)gate);
else if(gate.isScheduleGate())
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java
===================================================================
diff -u -ra0722fe03d763f9da5efc82987034d929e6a23a1 -re5049e0948ac38f849ed086dfa9b8b7dfd8d76ae
--- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java (.../GroupingAction.java) (revision a0722fe03d763f9da5efc82987034d929e6a23a1)
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java (.../GroupingAction.java) (revision e5049e0948ac38f849ed086dfa9b8b7dfd8d76ae)
@@ -124,21 +124,19 @@
HttpServletResponse response) throws IOException,
ServletException
{
- LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgressByID(request,
- getServlet().getServletContext());
- validateLearnerProgress(learnerProgress);
boolean forceGroup = WebUtil.readBooleanParam(request,PARAM_FORCE_GROUPING,false);
//initialize service object
ILearnerService learnerService = LearnerServiceProxy.getLearnerService(getServlet().getServletContext());
+ LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgress(request, learnerService);
+ validateLearnerProgress(learnerProgress);
boolean groupingDone = learnerService.performGrouping(learnerProgress.getLesson().getLessonId(),
learnerProgress.getNextActivity().getActivityId(),
LearningWebUtil.getUserId(),forceGroup);
LearningWebUtil.putActivityInRequest(request, learnerProgress.getNextActivity(), learnerService);
- LearningWebUtil.setLessonId(learnerProgress.getLesson().getLessonId());
DynaActionForm groupForm = (DynaActionForm)form;
groupForm.set("previewLesson",learnerProgress.getLesson().isPreviewLesson());
@@ -196,19 +194,14 @@
HttpServletResponse response) throws IOException,
ServletException
{
- LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgressByUser(request,
- getServlet().getServletContext());
//initialize service object
ILearnerService learnerService = LearnerServiceProxy.getLearnerService(getServlet().getServletContext());
+ LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgress(request,learnerService);
Activity groupingActivity = LearningWebUtil.getActivityFromRequest(request,learnerService);
-
String nextActivityUrl = learnerService.completeActivity(learnerProgress.getUser().getUserId(),
- groupingActivity,
- learnerProgress.getLesson().getLessonId());
-
+ groupingActivity);
response.sendRedirect(nextActivityUrl);
-
return null;
}
//---------------------------------------------------------------------
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java
===================================================================
diff -u -r6f11dd80335ff2b8a2d06d21f1a49b307ed233c1 -re5049e0948ac38f849ed086dfa9b8b7dfd8d76ae
--- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java (.../LearnerAction.java) (revision 6f11dd80335ff2b8a2d06d21f1a49b307ed233c1)
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LearnerAction.java (.../LearnerAction.java) (revision e5049e0948ac38f849ed086dfa9b8b7dfd8d76ae)
@@ -159,7 +159,7 @@
log.debug("The learner ["+learner+"] joined lesson. The"
+"porgress data is:"+learnerProgress.toString());
- LearningWebUtil.setLearnerProgress(learnerProgress);
+ LearningWebUtil.putLearnerProgressInRequest(request,learnerProgress);
//serialize a acknowledgement flash message with the path of display next
//activity
@@ -209,7 +209,7 @@
FlashMessage message = null;
try {
- LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgressByUser(request,getServlet().getServletContext());
+ LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgress(request,learnerService);
if(log.isDebugEnabled())
log.debug("Exiting lesson, lesson id is: "+learnerProgress.getLesson().getLessonId());
@@ -313,11 +313,7 @@
Integer learnerId = LearningWebUtil.getUserId();
ILearnerService learnerService = LearnerServiceProxy.getLearnerService(getServlet().getServletContext());
- Long lessonId = WebUtil.readLongParam(request,AttributeNames.PARAM_LESSON_ID,true);
- if ( lessonId == null ) {
- // temporary code until Flash gets updated to send the lessonID parameter
- lessonId = WebUtil.readLongParam(request,LearningWebUtil.PARAM_PROGRESS_ID);
- }
+ Long lessonId = WebUtil.readLongParam(request,AttributeNames.PARAM_LESSON_ID );
LearnerProgressDTO learnerProgress = learnerService.getProgressDTOByLessonId(lessonId, learnerId);
message = new FlashMessage("getFlashProgressData",learnerProgress);
@@ -380,7 +376,7 @@
Activity requestedActivity = learnerService.getActivity(new Long(activityId));
//preparing tranfer object for flash
- LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgressByUser(request,getServlet().getServletContext());
+ LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgress(request,learnerService);
ProgressActivityDTO activityDTO = new ProgressActivityDTO(new Long(activityId),
activityMapping.calculateActivityURLForProgressView(learnerProgress.getLesson(),learner,requestedActivity));
//send data back to flash.
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java
===================================================================
diff -u -r1290c6550e900eba41bd51803e59f2a7af0b521b -re5049e0948ac38f849ed086dfa9b8b7dfd8d76ae
--- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java (.../LoadToolActivityAction.java) (revision 1290c6550e900eba41bd51803e59f2a7af0b521b)
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java (.../LoadToolActivityAction.java) (revision e5049e0948ac38f849ed086dfa9b8b7dfd8d76ae)
@@ -31,6 +31,7 @@
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
+import org.lamsfoundation.lams.learning.service.ILearnerService;
import org.lamsfoundation.lams.learning.service.LearnerServiceProxy;
import org.lamsfoundation.lams.learning.web.bean.ActivityURL;
import org.lamsfoundation.lams.learning.web.form.ActivityForm;
@@ -73,8 +74,9 @@
ActivityForm form = (ActivityForm)actionForm;
ActivityMapping actionMappings = LearnerServiceProxy.getActivityMapping(this.getServlet().getServletContext());
- LearnerProgress learnerProgress = getLearnerProgress(request);
- Activity activity = LearningWebUtil.getActivityFromRequest(request, getLearnerService());
+ ILearnerService learnerService = getLearnerService();
+ LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgress(request,learnerService);
+ Activity activity = LearningWebUtil.getActivityFromRequest(request, learnerService);
form.setActivityId(activity.getActivityId());
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMapping.java
===================================================================
diff -u -r5aff7aa069793bc34e60b304e69e9e9fceb996f5 -re5049e0948ac38f849ed086dfa9b8b7dfd8d76ae
--- lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMapping.java (.../ActivityMapping.java) (revision 5aff7aa069793bc34e60b304e69e9e9fceb996f5)
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMapping.java (.../ActivityMapping.java) (revision e5049e0948ac38f849ed086dfa9b8b7dfd8d76ae)
@@ -27,8 +27,6 @@
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
-import java.util.Iterator;
-import java.util.Set;
import javax.servlet.http.HttpServletRequest;
@@ -121,9 +119,13 @@
if (progress.isLessonComplete())
{
// If lesson complete forward to lesson complete action. This action will
- // cause a client request to clear ALL frames.
+ // cause a client request to clear ALL frames. Need to append the progress
+ // id as getting to the end from an activity can't have the progress in the request
+ // and there isn't an activity from which we can determine the lesson and hence
+ // the progress.
String strutsAction = this.getActivityMappingStrategy()
.getLessonCompleteAction();
+ strutsAction = WebUtil.appendParameterToURL(strutsAction, LearningWebUtil.PARAM_PROGRESS_ID, progress.getLearnerProgressId().toString());
actionForward = this.strutsActionToForward(strutsAction,
null,
redirect);
@@ -198,9 +200,13 @@
if (progress.isLessonComplete())
{
// If lesson complete forward to lesson complete action. This action will
- // cause a client request to clear ALL frames.
+ // cause a client request to clear ALL frames. Need to append the progress
+ // id as getting to the end from an activity can't have the progress in the request
+ // and there isn't an activity from which we can determine the lesson and hence
+ // the progress.
String strutsAction = this.getActivityMappingStrategy()
.getLessonCompleteAction();
+ strutsAction = WebUtil.appendParameterToURL(strutsAction, LearningWebUtil.PARAM_PROGRESS_ID, progress.getLearnerProgressId().toString());
return activityURL = strutsActionToURL(strutsAction, null, true);
}
else
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/LearningWebUtil.java
===================================================================
diff -u -rdf5800a31c32417e062928bfca21c1b2c2ed1472 -re5049e0948ac38f849ed086dfa9b8b7dfd8d76ae
--- lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/LearningWebUtil.java (.../LearningWebUtil.java) (revision df5800a31c32417e062928bfca21c1b2c2ed1472)
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/LearningWebUtil.java (.../LearningWebUtil.java) (revision e5049e0948ac38f849ed086dfa9b8b7dfd8d76ae)
@@ -24,15 +24,16 @@
/* $$Id$$ */
package org.lamsfoundation.lams.learning.web.util;
-import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
+import org.apache.log4j.Logger;
import org.lamsfoundation.lams.learning.service.ILearnerService;
-import org.lamsfoundation.lams.learning.service.LearnerServiceProxy;
import org.lamsfoundation.lams.learning.web.action.ActivityAction;
import org.lamsfoundation.lams.learningdesign.Activity;
import org.lamsfoundation.lams.lesson.LearnerProgress;
+import org.lamsfoundation.lams.lesson.Lesson;
+import org.lamsfoundation.lams.usermanagement.User;
import org.lamsfoundation.lams.usermanagement.dto.UserDTO;
import org.lamsfoundation.lams.util.WebUtil;
import org.lamsfoundation.lams.web.session.SessionManager;
@@ -49,20 +50,16 @@
public class LearningWebUtil
{
-// private static Logger log = Logger.getLogger(LearningWebUtil.class);
+ private static Logger log = Logger.getLogger(LearningWebUtil.class);
//---------------------------------------------------------------------
// Class level constants - session attributes
//---------------------------------------------------------------------
public static final String PARAM_PROGRESS_ID = "progressID";
/**
* Helper method to retrieve the user data. Gets the id from the user details
- * in the session then retrieves the real user object.
- *
- * @param request A standard Servlet HttpServletRequest class.
- * @param servletContext the servlet container that has all resources
- * @param surveyService the service facade of survey tool
- * @return the user data value object
+ * in the shared session
+ * @return the user id
*/
public static Integer getUserId()
{
@@ -72,101 +69,77 @@
}
/**
- * Helper method to get lesson id.
- *
- * @param request A standard Servlet HttpServletRequest class.
- * @param learnerService leaner service facade.
- * @param servletContext the servlet container that has all resources
- * @return The requested lesson.
+ * Helper method to retrieve the user data. Gets the id from the user details
+ * in the shared session then retrieves the real user object.
*/
- public static Long getLessonId(HttpServletRequest request)
+ public static User getUser(ILearnerService learnerService)
{
HttpSession ss = SessionManager.getSession();
- Long lessonId = (Long)ss.getAttribute(AttributeNames.PARAM_LESSON_ID);
-
- if(lessonId ==null)
- {
- // not in the session - is it in the request?
- lessonId = WebUtil.readLongParam(request,AttributeNames.PARAM_LESSON_ID,true);
- }
- return lessonId;
+ UserDTO learner = (UserDTO) ss.getAttribute(AttributeNames.USER);
+ return learner != null ? learnerService.getUserManagementService().getUserById(learner.getUserID()) : null;
}
-
- /**
- * Put the lesson id in the user's special session object, so that
- * it can be retrieved by getLessonId()
- *
- * @param request A standard Servlet HttpServletRequest class.
- * @param learnerService leaner service facade.
- * @param servletContext the servlet container that has all resources
- * @return The requested lesson.
- */
- public static void setLessonId(Long lessonId)
- {
- HttpSession ss = SessionManager.getSession();
- if ( lessonId != null ) {
- ss.setAttribute(AttributeNames.PARAM_LESSON_ID, lessonId);
- } else {
- ss.removeAttribute(AttributeNames.PARAM_LESSON_ID);
- }
- }
-
/**
- * Put the learner progress in the user's special session object.
+ * Put the learner progress in the request. This allows some optimisation between the
+ * code that updates the progress and the next action which will access the progress.
*/
- public static void setLearnerProgress(LearnerProgress progress) {
- HttpSession ss = SessionManager.getSession();
+ public static void putLearnerProgressInRequest(HttpServletRequest request, LearnerProgress progress) {
if ( progress != null ) {
- ss.setAttribute(ActivityAction.LEARNER_PROGRESS_REQUEST_ATTRIBUTE, progress);
+ request.setAttribute(ActivityAction.LEARNER_PROGRESS_REQUEST_ATTRIBUTE, progress);
} else {
- ss.removeAttribute(ActivityAction.LEARNER_PROGRESS_REQUEST_ATTRIBUTE);
+ request.removeAttribute(ActivityAction.LEARNER_PROGRESS_REQUEST_ATTRIBUTE);
}
}
/**
- * Get the current learner progress. The http session attributes are checked
- * first, if not in request then a new LearnerProgress is loaded by id using
- * the LearnerService. The LearnerProgress is also stored in the
- * session so that the Flash requests don't have to reload it.
+ * Get the current learner progress. Check the request - in some cases it may be there.
+ *
+ * If not, the learner progress id might be in the request (if we've just come from complete activity).
+ * If so, get it from the db using the learner progress.
+ *
+ * If the learner progress id isn't available, then we have to look it up using activity
+ * based on the activity / activity id in the request.
*/
- public static LearnerProgress getLearnerProgressByID(HttpServletRequest request,ServletContext servletContext) {
- HttpSession ss = SessionManager.getSession();
- LearnerProgress learnerProgress = (LearnerProgress)ss.getAttribute(ActivityAction.LEARNER_PROGRESS_REQUEST_ATTRIBUTE);
+ public static LearnerProgress getLearnerProgress(HttpServletRequest request, ILearnerService learnerService) {
+ LearnerProgress learnerProgress = (LearnerProgress)request.getAttribute(ActivityAction.LEARNER_PROGRESS_REQUEST_ATTRIBUTE);
+ if ( learnerProgress != null ) {
+ if ( log.isDebugEnabled() ) {
+ log.debug("getLearnerProgress: found progress in the request");
+ }
+ return learnerProgress;
+ }
if (learnerProgress == null)
{
- //initialize service object
- ILearnerService learnerService = LearnerServiceProxy.getLearnerService(servletContext);
- long learnerProgressId = WebUtil.readLongParam(request,LearningWebUtil.PARAM_PROGRESS_ID);
- learnerProgress = learnerService.getProgressById(new Long(learnerProgressId));
- setLearnerProgress(learnerProgress);
+ Long learnerProgressId = WebUtil.readLongParam(request,LearningWebUtil.PARAM_PROGRESS_ID, true);
+ // temp hack until Flash side updates it call.
+ if ( learnerProgressId == null ) {
+ learnerProgressId = WebUtil.readLongParam(request,"progressId", true);
+ }
+
+ if ( learnerProgressId != null ) {
+ learnerProgress = learnerService.getProgressById(new Long(learnerProgressId));
+ if ( learnerProgress != null && log.isDebugEnabled() ) {
+ log.debug("getLearnerProgress: found progress via progress id");
+ }
+ }
}
- return learnerProgress;
- }
- /**
- * Get the current learner progress. The http session attributes are checked
- * first, if not in request then a new LearnerProgress is loaded by user
- * and lesson using the LearnerService. The LearnerProgress is also stored
- * in the session so that the Flash requests don't have to reload it.
- */
- public static LearnerProgress getLearnerProgressByUser(HttpServletRequest request,ServletContext servletContext) {
- HttpSession ss = SessionManager.getSession();
- LearnerProgress learnerProgress = (LearnerProgress)ss.getAttribute(ActivityAction.LEARNER_PROGRESS_REQUEST_ATTRIBUTE);
-
if (learnerProgress == null)
{
- //initialize service object
- ILearnerService learnerService = LearnerServiceProxy.getLearnerService(servletContext);
- Integer currentLearner = getUserId();
- Long lessonId = getLessonId(request);
- learnerProgress = learnerService.getProgress(currentLearner,lessonId);
- setLearnerProgress(learnerProgress);
+ Integer learnerId = getUserId();
+ Activity act = getActivityFromRequest(request, learnerService);
+ Lesson lesson = learnerService.getLessonByActivity(act);
+ learnerProgress = learnerService.getProgress(learnerId, lesson.getLessonId());
+ if ( learnerProgress != null && log.isDebugEnabled() ) {
+ log.debug("getLearnerProgress: found progress via learner id and activity");
+ }
}
+
+ putLearnerProgressInRequest(request, learnerProgress);
return learnerProgress;
}
-
+
/**
* Get the activity from request. We assume there is a parameter coming in
* if there is no activity can be found in the http request. Then the
Index: lams_learning/test/java/org/lamsfoundation/lams/learning/service/TestLearnerService.java
===================================================================
diff -u -ra0722fe03d763f9da5efc82987034d929e6a23a1 -re5049e0948ac38f849ed086dfa9b8b7dfd8d76ae
--- lams_learning/test/java/org/lamsfoundation/lams/learning/service/TestLearnerService.java (.../TestLearnerService.java) (revision a0722fe03d763f9da5efc82987034d929e6a23a1)
+++ lams_learning/test/java/org/lamsfoundation/lams/learning/service/TestLearnerService.java (.../TestLearnerService.java) (revision e5049e0948ac38f849ed086dfa9b8b7dfd8d76ae)
@@ -199,17 +199,15 @@
//progress from survey to synch gate
testRootPreviousActivity = testCompletedActivity;
testProgress = learnerService.calculateProgress(testCompletedActivity,
- testUser.getUserId(),
- testLesson.getLessonId());
+ testUser.getUserId());
assertLearnerProgress(testRootPreviousActivity,TEST_SYNCHGATE_ACTIVITY_UIID,TEST_SYNCHGATE_ACTIVITY_UIID,1,1,"sycn-gate","sycn-gate");
assertEquals("verify temp completed activities",1,testProgress.getCurrentCompletedActivitiesList().size());
//progress from synch gate to notebook
testCompletedActivity = testProgress.getNextActivity();
testRootPreviousActivity = testCompletedActivity;
testProgress = learnerService.calculateProgress(testCompletedActivity,
- testUser.getUserId(),
- testLesson.getLessonId());
+ testUser.getUserId());
assertLearnerProgress(testRootPreviousActivity,TEST_NOTEBOOK_ACTIVITY_UIID,TEST_NOTEBOOK_ACTIVITY_UIID,2,1,"random grouping","random grouping");
assertEquals("verify temp completed activities",1,testProgress.getCurrentCompletedActivitiesList().size());
@@ -218,17 +216,15 @@
testCompletedActivity = testProgress.getNextActivity();
testRootPreviousActivity = testCompletedActivity;
testProgress = learnerService.calculateProgress(testCompletedActivity,
- testUser.getUserId(),
- testLesson.getLessonId());
+ testUser.getUserId());
assertLearnerProgress(testRootPreviousActivity,TEST_RGRP_ACTIVITY_UIID,TEST_RGRP_ACTIVITY_UIID,3,1,"random grouping","random grouping");
assertEquals("verify temp completed activities",1,testProgress.getCurrentCompletedActivitiesList().size());
//progress from random grouping activity to schedule gate
testCompletedActivity = testProgress.getNextActivity();
testRootPreviousActivity = testCompletedActivity;
testProgress = learnerService.calculateProgress(testCompletedActivity,
- testUser.getUserId(),
- testLesson.getLessonId());
+ testUser.getUserId());
assertLearnerProgress(testRootPreviousActivity,TEST_SCHEDULE_GATE_ACTIVITY_UIID,TEST_SCHEDULE_GATE_ACTIVITY_UIID,4,1,"schedule gate","schedule gate");
assertEquals("verify temp completed activities",1,testProgress.getCurrentCompletedActivitiesList().size());
@@ -237,17 +233,15 @@
testCompletedActivity = testProgress.getNextActivity();
testRootPreviousActivity = testCompletedActivity;
testProgress = learnerService.calculateProgress(testCompletedActivity,
- testUser.getUserId(),
- testLesson.getLessonId());
+ testUser.getUserId());
assertLearnerProgress(testRootPreviousActivity,TEST_CHAT_ACTIVITY_UIID,TEST_CHAT_ACTIVITY_UIID,5,1,"chat","chat");
assertEquals("verify temp completed activities",1,testProgress.getCurrentCompletedActivitiesList().size());
//progress from chat activity to QNA
testCompletedActivity = testProgress.getNextActivity();
testRootPreviousActivity = testCompletedActivity;
testProgress = learnerService.calculateProgress(testCompletedActivity,
- testUser.getUserId(),
- testLesson.getLessonId());
+ testUser.getUserId());
assertLearnerProgress(testRootPreviousActivity,TEST_QNA_ACTIVITY_UIID,TEST_QNA_ACTIVITY_UIID,6,1,"QNA","QNA");
assertEquals("verify temp completed activities",1,testProgress.getCurrentCompletedActivitiesList().size());
@@ -256,26 +250,23 @@
testCompletedActivity = testProgress.getNextActivity();
testRootPreviousActivity = testCompletedActivity;
testProgress = learnerService.calculateProgress(testCompletedActivity,
- testUser.getUserId(),
- testLesson.getLessonId());
+ testUser.getUserId());
assertLearnerProgress(testRootPreviousActivity,TEST_PERMISSION_GATE_ACTIVITY_UIID,TEST_PERMISSION_GATE_ACTIVITY_UIID,7,1,"permission gate","permission gate");
assertEquals("verify temp completed activities",1,testProgress.getCurrentCompletedActivitiesList().size());
//progress from permission gate to options activity
testCompletedActivity = testProgress.getNextActivity();
testRootPreviousActivity = testCompletedActivity;
testProgress = learnerService.calculateProgress(testCompletedActivity,
- testUser.getUserId(),
- testLesson.getLessonId());
+ testUser.getUserId());
assertLearnerProgress(testRootPreviousActivity,TEST_OPTIONS_ACTIVITY_UIID,TEST_OPTIONS_ACTIVITY_UIID,8,1,"OPTIONS","OPTIONS");
assertEquals("verify temp completed activities",1,testProgress.getCurrentCompletedActivitiesList().size());
//progress from sub option(notice board) to parallel activity
testCompletedActivity = ((OptionsActivity)testProgress.getCurrentActivity()).getChildActivityById(TEST_CNB_ACTIVITY_ID);
testRootPreviousActivity = testCompletedActivity.getParentActivity();
testProgress = learnerService.calculateProgress(testCompletedActivity,
- testUser.getUserId(),
- testLesson.getLessonId());
+ testUser.getUserId());
assertLearnerProgress(testRootPreviousActivity,TEST_PARALLEL_ACTIVITY_UIID,TEST_PARALLEL_ACTIVITY_UIID,10,1,"PARALLEL","PARALLEL");
assertEquals("verify temp completed activities",2,testProgress.getCurrentCompletedActivitiesList().size());
@@ -284,8 +275,7 @@
//the previous activity should not be changed.
testRootPreviousActivity = testProgress.getPreviousActivity();
testProgress = learnerService.calculateProgress(testCompletedActivity,
- testUser.getUserId(),
- testLesson.getLessonId());
+ testUser.getUserId());
assertLearnerProgress(testRootPreviousActivity,TEST_PARALLEL_ACTIVITY_UIID,TEST_WAITING_ACTIVITY_UIID,11,1,"PARALLEL","WAITING");
assertTrue("verify waiting flag-should be waiting.",testProgress.isParallelWaiting());
assertTrue("verify next activity",testProgress.getNextActivity()==null);
@@ -295,8 +285,7 @@
testCompletedActivity = ((ParallelActivity)testProgress.getCurrentActivity()).getChildActivityById(TEST_MB_ACTIVITY_ID);
testRootPreviousActivity = testCompletedActivity.getParentActivity();
testProgress = learnerService.calculateProgress(testCompletedActivity,
- testUser.getUserId(),
- testLesson.getLessonId());
+ testUser.getUserId());
assertLearnerProgress(testRootPreviousActivity,TEST_SEQUENCE_ACTIVITY_UIID,TEST_SR_ACTIVITY_UIID,13,1,"SEQUENCE","SHARE RESOURCE");
assertTrue("verify waiting flag-should not be waiting",!testProgress.isParallelWaiting());
assertEquals("verify temp completed activities",2,testProgress.getCurrentCompletedActivitiesList().size());
@@ -305,16 +294,14 @@
testCompletedActivity = testProgress.getNextActivity();
testRootPreviousActivity = testProgress.getPreviousActivity();
testProgress = learnerService.calculateProgress(testCompletedActivity,
- testUser.getUserId(),
- testLesson.getLessonId());
+ testUser.getUserId());
assertLearnerProgress(testRootPreviousActivity,TEST_SEQUENCE_ACTIVITY_UIID,TEST_SQNA_ACTIVITY_UIID,14,2,"SEQUENCE","QNA");
assertEquals("verify temp completed activities",1,testProgress.getCurrentCompletedActivitiesList().size());
//progress sub sequence(QNA) to complete lesson
testCompletedActivity = testProgress.getNextActivity();
testProgress = learnerService.calculateProgress(testCompletedActivity,
- testUser.getUserId(),
- testLesson.getLessonId());
+ testUser.getUserId());
assertTrue("verify lesson complete",testProgress.isLessonComplete());
assertEquals("verify temp completed activities",1,testProgress.getCurrentCompletedActivitiesList().size());
}
@@ -347,7 +334,7 @@
//get sync gate
GateActivity synchGate = (GateActivity)learnerService.getActivity(new Long(TEST_SYNCHGATE_ACTIVITY_ID));
- boolean gateOpen = learnerService.knockGate(Test_Lesson_ID, synchGate.getActivityId(),testUser,false);
+ boolean gateOpen = learnerService.knockGate(synchGate.getActivityId(),testUser,false);
assertTrue("gate is closed",!gateOpen);
synchGate = (GateActivity)learnerService.getActivity(new Long(TEST_SYNCHGATE_ACTIVITY_ID));
@@ -362,7 +349,7 @@
//get sync gate
GateActivity synchGate = (GateActivity)learnerService.getActivity(new Long(TEST_SYNCHGATE_ACTIVITY_ID));
- boolean gateOpen = learnerService.knockGate(Test_Lesson_ID, synchGate.getActivityId(),testUser2,false);
+ boolean gateOpen = learnerService.knockGate(synchGate.getActivityId(),testUser2,false);
assertTrue("gate is closed",gateOpen);
synchGate = (GateActivity)learnerService.getActivity(new Long(TEST_SYNCHGATE_ACTIVITY_ID));
Index: lams_learning/test/java/org/lamsfoundation/lams/learning/web/action/TestGateAction.java
===================================================================
diff -u -rf59da4f03c7449d42d559af803ac5a2093a89803 -re5049e0948ac38f849ed086dfa9b8b7dfd8d76ae
--- lams_learning/test/java/org/lamsfoundation/lams/learning/web/action/TestGateAction.java (.../TestGateAction.java) (revision f59da4f03c7449d42d559af803ac5a2093a89803)
+++ lams_learning/test/java/org/lamsfoundation/lams/learning/web/action/TestGateAction.java (.../TestGateAction.java) (revision e5049e0948ac38f849ed086dfa9b8b7dfd8d76ae)
@@ -88,7 +88,6 @@
addRequestParameter(AttributeNames.PARAM_ACTIVITY_ID,TEST_GATE_ACTIVITY_ID);
addRequestParameter(AttributeNames.PARAM_LESSON_ID, TEST_LESSON_ID);
- initializeLearnerProgress();
actionPerform();
verifyNoActionErrors();
@@ -102,21 +101,9 @@
addRequestParameter(AttributeNames.PARAM_ACTIVITY_ID,TEST_GATE_ACTIVITY_ID);
addRequestParameter(AttributeNames.PARAM_LESSON_ID, TEST_LESSON_ID);
- initializeLearnerProgress();
actionPerform();
verifyNoActionErrors();
}
- /**
- *
- */
- private void initializeLearnerProgress()
- {
- Activity activity = LearningWebUtil.getActivityFromRequest(request,learnerService);
- LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgressByID(request,context);
- learnerProgress.setNextActivity(activity);
- httpSession.setAttribute(ActivityAction.LEARNER_PROGRESS_REQUEST_ATTRIBUTE,
- learnerProgress);
- }
}
Index: lams_learning/test/java/org/lamsfoundation/lams/learning/web/action/TestGroupingAction.java
===================================================================
diff -u -rf59da4f03c7449d42d559af803ac5a2093a89803 -re5049e0948ac38f849ed086dfa9b8b7dfd8d76ae
--- lams_learning/test/java/org/lamsfoundation/lams/learning/web/action/TestGroupingAction.java (.../TestGroupingAction.java) (revision f59da4f03c7449d42d559af803ac5a2093a89803)
+++ lams_learning/test/java/org/lamsfoundation/lams/learning/web/action/TestGroupingAction.java (.../TestGroupingAction.java) (revision e5049e0948ac38f849ed086dfa9b8b7dfd8d76ae)
@@ -86,7 +86,6 @@
addRequestParameter(AttributeNames.PARAM_ACTIVITY_ID,TEST_RGRP_ACTIVITY_ID);
addRequestParameter(AttributeNames.PARAM_LESSON_ID, TEST_LESSON_ID);
- initializeLearnerProgress();
actionPerform();
verifyNoActionErrors();
@@ -125,16 +124,4 @@
verifyNoActionErrors();
}
- /**
- *
- */
- private void initializeLearnerProgress()
- {
- Activity activity = LearningWebUtil.getActivityFromRequest(request,learnerService);
- LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgressByID(request,context);
- learnerProgress.setNextActivity(activity);
- httpSession.setAttribute(ActivityAction.LEARNER_PROGRESS_REQUEST_ATTRIBUTE,
- learnerProgress);
- }
-
}
Index: lams_learning/test/java/org/lamsfoundation/lams/learning/web/action/TestLearnerAction.java
===================================================================
diff -u -rf59da4f03c7449d42d559af803ac5a2093a89803 -re5049e0948ac38f849ed086dfa9b8b7dfd8d76ae
--- lams_learning/test/java/org/lamsfoundation/lams/learning/web/action/TestLearnerAction.java (.../TestLearnerAction.java) (revision f59da4f03c7449d42d559af803ac5a2093a89803)
+++ lams_learning/test/java/org/lamsfoundation/lams/learning/web/action/TestLearnerAction.java (.../TestLearnerAction.java) (revision e5049e0948ac38f849ed086dfa9b8b7dfd8d76ae)
@@ -122,9 +122,6 @@
addRequestParameter(AttributeNames.PARAM_LESSON_ID, TEST_LESSON_ID);
actionPerform();
-
- verifyForward("welcome");
- verifyTilesForward("welcome",".welcome");
verifyNoActionErrors();
}
Index: lams_learning/web/gate/gateNext.jsp
===================================================================
diff -u -ra0722fe03d763f9da5efc82987034d929e6a23a1 -re5049e0948ac38f849ed086dfa9b8b7dfd8d76ae
--- lams_learning/web/gate/gateNext.jsp (.../gateNext.jsp) (revision a0722fe03d763f9da5efc82987034d929e6a23a1)
+++ lams_learning/web/gate/gateNext.jsp (.../gateNext.jsp) (revision e5049e0948ac38f849ed086dfa9b8b7dfd8d76ae)
@@ -1,4 +1,4 @@
-