Index: lams_common/src/java/org/lamsfoundation/lams/toolApplicationContext.xml
===================================================================
RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/toolApplicationContext.xml,v
diff -u -r1.12 -r1.13
--- lams_common/src/java/org/lamsfoundation/lams/toolApplicationContext.xml 6 Jan 2014 12:08:48 -0000 1.12
+++ lams_common/src/java/org/lamsfoundation/lams/toolApplicationContext.xml 21 Apr 2014 13:34:43 -0000 1.13
@@ -68,6 +68,7 @@
+
Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java
===================================================================
RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java,v
diff -u -r1.28 -r1.29
--- lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java 8 Jan 2014 17:45:17 -0000 1.28
+++ lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java 21 Apr 2014 13:34:43 -0000 1.29
@@ -24,16 +24,22 @@
package org.lamsfoundation.lams.tool.service;
import java.io.IOException;
+import java.util.Date;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import org.apache.log4j.Logger;
import org.hibernate.Hibernate;
import org.hibernate.proxy.HibernateProxy;
import org.lamsfoundation.lams.learningdesign.Activity;
+import org.lamsfoundation.lams.learningdesign.FloatingActivity;
import org.lamsfoundation.lams.learningdesign.ToolActivity;
import org.lamsfoundation.lams.learningdesign.Transition;
+import org.lamsfoundation.lams.lesson.CompletedActivityProgress;
+import org.lamsfoundation.lams.lesson.LearnerProgress;
+import org.lamsfoundation.lams.lesson.service.ILessonService;
import org.lamsfoundation.lams.tool.IToolVO;
import org.lamsfoundation.lams.tool.Tool;
import org.lamsfoundation.lams.tool.ToolOutput;
@@ -65,6 +71,7 @@
public IToolSessionDAO toolSessionDAO;
public IToolContentDAO toolContentDAO;
private ILamsCoreToolService lamsCoreToolService;
+ private ILessonService lessonService;
@Override
public Set getAllPotentialLearners(long toolSessionId) throws LamsToolServiceException {
@@ -150,7 +157,7 @@
ToolSession toolSession = this.getToolSession(toolSessionId);
ToolActivity specifiedActivity = toolSession.getToolActivity();
- Activity leaderSelectionActivity = getNearestLeaderSelectionActivity(specifiedActivity);
+ Activity leaderSelectionActivity = getNearestLeaderSelectionActivity(specifiedActivity, learnerId, toolSession.getLesson().getLessonId());
// check if there is leaderSelectionTool available
if (leaderSelectionActivity != null) {
@@ -173,7 +180,7 @@
* Finds the nearest Leader Select activity. Works recursively. Tries to find Leader Select activity in the previous
* activities set first, and then inside the parent set.
*/
- private static Activity getNearestLeaderSelectionActivity(Activity activity) {
+ private Activity getNearestLeaderSelectionActivity(Activity activity, Integer userId, Long lessonId) {
// check if current activity is Leader Select one. if so - stop searching and return it.
Class activityClass = Hibernate.getClass(activity);
@@ -193,19 +200,47 @@
if (LEADER_SELECTION_TOOL_SIGNATURE.equals(toolActivity.getTool().getToolSignature())) {
return activity;
}
+
+ //in case of floating activity
+ } else if (activityClass.equals(FloatingActivity.class)) {
+ LearnerProgress learnerProgress = lessonService.getUserProgressForLesson(userId, lessonId);
+ Map completedActivities = learnerProgress.getCompletedActivities();
+
+ //find the earliest finished Leader Select Activity
+ Date leaderSelectActivityFinishDate = null;
+ Activity leaderSelectionActivity = null;
+ for (Activity completedActivity : completedActivities.keySet()) {
+
+ if (completedActivity instanceof ToolActivity) {
+ ToolActivity completedToolActivity = (ToolActivity) completedActivity;
+ if (LEADER_SELECTION_TOOL_SIGNATURE.equals(completedToolActivity.getTool().getToolSignature())) {
+ Date finishDate = completedActivities.get(completedActivity).getFinishDate();
+
+ if ((leaderSelectActivityFinishDate == null)
+ || (finishDate.compareTo(leaderSelectActivityFinishDate) < 0)) {
+ leaderSelectionActivity = completedToolActivity;
+ leaderSelectActivityFinishDate = completedActivities.get(completedActivity).getFinishDate();
+ }
+
+ }
+ }
+
+ }
+
+ return leaderSelectionActivity;
}
// check previous activity
Transition transitionTo = activity.getTransitionTo();
if (transitionTo != null) {
Activity fromActivity = transitionTo.getFromActivity();
- return getNearestLeaderSelectionActivity(fromActivity);
+ return getNearestLeaderSelectionActivity(fromActivity, userId, lessonId);
}
// check parent activity
Activity parent = activity.getParentActivity();
if (parent != null) {
- return getNearestLeaderSelectionActivity(parent);
+ return getNearestLeaderSelectionActivity(parent, userId, lessonId);
}
return null;
@@ -257,4 +292,8 @@
public void setLamsCoreToolService(ILamsCoreToolService lamsCoreToolService) {
this.lamsCoreToolService = lamsCoreToolService;
}
+
+ public void setLessonService(ILessonService lessonService) {
+ this.lessonService = lessonService;
+ }
}