Index: lams_build/lib/lams/lams-gradebook.jar =================================================================== diff -u -r3e7dc9883fd7816cd5735bcddf2d469a44ae8ae9 -rf494ac5c2f49f92be600b6392d9c85c291df7bb7 Binary files differ Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r6507b9cc6e67eed53ac0061bd401514a3d70993f -rf494ac5c2f49f92be600b6392d9c85c291df7bb7 Binary files differ Index: lams_common/.classpath =================================================================== diff -u -r5a70ca6f5834da3b63f32b40d0a38ebeb555597d -rf494ac5c2f49f92be600b6392d9c85c291df7bb7 --- lams_common/.classpath (.../.classpath) (revision 5a70ca6f5834da3b63f32b40d0a38ebeb555597d) +++ lams_common/.classpath (.../.classpath) (revision f494ac5c2f49f92be600b6392d9c85c291df7bb7) @@ -43,6 +43,7 @@ + Index: lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILearnerProgressDAO.java =================================================================== diff -u -r4f7ee8239da980f9bdb403845dfff1aa2e39ed64 -rf494ac5c2f49f92be600b6392d9c85c291df7bb7 --- lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILearnerProgressDAO.java (.../ILearnerProgressDAO.java) (revision 4f7ee8239da980f9bdb403845dfff1aa2e39ed64) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dao/ILearnerProgressDAO.java (.../ILearnerProgressDAO.java) (revision f494ac5c2f49f92be600b6392d9c85c291df7bb7) @@ -152,6 +152,12 @@ /** * Get all the users records where the user has ever attempted the given activity. Uses the progress records to * determine the users. + */ + List getLearnersCompletedActivity(Activity activity); + + /** + * Get all the users records where the user has ever attempted the given activity. Uses the progress records to + * determine the users. * * @param activityId * @return List Index: lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LearnerProgressDAO.java =================================================================== diff -u -r4f7ee8239da980f9bdb403845dfff1aa2e39ed64 -rf494ac5c2f49f92be600b6392d9c85c291df7bb7 --- lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LearnerProgressDAO.java (.../LearnerProgressDAO.java) (revision 4f7ee8239da980f9bdb403845dfff1aa2e39ed64) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dao/hibernate/LearnerProgressDAO.java (.../LearnerProgressDAO.java) (revision f494ac5c2f49f92be600b6392d9c85c291df7bb7) @@ -268,7 +268,16 @@ return users; } + + @Override + @SuppressWarnings("unchecked") + public List getLearnersCompletedActivity(final Activity activity) { + List users = getSession().createQuery(LearnerProgressDAO.LOAD_LEARNERS_COMPLETED_ACTIVITY) + .setLong("activityId", activity.getActivityId().longValue()).list(); + return users; + } + @Override public Integer getNumUsersAttemptedActivity(Activity activity) { Object value = getSession().createQuery(LearnerProgressDAO.COUNT_ATTEMPTED_ACTIVITY) Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsToolService.java =================================================================== diff -u -r00d5413cf23d20dae624c2bfbe17b3c914963945 -rf494ac5c2f49f92be600b6392d9c85c291df7bb7 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsToolService.java (.../ILamsToolService.java) (revision 00d5413cf23d20dae624c2bfbe17b3c914963945) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsToolService.java (.../ILamsToolService.java) (revision f494ac5c2f49f92be600b6392d9c85c291df7bb7) @@ -72,6 +72,23 @@ Boolean isGroupedActivity(long toolContentID); /** + * Assign tool an ActivityEvaluation (it is an equivalent of doing it manually on authoring canvas). It also updates + * gradebook marks for all participating learners from the lesson. + * + * @param toolContentId + * @param toolOutputDefinition + */ + void setActivityEvaluation(Long toolContentId, String toolOutputDefinition); + + /** + * Get tool's ActivityEvaluation that has been set in authoring. + * + * @param toolContentId + * @return + */ + String getActivityEvaluation(Long toolContentId); + + /** * Returns leader's UserId from the nearest Leader Selection Tool (the nearest to the specified activity) , and null * if no Leader Selection Tools available. * Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java =================================================================== diff -u -r00d5413cf23d20dae624c2bfbe17b3c914963945 -rf494ac5c2f49f92be600b6392d9c85c291df7bb7 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java (.../LamsToolService.java) (revision 00d5413cf23d20dae624c2bfbe17b3c914963945) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java (.../LamsToolService.java) (revision f494ac5c2f49f92be600b6392d9c85c291df7bb7) @@ -25,18 +25,27 @@ 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.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.hibernate.Hibernate; import org.hibernate.proxy.HibernateProxy; +import org.lamsfoundation.lams.gradebook.service.IGradebookService; import org.lamsfoundation.lams.learningdesign.Activity; +import org.lamsfoundation.lams.learningdesign.ActivityEvaluation; import org.lamsfoundation.lams.learningdesign.FloatingActivity; import org.lamsfoundation.lams.learningdesign.ToolActivity; import org.lamsfoundation.lams.learningdesign.Transition; +import org.lamsfoundation.lams.learningdesign.dao.IActivityDAO; import org.lamsfoundation.lams.lesson.CompletedActivityProgress; import org.lamsfoundation.lams.lesson.LearnerProgress; +import org.lamsfoundation.lams.lesson.Lesson; +import org.lamsfoundation.lams.lesson.dao.ILearnerProgressDAO; +import org.lamsfoundation.lams.lesson.dao.ILessonDAO; import org.lamsfoundation.lams.lesson.service.ILessonService; import org.lamsfoundation.lams.tool.IToolVO; import org.lamsfoundation.lams.tool.Tool; @@ -45,6 +54,7 @@ import org.lamsfoundation.lams.tool.dao.IToolContentDAO; import org.lamsfoundation.lams.tool.dao.IToolDAO; import org.lamsfoundation.lams.tool.dao.IToolSessionDAO; +import org.lamsfoundation.lams.tool.exception.LamsToolServiceException; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.FileUtilException; @@ -60,13 +70,17 @@ public class LamsToolService implements ILamsToolService { private static Logger log = Logger.getLogger(LamsToolService.class); - //Leader selection tool Constants + // Leader selection tool Constants private static final String LEADER_SELECTION_TOOL_SIGNATURE = "lalead11"; private static final String LEADER_SELECTION_TOOL_OUTPUT_NAME_LEADER_USERID = "leader.user.id"; - public IToolDAO toolDAO; - public IToolSessionDAO toolSessionDAO; - public IToolContentDAO toolContentDAO; + private IActivityDAO activityDAO; + private ILessonDAO lessonDAO; + private ILearnerProgressDAO learnerProgressDAO; + private IToolDAO toolDAO; + private IToolSessionDAO toolSessionDAO; + private IToolContentDAO toolContentDAO; + private IGradebookService gradebookService; private ILamsCoreToolService lamsCoreToolService; private ILessonService lessonService; @@ -138,6 +152,76 @@ } @Override + public String getActivityEvaluation(Long toolContentId) { + + List activities = toolContentDAO.findByProperty(Activity.class, "toolContentId", toolContentId); + if (activities.size() != 1) { + log.debug("ToolContent contains multiple activities, can't get ActivityEvaluation."); + return null; + } + + ToolActivity toolActivity = (ToolActivity) activities.get(0); + Set activityEvaluations = toolActivity.getActivityEvaluations(); + if (activityEvaluations.isEmpty()) { + return null; + } else { + ActivityEvaluation activityEvaluation = activityEvaluations.iterator().next(); + return activityEvaluation.getToolOutputDefinition(); + } + } + + @Override + public void setActivityEvaluation(Long toolContentId, String toolOutputDefinition) { + + List activities = toolContentDAO.findByProperty(Activity.class, "toolContentId", toolContentId); + if (activities.size() != 1) { + throw new LamsToolServiceException( + "ToolContent contains multiple activities, can't set ActivityEvaluation."); + } + if (StringUtils.isEmpty(toolOutputDefinition)) { + return; + } + + ToolActivity toolActivity = (ToolActivity) activities.get(0); + Set activityEvaluations = toolActivity.getActivityEvaluations(); + + // Get the first (only) ActivityEvaluation if it exists + ActivityEvaluation activityEvaluation; + boolean isToolOutputDefinitionChanged = false; + if (activityEvaluations.isEmpty()) { + activityEvaluation = new ActivityEvaluation(); + activityEvaluation.setActivity(toolActivity); + + activityEvaluations = new HashSet(); + activityEvaluations.add(activityEvaluation); + toolActivity.setActivityEvaluations(activityEvaluations); + + } else { + activityEvaluation = activityEvaluations.iterator().next(); + isToolOutputDefinitionChanged = !toolOutputDefinition.equals(activityEvaluation.getToolOutputDefinition()); + } + + activityEvaluation.setToolOutputDefinition(toolOutputDefinition); + activityDAO.insertOrUpdate(activityEvaluation); + + // update the parent toolActivity + toolActivity.setActivityEvaluations(activityEvaluations); + activityDAO.insertOrUpdate(toolActivity); + + //update gradebook marks if required + if (isToolOutputDefinitionChanged) { + Lesson lesson = lessonDAO.getLessonForActivity(toolActivity.getActivityId()); + List users = learnerProgressDAO.getLearnersCompletedActivity(toolActivity); + + //update for all users in activity + for (User user: users) { + gradebookService.updateUserActivityGradebookMark(lesson, toolActivity, user); + } + } + + } + + @Override public Long getLeaderUserId(Long toolSessionId, Integer learnerId) { Long leaderUserId = null; @@ -243,44 +327,41 @@ } /** - * @return Returns the toolDAO. - */ - public IToolDAO getToolDAO() { - return toolDAO; - } - - /** * @param toolDAO * The toolDAO to set. */ public void setToolDAO(IToolDAO toolDAO) { this.toolDAO = toolDAO; } - - public IToolSessionDAO getToolSessionDAO() { - return toolSessionDAO; + + public void setActivityDAO(IActivityDAO activityDAO) { + this.activityDAO = activityDAO; } + + public void setLearnerProgressDAO(ILearnerProgressDAO learnerProgressDAO) { + this.learnerProgressDAO = learnerProgressDAO; + } + + public void setLessonDAO(ILessonDAO lessonDAO) { + this.lessonDAO = lessonDAO; + } public void setToolSessionDAO(IToolSessionDAO toolSessionDAO) { this.toolSessionDAO = toolSessionDAO; } /** * - * @return - */ - public IToolContentDAO getToolContentDAO() { - return toolContentDAO; - } - - /** - * * @param toolContentDAO */ public void setToolContentDAO(IToolContentDAO toolContentDAO) { this.toolContentDAO = toolContentDAO; } + public void setGradebookService(IGradebookService gradebookService) { + this.gradebookService = gradebookService; + } + /** * * @param toolContentDAO Index: lams_common/src/java/org/lamsfoundation/lams/toolApplicationContext.xml =================================================================== diff -u -r0aae4208886026f429f05b458b79c14f8d7030d4 -rf494ac5c2f49f92be600b6392d9c85c291df7bb7 --- lams_common/src/java/org/lamsfoundation/lams/toolApplicationContext.xml (.../toolApplicationContext.xml) (revision 0aae4208886026f429f05b458b79c14f8d7030d4) +++ lams_common/src/java/org/lamsfoundation/lams/toolApplicationContext.xml (.../toolApplicationContext.xml) (revision f494ac5c2f49f92be600b6392d9c85c291df7bb7) @@ -79,9 +79,13 @@ + + + - + + Index: lams_tool_assessment/conf/xdoclet/struts-actions.xml =================================================================== diff -u -r45466cdcb65a2b45fa8e24d23a40b986d902cede -rf494ac5c2f49f92be600b6392d9c85c291df7bb7 --- lams_tool_assessment/conf/xdoclet/struts-actions.xml (.../struts-actions.xml) (revision 45466cdcb65a2b45fa8e24d23a40b986d902cede) +++ lams_tool_assessment/conf/xdoclet/struts-actions.xml (.../struts-actions.xml) (revision f494ac5c2f49f92be600b6392d9c85c291df7bb7) @@ -289,6 +289,10 @@ type="org.lamsfoundation.lams.tool.assessment.web.action.MonitoringAction" parameter="setSubmissionDeadline" > + + Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/AssessmentConstants.java =================================================================== diff -u -r11d6b3d1391ab1d1aa42453aa0347a6b85fcfeaa -rf494ac5c2f49f92be600b6392d9c85c291df7bb7 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/AssessmentConstants.java (.../AssessmentConstants.java) (revision 11d6b3d1391ab1d1aa42453aa0347a6b85fcfeaa) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/AssessmentConstants.java (.../AssessmentConstants.java) (revision f494ac5c2f49f92be600b6392d9c85c291df7bb7) @@ -164,8 +164,6 @@ public static final String ATTR_OVERALL_FEEDBACK_SEQUENCE_ID_PREFIX = "overallFeedbackSequenceId"; public static final String ATTR_ASSESSMENT = "assessment"; - - public static final String ATTR_RUN_AUTO = "runAuto"; public static final String ATTR_QUESTION_UID = "questionUid"; @@ -228,7 +226,20 @@ public static final String ATTR_REFLECTION_ENTRY = "reflectEntry"; public static final String ATTR_REFLECT_LIST = "reflectList"; + + public static final String ATTR_ACTIVITY_EVALUATION = "activityEvaluation"; + + public static final String ATTR_TOOL_OUTPUT_DEFINITIONS = "toolOutputDefinitions"; + //output definitions + public static final String OUTPUT_NAME_LEARNER_TOTAL_SCORE = "learner.total.score"; + public static final String OUTPUT_NAME_LEARNER_TIME_TAKEN = "learner.time.taken"; + public static final String OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS = "learner.number.of.attempts"; + + public static final String OUTPUT_NAME_BEST_SCORE = "best.score"; + public static final String OUTPUT_NAME_FIRST_SCORE = "first.score"; + public static final String OUTPUT_NAME_AVERAGE_SCORE = "average.score"; + // error message keys public static final String ERROR_MSG_QUESTION_NAME_BLANK = "error.question.name.blank"; Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/assessmentApplicationContext.xml =================================================================== diff -u -ra6641bf9262a01d07740a517643f8fe187ec5b1f -rf494ac5c2f49f92be600b6392d9c85c291df7bb7 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/assessmentApplicationContext.xml (.../assessmentApplicationContext.xml) (revision a6641bf9262a01d07740a517643f8fe187ec5b1f) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/assessmentApplicationContext.xml (.../assessmentApplicationContext.xml) (revision f494ac5c2f49f92be600b6392d9c85c291df7bb7) @@ -142,21 +142,17 @@ PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception + PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception - PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception - PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception - PROPAGATION_REQUIRED,-java.lang.Exception - PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,-java.lang.Exception PROPAGATION_REQUIRED,+java.lang.Exception PROPAGATION_REQUIRED,+java.lang.Exception PROPAGATION_REQUIRED,+java.lang.Exception - PROPAGATION_REQUIRED,+java.lang.Exception PROPAGATION_REQUIRED,+java.lang.Exception PROPAGATION_REQUIRED,+java.lang.Exception PROPAGATION_REQUIRED,+java.lang.Exception Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentResultDAO.java =================================================================== diff -u -r5e401a92b56d95be748a1e74e37b4c0e64e9b316 -rf494ac5c2f49f92be600b6392d9c85c291df7bb7 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentResultDAO.java (.../AssessmentResultDAO.java) (revision 5e401a92b56d95be748a1e74e37b4c0e64e9b316) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentResultDAO.java (.../AssessmentResultDAO.java) (revision f494ac5c2f49f92be600b6392d9c85c291df7bb7) @@ -33,17 +33,23 @@ List getAssessmentResultsBySession(Long sessionId, Long userId); - List getFinishedAssessmentResultsBySession(Long sessionId, Long userId); + List getFinishedAssessmentResultsByUser(Long sessionId, Long userId); AssessmentResult getLastAssessmentResult(Long assessmentUid, Long userId); AssessmentResult getLastFinishedAssessmentResult(Long assessmentUid, Long userId); - Float getLastFinishedAssessmentResultGrade(Long assessmentUid, Long userId); + Float getLastTotalScoreByUser(Long assessmentUid, Long userId); + Float getBestTotalScoreByUser(Long sessionId, Long userId); + + Float getFirstTotalScoreByUser(Long sessionId, Long userId); + + Float getAvergeTotalScoreByUser(Long sessionId, Long userId); + Integer getLastFinishedAssessmentResultTimeTaken(Long assessmentUid, Long userId); - AssessmentResult getLastFinishedAssessmentResultBySessionId(Long sessionId, Long userId); + AssessmentResult getLastFinishedAssessmentResultByUser(Long sessionId, Long userId); int getAssessmentResultCount(Long assessmentUid, Long userId); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java =================================================================== diff -u -rc266dd394246bd6178c2e0bb971f3d0eb74095c5 -rf494ac5c2f49f92be600b6392d9c85c291df7bb7 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java (.../AssessmentResultDAOHibernate.java) (revision c266dd394246bd6178c2e0bb971f3d0eb74095c5) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java (.../AssessmentResultDAOHibernate.java) (revision f494ac5c2f49f92be600b6392d9c85c291df7bb7) @@ -62,6 +62,16 @@ + AssessmentResult.class.getName() + " AS r WHERE r.user.userId=? AND r.assessment.uid=? AND (r.finishDate != null) AND r.latest=1"; + private static final String BEST_SCORE_BY_SESSION_AND_USER = "SELECT MAX(r.grade) FROM " + AssessmentResult.class.getName() + + " AS r WHERE r.user.userId = ? AND r.sessionId=? AND (r.finishDate != null) ORDER BY r.startDate ASC"; + + private static final String FIRST_SCORE_BY_SESSION_AND_USER = "SELECT r.grade FROM " + AssessmentResult.class.getName() + + " AS r WHERE r.user.userId = ? AND r.sessionId=? AND (r.finishDate != null) ORDER BY r.startDate ASC"; + + private static final String AVERAGE_SCORE_BY_SESSION_AND_USER = "SELECT AVG(r.grade) FROM " + AssessmentResult.class.getName() + + " AS r WHERE r.user.userId = ? AND r.sessionId=? AND (r.finishDate != null) ORDER BY r.startDate ASC"; + + private static final String FIND_LAST_ASSESSMENT_RESULT_TIME_TAKEN = "select UNIX_TIMESTAMP(r.finishDate) - UNIX_TIMESTAMP(r.startDate) FROM " + AssessmentResult.class.getName() + " AS r WHERE r.user.userId=? AND r.assessment.uid=? AND (r.finishDate != null) AND r.latest=1"; @@ -76,7 +86,7 @@ } @Override - public List getFinishedAssessmentResultsBySession(Long sessionId, Long userId) { + public List getFinishedAssessmentResultsByUser(Long sessionId, Long userId) { return (List) doFind(AssessmentResultDAOHibernate.FIND_BY_SESSION_AND_USER_AND_FINISHED, new Object[] { userId, sessionId }); } @@ -106,16 +116,45 @@ } @Override - public Float getLastFinishedAssessmentResultGrade(Long assessmentUid, Long userId) { + public Float getLastTotalScoreByUser(Long assessmentUid, Long userId) { Query q = getSession() .createQuery(AssessmentResultDAOHibernate.FIND_LAST_ASSESSMENT_RESULT_GRADE); q.setParameter(0, userId); q.setParameter(1, assessmentUid); - return ((Number) q.uniqueResult()).floatValue(); + return ((Float) q.uniqueResult()); } @Override + public Float getBestTotalScoreByUser(Long sessionId, Long userId) { + Query q = getSession() + .createQuery(AssessmentResultDAOHibernate.BEST_SCORE_BY_SESSION_AND_USER); + q.setParameter(0, userId); + q.setParameter(1, sessionId); + return ((Float) q.uniqueResult()); + } + + @Override + public Float getFirstTotalScoreByUser(Long sessionId, Long userId) { + Query q = getSession() + .createQuery(AssessmentResultDAOHibernate.FIRST_SCORE_BY_SESSION_AND_USER); + q.setParameter(0, userId); + q.setParameter(1, sessionId); + q.setMaxResults(1); + return ((Float) q.uniqueResult()); + } + + @Override + public Float getAvergeTotalScoreByUser(Long sessionId, Long userId) { + Query q = getSession() + .createQuery(AssessmentResultDAOHibernate.AVERAGE_SCORE_BY_SESSION_AND_USER); + q.setParameter(0, userId); + q.setParameter(1, sessionId); + Object result = q.uniqueResult(); + return result == null ? null : ((Double) result).floatValue(); + } + + @Override public Integer getLastFinishedAssessmentResultTimeTaken(Long assessmentUid, Long userId) { List list = doFind(FIND_LAST_ASSESSMENT_RESULT_TIME_TAKEN, new Object[] { userId, assessmentUid }); @@ -127,7 +166,7 @@ } @Override - public AssessmentResult getLastFinishedAssessmentResultBySessionId(Long sessionId, Long userId) { + public AssessmentResult getLastFinishedAssessmentResultByUser(Long sessionId, Long userId) { Query q = getSession().createQuery(AssessmentResultDAOHibernate.FIND_LAST_FINISHED_BY_SESSION_AND_USER); q.setParameter(0, userId); q.setParameter(1, sessionId); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentOutputFactory.java =================================================================== diff -u -r45466cdcb65a2b45fa8e24d23a40b986d902cede -rf494ac5c2f49f92be600b6392d9c85c291df7bb7 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentOutputFactory.java (.../AssessmentOutputFactory.java) (revision 45466cdcb65a2b45fa8e24d23a40b986d902cede) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentOutputFactory.java (.../AssessmentOutputFactory.java) (revision f494ac5c2f49f92be600b6392d9c85c291df7bb7) @@ -18,11 +18,11 @@ * * http://www.gnu.org/licenses/gpl.txt * **************************************************************** - */ - -/* $Id$ */ -package org.lamsfoundation.lams.tool.assessment.service; + */ +/* $Id$ */ +package org.lamsfoundation.lams.tool.assessment.service; + import java.util.List; import java.util.Set; import java.util.SortedMap; @@ -32,6 +32,7 @@ import org.lamsfoundation.lams.tool.OutputFactory; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; +import org.lamsfoundation.lams.tool.assessment.AssessmentConstants; import org.lamsfoundation.lams.tool.assessment.model.Assessment; import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestion; import org.lamsfoundation.lams.tool.assessment.model.AssessmentSession; @@ -40,104 +41,139 @@ public class AssessmentOutputFactory extends OutputFactory { - protected final static String OUTPUT_NAME_LEARNER_TOTAL_SCORE = "learner.total.score"; - protected final static String OUTPUT_NAME_LEARNER_TIME_TAKEN = "learner.time.taken"; - protected final static String OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS = "learner.number.of.attempts"; - /** * @see org.lamsfoundation.lams.tool.OutputDefinitionFactory#getToolOutputDefinitions(java.lang.Object) */ - public SortedMap getToolOutputDefinitions(Object toolContentObject, int definitionType) { + public SortedMap getToolOutputDefinitions(Object toolContentObject, + int definitionType) { TreeMap definitionMap = new TreeMap(); - - ToolOutputDefinition definition = buildRangeDefinition(OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS, new Long(0), null); - definitionMap.put(OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS, definition); - - definition = buildRangeDefinition(OUTPUT_NAME_LEARNER_TIME_TAKEN, new Long(0), null); - definitionMap.put(OUTPUT_NAME_LEARNER_TIME_TAKEN, definition); - + + ToolOutputDefinition definition = buildRangeDefinition(AssessmentConstants.OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS, + new Long(0), null); + definitionMap.put(AssessmentConstants.OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS, definition); + + definition = buildRangeDefinition(AssessmentConstants.OUTPUT_NAME_LEARNER_TIME_TAKEN, new Long(0), null); + definitionMap.put(AssessmentConstants.OUTPUT_NAME_LEARNER_TIME_TAKEN, definition); + if (toolContentObject != null) { Assessment assessment = (Assessment) toolContentObject; Set questionReferences = new TreeSet(new SequencableComparator()); questionReferences.addAll(assessment.getQuestionReferences()); Long totalMarksPossible = new Long(0); - for(QuestionReference questionReference : questionReferences) { + for (QuestionReference questionReference : questionReferences) { totalMarksPossible += questionReference.getDefaultGrade(); - }; - definition = buildRangeDefinition(OUTPUT_NAME_LEARNER_TOTAL_SCORE, new Long(0), totalMarksPossible, true); - definitionMap.put(OUTPUT_NAME_LEARNER_TOTAL_SCORE, definition); + } + ; + definition = buildRangeDefinition(AssessmentConstants.OUTPUT_NAME_LEARNER_TOTAL_SCORE, new Long(0), + totalMarksPossible, true); + definitionMap.put(AssessmentConstants.OUTPUT_NAME_LEARNER_TOTAL_SCORE, definition); + definition = buildRangeDefinition(AssessmentConstants.OUTPUT_NAME_BEST_SCORE, new Long(0), + totalMarksPossible, false); + definitionMap.put(AssessmentConstants.OUTPUT_NAME_BEST_SCORE, definition); + definition = buildRangeDefinition(AssessmentConstants.OUTPUT_NAME_FIRST_SCORE, new Long(0), + totalMarksPossible, false); + definitionMap.put(AssessmentConstants.OUTPUT_NAME_FIRST_SCORE, definition); + definition = buildRangeDefinition(AssessmentConstants.OUTPUT_NAME_AVERAGE_SCORE, new Long(0), + totalMarksPossible, false); + definitionMap.put(AssessmentConstants.OUTPUT_NAME_AVERAGE_SCORE, definition); + int randomQuestionsCount = 1; - for(QuestionReference questionReference : questionReferences) { + for (QuestionReference questionReference : questionReferences) { Long markAvailable = null; if (questionReference.getDefaultGrade() != 0) { markAvailable = new Long(questionReference.getDefaultGrade()); } - + String description = getI18NText("output.user.score.for.question", false); if (questionReference.isRandomQuestion()) { description += getI18NText("label.authoring.basic.type.random.question", false) + " " + randomQuestionsCount++; } else { description += questionReference.getQuestion().getTitle(); } - - definition = buildRangeDefinition(String.valueOf(questionReference.getSequenceId()), new Long(0), markAvailable); + + definition = buildRangeDefinition(String.valueOf(questionReference.getSequenceId()), new Long(0), + markAvailable); definition.setDescription(description); - definitionMap.put(String.valueOf(questionReference.getSequenceId()), definition); - }; + definitionMap.put(String.valueOf(questionReference.getSequenceId()), definition); + } + ; } return definitionMap; } - public SortedMap getToolOutput(List names, IAssessmentService assessmentService, Long toolSessionId, - Long learnerId) { + public SortedMap getToolOutput(List names, IAssessmentService assessmentService, + Long toolSessionId, Long learnerId) { TreeMap output = new TreeMap(); AssessmentSession session = assessmentService.getAssessmentSessionBySessionId(toolSessionId); if ((session != null) && (session.getAssessment() != null)) { Assessment assessment = session.getAssessment(); - if (names == null || names.contains(OUTPUT_NAME_LEARNER_TOTAL_SCORE)) { - output.put(OUTPUT_NAME_LEARNER_TOTAL_SCORE, getTotalScore(assessmentService, learnerId, assessment)); + if (names == null || names.contains(AssessmentConstants.OUTPUT_NAME_LEARNER_TOTAL_SCORE)) { + output.put(AssessmentConstants.OUTPUT_NAME_LEARNER_TOTAL_SCORE, + getLastTotalScore(assessmentService, learnerId, assessment)); } - if (names == null || names.contains(OUTPUT_NAME_LEARNER_TIME_TAKEN)) { - output.put(OUTPUT_NAME_LEARNER_TIME_TAKEN, getTimeTaken(assessmentService, learnerId, assessment)); + if (names == null || names.contains(AssessmentConstants.OUTPUT_NAME_BEST_SCORE)) { + output.put(AssessmentConstants.OUTPUT_NAME_BEST_SCORE, + getBestTotalScore(assessmentService, toolSessionId, learnerId)); } - if (names == null || names.contains(OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS)) { - output.put(OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS, getNumberAttempts(assessmentService, learnerId, assessment)); - } + if (names == null || names.contains(AssessmentConstants.OUTPUT_NAME_FIRST_SCORE)) { + output.put(AssessmentConstants.OUTPUT_NAME_FIRST_SCORE, + getFirstTotalScore(assessmentService, toolSessionId, learnerId)); + } + if (names == null || names.contains(AssessmentConstants.OUTPUT_NAME_AVERAGE_SCORE)) { + output.put(AssessmentConstants.OUTPUT_NAME_AVERAGE_SCORE, + getAverageTotalScore(assessmentService, toolSessionId, learnerId)); + } + if (names == null || names.contains(AssessmentConstants.OUTPUT_NAME_LEARNER_TIME_TAKEN)) { + output.put(AssessmentConstants.OUTPUT_NAME_LEARNER_TIME_TAKEN, + getTimeTaken(assessmentService, learnerId, assessment)); + } + if (names == null || names.contains(AssessmentConstants.OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS)) { + output.put(AssessmentConstants.OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS, + getNumberAttempts(assessmentService, learnerId, assessment)); + } Set questions = assessment.getQuestions(); - for(AssessmentQuestion question : questions) { + for (AssessmentQuestion question : questions) { if (names == null || names.contains(String.valueOf(question.getSequenceId()))) { - output.put(OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS, getQuestionScore(assessmentService, learnerId, assessment, question.getSequenceId())); + output.put(AssessmentConstants.OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS, + getQuestionScore(assessmentService, learnerId, assessment, question.getSequenceId())); } } } return output; } - public ToolOutput getToolOutput(String name, IAssessmentService assessmentService, Long toolSessionId, Long learnerId) { + public ToolOutput getToolOutput(String name, IAssessmentService assessmentService, Long toolSessionId, + Long learnerId) { if (name != null) { AssessmentSession session = assessmentService.getAssessmentSessionBySessionId(toolSessionId); - + if ((session != null) && (session.getAssessment() != null)) { Assessment assessment = session.getAssessment(); - if (name.equals(OUTPUT_NAME_LEARNER_TOTAL_SCORE)) { - return getTotalScore(assessmentService, learnerId, assessment); - } else if (name.equals(OUTPUT_NAME_LEARNER_TIME_TAKEN)) { + if (name.equals(AssessmentConstants.OUTPUT_NAME_LEARNER_TOTAL_SCORE)) { + return getLastTotalScore(assessmentService, learnerId, assessment); + } else if (name.equals(AssessmentConstants.OUTPUT_NAME_BEST_SCORE)) { + return getBestTotalScore(assessmentService, toolSessionId, learnerId); + } else if (name.equals(AssessmentConstants.OUTPUT_NAME_FIRST_SCORE)) { + return getFirstTotalScore(assessmentService, toolSessionId, learnerId); + } else if (name.equals(AssessmentConstants.OUTPUT_NAME_AVERAGE_SCORE)) { + return getAverageTotalScore(assessmentService, toolSessionId, learnerId); + } else if (name.equals(AssessmentConstants.OUTPUT_NAME_LEARNER_TIME_TAKEN)) { return getTimeTaken(assessmentService, learnerId, assessment); - } else if (name.equals(OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS)) { + } else if (name.equals(AssessmentConstants.OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS)) { return getNumberAttempts(assessmentService, learnerId, assessment); } else { Set questions = assessment.getQuestions(); - for(AssessmentQuestion question : questions) { + for (AssessmentQuestion question : questions) { if (name.equals(String.valueOf(question.getSequenceId()))) { return getQuestionScore(assessmentService, learnerId, assessment, question.getSequenceId()); } @@ -151,43 +187,78 @@ /** * Get total score for a user. Will always return a ToolOutput object. */ - private ToolOutput getTotalScore(IAssessmentService assessmentService, Long learnerId, Assessment assessment) { - Float assessmentResultGrade = assessmentService.getLastFinishedAssessmentResultGrade(assessment.getUid(), learnerId); - + private ToolOutput getLastTotalScore(IAssessmentService assessmentService, Long learnerId, Assessment assessment) { + Float assessmentResultGrade = assessmentService.getLastTotalScoreByUser(assessment.getUid(), learnerId); + float totalScore = (assessmentResultGrade == null) ? 0 : assessmentResultGrade; - - return new ToolOutput(AssessmentOutputFactory.OUTPUT_NAME_LEARNER_TOTAL_SCORE, getI18NText( - AssessmentOutputFactory.OUTPUT_NAME_LEARNER_TOTAL_SCORE, true), totalScore); + + return new ToolOutput(AssessmentConstants.OUTPUT_NAME_LEARNER_TOTAL_SCORE, + getI18NText(AssessmentConstants.OUTPUT_NAME_LEARNER_TOTAL_SCORE, true), totalScore); } /** + * Get the best score for a user. Will always return a ToolOutput object. + */ + private ToolOutput getBestTotalScore(IAssessmentService assessmentService, Long sessionId, Long userId) { + Float bestTotalScore = assessmentService.getBestTotalScoreByUser(sessionId, userId); + float bestTotalScoreFloat = (bestTotalScore == null) ? 0 : bestTotalScore; + + return new ToolOutput(AssessmentConstants.OUTPUT_NAME_BEST_SCORE, + getI18NText(AssessmentConstants.OUTPUT_NAME_BEST_SCORE, true), bestTotalScoreFloat); + } + + /** + * Get the first score for a user. Will always return a ToolOutput object. + */ + private ToolOutput getFirstTotalScore(IAssessmentService assessmentService, Long sessionId, Long userId) { + Float firstTotalScore = assessmentService.getFirstTotalScoreByUser(sessionId, userId); + float firstTotalScoreFloat = (firstTotalScore == null) ? 0 : firstTotalScore; + + return new ToolOutput(AssessmentConstants.OUTPUT_NAME_FIRST_SCORE, + getI18NText(AssessmentConstants.OUTPUT_NAME_FIRST_SCORE, true), firstTotalScoreFloat); + } + + /** + * Get the average score for a user. Will always return a ToolOutput object. + */ + private ToolOutput getAverageTotalScore(IAssessmentService assessmentService, Long sessionId, Long userId) { + Float averageTotalScore = assessmentService.getAvergeTotalScoreByUser(sessionId, userId); + float averageTotalScoreFloat = (averageTotalScore == null) ? 0 : averageTotalScore; + + return new ToolOutput(AssessmentConstants.OUTPUT_NAME_AVERAGE_SCORE, + getI18NText(AssessmentConstants.OUTPUT_NAME_AVERAGE_SCORE, true), averageTotalScoreFloat); + } + + /** * Get time taken for a specific user to accomplish this assessment. Will always return a ToolOutput object. */ private ToolOutput getTimeTaken(IAssessmentService assessmentService, Long learnerId, Assessment assessment) { - Integer assessmentResultTimeTaken = assessmentService.getLastFinishedAssessmentResultTimeTaken(assessment.getUid(), learnerId); - + Integer assessmentResultTimeTaken = assessmentService + .getLastFinishedAssessmentResultTimeTaken(assessment.getUid(), learnerId); + long timeTaken = (assessmentResultTimeTaken == null) ? 0 : assessmentResultTimeTaken; - - return new ToolOutput(AssessmentOutputFactory.OUTPUT_NAME_LEARNER_TIME_TAKEN, getI18NText( - AssessmentOutputFactory.OUTPUT_NAME_LEARNER_TIME_TAKEN, true), timeTaken); + + return new ToolOutput(AssessmentConstants.OUTPUT_NAME_LEARNER_TIME_TAKEN, + getI18NText(AssessmentConstants.OUTPUT_NAME_LEARNER_TIME_TAKEN, true), timeTaken); } - + /** * Get the number of attempts done by user. Will always return a ToolOutput object. */ private ToolOutput getNumberAttempts(IAssessmentService assessmentService, Long learnerId, Assessment assessment) { int numberAttempts = assessmentService.getAssessmentResultCount(assessment.getUid(), learnerId); - - return new ToolOutput(AssessmentOutputFactory.OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS, getI18NText( - AssessmentOutputFactory.OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS, true), numberAttempts); + + return new ToolOutput(AssessmentConstants.OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS, + getI18NText(AssessmentConstants.OUTPUT_NAME_LEARNER_NUMBER_ATTEMPTS, true), numberAttempts); } - + /** * Get user's score for the question. Will always return a ToolOutput object. */ private ToolOutput getQuestionScore(IAssessmentService assessmentService, Long learnerId, Assessment assessment, int questionSequenceId) { - Float questionResultMarkDB = assessmentService.getQuestionResultMark(assessment.getUid(), learnerId, questionSequenceId); + Float questionResultMarkDB = assessmentService.getQuestionResultMark(assessment.getUid(), learnerId, + questionSequenceId); float questionResultMark = (questionResultMarkDB == null) ? 0 : questionResultMarkDB; return new ToolOutput(String.valueOf(questionSequenceId), "description", questionResultMark); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -r8be2bc782a2c7066c8c33f5605962584df7a2f9b -rf494ac5c2f49f92be600b6392d9c85c291df7bb7 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 8be2bc782a2c7066c8c33f5605962584df7a2f9b) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision f494ac5c2f49f92be600b6392d9c85c291df7bb7) @@ -111,8 +111,7 @@ /** * @author Andrey Balan */ -public class AssessmentServiceImpl - implements IAssessmentService, ToolContentManager, ToolSessionManager, ToolRestManager { +public class AssessmentServiceImpl implements IAssessmentService, ToolContentManager, ToolSessionManager, ToolRestManager { private static Logger log = Logger.getLogger(AssessmentServiceImpl.class.getName()); private AssessmentDAO assessmentDao; @@ -753,9 +752,24 @@ } @Override - public Float getLastFinishedAssessmentResultGrade(Long assessmentUid, Long userId) { - return assessmentResultDao.getLastFinishedAssessmentResultGrade(assessmentUid, userId); + public Float getLastTotalScoreByUser(Long assessmentUid, Long userId) { + return assessmentResultDao.getLastTotalScoreByUser(assessmentUid, userId); } + + @Override + public Float getBestTotalScoreByUser(Long sessionId, Long userId) { + return assessmentResultDao.getBestTotalScoreByUser(sessionId, userId); + } + + @Override + public Float getFirstTotalScoreByUser(Long sessionId, Long userId) { + return assessmentResultDao.getFirstTotalScoreByUser(sessionId, userId); + } + + @Override + public Float getAvergeTotalScoreByUser(Long sessionId, Long userId) { + return assessmentResultDao.getAvergeTotalScoreByUser(sessionId, userId); + } @Override public Integer getLastFinishedAssessmentResultTimeTaken(Long assessmentUid, Long userId) { @@ -903,7 +917,7 @@ ArrayList assessmentResults = new ArrayList(); for (AssessmentUser user : users) { AssessmentResult assessmentResult = assessmentResultDao - .getLastFinishedAssessmentResultBySessionId(sessionId, user.getUserId()); + .getLastFinishedAssessmentResultByUser(sessionId, user.getUserId()); if (assessmentResult == null) { assessmentResult = new AssessmentResult(); assessmentResult.setUser(user); @@ -926,7 +940,7 @@ @Override public AssessmentResult getUserMasterDetail(Long sessionId, Long userId) { - AssessmentResult lastFinishedResult = assessmentResultDao.getLastFinishedAssessmentResultBySessionId(sessionId, + AssessmentResult lastFinishedResult = assessmentResultDao.getLastFinishedAssessmentResultByUser(sessionId, userId); if (lastFinishedResult != null) { SortedSet questionResults = new TreeSet( @@ -944,10 +958,10 @@ UserSummary userSummary = new UserSummary(); AssessmentUser user = assessmentUserDao.getUserByUserIDAndSessionID(userId, sessionId); userSummary.setUser(user); - List results = assessmentResultDao.getFinishedAssessmentResultsBySession(sessionId, userId); + List results = assessmentResultDao.getFinishedAssessmentResultsByUser(sessionId, userId); userSummary.setNumberOfAttempts(results.size()); - AssessmentResult lastFinishedResult = assessmentResultDao.getLastFinishedAssessmentResultBySessionId(sessionId, + AssessmentResult lastFinishedResult = assessmentResultDao.getLastFinishedAssessmentResultByUser(sessionId, userId); long timeTaken = lastFinishedResult == null ? 0 : lastFinishedResult.getFinishDate().getTime() - lastFinishedResult.getStartDate().getTime(); @@ -1029,7 +1043,7 @@ ArrayList sessionQuestionResults = new ArrayList(); for (AssessmentUser user : users) { AssessmentResult assessmentResult = assessmentResultDao - .getLastFinishedAssessmentResultBySessionId(sessionId, user.getUserId()); + .getLastFinishedAssessmentResultByUser(sessionId, user.getUserId()); AssessmentQuestionResult questionResult = null; if (assessmentResult == null) { questionResult = new AssessmentQuestionResult(); @@ -1494,6 +1508,16 @@ } @Override + public String getActivityEvaluation(Long toolContentId) { + return toolService.getActivityEvaluation(toolContentId); + } + + @Override + public void setActivityEvaluation(Long toolContentId, String toolOutputDefinition) { + toolService.setActivityEvaluation(toolContentId, toolOutputDefinition); + } + + @Override public String getLearnerContentFolder(Long toolSessionId, Long userId) { return toolService.getLearnerContentFolder(toolSessionId, userId); } @@ -1648,14 +1672,6 @@ } } - /** - * Get the definitions for possible output for an activity, based on the toolContentId. These may be definitions - * that are always available for the tool (e.g. number of marks for Multiple Choice) or a custom definition created - * for a particular activity such as the answer to the third question contains the word Koala and hence the need for - * the toolContentId - * - * @return SortedMap of ToolOutputDefinitions with the key being the name of each definition - */ @Override public SortedMap getToolOutputDefinitions(Long toolContentId, int definitionType) throws ToolException { Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java =================================================================== diff -u -r45466cdcb65a2b45fa8e24d23a40b986d902cede -rf494ac5c2f49f92be600b6392d9c85c291df7bb7 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 45466cdcb65a2b45fa8e24d23a40b986d902cede) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision f494ac5c2f49f92be600b6392d9c85c291df7bb7) @@ -237,7 +237,34 @@ * @param userId * @return */ - Float getLastFinishedAssessmentResultGrade(Long assessmentUid, Long userId); + Float getLastTotalScoreByUser(Long assessmentUid, Long userId); + + /** + * Return the best *finished* result grade. + * + * @param sessionId + * @param userId + * @return + */ + Float getBestTotalScoreByUser(Long sessionId, Long userId); + + /** + * Return the first *finished* result grade. + * + * @param sessionId + * @param userId + * @return + */ + Float getFirstTotalScoreByUser(Long sessionId, Long userId); + + /** + * Return the average score of all *finished* result scores. + * + * @param sessionId + * @param userId + * @return + */ + Float getAvergeTotalScoreByUser(Long sessionId, Long userId); /** * Return the latest *finished* result grade. @@ -384,6 +411,18 @@ boolean isGroupedActivity(long toolContentID); /** + * Get the definitions for possible output for an activity, based on the toolContentId. These may be definitions + * that are always available for the tool (e.g. number of marks for Multiple Choice) or a custom definition created + * for a particular activity such as the answer to the third question contains the word Koala and hence the need for + * the toolContentId + * + * @return SortedMap of ToolOutputDefinitions with the key being the name of each definition + */ + String getActivityEvaluation(Long toolContentId); + + void setActivityEvaluation(Long toolContentId, String toolOutputDefinition); + + /** * Return content folder (unique to each learner and lesson) which can be used for storing user generated content. * Currently is used for CKEditor. * Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java =================================================================== diff -u -rada87c0ea51639a2e0741532ee4a508a2c821327 -rf494ac5c2f49f92be600b6392d9c85c291df7bb7 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision ada87c0ea51639a2e0741532ee4a508a2c821327) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision f494ac5c2f49f92be600b6392d9c85c291df7bb7) @@ -30,6 +30,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Set; +import java.util.SortedMap; import java.util.TimeZone; import java.util.TreeSet; @@ -50,6 +51,8 @@ import org.apache.tomcat.util.json.JSONException; import org.apache.tomcat.util.json.JSONObject; import org.lamsfoundation.lams.gradebook.util.GradebookConstants; +import org.lamsfoundation.lams.tool.ToolContentManager; +import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.assessment.AssessmentConstants; import org.lamsfoundation.lams.tool.assessment.dto.AssessmentUserDTO; import org.lamsfoundation.lams.tool.assessment.dto.QuestionSummary; @@ -111,6 +114,9 @@ if (param.equals("setSubmissionDeadline")) { return setSubmissionDeadline(mapping, form, request, response); } + if (param.equals("setActivityEvaluation")) { + return setActivityEvaluation(mapping, form, request, response); + } if (param.equals("getUsers")) { return getUsers(mapping, form, request, response); } @@ -171,6 +177,16 @@ questionList.add(reference.getQuestion()); } } + + //prepare toolOutputDefinitions and activityEvaluation + List toolOutputDefinitions = new ArrayList(); + toolOutputDefinitions.add(AssessmentConstants.OUTPUT_NAME_LEARNER_TOTAL_SCORE); + toolOutputDefinitions.add(AssessmentConstants.OUTPUT_NAME_BEST_SCORE); + toolOutputDefinitions.add(AssessmentConstants.OUTPUT_NAME_FIRST_SCORE); + toolOutputDefinitions.add(AssessmentConstants.OUTPUT_NAME_AVERAGE_SCORE); + String activityEvaluation = service.getActivityEvaluation(contentId); + sessionMap.put(AssessmentConstants.ATTR_TOOL_OUTPUT_DEFINITIONS, toolOutputDefinitions); + sessionMap.put(AssessmentConstants.ATTR_ACTIVITY_EVALUATION, activityEvaluation); // cache into sessionMap boolean isGroupedActivity = service.isGroupedActivity(contentId); @@ -275,6 +291,32 @@ } /** + * Set tool's activityEvaluation + * + * @param mapping + * @param form + * @param request + * @param response + * @return + * @throws JSONException + * @throws IOException + */ + private ActionForward setActivityEvaluation(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws JSONException, IOException { + initAssessmentService(); + + Long contentID = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID); + String activityEvaluation = WebUtil.readStrParam(request, AssessmentConstants.ATTR_ACTIVITY_EVALUATION); + service.setActivityEvaluation(contentID, activityEvaluation); + + JSONObject responseJSON = new JSONObject(); + responseJSON.put("success", "true"); + response.setContentType("application/json;charset=utf-8"); + response.getWriter().print(new String(responseJSON.toString())); + return null; + } + + /** * Refreshes user list. */ public ActionForward getUsers(ActionMapping mapping, ActionForm form, HttpServletRequest request, @@ -306,7 +348,7 @@ if (groupLeader != null) { - float assessmentResult = service.getLastFinishedAssessmentResultGrade(assessment.getUid(), + float assessmentResult = service.getLastTotalScoreByUser(assessment.getUid(), groupLeader.getUserId()); AssessmentUserDTO userDto = new AssessmentUserDTO(); @@ -560,7 +602,7 @@ if (groupLeader != null) { - float assessmentResult = service.getLastFinishedAssessmentResultGrade(assessment.getUid(), + float assessmentResult = service.getLastTotalScoreByUser(assessment.getUid(), groupLeader.getUserId()); AssessmentUserDTO userDto = new AssessmentUserDTO(); Index: lams_tool_assessment/web/pages/monitoring/statistic.jsp =================================================================== diff -u -r45466cdcb65a2b45fa8e24d23a40b986d902cede -rf494ac5c2f49f92be600b6392d9c85c291df7bb7 --- lams_tool_assessment/web/pages/monitoring/statistic.jsp (.../statistic.jsp) (revision 45466cdcb65a2b45fa8e24d23a40b986d902cede) +++ lams_tool_assessment/web/pages/monitoring/statistic.jsp (.../statistic.jsp) (revision f494ac5c2f49f92be600b6392d9c85c291df7bb7) @@ -2,6 +2,31 @@ + +

@@ -39,3 +64,29 @@ + +

+ + + + + +

+
+ + +