Index: lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== diff -u -r3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f -rffbd31e92ef761df70dfa660de414ba7b8b269ce --- lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f) +++ lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce) @@ -156,8 +156,6 @@ label.learning.heading =Share Resources label.learning.choose.one.answer =Choose one of the following answers. label.learning.choose.at.least.one.answer =Choose at least one answer. -label.learning.submit.page =Submit page -label.learning.submit.all =Submit all label.learning.matching.pairs.pick.up =Pick up the corresponding answers label.learning.matching.pairs.choose =Choose label.learning.short.answer.answer =Answer: @@ -166,6 +164,10 @@ label.learning.ordering.sort.answers =Sort answers in the right order label.learning.marks.penalty =Marks for this submission: {0}/{1}. This submission attracted a penalty of {2}. label.learning.marks =Marks for this submission: {0}/{1}. +label.learning.finish.test =Finish Test +label.learning.submit.all =Submit All +label.learning.next.activity =Next Activity +label.learning.resubmit =Resubmit monitoring.tab.summary =Summary monitoring.tab.instructions =Instruction monitoring.tab.statistics =Statistic Index: lams_tool_assessment/conf/xdoclet/struts-actions.xml =================================================================== diff -u -r3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f -rffbd31e92ef761df70dfa660de414ba7b8b269ce --- lams_tool_assessment/conf/xdoclet/struts-actions.xml (.../struts-actions.xml) (revision 3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f) +++ lams_tool_assessment/conf/xdoclet/struts-actions.xml (.../struts-actions.xml) (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce) @@ -186,54 +186,27 @@ parameter="nextPage" > - - - - - + + parameter="finishTest" > + + + - - - - - - - - - - - - Index: lams_tool_assessment/db/sql/create_lams_tool_assessment.sql =================================================================== diff -u -r3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f -rffbd31e92ef761df70dfa660de414ba7b8b269ce --- lams_tool_assessment/db/sql/create_lams_tool_assessment.sql (.../create_lams_tool_assessment.sql) (revision 3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f) +++ lams_tool_assessment/db/sql/create_lams_tool_assessment.sql (.../create_lams_tool_assessment.sql) (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce) @@ -4,8 +4,10 @@ drop table if exists tl_laasse10_assessment_question; drop table if exists tl_laasse10_question_option; drop table if exists tl_laasse10_assessment_overall_feedback; -drop table if exists tl_laasse10_assessment_question_result; -drop table if exists tl_laasse10_assessment_answer; +drop table if exists tl_laasse10_assessment_unit; +drop table if exists tl_laasse10_assessment_result; +drop table if exists tl_laasse10_question_result; +drop table if exists tl_laasse10_option_answer; drop table if exists tl_laasse10_session; drop table if exists tl_laasse10_user; create table tl_laasse10_attachment ( @@ -26,7 +28,7 @@ title varchar(255), run_offline tinyint, time_limit integer DEFAULT 0, - attempts_allowed integer DEFAULT 0, + attempts_allowed integer DEFAULT 1, instructions text, online_instructions text, offline_instructions text, @@ -97,23 +99,29 @@ unit varchar(255), primary key (uid) )type=innodb; -create table tl_laasse10_question_result ( +create table tl_laasse10_assessment_result ( uid bigint not null auto_increment, + assessment_uid bigint, start_date datetime, finish_date datetime, + user_uid bigint, + session_id bigint, + primary key (uid) +)type=innodb; +create table tl_laasse10_question_result ( + uid bigint not null auto_increment, assessment_question_uid bigint, + result_uid bigint, answer_string text, answer_float float, answer_boolean boolean, mark float, penalty float, - user_uid bigint, - session_id bigint, primary key (uid) )type=innodb; -create table tl_laasse10_assessment_answer ( +create table tl_laasse10_option_answer ( uid bigint not null unique auto_increment, - result_uid bigint, + question_result_uid bigint, sequence_id integer, answer_boolean boolean, answer_int integer, @@ -148,21 +156,18 @@ alter table tl_laasse10_question_option add index FK_tl_laasse10_question_option_1 (question_uid), add constraint FK_tl_laasse10_question_option_1 foreign key (question_uid) references tl_laasse10_assessment_question (uid); alter table tl_laasse10_assessment_overall_feedback add index FK_tl_laasse10_assessment_overall_feedback_1 (assessment_uid), add constraint FK_tl_laasse10_assessment_overall_feedback_1 foreign key (assessment_uid) references tl_laasse10_assessment (uid); alter table tl_laasse10_assessment_unit add index FK_tl_laasse10_assessment_unit_1 (question_uid), add constraint FK_tl_laasse10_assessment_unit_1 foreign key (question_uid) references tl_laasse10_assessment_question (uid); +alter table tl_laasse10_assessment_result add index FK_tl_laasse10_assessment_result_2 (user_uid), add constraint FK_tl_laasse10_assessment_result_2 foreign key (user_uid) references tl_laasse10_user (uid); +alter table tl_laasse10_assessment_result add index FK_tl_laasse10_assessment_result_3 (assessment_uid), add constraint FK_tl_laasse10_assessment_result_3 foreign key (assessment_uid) references tl_laasse10_assessment (uid); alter table tl_laasse10_question_result add index FK_NEW_1720029621_693580A438BF8DFE (assessment_question_uid), add constraint FK_NEW_1720029621_693580A438BF8DFE foreign key (assessment_question_uid) references tl_laasse10_assessment_question (uid); -alter table tl_laasse10_question_result add index FK_NEW_1720029621_693580A441F9365D (user_uid), add constraint FK_NEW_1720029621_693580A441F9365D foreign key (user_uid) references tl_laasse10_user (uid); -alter table tl_laasse10_assessment_answer add index FK_tl_laasse10_assessment_answer_1 (result_uid), add constraint FK_tl_laasse10_assessment_answer_1 foreign key (result_uid) references tl_laasse10_question_result (uid); +alter table tl_laasse10_question_result add index FK_tl_laasse10_question_result_1 (result_uid), add constraint FK_tl_laasse10_question_result_1 foreign key (result_uid) references tl_laasse10_assessment_result (uid); +alter table tl_laasse10_option_answer add index FK_tl_laasse10_option_answer_1 (question_result_uid), add constraint FK_tl_laasse10_option_answer_1 foreign key (question_result_uid) references tl_laasse10_question_result (uid); alter table tl_laasse10_session add index FK_NEW_1720029621_24AA78C530E79035 (assessment_uid), add constraint FK_NEW_1720029621_24AA78C530E79035 foreign key (assessment_uid) references tl_laasse10_assessment (uid); alter table tl_laasse10_user add index FK_NEW_1720029621_30113BFCEC0D3147 (session_uid), add constraint FK_NEW_1720029621_30113BFCEC0D3147 foreign key (session_uid) references tl_laasse10_session (uid); alter table tl_laasse10_user add index FK_NEW_1720029621_30113BFC309ED320 (assessment_uid), add constraint FK_NEW_1720029621_30113BFC309ED320 foreign key (assessment_uid) references tl_laasse10_assessment (uid); - - INSERT INTO `tl_laasse10_assessment` (`uid`, `create_date`, `update_date`, `create_by`, `title`, `run_offline`, `instructions`, `online_instructions`, `offline_instructions`, `content_in_use`, `define_later`, `content_id`, `allow_question_feedback`, `allow_overall_feedback`, `allow_right_wrong_answers`, `allow_grades_after_attempt`, `shuffled`,`reflect_on_activity`) VALUES (1,NULL,NULL,NULL,'Assessment','0','Instructions ',null,null,0,0,${default_content_id},0,0,0,0,0,0); -INSERT INTO `tl_laasse10_assessment_question` (`uid`, `question_type`, `title`, `question`, `sequence_id`, `general_feedback`, `feedback_on_correct`, `feedback_on_partially_correct`, `feedback_on_incorrect`, `shuffle`, `case_sensitive`, `hide`, `create_by_author`, `create_date`, `create_by`, `assessment_uid`, `session_uid`) VALUES - (1,1,'Title','Question',1,'general_feedback','feedback_on_correct','feedback_on_partially_correct','feedback_on_incorrect',0,0,0,0,NOW(),NULL,1,NULL); - SET FOREIGN_KEY_CHECKS=1; Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/AssessmentConstants.java =================================================================== diff -u -r3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f -rffbd31e92ef761df70dfa660de414ba7b8b269ce --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/AssessmentConstants.java (.../AssessmentConstants.java) (revision 3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/AssessmentConstants.java (.../AssessmentConstants.java) (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce) @@ -152,8 +152,6 @@ public static final String ATTR_USER_LIST = "userList"; - public static final String ATTR_FINISH_LOCK = "finishedLock"; - public static final String ATTR_LOCK_ON_FINISH = "lockOnFinish"; public static final String ATTR_SESSION_MAP_ID = "sessionMapID"; @@ -174,7 +172,15 @@ public static final String ATTR_PAGED_QUESTIONS = "pagedQuestions"; - public static final String ATTR_RESULT_FOR_ORDERING = "resultForOrdering"; + public static final String ATTR_QUESTION_FOR_ORDERING = "questionForOrdering"; + + public static final String ATTR_ASSESSMENT_RESULT = "assessmentResult"; + + public static final String ATTR_IS_RESUBMIT_ALLOWED = "isResubmitAllowed"; + + public static final String ATTR_FINISHED_LOCK = "finishedLock"; + + public static final String ATTR_USER = "user"; // 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 -r3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f -rffbd31e92ef761df70dfa660de414ba7b8b269ce --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/assessmentApplicationContext.xml (.../assessmentApplicationContext.xml) (revision 3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/assessmentApplicationContext.xml (.../assessmentApplicationContext.xml) (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce) @@ -25,8 +25,9 @@ org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionOption.hbm.xml org/lamsfoundation/lams/tool/assessment/model/AssessmentOverallFeedback.hbm.xml org/lamsfoundation/lams/tool/assessment/model/AssessmentUnit.hbm.xml + org/lamsfoundation/lams/tool/assessment/model/AssessmentResult.hbm.xml org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.hbm.xml - org/lamsfoundation/lams/tool/assessment/model/AssessmentAnswer.hbm.xml + org/lamsfoundation/lams/tool/assessment/model/AssessmentOptionAnswer.hbm.xml org/lamsfoundation/lams/tool/assessment/model/AssessmentAttachment.hbm.xml org/lamsfoundation/lams/tool/assessment/model/AssessmentSession.hbm.xml @@ -49,6 +50,11 @@ + + + + + @@ -84,6 +90,9 @@ + + + @@ -139,7 +148,8 @@ 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/AssessmentQuestionResultDAO.java =================================================================== diff -u -r3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f -rffbd31e92ef761df70dfa660de414ba7b8b269ce --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentQuestionResultDAO.java (.../AssessmentQuestionResultDAO.java) (revision 3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentQuestionResultDAO.java (.../AssessmentQuestionResultDAO.java) (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce) @@ -30,16 +30,16 @@ public interface AssessmentQuestionResultDAO extends DAO { - public AssessmentQuestionResult getAssessmentQuestionResult(Long questionUid, Long userId); +// public AssessmentQuestionResult getAssessmentQuestionResult(Long questionUid, Long userId); +// +// /** +// * Return list which contains key pair which key is assessment question uid, value is number view. +// * +// * @param contentId +// * @return +// */ +// public Map getSummary(Long contentId); +// +// public List getAssessmentQuestionResultBySession(Long sessionId, Long questionUid); - /** - * Return list which contains key pair which key is assessment question uid, value is number view. - * - * @param contentId - * @return - */ - public Map getSummary(Long contentId); - - public List getAssessmentQuestionResultBySession(Long sessionId, Long questionUid); - } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentResultDAO.java =================================================================== diff -u --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentResultDAO.java (revision 0) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentResultDAO.java (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce) @@ -0,0 +1,51 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +/* $Id$ */ +package org.lamsfoundation.lams.tool.assessment.dao; + +import java.util.List; +import java.util.Map; + +import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestionResult; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentResult; + +public interface AssessmentResultDAO extends DAO { + + List getAssessmentResult(Long assessmentUid, Long userId); + + AssessmentResult getLastAssessmentResult(Long assessmentUid, Long userId); + + int getAssessmentResultCount(Long toolSessionId, Long userId); + +// /** +// * Return list which contains key pair which key is assessment question uid, value is number view. +// * +// * @param contentId +// * @return +// */ +// Map getSummary(Long contentId); + +// List getAssessmentResultBySession(Long sessionId, Long questionUid); + +} + \ No newline at end of file Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentQuestionResultDAOHibernate.java =================================================================== diff -u -r3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f -rffbd31e92ef761df70dfa660de414ba7b8b269ce --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentQuestionResultDAOHibernate.java (.../AssessmentQuestionResultDAOHibernate.java) (revision 3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentQuestionResultDAOHibernate.java (.../AssessmentQuestionResultDAOHibernate.java) (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce) @@ -34,52 +34,51 @@ public class AssessmentQuestionResultDAOHibernate extends BaseDAOHibernate implements AssessmentQuestionResultDAO { - private static final String FIND_BY_QUESTION_AND_USER = "from " + AssessmentQuestionResult.class.getName() - + " as r where r.user.userId = ? and r.assessmentQuestion.uid=?"; - - private static final String FIND_BY_QUESTION_AND_SESSION = "from " + AssessmentQuestionResult.class.getName() - + " as r where r.sessionId = ? and r.assessmentQuestion.uid=?"; - -// private static final String FIND_VIEW_COUNT_BY_USER = "select count(*) from " -// + AssessmentQuestionResult.class.getName() + " as r where r.sessionId=? and r.user.userId =?"; - - private static final String FIND_SUMMARY = "select v.assessmentQuestion.uid, count(v.assessmentQuestion) from " - + AssessmentQuestionResult.class.getName() + " as v , " + AssessmentSession.class.getName() + " as s, " - + Assessment.class.getName() + " as r " + " where v.sessionId = s.sessionId " - + " and s.assessment.uid = r.uid " + " and r.contentId =? " - + " group by v.sessionId, v.assessmentQuestion.uid "; - - public AssessmentQuestionResult getAssessmentQuestionResult(Long questionUid, Long userId) { - List list = getHibernateTemplate().find(FIND_BY_QUESTION_AND_USER, new Object[] { userId, questionUid }); - if (list == null || list.size() == 0) - return null; - return (AssessmentQuestionResult) list.get(0); - } - +// private static final String FIND_BY_QUESTION_AND_USER = "from " + AssessmentQuestionResult.class.getName() +// + " as r where r.user.userId = ? and r.assessmentQuestion.uid=?"; +// +// private static final String FIND_BY_QUESTION_AND_SESSION = "from " + AssessmentQuestionResult.class.getName() +// + " as r where r.sessionId = ? and r.assessmentQuestion.uid=?"; +// +//// private static final String FIND_VIEW_COUNT_BY_USER = "select count(*) from " +//// + AssessmentQuestionResult.class.getName() + " as r where r.sessionId=? and r.user.userId =?"; +// +// private static final String FIND_SUMMARY = "select v.assessmentQuestion.uid, count(v.assessmentQuestion) from " +// + AssessmentQuestionResult.class.getName() + " as v , " + AssessmentSession.class.getName() + " as s, " +// + Assessment.class.getName() + " as r " + " where v.sessionId = s.sessionId " +// + " and s.assessment.uid = r.uid " + " and r.contentId =? " +// + " group by v.sessionId, v.assessmentQuestion.uid "; +// +// public AssessmentQuestionResult getAssessmentQuestionResult(Long questionUid, Long userId) { +// List list = getHibernateTemplate().find(FIND_BY_QUESTION_AND_USER, new Object[] { userId, questionUid }); +// if (list == null || list.size() == 0) +// return null; +// return (AssessmentQuestionResult) list.get(0); +// } +// // public int getUserViewLogCount(Long toolSessionId, Long userUid) { // List list = getHibernateTemplate().find(FIND_VIEW_COUNT_BY_USER, new Object[] { toolSessionId, userUid }); // if (list == null || list.size() == 0) // return 0; // return ((Number) list.get(0)).intValue(); // } +// +// public Map getSummary(Long contentId) { +// +// // Note: Hibernate 3.1 query.uniqueResult() returns Integer, Hibernate 3.2 query.uniqueResult() returns Long +// List result = getHibernateTemplate().find(FIND_SUMMARY, contentId); +// Map summaryList = new HashMap(result.size()); +// for (Object[] list : result) { +// if (list[1] != null) { +// summaryList.put((Long) list[0], new Integer(((Number) list[1]).intValue())); +// } +// } +// return summaryList; +// +// } +// +// public List getAssessmentQuestionResultBySession(Long sessionId, Long questionUid) { +// return getHibernateTemplate().find(FIND_BY_QUESTION_AND_SESSION, new Object[] { sessionId, questionUid }); +// } - public Map getSummary(Long contentId) { - - // Note: Hibernate 3.1 query.uniqueResult() returns Integer, Hibernate 3.2 query.uniqueResult() returns Long - List result = getHibernateTemplate().find(FIND_SUMMARY, contentId); - Map summaryList = new HashMap(result.size()); - for (Object[] list : result) { - if (list[1] != null) { - summaryList.put((Long) list[0], new Integer(((Number) list[1]).intValue())); - } - } - return summaryList; - - } - - public List getAssessmentQuestionResultBySession(Long sessionId, Long questionUid) { - - return getHibernateTemplate().find(FIND_BY_QUESTION_AND_SESSION, new Object[] { sessionId, questionUid }); - } - } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java =================================================================== diff -u --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java (revision 0) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce) @@ -0,0 +1,95 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +/* $Id$ */ +package org.lamsfoundation.lams.tool.assessment.dao.hibernate; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.lamsfoundation.lams.tool.assessment.dao.AssessmentQuestionResultDAO; +import org.lamsfoundation.lams.tool.assessment.dao.AssessmentResultDAO; +import org.lamsfoundation.lams.tool.assessment.model.Assessment; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestionResult; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentResult; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentSession; + +public class AssessmentResultDAOHibernate extends BaseDAOHibernate implements AssessmentResultDAO { + + private static final String FIND_BY_ASSESSMENT_AND_USER = "from " + AssessmentResult.class.getName() + + " as r where r.user.userId = ? and r.assessment.uid=? order by start_date asc"; + + private static final String FIND_BY_ASSESSMENT_AND_SESSION = "from " + AssessmentResult.class.getName() + + " as r where r.sessionId = ? and r.assessment.uid=?"; + + private static final String FIND_ASSESSMENT_RESULT_COUNT_BY_USER = "select count(*) from " + + AssessmentResult.class.getName() + " as r where r.sessionId=? and r.user.userId =?"; + +// private static final String FIND_SUMMARY = "select v.assessmentQuestion.uid, count(v.assessmentQuestion) from " +// + AssessmentQuestionResult.class.getName() + " as v , " + AssessmentSession.class.getName() + " as s, " +// + Assessment.class.getName() + " as r " + " where v.sessionId = s.sessionId " +// + " and s.assessment.uid = r.uid " + " and r.contentId =? " +// + " group by v.sessionId, v.assessmentQuestion.uid "; + + public List getAssessmentResult(Long assessmentUid, Long userId) { + return getHibernateTemplate().find(FIND_BY_ASSESSMENT_AND_USER, new Object[] { userId, assessmentUid }); + } + + public AssessmentResult getLastAssessmentResult(Long assessmentUid, Long userId) { + List list = getHibernateTemplate().find(FIND_BY_ASSESSMENT_AND_USER, new Object[] { userId, assessmentUid }); + if (list == null || list.size() == 0) { + return null; + } else { + return (AssessmentResult) list.get(0); + } + } + + public int getAssessmentResultCount(Long toolSessionId, Long userId) { + List list = getHibernateTemplate().find(FIND_ASSESSMENT_RESULT_COUNT_BY_USER, new Object[] { toolSessionId, userId }); + if (list == null || list.size() == 0) { + return 0; + } else { + return ((Number) list.get(0)).intValue(); + } + } + +// public Map getSummary(Long contentId) { +// // Note: Hibernate 3.1 query.uniqueResult() returns Integer, Hibernate 3.2 query.uniqueResult() returns Long +// List result = getHibernateTemplate().find(FIND_SUMMARY, contentId); +// Map summaryList = new HashMap(result.size()); +// for (Object[] list : result) { +// if (list[1] != null) { +// summaryList.put((Long) list[0], new Integer(((Number) list[1]).intValue())); +// } +// } +// return summaryList; +// +// } + +// public List getAssessmentResultBySession(Long sessionId, Long assessmentUid) { +// return getHibernateTemplate().find(FIND_BY_ASSESSMENT_AND_SESSION, new Object[] { sessionId, assessmentUid }); +// } + +} + + \ No newline at end of file Fisheye: Tag ffbd31e92ef761df70dfa660de414ba7b8b269ce refers to a dead (removed) revision in file `lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentAnswer.hbm.xml'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag ffbd31e92ef761df70dfa660de414ba7b8b269ce refers to a dead (removed) revision in file `lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentAnswer.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentOptionAnswer.hbm.xml =================================================================== diff -u --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentOptionAnswer.hbm.xml (revision 0) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentOptionAnswer.hbm.xml (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce) @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentOptionAnswer.java =================================================================== diff -u --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentOptionAnswer.java (revision 0) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentOptionAnswer.java (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce) @@ -0,0 +1,110 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +/* $Id$ */ +package org.lamsfoundation.lams.tool.assessment.model; + +import org.apache.log4j.Logger; + +/** + * AssessmentOptionAnswer + * + * @author Andrey Balan + * + * @hibernate.class table="tl_laasse10_option_answer" + */ +public class AssessmentOptionAnswer implements Cloneable, Sequencable { + private static final Logger log = Logger.getLogger(AssessmentOptionAnswer.class); + + private Long uid; + + private Integer sequenceId; + + private int answerInt; + + private boolean answerBoolean; + + // ********************************************************** + // Get/Set methods + // ********************************************************** + + /** + * @hibernate.id generator-class="native" column="uid" + * @return Returns the answer ID. + */ + public Long getUid() { + return uid; + } + + private void setUid(Long uid) { + this.uid = uid; + } + + /** + * Returns answer's sequence number. + * + * @return answer's sequence number + * + * @hibernate.property column="sequence_id" + */ + public int getSequenceId() { + return sequenceId; + } + + /** + * Sets answer's sequence number. + * + * @param sequenceId + * answer's sequence number + */ + public void setSequenceId(int sequenceId) { + this.sequenceId = sequenceId; + } + + /** + * @hibernate.property column="answer_int" + * + * @return Returns the possible numeric answer. + */ + public int getAnswerInt() { + return answerInt; + } + + public void setAnswerInt(int answerInt) { + this.answerInt = answerInt; + } + + /** + * @hibernate.property column="answer_boolean" + * + * @return Returns the boolean answer. + */ + public boolean getAnswerBoolean() { + return answerBoolean; + } + + public void setAnswerBoolean(boolean answerBoolean) { + this.answerBoolean = answerBoolean; + } +} + + \ No newline at end of file Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestion.java =================================================================== diff -u -r3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f -rffbd31e92ef761df70dfa660de414ba7b8b269ce --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestion.java (.../AssessmentQuestion.java) (revision 3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestion.java (.../AssessmentQuestion.java) (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce) @@ -96,6 +96,10 @@ private boolean answerBoolean; + private float mark; + + private float penalty; + public AssessmentQuestion() { questionOptions = new TreeSet(new SequencableComparator()); units = new TreeSet(new SequencableComparator()); @@ -415,8 +419,8 @@ /** * @param questionOptions questionOptions to set. */ - public void setQuestionOptions(Set answerOptions) { - this.questionOptions = answerOptions; + public void setQuestionOptions(Set questionOptions) { + this.questionOptions = questionOptions; } /** @@ -465,4 +469,18 @@ public void setAnswerBoolean(boolean answerBoolean) { this.answerBoolean = answerBoolean; } + + public Float getMark() { + return mark; + } + public void setMark(Float mark) { + this.mark = mark; + } + + public Float getPenalty() { + return penalty; + } + public void setPenalty(Float penalty) { + this.penalty = penalty; + } } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.hbm.xml =================================================================== diff -u -r3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f -rffbd31e92ef761df70dfa660de414ba7b8b269ce --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.hbm.xml (.../AssessmentQuestionResult.hbm.xml) (revision 3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.hbm.xml (.../AssessmentQuestionResult.hbm.xml) (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce) @@ -26,16 +26,6 @@ - - - - - - - - Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.java =================================================================== diff -u -r3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f -rffbd31e92ef761df70dfa660de414ba7b8b269ce --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.java (.../AssessmentQuestionResult.java) (revision 3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.java (.../AssessmentQuestionResult.java) (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce) @@ -24,8 +24,6 @@ /* $Id$ */ package org.lamsfoundation.lams.tool.assessment.model; -import java.util.Date; -import java.util.LinkedHashSet; import java.util.Set; import java.util.TreeSet; @@ -42,23 +40,16 @@ public class AssessmentQuestionResult { private Long uid; - private AssessmentUser user; private AssessmentQuestion assessmentQuestion; private String answerString; private float answerFloat; private boolean answerBoolean; private float mark; private float penalty; - private Date startDate; - private Date finishDate; - private Long sessionId; - private Set answers; - - // DTO fields: - private boolean processed; + private Set optionAnswers; public AssessmentQuestionResult() { - answers = new TreeSet(new SequencableComparator()); + optionAnswers = new TreeSet(new SequencableComparator()); } /** @@ -72,18 +63,6 @@ public void setUid(Long uid) { this.uid = uid; } - - /** - * @hibernate.many-to-one column="user_uid" cascade="none" - * @return - */ - public AssessmentUser getUser() { - return user; - } - - public void setUser(AssessmentUser user) { - this.user = user; - } /** * @hibernate.many-to-one column="assessment_question_uid" cascade="none" @@ -161,67 +140,24 @@ public void setPenalty(Float penalty) { this.penalty = penalty; } - - /** - * @hibernate.property column="start_date" - * @return - */ - public Date getStartDate() { - return startDate; - } - - public void setStartDate(Date startDate) { - this.startDate = startDate; - } /** - * @hibernate.property column="finish_date" - * @return - */ - public Date getFinishDate() { - return finishDate; - } - - public void setFinishDate(Date finishDate) { - this.finishDate = finishDate; - } - - /** - * @hibernate.property column="session_id" - * @return - */ - public Long getSessionId() { - return sessionId; - } - - public void setSessionId(Long sessionId) { - this.sessionId = sessionId; - } - - /** * * @hibernate.set cascade="all" order-by="sequence_id asc" - * @hibernate.collection-key column="result_uid" - * @hibernate.collection-one-to-many class="org.lamsfoundation.lams.tool.assessment.model.AssessmentAnswer" + * @hibernate.collection-key column="question_result_uid" + * @hibernate.collection-one-to-many class="org.lamsfoundation.lams.tool.assessment.model.AssessmentOptionAnswer" * * @return a set of answerOptions to this AssessmentQuestion. */ - public Set getAnswers() { - return answers; + public Set getOptionAnswers() { + return optionAnswers; } /** * @param answerOptions answerOptions to set. */ - public void setAnswers(Set answers) { - this.answers = answers; + public void setOptionAnswers(Set answers) { + this.optionAnswers = answers; } - - public boolean isProcessed() { - return processed; - } - public void setProcessed(boolean processed) { - this.processed = processed; - } - + } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentResult.hbm.xml =================================================================== diff -u --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentResult.hbm.xml (revision 0) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentResult.hbm.xml (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce) @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentResult.java =================================================================== diff -u --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentResult.java (revision 0) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentResult.java (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce) @@ -0,0 +1,147 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +/* $Id$ */ +package org.lamsfoundation.lams.tool.assessment.model; + +import java.util.Date; +import java.util.Set; +import java.util.TreeSet; + +import org.lamsfoundation.lams.tool.assessment.util.AssessmentQuestionResultComparator; + +/** + * Assessment Result + * + * @author Andrey Balan + * + * @hibernate.class table="tl_laasse10_assessment_result" + * + */ +public class AssessmentResult { + + private Long uid; + private Assessment assessment; + private Date startDate; + private Date finishDate; + private AssessmentUser user; + private Long sessionId; + private Set questionResults; + + public AssessmentResult() { + questionResults = new TreeSet(new AssessmentQuestionResultComparator()); + } + + /** + * @hibernate.id generator-class="native" type="java.lang.Long" column="uid" + * @return Returns the result Uid. + */ + public Long getUid() { + return uid; + } + + public void setUid(Long uid) { + this.uid = uid; + } + + /** + * @hibernate.many-to-one column="assessment_uid" cascade="none" + * @return + */ + public Assessment getAssessment() { + return assessment; + } + + public void setAssessment(Assessment assessment) { + this.assessment = assessment; + } + + /** + * @hibernate.many-to-one column="user_uid" cascade="none" + * @return + */ + public AssessmentUser getUser() { + return user; + } + + public void setUser(AssessmentUser user) { + this.user = user; + } + + /** + * @hibernate.property column="start_date" + * @return + */ + public Date getStartDate() { + return startDate; + } + + public void setStartDate(Date startDate) { + this.startDate = startDate; + } + + /** + * @hibernate.property column="finish_date" + * @return + */ + public Date getFinishDate() { + return finishDate; + } + + public void setFinishDate(Date finishDate) { + this.finishDate = finishDate; + } + + /** + * @hibernate.property column="session_id" + * @return + */ + public Long getSessionId() { + return sessionId; + } + + public void setSessionId(Long sessionId) { + this.sessionId = sessionId; + } + + /** + * + * @hibernate.set cascade="all" + * @hibernate.collection-key column="result_uid" + * @hibernate.collection-one-to-many class="org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestionResult" + * + * @return a set of answerOptions to this AssessmentQuestion. + */ + public Set getQuestionResults() { + return questionResults; + } + + /** + * @param answerOptions answerOptions to set. + */ + public void setQuestionResults(Set questionResults) { + this.questionResults = questionResults; + } + +} + + \ No newline at end of file Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -r3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f -rffbd31e92ef761df70dfa660de414ba7b8b269ce --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce) @@ -31,7 +31,6 @@ import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; -import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -40,7 +39,6 @@ import java.util.TreeMap; import java.util.TreeSet; -import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.apache.struts.upload.FormFile; @@ -75,21 +73,23 @@ import org.lamsfoundation.lams.tool.assessment.dao.AssessmentDAO; import org.lamsfoundation.lams.tool.assessment.dao.AssessmentQuestionDAO; import org.lamsfoundation.lams.tool.assessment.dao.AssessmentQuestionResultDAO; +import org.lamsfoundation.lams.tool.assessment.dao.AssessmentResultDAO; import org.lamsfoundation.lams.tool.assessment.dao.AssessmentSessionDAO; import org.lamsfoundation.lams.tool.assessment.dao.AssessmentUserDAO; import org.lamsfoundation.lams.tool.assessment.dto.ReflectDTO; import org.lamsfoundation.lams.tool.assessment.dto.Summary; import org.lamsfoundation.lams.tool.assessment.model.Assessment; -import org.lamsfoundation.lams.tool.assessment.model.AssessmentAnswer; import org.lamsfoundation.lams.tool.assessment.model.AssessmentAttachment; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentOptionAnswer; import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestion; import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestionOption; import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestionResult; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentResult; import org.lamsfoundation.lams.tool.assessment.model.AssessmentSession; import org.lamsfoundation.lams.tool.assessment.model.AssessmentUser; +import org.lamsfoundation.lams.tool.assessment.util.AssessmentQuestionResultComparator; import org.lamsfoundation.lams.tool.assessment.util.AssessmentToolContentHandler; import org.lamsfoundation.lams.tool.assessment.util.ReflectDTOComparator; -import org.lamsfoundation.lams.tool.assessment.util.SequencableComparator; import org.lamsfoundation.lams.tool.exception.DataMissingException; import org.lamsfoundation.lams.tool.exception.SessionDataExistsException; import org.lamsfoundation.lams.tool.exception.ToolException; @@ -99,6 +99,7 @@ import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.util.audit.IAuditService; +import org.lamsfoundation.lams.web.util.SessionMap; /** * @@ -120,6 +121,8 @@ private AssessmentSessionDAO assessmentSessionDao; private AssessmentQuestionResultDAO assessmentQuestionResultDao; + + private AssessmentResultDAO assessmentResultDao; // tool service private AssessmentToolContentHandler assessmentToolContentHandler; @@ -408,72 +411,61 @@ public void saveOrUpdateAssessmentSession(AssessmentSession resSession) { assessmentSessionDao.saveObject(resSession); } + + public void saveOrUpdateAssessmentResult(AssessmentResult assessmentResult) { + assessmentResultDao.saveObject(assessmentResult); + } public void retrieveComplete(SortedSet assessmentQuestionList, AssessmentUser user) { - for (AssessmentQuestion question : assessmentQuestionList) { - AssessmentQuestionResult result = assessmentQuestionResultDao.getAssessmentQuestionResult(question.getUid(), - user.getUserId()); - if (result == null) { - question.setComplete(false); - } else { - question.setComplete(result.isProcessed()); - } - } +// for (AssessmentQuestion question : assessmentQuestionList) { +// AssessmentQuestionResult result = assessmentQuestionResultDao.getAssessmentQuestionResult(question.getUid(), +// user.getUserId()); +// if (result == null) { +// question.setComplete(false); +// } else { +//// question.setComplete(result.isProcessed()); +// } +// } } - - public void setQuestionStartDate(Long assessmentQuestionUid, Long userId, Long sessionId) { - AssessmentQuestionResult result = assessmentQuestionResultDao.getAssessmentQuestionResult(assessmentQuestionUid, - userId); - if (result == null) { - result = new AssessmentQuestionResult(); - AssessmentQuestion question = assessmentQuestionDao.getByUid(assessmentQuestionUid); - result.setAssessmentQuestion(question); - AssessmentUser user = assessmentUserDao.getUserByUserIDAndSessionID(userId, sessionId); - result.setUser(user); - result.setProcessed(false); - result.setSessionId(sessionId); - result.setStartDate(new Timestamp(new Date().getTime())); - assessmentQuestionResultDao.saveObject(result); - } + + public void setAttemptStarted(Assessment assessment, AssessmentUser assessmentUser, Long toolSessionId) { + AssessmentResult result = new AssessmentResult(); + result.setAssessment(assessment); + result.setUser(assessmentUser); + result.setSessionId(toolSessionId); + result.setStartDate(new Timestamp(new Date().getTime())); + assessmentResultDao.saveObject(result); } - public AssessmentQuestionResult processUserAnswer(AssessmentQuestionResult userResult, Long userId, Long sessionId, boolean isFinish) { - Long questionUid = userResult.getAssessmentQuestion().getUid(); - AssessmentQuestion question = userResult.getAssessmentQuestion(); - AssessmentQuestionResult result = assessmentQuestionResultDao.getAssessmentQuestionResult(questionUid, userId); - if (result != null) { - for (AssessmentAnswer dbResultAnswer : result.getAnswers()) { - for (AssessmentQuestionOption questionOption : question.getQuestionOptions()) { - if (dbResultAnswer.getSequenceId() == questionOption.getSequenceId()) { - dbResultAnswer.setAnswerBoolean(questionOption.getAnswerBoolean()); - dbResultAnswer.setAnswerInt(questionOption.getAnswerInt()); - break; - } - } + public void processUserAnswers(Long assessmentUid, Long userId, ArrayList> pagedQuestions) { + SortedSet questionResultList = new TreeSet( + new AssessmentQuestionResultComparator()); + for (SortedSet questionsForOnePage : pagedQuestions) { + for (AssessmentQuestion question : questionsForOnePage) { + AssessmentQuestionResult processedAnswer = this.processUserAnswer(question); + questionResultList.add(processedAnswer); } - } else { - result = new AssessmentQuestionResult(); - Set answers = result.getAnswers(); - for (AssessmentQuestionOption questionOption : question.getQuestionOptions()) { - AssessmentAnswer resultAnswer = new AssessmentAnswer(); - resultAnswer.setSequenceId(questionOption.getSequenceId()); - resultAnswer.setAnswerBoolean(questionOption.getAnswerBoolean()); - resultAnswer.setAnswerInt(questionOption.getAnswerInt()); - answers.add(resultAnswer); - } - AssessmentUser user = assessmentUserDao.getUserByUserIDAndSessionID(userId, sessionId); - result.setUser(user); - result.setProcessed(true); - result.setSessionId(sessionId); - result.setStartDate(new Timestamp(new Date().getTime())); } - if (isFinish) { - result.setFinishDate(new Timestamp(new Date().getTime())); - } - result.setAssessmentQuestion(question); - result.setAnswerBoolean(question.getAnswerBoolean()); - result.setAnswerFloat(question.getAnswerFloat()); - result.setAnswerString(question.getAnswerString()); + AssessmentResult result = assessmentResultDao.getLastAssessmentResult(assessmentUid, userId); + result.setQuestionResults(questionResultList); + assessmentResultDao.saveObject(result); + } + + private AssessmentQuestionResult processUserAnswer(AssessmentQuestion question) { + AssessmentQuestionResult questionResult = new AssessmentQuestionResult(); + + Set optionAnswers = questionResult.getOptionAnswers(); + for (AssessmentQuestionOption questionOption : question.getQuestionOptions()) { + AssessmentOptionAnswer optionAnswer = new AssessmentOptionAnswer(); + optionAnswer.setSequenceId(questionOption.getSequenceId()); + optionAnswer.setAnswerBoolean(questionOption.getAnswerBoolean()); + optionAnswer.setAnswerInt(questionOption.getAnswerInt()); + optionAnswers.add(optionAnswer); + } + questionResult.setAssessmentQuestion(question); + questionResult.setAnswerBoolean(question.getAnswerBoolean()); + questionResult.setAnswerFloat(question.getAnswerFloat()); + questionResult.setAnswerString(question.getAnswerString()); float mark = 0; float maxMark = question.getDefaultGrade(); @@ -528,11 +520,17 @@ } else if (mark < 0) { mark = 0; } - result.setMark(mark); - - assessmentQuestionResultDao.saveObject(result); - return result; + questionResult.setMark(mark); + return questionResult; } + + public AssessmentResult getLastAssessmentResult(Long assessmentUid, Long userId) { + return assessmentResultDao.getLastAssessmentResult(assessmentUid, userId); + } + + public int getAssessmentResultCount(Long toolSessionId, Long userId) { + return assessmentResultDao.getAssessmentResultCount(toolSessionId, userId); + } public String finishToolSession(Long toolSessionId, Long userId) throws AssessmentApplicationException { AssessmentUser user = assessmentUserDao.getUserByUserIDAndSessionID(userId, toolSessionId); @@ -563,7 +561,9 @@ List group = new ArrayList(); // get all question which is accessed by user - Map visitCountMap = assessmentQuestionResultDao.getSummary(contentId); + //TODO fix this + Map visitCountMap =null; + //assessmentQuestionResultDao.getSummary(contentId); Assessment assessment = assessmentDao.getByContentId(contentId); Set resQuestionList = assessment.getQuestions(); @@ -637,17 +637,18 @@ return map; } - public List getUserListBySessionQuestion(Long sessionId, Long questionUid) { - List logList = assessmentQuestionResultDao.getAssessmentQuestionResultBySession( - sessionId, questionUid); - List userList = new ArrayList(logList.size()); - for (AssessmentQuestionResult visit : logList) { - AssessmentUser user = visit.getUser(); - user.setAccessDate(visit.getStartDate()); - userList.add(user); - } - return userList; - } + //TODO either delete or fix +// public List getUserListBySessionQuestion(Long sessionId, Long questionUid) { +// List logList = assessmentQuestionResultDao.getAssessmentQuestionResultBySession( +// sessionId, questionUid); +// List userList = new ArrayList(logList.size()); +// for (AssessmentQuestionResult visit : logList) { +//// AssessmentUser user = visit.getUser(); +//// user.setAccessDate(visit.getStartDate()); +//// userList.add(user); +// } +// return userList; +// } public void setQuestionVisible(Long questionUid, boolean visible) { AssessmentQuestion question = assessmentQuestionDao.getByUid(questionUid); @@ -797,14 +798,23 @@ this.toolService = toolService; } - public AssessmentQuestionResultDAO getAssessmentQuestionResultDao() { - return assessmentQuestionResultDao; - } +// public AssessmentQuestionResultDAO getAssessmentQuestionResultDao() { +// return assessmentQuestionResultDao; +// } public void setAssessmentQuestionResultDao(AssessmentQuestionResultDAO assessmentQuestionResultDao) { this.assessmentQuestionResultDao = assessmentQuestionResultDao; } + +// public AssessmentResultDAO getAssessmentResultDao() { +// return assessmentResultDao; +// } + public void setAssessmentResultDao(AssessmentResultDAO assessmentResultDao) { + this.assessmentResultDao = assessmentResultDao; + } + + // ******************************************************************************* // ToolContentManager, ToolSessionManager methods // ******************************************************************************* Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java =================================================================== diff -u -r3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f -rffbd31e92ef761df70dfa660de414ba7b8b269ce --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce) @@ -23,7 +23,7 @@ /* $$Id$$ */ package org.lamsfoundation.lams.tool.assessment.service; -import java.util.LinkedHashSet; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; @@ -35,10 +35,10 @@ import org.lamsfoundation.lams.tool.assessment.dto.ReflectDTO; import org.lamsfoundation.lams.tool.assessment.dto.Summary; import org.lamsfoundation.lams.tool.assessment.model.Assessment; -import org.lamsfoundation.lams.tool.assessment.model.AssessmentAnswer; import org.lamsfoundation.lams.tool.assessment.model.AssessmentAttachment; import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestion; import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestionResult; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentResult; import org.lamsfoundation.lams.tool.assessment.model.AssessmentSession; import org.lamsfoundation.lams.tool.assessment.model.AssessmentUser; import org.lamsfoundation.lams.usermanagement.User; @@ -167,12 +167,21 @@ * @param resSession */ void saveOrUpdateAssessmentSession(AssessmentSession resSession); + + /** + * Save or update assessment result. + * + * @param assessmentResult + */ + void setAttemptStarted(Assessment assessment, AssessmentUser assessmentUser, Long toolSessionId); void retrieveComplete(SortedSet assessmentQuestionList, AssessmentUser user); - void setQuestionStartDate(Long assessmentQuestionUid, Long userId, Long sessionId); + void processUserAnswers(Long assessmentUid, Long userId, ArrayList> pagedQuestions); - AssessmentQuestionResult processUserAnswer(AssessmentQuestionResult result, Long userId, Long sessionId, boolean isFinish); + AssessmentResult getLastAssessmentResult(Long assessmentUid, Long userId); + + int getAssessmentResultCount(Long toolSessionId, Long userId); /** * If success return next activity's url, otherwise return null. @@ -193,7 +202,7 @@ */ List> getSummary(Long contentId); - List getUserListBySessionQuestion(Long sessionId, Long questionUid); +// List getUserListBySessionQuestion(Long sessionId, Long questionUid); /** * Set a assessment question visible or not. Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/util/AssessmentQuestionResultComparator.java =================================================================== diff -u -r3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f -rffbd31e92ef761df70dfa660de414ba7b8b269ce --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/util/AssessmentQuestionResultComparator.java (.../AssessmentQuestionResultComparator.java) (revision 3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/util/AssessmentQuestionResultComparator.java (.../AssessmentQuestionResultComparator.java) (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce) @@ -26,7 +26,6 @@ import java.util.Comparator; import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestionResult; -import org.lamsfoundation.lams.tool.assessment.model.Sequencable; /** * AssessmentQuestionResultComparator. Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/AuthoringAction.java =================================================================== diff -u -r72100e7842f4ba7a26156d51d620235e5af78d5b -rffbd31e92ef761df70dfa660de414ba7b8b269ce --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/AuthoringAction.java (.../AuthoringAction.java) (revision 72100e7842f4ba7a26156d51d620235e5af78d5b) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/AuthoringAction.java (.../AuthoringAction.java) (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce) @@ -58,10 +58,10 @@ import org.lamsfoundation.lams.tool.ToolAccessMode; import org.lamsfoundation.lams.tool.assessment.AssessmentConstants; import org.lamsfoundation.lams.tool.assessment.model.Assessment; -import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestionOption; import org.lamsfoundation.lams.tool.assessment.model.AssessmentAttachment; import org.lamsfoundation.lams.tool.assessment.model.AssessmentOverallFeedback; import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestion; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestionOption; import org.lamsfoundation.lams.tool.assessment.model.AssessmentUnit; import org.lamsfoundation.lams.tool.assessment.model.AssessmentUser; import org.lamsfoundation.lams.tool.assessment.service.AssessmentApplicationException; Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java =================================================================== diff -u -r3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f -rffbd31e92ef761df70dfa660de414ba7b8b269ce --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java (.../LearningAction.java) (revision 3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java (.../LearningAction.java) (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce) @@ -26,12 +26,11 @@ import java.io.IOException; import java.io.UnsupportedEncodingException; -import java.lang.reflect.InvocationTargetException; import java.net.URLDecoder; +import java.sql.Timestamp; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; -import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -43,7 +42,6 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; -import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.NumberUtils; import org.apache.log4j.Logger; @@ -59,10 +57,11 @@ import org.lamsfoundation.lams.tool.ToolAccessMode; import org.lamsfoundation.lams.tool.assessment.AssessmentConstants; import org.lamsfoundation.lams.tool.assessment.model.Assessment; -import org.lamsfoundation.lams.tool.assessment.model.AssessmentAnswer; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentOptionAnswer; import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestion; import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestionOption; import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestionResult; +import org.lamsfoundation.lams.tool.assessment.model.AssessmentResult; import org.lamsfoundation.lams.tool.assessment.model.AssessmentSession; import org.lamsfoundation.lams.tool.assessment.model.AssessmentUser; import org.lamsfoundation.lams.tool.assessment.service.AssessmentApplicationException; @@ -98,24 +97,18 @@ if (param.equals("nextPage")) { return nextPage(mapping, form, request, response); } - if (param.equals("submitPage")) { - return submitPage(mapping, form, request, response); - } if (param.equals("submitAll")) { return submitAll(mapping, form, request, response); + } + if (param.equals("finishTest")) { + return finishTest(mapping, form, request, response); + } + if (param.equals("resubmit")) { + return resubmit(mapping, form, request, response); } if (param.equals("finish")) { return finish(mapping, form, request, response); } -// if (param.equals("addfile")) { -// return addQuestion(mapping, form, request, response); -// } -// if (param.equals("addurl")) { -// return addQuestion(mapping, form, request, response); -// } -// if (param.equals("saveOrUpdateQuestion")) { -// return saveOrUpdateQuestion(mapping, form, request, response); -// } if (param.equals("upOption")) { return upOption(mapping, form, request, response); } @@ -170,15 +163,12 @@ assessmentUser = getCurrentUser(service, toolSessionId); } - List questionsFromDB = null; - Assessment assessment; - questionsFromDB = service.getAssessmentQuestionsBySessionId(toolSessionId); - assessment = service.getAssessmentBySessionId(toolSessionId); + List questionsFromDB = service.getAssessmentQuestionsBySessionId(toolSessionId); + Assessment assessment = service.getAssessmentBySessionId(toolSessionId); // check whehter finish lock is on/off - // TODO!! - boolean lock = true;// assessment.getTimeLimit() && assessmentUser != null && - // assessmentUser.isSessionFinished(); + // TODO!! assessment.getTimeLimit() + boolean finishedLock = (assessmentUser != null && assessmentUser.isSessionFinished()); // get notebook entry String entryText = new String(); @@ -193,12 +183,14 @@ // basic information sessionMap.put(AssessmentConstants.ATTR_TITLE, assessment.getTitle()); sessionMap.put(AssessmentConstants.ATTR_INSTRUCTIONS, assessment.getInstructions()); - sessionMap.put(AssessmentConstants.ATTR_FINISH_LOCK, lock); + sessionMap.put(AssessmentConstants.ATTR_IS_RESUBMIT_ALLOWED, false); + sessionMap.put(AssessmentConstants.ATTR_FINISHED_LOCK, finishedLock); //sessionMap.put(AssessmentConstants.ATTR_LOCK_ON_FINISH, assessment.getTimeLimit()); sessionMap.put(AssessmentConstants.ATTR_USER_FINISHED, assessmentUser != null && assessmentUser.isSessionFinished()); sessionMap.put(AttributeNames.PARAM_TOOL_SESSION_ID, toolSessionId); + sessionMap.put(AssessmentConstants.ATTR_USER, assessmentUser); sessionMap.put(AttributeNames.ATTR_MODE, mode); // reflection information sessionMap.put(AssessmentConstants.ATTR_REFLECTION_ON, assessment.isReflectOnActivity()); @@ -238,35 +230,44 @@ } } + // TODO it moght need to be changed + //setAttemptStarted +// if (mode != null && mode.isLearner()) { + service.setAttemptStarted(assessment, assessmentUser, toolSessionId); +// } + //paging - ArrayList> pagedResults = new ArrayList>(); + ArrayList> pagedQuestions = new ArrayList>(); int maxQuestionsPerPage = (assessment.getQuestionsPerPage() != 0) ? assessment.getQuestionsPerPage() : questionList.size(); - SortedSet resultsForOnePage = new TreeSet( - new AssessmentQuestionResultComparator()); - pagedResults.add(resultsForOnePage); + SortedSet questionsForOnePage = new TreeSet( + new SequencableComparator()); + pagedQuestions.add(questionsForOnePage); int count = 0; for (AssessmentQuestion question : questionList) { - AssessmentQuestionResult result = new AssessmentQuestionResult(); - result.setAssessmentQuestion(question); - resultsForOnePage.add(result); + questionsForOnePage.add(question); count++; - if ((resultsForOnePage.size() == maxQuestionsPerPage) && (count != questionList.size())) { - resultsForOnePage = new TreeSet(new AssessmentQuestionResultComparator()); - pagedResults.add(resultsForOnePage); + if ((questionsForOnePage.size() == maxQuestionsPerPage) && (count != questionList.size())) { + questionsForOnePage = new TreeSet(new SequencableComparator()); + pagedQuestions.add(questionsForOnePage); } } - sessionMap.put(AssessmentConstants.ATTR_PAGED_QUESTIONS, pagedResults); + sessionMap.put(AssessmentConstants.ATTR_PAGED_QUESTIONS, pagedQuestions); sessionMap.put(AssessmentConstants.ATTR_PAGE_NUMBER, 1); + sessionMap.put(AssessmentConstants.ATTR_ASSESSMENT, assessment); + sessionMap.put(AssessmentConstants.ATTR_QUESTION_LIST, questionList); // set complete flag for display purpose - if (assessmentUser != null) { - service.retrieveComplete(questionList, assessmentUser); + //TODO check this out + HttpSession ss = SessionManager.getSession(); + UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); + Long userID = new Long(user.getUserID().longValue()); + int dbResultCount = service.getAssessmentResultCount(toolSessionId, userID); + if (dbResultCount > 0) { + loadupLastAttempt(sessionMap); } - sessionMap.put(AssessmentConstants.ATTR_ASSESSMENT, assessment); - sessionMap.put(AssessmentConstants.ATTR_QUESTION_LIST, questionList); return mapping.findForward(AssessmentConstants.SUCCESS); } @@ -285,11 +286,13 @@ HttpServletResponse response) throws ServletException { String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); - popupQuestionOptionsWithUserAnswers(request); + boolean finishedLock = (Boolean) sessionMap.get(AssessmentConstants.ATTR_FINISHED_LOCK); + if (! finishedLock) { + preserveUserAnswers(request); + } - - request.setAttribute(AssessmentConstants.ATTR_SESSION_MAP_ID, sessionMapID); sessionMap.put(AssessmentConstants.ATTR_PAGE_NUMBER, WebUtil.readIntParam(request, AssessmentConstants.ATTR_PAGE_NUMBER)); + request.setAttribute(AssessmentConstants.ATTR_SESSION_MAP_ID, sessionMapID); return mapping.findForward(AssessmentConstants.SUCCESS); } @@ -303,21 +306,20 @@ * @return * @throws ServletException */ - private ActionForward submitPage(ActionMapping mapping, ActionForm form, HttpServletRequest request, + private ActionForward submitAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws ServletException { String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); - popupQuestionOptionsWithUserAnswers(request); + preserveUserAnswers(request); + processUserAnswers(sessionMap); + loadupResultMarks(sessionMap); - int pageNumber = (Integer) sessionMap.get(AssessmentConstants.ATTR_PAGE_NUMBER); - ArrayList> pagedResults = (ArrayList>) sessionMap.get(AssessmentConstants.ATTR_PAGED_QUESTIONS); - SortedSet resultList = (SortedSet) pagedResults.get(pageNumber-1); - processUserAnswersPage(request, resultList, false); - - request.setAttribute(AssessmentConstants.ATTR_SESSION_MAP_ID, sessionMapID); + sessionMap.put(AssessmentConstants.ATTR_IS_RESUBMIT_ALLOWED, isResubmitAllowed(sessionMap)); + sessionMap.put(AssessmentConstants.ATTR_FINISHED_LOCK, true); sessionMap.put(AssessmentConstants.ATTR_PAGE_NUMBER, sessionMap.get(AssessmentConstants.ATTR_PAGE_NUMBER)); + request.setAttribute(AssessmentConstants.ATTR_SESSION_MAP_ID, sessionMapID); return mapping.findForward(AssessmentConstants.SUCCESS); - } + } /** * Display same entire authoring page content from HttpSession variable. @@ -329,22 +331,58 @@ * @return * @throws ServletException */ - private ActionForward submitAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, + private ActionForward finishTest(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws ServletException { String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); - popupQuestionOptionsWithUserAnswers(request); + preserveUserAnswers(request); + processUserAnswers(sessionMap); + loadupResultMarks(sessionMap); - int pageNumber = (Integer) sessionMap.get(AssessmentConstants.ATTR_PAGE_NUMBER); - ArrayList> pagedResults = (ArrayList>) sessionMap.get(AssessmentConstants.ATTR_PAGED_QUESTIONS); - for (SortedSet resultList : pagedResults) { - processUserAnswersPage(request, resultList, true); + Long sessionId = (Long) sessionMap.get(AttributeNames.PARAM_TOOL_SESSION_ID); + IAssessmentService service = getAssessmentService(); + try { + HttpSession ss = SessionManager.getSession(); + UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); + Long userID = new Long(user.getUserID().longValue()); + service.finishToolSession(sessionId, userID); + } catch (AssessmentApplicationException e) { + LearningAction.log.error("Failed finishing tool session:" + e.getMessage()); } - request.setAttribute(AssessmentConstants.ATTR_SESSION_MAP_ID, sessionMapID); + sessionMap.put(AssessmentConstants.ATTR_IS_RESUBMIT_ALLOWED, isResubmitAllowed(sessionMap)); + sessionMap.put(AssessmentConstants.ATTR_FINISHED_LOCK, true); sessionMap.put(AssessmentConstants.ATTR_PAGE_NUMBER, sessionMap.get(AssessmentConstants.ATTR_PAGE_NUMBER)); + request.setAttribute(AssessmentConstants.ATTR_SESSION_MAP_ID, sessionMapID); return mapping.findForward(AssessmentConstants.SUCCESS); - } + } + + /** + * Display same entire authoring page content from HttpSession variable. + * + * @param mapping + * @param form + * @param request + * @param response + * @return + * @throws ServletException + */ + private ActionForward resubmit(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws ServletException { + String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); + Assessment assessment = (Assessment) sessionMap.get(AssessmentConstants.ATTR_ASSESSMENT); + Long toolSessionId = (Long) sessionMap.get(AssessmentConstants.ATTR_TOOL_SESSION_ID); + AssessmentUser assessmentUser = (AssessmentUser) sessionMap.get(AssessmentConstants.ATTR_USER); + IAssessmentService service = getAssessmentService(); + service.setAttemptStarted(assessment, assessmentUser, toolSessionId); + loadupLastAttempt(sessionMap); + + sessionMap.put(AssessmentConstants.ATTR_FINISHED_LOCK, false); + sessionMap.put(AssessmentConstants.ATTR_PAGE_NUMBER, 1); + request.setAttribute(AssessmentConstants.ATTR_SESSION_MAP_ID, sessionMapID); + return mapping.findForward(AssessmentConstants.SUCCESS); + } /** * Finish learning session. @@ -379,10 +417,6 @@ //// request.setAttribute(AssessmentConstants.ATTR_RUN_AUTO, false); // } - if (!validateBeforeFinish(request, sessionMapID)) { - return mapping.getInputForward(); - } - IAssessmentService service = getAssessmentService(); // get sessionId from HttpServletRequest String nextActivityUrl = null; @@ -432,19 +466,19 @@ String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); int pageNumber = (Integer) sessionMap.get(AssessmentConstants.ATTR_PAGE_NUMBER); - ArrayList> pagedResults = (ArrayList>) sessionMap.get(AssessmentConstants.ATTR_PAGED_QUESTIONS); - SortedSet resultList = (SortedSet) pagedResults.get(pageNumber-1); + ArrayList> pagedResults = (ArrayList>) sessionMap.get(AssessmentConstants.ATTR_PAGED_QUESTIONS); + SortedSet questionsForOnePage = (SortedSet) pagedResults.get(pageNumber-1); Long questionUid = new Long(request.getParameter(AssessmentConstants.PARAM_QUESTION_UID)); - AssessmentQuestionResult result = null; - for (AssessmentQuestionResult resultFromSession : resultList) { - if (resultFromSession.getAssessmentQuestion().getUid().equals(questionUid)) { - result = resultFromSession; + AssessmentQuestion question = null; + for (AssessmentQuestion tempQuestion : questionsForOnePage) { + if (tempQuestion.getUid().equals(questionUid)) { + question = tempQuestion; break; } } - Set optionList = result.getAssessmentQuestion().getQuestionOptions(); + Set optionList = question.getQuestionOptions(); int optionIndex = NumberUtils.stringToInt(request.getParameter(AssessmentConstants.PARAM_OPTION_INDEX), -1); if (optionIndex != -1) { @@ -466,122 +500,14 @@ // put back list, it will be sorted again optionList = new TreeSet(new SequencableComparator()); optionList.addAll(rList); - result.getAssessmentQuestion().setQuestionOptions(optionList); + question.setQuestionOptions(optionList); } - request.setAttribute(AssessmentConstants.ATTR_RESULT_FOR_ORDERING, result); + request.setAttribute(AssessmentConstants.ATTR_QUESTION_FOR_ORDERING, question); request.setAttribute(AssessmentConstants.ATTR_SESSION_MAP_ID, sessionMapID); return mapping.findForward(AssessmentConstants.SUCCESS); } -// /** -// * Initial page for add assessment question (single file or URL). -// * -// * @param mapping -// * @param form -// * @param request -// * @param response -// * @return -// */ -// private ActionForward addQuestion(ActionMapping mapping, ActionForm form, HttpServletRequest request, -// HttpServletResponse response) { -// AssessmentQuestionForm questionForm = (AssessmentQuestionForm) form; -// questionForm.setMode(WebUtil.readStrParam(request, AttributeNames.ATTR_MODE)); -// questionForm.setSessionMapID(WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID)); -// return mapping.findForward(AssessmentConstants.SUCCESS); -// } -// -// /** -// * Save file or url assessment question into database. -// * -// * @param mapping -// * @param form -// * @param request -// * @param response -// * @return -// */ -// private ActionForward saveOrUpdateQuestion(ActionMapping mapping, ActionForm form, HttpServletRequest request, -// HttpServletResponse response) { -// // get back SessionMap -// String sessionMapID = request.getParameter(AssessmentConstants.ATTR_SESSION_MAP_ID); -// SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); -// request.setAttribute(AssessmentConstants.ATTR_SESSION_MAP_ID, sessionMapID); -// -// Long sessionId = (Long) sessionMap.get(AssessmentConstants.ATTR_TOOL_SESSION_ID); -// -// String mode = request.getParameter(AttributeNames.ATTR_MODE); -// AssessmentQuestionForm questionForm = (AssessmentQuestionForm) form; -// ActionErrors errors = validateAssessmentQuestion(questionForm); -// -// if (!errors.isEmpty()) { -// this.addErrors(request, errors); -// return findForward(questionForm.getQuestionType(), mapping); -// } -// short type = questionForm.getQuestionType(); -// -// // create a new Assessmentquestion -// AssessmentQuestion question = new AssessmentQuestion(); -// IAssessmentService service = getAssessmentService(); -// AssessmentUser assessmentUser = getCurrentUser(service, sessionId); -// question.setType(type); -// question.setTitle(questionForm.getTitle()); -// question.setQuestion(questionForm.getQuestion()); -// question.setCreateDate(new Timestamp(new Date().getTime())); -// question.setCreateByAuthor(false); -// question.setCreateBy(assessmentUser); -// -// // special attribute for URL or FILE -// if (type == AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE) { -// // try { -// // service.uploadAssessmentQuestionFile(question, questionForm.getFile()); -// // } catch (UploadAssessmentFileException e) { -// // LearningAction.log.error("Failed upload Assessment File " + e.toString()); -// // return mapping.findForward(AssessmentConstants.ERROR); -// // } -// // } else if (type == AssessmentConstants.QUESTION_TYPE_CHOICE) { -// // question.setUrl(questionForm.getUrl()); -// // question.setOpenUrlNewWindow(questionForm.isOpenUrlNewWindow()); -// } -// // save and update session -// -// AssessmentSession session = service.getAssessmentSessionBySessionId(sessionId); -// if (session == null) { -// LearningAction.log.error("Failed update AssessmentSession by ID[" + sessionId + "]"); -// return mapping.findForward(AssessmentConstants.ERROR); -// } -// Set questions = session.getAssessmentQuestions(); -// if (questions == null) { -// questions = new HashSet(); -// session.setAssessmentQuestions(questions); -// } -// questions.add(question); -// service.saveOrUpdateAssessmentSession(session); -// -// // update session value -// SortedSet assessmentQuestionList = getAssessmentQuestionList(sessionMap); -// assessmentQuestionList.add(question); -// -// // URL or file upload -// request.setAttribute(AssessmentConstants.ATTR_ADD_ASSESSMENT_TYPE, new Short(type)); -// request.setAttribute(AttributeNames.ATTR_MODE, mode); -// -// Assessment assessment = session.getAssessment(); -// if (assessment.isNotifyTeachersOnAttemptCompletion()) { -// List monitoringUsers = service.getMonitorsByToolSessionId(sessionId); -// if (monitoringUsers != null && !monitoringUsers.isEmpty()) { -// Long[] monitoringUsersIds = new Long[monitoringUsers.size()]; -// for (int i = 0; i < monitoringUsersIds.length; i++) { -// monitoringUsersIds[i] = monitoringUsers.get(i).getUserId().longValue(); -// } -// String fullName = assessmentUser.getLastName() + " " + assessmentUser.getFirstName(); -// service.getEventNotificationService().sendMessage(monitoringUsersIds, DeliveryMethodMail.getInstance(), -// service.getLocalisedMessage("event.assigment.submit.subject", null), -// service.getLocalisedMessage("event.assigment.submit.body", new Object[] { fullName })); -// } -// } -// return mapping.findForward(AssessmentConstants.SUCCESS); -// } - /** * Display empty reflection form. * @@ -593,12 +519,8 @@ */ private ActionForward newReflection(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { - // get session value String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); - if (!validateBeforeFinish(request, sessionMapID)) { - return mapping.getInputForward(); - } ReflectionForm refForm = (ReflectionForm) form; HttpSession ss = SessionManager.getSession(); @@ -663,53 +585,168 @@ // ************************************************************************************* // Private method // ************************************************************************************* - private boolean validateBeforeFinish(HttpServletRequest request, String sessionMapID) { + + private void preserveUserAnswers(HttpServletRequest request){ + String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); - Long sessionId = (Long) sessionMap.get(AttributeNames.PARAM_TOOL_SESSION_ID); + int pageNumber = (Integer) sessionMap.get(AssessmentConstants.ATTR_PAGE_NUMBER); + ArrayList> pagedQuestions = (ArrayList>) sessionMap.get(AssessmentConstants.ATTR_PAGED_QUESTIONS); + SortedSet questionsForOnePage = (SortedSet) pagedQuestions.get(pageNumber-1); + int count = questionsForOnePage.size(); + + for (int i = 0; i < count; i++) { + Long assessmentQuestionUid = WebUtil.readLongParam(request, AssessmentConstants.PARAM_QUESTION_UID + i); + AssessmentQuestion question = null; + for (AssessmentQuestion sessionQuestion : questionsForOnePage) { + if (sessionQuestion.getUid().equals(assessmentQuestionUid)) { + question = sessionQuestion; + break; + } + } + int questionType = question.getType(); - HttpSession ss = SessionManager.getSession(); - UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); - Long userID = new Long(user.getUserID().longValue()); - + if (questionType == AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE) { + for (AssessmentQuestionOption option : question.getQuestionOptions()) { + boolean answerBoolean = false; + if (question.isMultipleAnswersAllowed()) { + String answerString = request.getParameter(AssessmentConstants.ATTR_QUESTION_PREFIX + i + "_" + + option.getSequenceId()); + answerBoolean = !StringUtils.isBlank(answerString); + } else { + String answerString = request.getParameter(AssessmentConstants.ATTR_QUESTION_PREFIX + i); + if (answerString != null) { + int optionSequenceId = Integer.parseInt(answerString); + answerBoolean = (option.getSequenceId() == optionSequenceId); + } + } + option.setAnswerBoolean(answerBoolean); + } + } else if (questionType == AssessmentConstants.QUESTION_TYPE_MATCHING_PAIRS) { + for (AssessmentQuestionOption option : question.getQuestionOptions()) { + int answerInt = WebUtil.readIntParam(request, AssessmentConstants.ATTR_QUESTION_PREFIX + i + "_" + option.getSequenceId()); + option.setAnswerInt(answerInt); + } + } else if (questionType == AssessmentConstants.QUESTION_TYPE_SHORT_ANSWER) { + String answerString = request.getParameter(AssessmentConstants.ATTR_QUESTION_PREFIX + i); + question.setAnswerString(answerString); + } else if (questionType == AssessmentConstants.QUESTION_TYPE_NUMERICAL) { + String answerString = request.getParameter(AssessmentConstants.ATTR_QUESTION_PREFIX + i); + question.setAnswerString(answerString); + } else if (questionType == AssessmentConstants.QUESTION_TYPE_TRUE_FALSE) { + String answerString = request.getParameter(AssessmentConstants.ATTR_QUESTION_PREFIX + i); + if (answerString != null) { + question.setAnswerBoolean(Boolean.parseBoolean(answerString)); + question.setAnswerString("not null"); + } + } else if (questionType == AssessmentConstants.QUESTION_TYPE_ESSAY) { + String answerString = request.getParameter(AssessmentConstants.ATTR_QUESTION_PREFIX + i); + question.setAnswerString(answerString); + } else if (questionType == AssessmentConstants.QUESTION_TYPE_ORDERING) { + //TODO correct answer + for (AssessmentQuestionOption option : question.getQuestionOptions()) { + String answerString = request.getParameter(AssessmentConstants.ATTR_QUESTION_PREFIX + i + "_" + + option.getSequenceId()); + option.setAnswerInt(option.getSequenceId()); + } + } + } + } + + private void loadupResultMarks(SessionMap sessionMap){ + ArrayList> pagedQuestions = (ArrayList>) sessionMap + .get(AssessmentConstants.ATTR_PAGED_QUESTIONS); + Long assessmentUid = ((Assessment) sessionMap.get(AssessmentConstants.ATTR_ASSESSMENT)).getUid(); + Long userId = ((AssessmentUser) sessionMap.get(AssessmentConstants.ATTR_USER)).getUserId(); IAssessmentService service = getAssessmentService(); - // TODO - int miniViewFlag = 0;// service.checkMiniView(sessionId, userID); - // if current user view less than reqired view count number, then just return error message. - // if it is runOffline content, then need not check minimum view count - Boolean runOffline = (Boolean) sessionMap.get(AssessmentConstants.PARAM_RUN_OFFLINE); - if (miniViewFlag > 0 && !runOffline) { - ActionErrors errors = new ActionErrors(); - errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("lable.learning.minimum.view.number.less", - miniViewFlag)); - this.addErrors(request, errors); - return false; + AssessmentResult result = service.getLastAssessmentResult(assessmentUid,userId); + + for(SortedSet questionsForOnePage : pagedQuestions) { + for (AssessmentQuestion question : questionsForOnePage) { + for (AssessmentQuestionResult questionResult : result.getQuestionResults()) { + if (question.getUid().equals(questionResult.getAssessmentQuestion().getUid())) { + question.setMark(questionResult.getMark()); + question.setPenalty(questionResult.getPenalty()); + } + } + } } - - return true; + } + + private void loadupLastAttempt(SessionMap sessionMap){ + ArrayList> pagedQuestions = (ArrayList>) sessionMap + .get(AssessmentConstants.ATTR_PAGED_QUESTIONS); + Long assessmentUid = ((Assessment) sessionMap.get(AssessmentConstants.ATTR_ASSESSMENT)).getUid(); + Long userId = ((AssessmentUser) sessionMap.get(AssessmentConstants.ATTR_USER)).getUserId(); + IAssessmentService service = getAssessmentService(); + AssessmentResult result = service.getLastAssessmentResult(assessmentUid,userId); + + for(SortedSet questionsForOnePage : pagedQuestions) { + for (AssessmentQuestion question : questionsForOnePage) { + for (AssessmentQuestionResult questionResult : result.getQuestionResults()) { + if (question.getUid().equals(questionResult.getAssessmentQuestion().getUid())) { + question.setAnswerBoolean(questionResult.getAnswerBoolean()); + question.setAnswerFloat(questionResult.getAnswerFloat()); + question.setAnswerString(questionResult.getAnswerString()); + question.setMark(questionResult.getMark()); + question.setPenalty(questionResult.getPenalty()); + + for (AssessmentQuestionOption questionOption : question.getQuestionOptions()) { + for (AssessmentOptionAnswer optionAnswer : questionResult.getOptionAnswers()) { + if (questionOption.getSequenceId() == optionAnswer.getSequenceId()) { + questionOption.setAnswerBoolean(optionAnswer.getAnswerBoolean()); + questionOption.setAnswerInt(optionAnswer.getAnswerInt()); + break; + } + } + } + break; + } + } + } + } } - + + /** + * Get answer options from HttpRequest + * + * @param request + * + */ + private void processUserAnswers(SessionMap sessionMap) { + ArrayList> pagedQuestions = (ArrayList>) sessionMap + .get(AssessmentConstants.ATTR_PAGED_QUESTIONS); + Long assessmentUid = ((Assessment) sessionMap.get(AssessmentConstants.ATTR_ASSESSMENT)).getUid(); + Long userId = ((AssessmentUser) sessionMap.get(AssessmentConstants.ATTR_USER)).getUserId(); + IAssessmentService service = getAssessmentService(); + service.processUserAnswers(assessmentUid, userId, pagedQuestions); + } + + /** + * Checks if the resubmit action allowed. + * + * @param request + * + */ + private boolean isResubmitAllowed(SessionMap sessionMap) { + Long toolSessionId = (Long) sessionMap.get(AttributeNames.PARAM_TOOL_SESSION_ID); + IAssessmentService service = getAssessmentService(); + HttpSession ss = SessionManager.getSession(); + UserDTO userDTO = (UserDTO) ss.getAttribute(AttributeNames.USER); + Long userID = new Long(userDTO.getUserID().longValue()); + AssessmentUser user = service.getUserByIDAndSession(userID, toolSessionId); + + int dbResultCount = service.getAssessmentResultCount(toolSessionId, userID); + Assessment assessment = (Assessment) sessionMap.get(AssessmentConstants.ATTR_ASSESSMENT); + int attemptsAllowed = assessment.getAttemptsAllowed(); + return ((attemptsAllowed > dbResultCount) | (attemptsAllowed == 0)) && !user.isSessionFinished(); + } + private IAssessmentService getAssessmentService() { WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServlet() .getServletContext()); return (IAssessmentService) wac.getBean(AssessmentConstants.ASSESSMENT_SERVICE); } -// /** -// * List save current assessment questions. -// * -// * @param request -// * @return -// */ -// private SortedSet getAssessmentQuestionList(SessionMap sessionMap) { -// SortedSet list = (SortedSet) sessionMap -// .get(AssessmentConstants.ATTR_QUESTION_LIST); -// if (list == null) { -// list = new TreeSet(new AssessmentQuestionComparator()); -// sessionMap.put(AssessmentConstants.ATTR_QUESTION_LIST, list); -// } -// return list; -// } - /** * Return ActionForward according to assessment question type. * @@ -758,53 +795,6 @@ return assessmentUser; } -// /** -// * @param questionForm -// * @return -// */ -// private ActionErrors validateAssessmentQuestion(AssessmentQuestionForm questionForm) { -// ActionErrors errors = new ActionErrors(); -// if (StringUtils.isBlank(questionForm.getTitle())) { -// errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage( -// AssessmentConstants.ERROR_MSG_QUESTION_NAME_BLANK)); -// } -// -// if (questionForm.getQuestionType() == AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE) { -// // if (StringUtils.isBlank(questionForm.getUrl())) { -// // errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(AssessmentConstants.ERROR_MSG_URL_BLANK)); -// // // URL validation: Commom URL validate(1.3.0) work not very well: it can not support http://address:port -// // // format!!! -// // // UrlValidator validator = new UrlValidator(); -// // // if(!validator.isValid(questionForm.getUrl())) -// // // errors.add(ActionMessages.GLOBAL_MESSAGE,new -// // // ActionMessage(AssessmentConstants.ERROR_MSG_INVALID_URL)); -// // } -// } -// // if(questionForm.getquestionType() == AssessmentConstants.RESOURCE_TYPE_WEBSITE -// // ||questionForm.getquestionType() == AssessmentConstants.RESOURCE_TYPE_LEARNING_OBJECT){ -// // if(StringUtils.isBlank(questionForm.getDescription())) -// // errors.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage(AssessmentConstants.ERROR_MSG_DESC_BLANK)); -// // } -// // if (questionForm.getQuestionType() == AssessmentConstants.QUESTION_TYPE_MATCHING_PAIRS -// // || questionForm.getQuestionType() == AssessmentConstants.QUESTION_TYPE_FILL_THE_GAP -// // || questionForm.getQuestionType() == AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE) { -// // -// // if (questionForm.getFile() != null && FileUtil.isExecutableFile(questionForm.getFile().getFileName())) { -// // ActionMessage msg = new ActionMessage("error.attachment.executable"); -// // errors.add(ActionMessages.GLOBAL_MESSAGE, msg); -// // } -// // -// // // validate question size -// // FileValidatorUtil.validateFileSize(questionForm.getFile(), false, errors); -// // -// // // for edit validate: file already exist -// // if (!questionForm.isHasFile() -// // && (questionForm.getFile() == null || StringUtils.isEmpty(questionForm.getFile().getFileName()))) { -// // errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(AssessmentConstants.ERROR_MSG_FILE_BLANK)); -// // } -// // } -// return errors; -// } // /** // * Set complete flag for given assessment question. @@ -837,156 +827,5 @@ // } // } // } - -// /** -// * Set complete flag for given assessment question. -// * -// * @param request -// * @param sessionId -// */ -// private void setResults(HttpServletRequest request) { -// // get back sessionMap -// String sessionMapID = request.getParameter(AssessmentConstants.ATTR_SESSION_MAP_ID); -// SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); -// -// Long assessmentQuestionUid = new Long(request.getParameter(AssessmentConstants.PARAM_QUESTION_UID)); -// IAssessmentService service = getAssessmentService(); -// HttpSession ss = SessionManager.getSession(); -// // get back login user DTO -// UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); -// Long sessionId = (Long) sessionMap.get(AssessmentConstants.ATTR_TOOL_SESSION_ID); -// service.setQuestionComplete(assessmentQuestionUid, new Long(user.getUserID().intValue()), sessionId); -// -// SortedSet questionList = (SortedSet) sessionMap -// .get(AssessmentConstants.ATTR_QUESTION_LIST); -// SortedSet assessmentQuestionList = questionList; -// // set assessment question complete tag -// for (AssessmentQuestion question : assessmentQuestionList) { -// if (question.getUid().equals(assessmentQuestionUid)) { -// question.setComplete(true); -// break; -// } -// } -// } - - private void popupQuestionOptionsWithUserAnswers(HttpServletRequest request){ - String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); - int pageNumber = (Integer) sessionMap.get(AssessmentConstants.ATTR_PAGE_NUMBER); - ArrayList> pagedResults = (ArrayList>) sessionMap.get(AssessmentConstants.ATTR_PAGED_QUESTIONS); - SortedSet resultList = (SortedSet) pagedResults.get(pageNumber-1); - int count = resultList.size(); - - for (int i = 0; i < count; i++) { - Long assessmentQuestionUid = WebUtil.readLongParam(request, AssessmentConstants.PARAM_QUESTION_UID + i); - AssessmentQuestion question = null; - for (AssessmentQuestionResult result : resultList) { - if (result.getAssessmentQuestion().getUid().equals(assessmentQuestionUid)) { - question = result.getAssessmentQuestion(); - break; - } - } - if (question == null) { - throw new RuntimeException("You screwed up!"); - } - int questionType = question.getType(); - if (questionType == AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE) { - for (AssessmentQuestionOption option : question.getQuestionOptions()) { - boolean answerBoolean = false; - if (question.isMultipleAnswersAllowed()) { - String answerString = request.getParameter(AssessmentConstants.ATTR_QUESTION_PREFIX + i + "_" - + option.getSequenceId()); - answerBoolean = !StringUtils.isBlank(answerString); - } else { - String answerString = request.getParameter(AssessmentConstants.ATTR_QUESTION_PREFIX + i); - if (answerString != null) { - int optionSequenceId = Integer.parseInt(answerString); - answerBoolean = (option.getSequenceId() == optionSequenceId); - } - } - option.setAnswerBoolean(answerBoolean); - } - } else if (questionType == AssessmentConstants.QUESTION_TYPE_MATCHING_PAIRS) { - for (AssessmentQuestionOption option : question.getQuestionOptions()) { - int answerInt = WebUtil.readIntParam(request, AssessmentConstants.ATTR_QUESTION_PREFIX + i + "_" + option.getSequenceId()); - option.setAnswerInt(answerInt); - } - } else if (questionType == AssessmentConstants.QUESTION_TYPE_SHORT_ANSWER) { - String answerString = request.getParameter(AssessmentConstants.ATTR_QUESTION_PREFIX + i); - question.setAnswerString(answerString); - } else if (questionType == AssessmentConstants.QUESTION_TYPE_NUMERICAL) { - String answerString = request.getParameter(AssessmentConstants.ATTR_QUESTION_PREFIX + i); - question.setAnswerString(answerString); - } else if (questionType == AssessmentConstants.QUESTION_TYPE_TRUE_FALSE) { - String answerString = request.getParameter(AssessmentConstants.ATTR_QUESTION_PREFIX + i); - if (answerString != null) { - question.setAnswerBoolean(Boolean.parseBoolean(answerString)); - question.setAnswerString("not null"); - } - } else if (questionType == AssessmentConstants.QUESTION_TYPE_ESSAY) { - String answerString = request.getParameter(AssessmentConstants.ATTR_QUESTION_PREFIX + i); - question.setAnswerString(answerString); - } else if (questionType == AssessmentConstants.QUESTION_TYPE_ORDERING) { - //TODO correct answer - for (AssessmentQuestionOption option : question.getQuestionOptions()) { - String answerString = request.getParameter(AssessmentConstants.ATTR_QUESTION_PREFIX + i + "_" - + option.getSequenceId()); - option.setAnswerInt(option.getSequenceId()); - } - } - } - } - - /** - * Get answer options from HttpRequest - * - * @param request - * - */ - private void processUserAnswersPage(HttpServletRequest request, SortedSet resultList, boolean isFinish) { - String sessionMapID = WebUtil.readStrParam(request, AssessmentConstants.ATTR_SESSION_MAP_ID); - SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID); - - IAssessmentService service = getAssessmentService(); - HttpSession ss = SessionManager.getSession(); - // get back login user DTO - UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); - Long userId = new Long(user.getUserID().intValue()); - Long sessionId = (Long) sessionMap.get(AssessmentConstants.ATTR_TOOL_SESSION_ID); - - SortedSet savedResultList = new TreeSet( - new AssessmentQuestionResultComparator()); - for (AssessmentQuestionResult result : resultList) { - AssessmentQuestionResult savedResult = service.processUserAnswer(result, userId, sessionId, isFinish); - savedResultList.add(savedResult); - } - resultList.clear(); - resultList.addAll(savedResultList); - } - - /** - * Split Request Parameter from HttpRequest - * - * @param request - * @param parameterName parameterName - */ - private Map splitRequestParameter(HttpServletRequest request, String parameterName) { - String list = request.getParameter(parameterName); - String[] params = list.split("&"); - Map paramMap = new HashMap(); - String[] pair; - for (String item : params) { - pair = item.split("="); - if (pair == null || pair.length != 2) - continue; - try { - paramMap.put(pair[0], URLDecoder.decode(pair[1], "UTF-8")); - } catch (UnsupportedEncodingException e) { - log.error("Error occurs when decode instruction string:" + e.toString()); - } - } - return paramMap; - } - } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java =================================================================== diff -u -rc56857991e269aa7f5bd250a05b52c767a9957ad -rffbd31e92ef761df70dfa660de414ba7b8b269ce --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision c56857991e269aa7f5bd250a05b52c767a9957ad) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce) @@ -67,9 +67,9 @@ return summary(mapping, form, request, response); } - if (param.equals("listuser")) { - return listUser(mapping, form, request, response); - } +// if (param.equals("listuser")) { +// return listUser(mapping, form, request, response); +// } if (param.equals("showQuestion")) { return showQuestion(mapping, form, request, response); } @@ -165,20 +165,20 @@ return mapping.findForward(AssessmentConstants.SUCCESS); } - private ActionForward listUser(ActionMapping mapping, ActionForm form, HttpServletRequest request, - HttpServletResponse response) { - Long sessionId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_SESSION_ID); - Long itemUid = WebUtil.readLongParam(request, AssessmentConstants.PARAM_QUESTION_UID); +// private ActionForward listUser(ActionMapping mapping, ActionForm form, HttpServletRequest request, +// HttpServletResponse response) { +// Long sessionId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_SESSION_ID); +// Long itemUid = WebUtil.readLongParam(request, AssessmentConstants.PARAM_QUESTION_UID); +// +// // get user list by given item uid +// IAssessmentService service = getAssessmentService(); +// List list = service.getUserListBySessionQuestion(sessionId, itemUid); +// +// // set to request +// request.setAttribute(AssessmentConstants.ATTR_USER_LIST, list); +// return mapping.findForward(AssessmentConstants.SUCCESS); +// } - // get user list by given item uid - IAssessmentService service = getAssessmentService(); - List list = service.getUserListBySessionQuestion(sessionId, itemUid); - - // set to request - request.setAttribute(AssessmentConstants.ATTR_USER_LIST, list); - return mapping.findForward(AssessmentConstants.SUCCESS); - } - private ActionForward viewReflection(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { Index: lams_tool_assessment/web/pages/learning/learning.jsp =================================================================== diff -u -r3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f -rffbd31e92ef761df70dfa660de414ba7b8b269ce --- lams_tool_assessment/web/pages/learning/learning.jsp (.../learning.jsp) (revision 3fdcee6fa67ca8bbbf112bb01a95873fc76a6b0f) +++ lams_tool_assessment/web/pages/learning/learning.jsp (.../learning.jsp) (revision ffbd31e92ef761df70dfa660de414ba7b8b269ce) @@ -16,34 +16,36 @@ - + +