Index: lams_tool_assessment/build.xml
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_assessment/build.xml,v
diff -u -r1.3.2.1 -r1.3.2.2
--- lams_tool_assessment/build.xml 11 Jun 2009 06:27:38 -0000 1.3.2.1
+++ lams_tool_assessment/build.xml 15 Jun 2009 00:42:50 -0000 1.3.2.2
@@ -242,7 +242,7 @@
-
+
Index: lams_tool_assessment/conf/language/lams/ApplicationResources.properties
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_assessment/conf/language/lams/ApplicationResources.properties,v
diff -u -r1.4.2.1 -r1.4.2.2
--- lams_tool_assessment/conf/language/lams/ApplicationResources.properties 13 May 2009 06:47:49 -0000 1.4.2.1
+++ lams_tool_assessment/conf/language/lams/ApplicationResources.properties 15 Jun 2009 00:42:50 -0000 1.4.2.2
@@ -229,5 +229,16 @@
warning.msg.authoring.do.you.want.to.delete =Do you really want to delete this question?
label.learning.summary.time.taken =Time taken (minutes)
+label.export.exported.on =Exported on:
+label.export.question.summary =Question Summary
+label.export.user.summary =User Summary
+label.export.date.attempted =Date Attempted
+label.export.mark =Mark
+label.export.time.taken =Time taken from activity start (seconds)
+label.export.average =Average
+label.export.summary.by.user =Summary by User
+lable.export.summary.by.question =Summary by Question
+label.export.user.id =User ID
+
#======= End labels: Exported 222 labels for en AU =====
Index: lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties,v
diff -u -r1.24.2.1 -r1.24.2.2
--- lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties 13 May 2009 06:47:49 -0000 1.24.2.1
+++ lams_tool_assessment/conf/language/lams/ApplicationResources_en_AU.properties 15 Jun 2009 00:42:50 -0000 1.24.2.2
@@ -229,5 +229,15 @@
warning.msg.authoring.do.you.want.to.delete =Do you really want to delete this question?
label.learning.summary.time.taken =Time taken (minutes)
+label.export.exported.on =Exported on:
+label.export.question.summary =Question Summary
+label.export.user.summary =User Summary
+label.export.date.attempted =Date Attempted
+label.export.mark =Mark
+label.export.time.taken =Time taken from activity start (seconds)
+label.export.average =Average
+label.export.summary.by.user =Summary by User
+label.export.summary.by.question =Summary by Question
+label.export.user.id =User ID
#======= End labels: Exported 222 labels for en AU =====
Index: lams_tool_assessment/db/sql/create_lams_tool_assessment.sql
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_assessment/db/sql/create_lams_tool_assessment.sql,v
diff -u -r1.12 -r1.12.2.1
--- lams_tool_assessment/db/sql/create_lams_tool_assessment.sql 25 Mar 2009 22:46:28 -0000 1.12
+++ lams_tool_assessment/db/sql/create_lams_tool_assessment.sql 15 Jun 2009 00:42:50 -0000 1.12.2.1
@@ -117,6 +117,7 @@
submitted_option_uid bigint,
mark float,
penalty float,
+ finish_date datetime,
primary key (uid)
)type=innodb;
create table tl_laasse10_option_answer (
Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentQuestionResultDAOHibernate.java
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentQuestionResultDAOHibernate.java,v
diff -u -r1.5 -r1.5.2.1
--- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentQuestionResultDAOHibernate.java 19 Mar 2009 22:06:53 -0000 1.5
+++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentQuestionResultDAOHibernate.java 15 Jun 2009 00:42:50 -0000 1.5.2.1
@@ -39,14 +39,14 @@
+ " as q, "
+ AssessmentResult.class.getName()
+ " as r "
- + " where q.resultUid = r.uid and r.assessment.uid = ? and r.user.userId =? and q.assessmentQuestion.uid =? order by r.startDate asc";
+ + " where q.assessmentResult.uid = r.uid and r.assessment.uid = ? and r.user.userId =? and q.assessmentQuestion.uid =? order by r.startDate asc";
private static final String FIND_WRONG_ANSWERS_NUMBER = "select count(q) from "
+ AssessmentQuestionResult.class.getName()
+ " as q, "
+ AssessmentResult.class.getName()
+ " as r "
- + " where q.resultUid = r.uid and r.assessment.uid = ? and r.user.userId =? and q.assessmentQuestion.uid =? and q.mark < q.assessmentQuestion.defaultGrade";
+ + " where q.assessmentResult.uid = r.uid and r.assessment.uid = ? and r.user.userId =? and q.assessmentQuestion.uid =? and q.mark < q.assessmentQuestion.defaultGrade";
public int getNumberWrongAnswersDoneBefore(Long assessmentUid, Long userId, Long questionUid) {
List list = getHibernateTemplate().find(FIND_WRONG_ANSWERS_NUMBER, new Object[] { assessmentUid, userId, questionUid });
Fisheye: Tag 1.1 refers to a dead (removed) revision in file `lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dbupdates/updateTo20090612.sql'.
Fisheye: No comparison available. Pass `N' to diff?
Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.java
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.java,v
diff -u -r1.7 -r1.7.2.1
--- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.java 19 Mar 2009 22:06:53 -0000 1.7
+++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/model/AssessmentQuestionResult.java 15 Jun 2009 00:42:50 -0000 1.7.2.1
@@ -40,7 +40,7 @@
private Long uid;
private AssessmentQuestion assessmentQuestion;
- private Long resultUid;
+ private AssessmentResult assessmentResult;
private String answerString;
private float answerFloat;
private boolean answerBoolean;
@@ -82,16 +82,15 @@
}
/**
- * @hibernate.property column="result_uid"
- *
- * @return Returns resultUid.
+ * @hibernate.many-to-one column="result_uid" cascade="none"
+ * @return
*/
- public Long getResultUid() {
- return resultUid;
+ public AssessmentResult getAssessmentResult() {
+ return assessmentResult;
}
- public void setResultUid(Long resultUid) {
- this.resultUid = resultUid;
+ public void setAssessmentResult(AssessmentResult assessmentResult) {
+ this.assessmentResult = assessmentResult;
}
/**
@@ -191,6 +190,12 @@
this.optionAnswers = answers;
}
+
+ /**
+ * @hibernate.property column="finish_date"
+ *
+ * @return Returns submittedOptionUid.
+ */
public Date getFinishDate() {
return finishDate;
}
Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java,v
diff -u -r1.15 -r1.15.2.1
--- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java 3 Apr 2009 18:38:48 -0000 1.15
+++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java 15 Jun 2009 00:42:50 -0000 1.15.2.1
@@ -121,14 +121,14 @@
private AssessmentSessionDAO assessmentSessionDao;
private AssessmentQuestionResultDAO assessmentQuestionResultDao;
-
+
private AssessmentResultDAO assessmentResultDao;
// tool service
private AssessmentToolContentHandler assessmentToolContentHandler;
private MessageService messageService;
-
+
private AssessmentOutputFactory assessmentOutputFactory;
// system services
@@ -154,8 +154,9 @@
// Service method
// *******************************************************************************
/**
- * Try to get the file. If forceLogin = false and an access denied exception occurs, call this method again to get a
- * new ticket and retry file lookup. If forceLogin = true and it then fails then throw exception.
+ * Try to get the file. If forceLogin = false and an access denied exception
+ * occurs, call this method again to get a new ticket and retry file lookup.
+ * If forceLogin = true and it then fails then throw exception.
*
* @param uuid
* @param versionId
@@ -184,11 +185,12 @@
}
/**
- * This method verifies the credentials of the Assessment Tool and gives it the Ticket
to login and
- * access the Content Repository.
+ * This method verifies the credentials of the Assessment Tool and gives it
+ * the Ticket
to login and access the Content Repository.
*
- * A valid ticket is needed in order to access the content from the repository. This method would be called evertime
- * the tool needs to upload/download files from the content repository.
+ * A valid ticket is needed in order to access the content from the
+ * repository. This method would be called evertime the tool needs to
+ * upload/download files from the content repository.
*
* @return ITicket The ticket for repostory access
* @throws AssessmentApplicationException
@@ -326,27 +328,29 @@
public void saveOrUpdateAssessmentSession(AssessmentSession resSession) {
assessmentSessionDao.saveObject(resSession);
}
-
- public void setAttemptStarted(Assessment assessment, AssessmentUser assessmentUser, Long toolSessionId) {
+
+ 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 void processUserAnswers(Long assessmentUid, Long userId, ArrayList> pagedQuestions) {
+
+ public void processUserAnswers(Long assessmentUid, Long userId,
+ ArrayList> pagedQuestions) {
SortedSet questionResultList = new TreeSet(
new AssessmentQuestionResultComparator());
int maximumGrade = 0;
float grade = 0;
for (LinkedHashSet questionsForOnePage : pagedQuestions) {
for (AssessmentQuestion question : questionsForOnePage) {
- int numberWrongAnswers = assessmentQuestionResultDao.getNumberWrongAnswersDoneBefore(assessmentUid, userId, question.getUid());
+ int numberWrongAnswers = assessmentQuestionResultDao.getNumberWrongAnswersDoneBefore(assessmentUid,
+ userId, question.getUid());
AssessmentQuestionResult processedAnswer = this.processUserAnswer(question, numberWrongAnswers);
questionResultList.add(processedAnswer);
-
+
maximumGrade += question.getDefaultGrade();
grade += processedAnswer.getMark();
}
@@ -358,7 +362,7 @@
result.setFinishDate(new Timestamp(new Date().getTime()));
assessmentResultDao.saveObject(result);
}
-
+
private AssessmentQuestionResult processUserAnswer(AssessmentQuestion question, int numberWrongAnswers) {
AssessmentQuestionResult questionResult = new AssessmentQuestionResult();
@@ -370,22 +374,23 @@
optionAnswer.setAnswerBoolean(questionOption.getAnswerBoolean());
optionAnswer.setAnswerInt(questionOption.getAnswerInt());
optionAnswers.add(optionAnswer);
-
+
if (question.getType() == AssessmentConstants.QUESTION_TYPE_ORDERING) {
optionAnswer.setAnswerInt(j++);
}
- }
+ }
questionResult.setAssessmentQuestion(question);
questionResult.setAnswerBoolean(question.getAnswerBoolean());
questionResult.setAnswerFloat(question.getAnswerFloat());
questionResult.setAnswerString(question.getAnswerString());
-
+ questionResult.setFinishDate(new Date());
+
float mark = 0;
float maxMark = question.getDefaultGrade();
if (question.getType() == AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE) {
for (AssessmentQuestionOption option : question.getQuestionOptions()) {
if (option.getAnswerBoolean()) {
- mark += option.getGrade()*maxMark;
+ mark += option.getGrade() * maxMark;
}
}
} else if (question.getType() == AssessmentConstants.QUESTION_TYPE_MATCHING_PAIRS) {
@@ -402,13 +407,14 @@
if (question.isCaseSensitive()) {
pattern = Pattern.compile(optionString);
} else {
- pattern = Pattern.compile(optionString, java.util.regex.Pattern.CASE_INSENSITIVE | java.util.regex.Pattern.UNICODE_CASE);
- }
- boolean isAnswerCorrect = (question.getAnswerString() != null) ?
- pattern.matcher(question.getAnswerString()).matches() : false;
-
+ pattern = Pattern.compile(optionString, java.util.regex.Pattern.CASE_INSENSITIVE
+ | java.util.regex.Pattern.UNICODE_CASE);
+ }
+ boolean isAnswerCorrect = (question.getAnswerString() != null) ? pattern.matcher(
+ question.getAnswerString()).matches() : false;
+
if (isAnswerCorrect) {
- mark = option.getGrade()*maxMark;
+ mark = option.getGrade() * maxMark;
questionResult.setSubmittedOptionUid(option.getUid());
break;
}
@@ -420,8 +426,8 @@
boolean isAnswerCorrect = false;
try {
float answerFloat = Float.valueOf(question.getAnswerString());
- isAnswerCorrect = ((answerFloat >= (option.getOptionFloat() - option.getAcceptedError()))
- && (answerFloat <= (option.getOptionFloat() + option.getAcceptedError())));
+ isAnswerCorrect = ((answerFloat >= (option.getOptionFloat() - option.getAcceptedError())) && (answerFloat <= (option
+ .getOptionFloat() + option.getAcceptedError())));
} catch (Exception e) {
}
@@ -431,7 +437,8 @@
Pattern pattern = Pattern.compile(regex, java.util.regex.Pattern.CASE_INSENSITIVE
| java.util.regex.Pattern.UNICODE_CASE);
if (pattern.matcher(answerString).matches()) {
- String answerFloatStr = answerString.substring(0, answerString.length() - unit.getUnit().length());
+ String answerFloatStr = answerString.substring(0, answerString.length()
+ - unit.getUnit().length());
try {
float answerFloat = Float.valueOf(answerFloatStr);
answerFloat = answerFloat / unit.getMultiplier();
@@ -459,21 +466,23 @@
}
} else if (question.getType() == AssessmentConstants.QUESTION_TYPE_ORDERING) {
float maxMarkForCorrectAnswer = maxMark / question.getQuestionOptions().size();
- TreeSet correctOptionSet = new TreeSet(new SequencableComparator());
+ TreeSet correctOptionSet = new TreeSet(
+ new SequencableComparator());
correctOptionSet.addAll(question.getQuestionOptions());
- ArrayList correctOptionList = new ArrayList(correctOptionSet);
+ ArrayList correctOptionList = new ArrayList(
+ correctOptionSet);
int i = 0;
for (AssessmentQuestionOption option : question.getQuestionOptions()) {
if (option.getUid() == correctOptionList.get(i++).getUid()) {
- mark += maxMarkForCorrectAnswer*maxMark;
+ mark += maxMarkForCorrectAnswer * maxMark;
}
}
}
if (mark > maxMark) {
mark = maxMark;
}
if (mark > 0) {
- float penalty = question.getPenaltyFactor()*numberWrongAnswers;
+ float penalty = question.getPenaltyFactor() * numberWrongAnswers;
mark -= penalty;
if (penalty > maxMark) {
penalty = maxMark;
@@ -486,20 +495,21 @@
questionResult.setMark(mark);
return questionResult;
}
-
+
public AssessmentResult getLastAssessmentResult(Long assessmentUid, Long userId) {
return assessmentResultDao.getLastAssessmentResult(assessmentUid, userId);
}
-
+
public AssessmentResult getLastFinishedAssessmentResult(Long assessmentUid, Long userId) {
return assessmentResultDao.getLastFinishedAssessmentResult(assessmentUid, userId);
}
-
+
public int getAssessmentResultCount(Long assessmentUid, Long userId) {
return assessmentResultDao.getAssessmentResultCount(assessmentUid, userId);
}
-
- public List getAssessmentQuestionResultList(Long assessmentUid, Long userId, Long questionUid) {
+
+ public List getAssessmentQuestionResultList(Long assessmentUid, Long userId,
+ Long questionUid) {
return assessmentQuestionResultDao.getAssessmentQuestionResultList(assessmentUid, userId, questionUid);
}
@@ -535,78 +545,84 @@
List users = assessmentUserDao.getBySessionID(sessionId);
ArrayList assessmentResults = new ArrayList();
for (AssessmentUser user : users) {
- AssessmentResult assessmentResult = assessmentResultDao.getLastFinishedAssessmentResultBySessionId(sessionId, user.getUserId());
+ AssessmentResult assessmentResult = assessmentResultDao.getLastFinishedAssessmentResultBySessionId(
+ sessionId, user.getUserId());
if (assessmentResult == null) {
assessmentResult = new AssessmentResult();
assessmentResult.setUser(user);
} else {
Set sortedQuestionResults = new TreeSet(
new AssessmentQuestionResultComparator());
sortedQuestionResults.addAll(assessmentResult.getQuestionResults());
- assessmentResult.setQuestionResults(sortedQuestionResults);
+ assessmentResult.setQuestionResults(sortedQuestionResults);
}
assessmentResults.add(assessmentResult);
}
summary.setAssessmentResults(assessmentResults);
summaryList.add(summary);
}
-
+
escapeQuotes(summaryList);
return summaryList;
}
-
+
public AssessmentResult getUserMasterDetail(Long sessionId, Long userId) {
- AssessmentResult lastFinishedResult = assessmentResultDao.getLastFinishedAssessmentResultBySessionId(sessionId, userId);
+ AssessmentResult lastFinishedResult = assessmentResultDao.getLastFinishedAssessmentResultBySessionId(sessionId,
+ userId);
SortedSet questionResults = new TreeSet(new AssessmentQuestionResultComparator());
questionResults.addAll(lastFinishedResult.getQuestionResults());
lastFinishedResult.setQuestionResults(questionResults);
escapeQuotes(lastFinishedResult);
return lastFinishedResult;
}
-
+
public UserSummary getUserSummary(Long contentId, Long userId, Long sessionId) {
UserSummary userSummary = new UserSummary();
AssessmentUser user = assessmentUserDao.getUserByUserIDAndSessionID(userId, sessionId);
userSummary.setUser(user);
List results = assessmentResultDao.getAssessmentResultsBySession(sessionId, userId);
userSummary.setNumberOfAttempts(results.size());
-
- AssessmentResult lastFinishedResult = assessmentResultDao.getLastFinishedAssessmentResultBySessionId(sessionId, userId);
- long timeTaken = (lastFinishedResult == null) ? 0 : (lastFinishedResult.getFinishDate().getTime() - lastFinishedResult.getStartDate().getTime());
+
+ AssessmentResult lastFinishedResult = assessmentResultDao.getLastFinishedAssessmentResultBySessionId(sessionId,
+ userId);
+ long timeTaken = (lastFinishedResult == null) ? 0
+ : (lastFinishedResult.getFinishDate().getTime() - lastFinishedResult.getStartDate().getTime());
userSummary.setTimeOfLastAttempt(new Date(timeTaken));
if (lastFinishedResult != null) {
userSummary.setLastAttemptGrade(lastFinishedResult.getGrade());
}
-
+
Assessment assessment = assessmentDao.getByContentId(contentId);
ArrayList userSummaryItems = new ArrayList();
Set questions = assessment.getQuestions();
for (AssessmentQuestion question : questions) {
UserSummaryItem userSummaryItem = new UserSummaryItem(question);
List questionResultsForSummary = new ArrayList();
-
+
for (AssessmentResult result : results) {
for (AssessmentQuestionResult questionResult : result.getQuestionResults()) {
- if (question.getUid().equals(questionResult.getAssessmentQuestion().getUid())) {
- questionResult.setFinishDate(result.getFinishDate());
- questionResultsForSummary.add(questionResult);
- break;
+ if (questionResult.getFinishDate() == null) {
+ if (question.getUid().equals(questionResult.getAssessmentQuestion().getUid())) {
+ questionResult.setFinishDate(result.getFinishDate());
+ questionResultsForSummary.add(questionResult);
+ break;
+ }
}
}
-
+
}
userSummaryItem.setQuestionResults(questionResultsForSummary);
userSummaryItems.add(userSummaryItem);
}
userSummary.setUserSummaryItems(userSummaryItems);
-
+
escapeQuotes(userSummary);
return userSummary;
}
-
+
public QuestionSummary getQuestionSummary(Long contentId, Long questionUid) {
QuestionSummary questionSummary = new QuestionSummary();
AssessmentQuestion question = assessmentQuestionDao.getByUid(questionUid);
@@ -622,7 +638,8 @@
// new AssessmentQuestionResultComparator());
ArrayList sessionQuestionResults = new ArrayList();
for (AssessmentUser user : users) {
- AssessmentResult assessmentResult = assessmentResultDao.getLastFinishedAssessmentResultBySessionId(sessionId, user.getUserId());
+ AssessmentResult assessmentResult = assessmentResultDao.getLastFinishedAssessmentResultBySessionId(
+ sessionId, user.getUserId());
AssessmentQuestionResult questionResult = null;
if (assessmentResult == null) {
questionResult = new AssessmentQuestionResult();
@@ -641,32 +658,33 @@
questionResults.add(sessionQuestionResults);
}
questionSummary.setQuestionResultsPerSession(questionResults);
-
+
int count = 0;
float total = 0;
- for(List sessionQuestionResults : questionResults) {
+ for (List sessionQuestionResults : questionResults) {
for (AssessmentQuestionResult questionResult : sessionQuestionResults) {
if (questionResult.getUid() != null) {
count++;
total += questionResult.getMark();
}
}
}
- float averageMark = (count == 0) ? 0 : total/count;
+ float averageMark = (count == 0) ? 0 : total / count;
questionSummary.setAverageMark(averageMark);
-
+
escapeQuotes(questionSummary);
-
+
return questionSummary;
}
-
+
public void changeQuestionResultMark(Long questionResultUid, float newMark) {
- AssessmentQuestionResult questionResult = assessmentQuestionResultDao.getAssessmentQuestionResultByUid(questionResultUid);
+ AssessmentQuestionResult questionResult = assessmentQuestionResultDao
+ .getAssessmentQuestionResultByUid(questionResultUid);
float oldMark = questionResult.getMark();
questionResult.setMark(newMark);
assessmentQuestionResultDao.saveObject(questionResult);
-
- AssessmentResult result = assessmentResultDao.getAssessmentResultByUid(questionResult.getResultUid());
+
+ AssessmentResult result = questionResult.getAssessmentResult();
result.setGrade(result.getGrade() - oldMark + newMark);
assessmentResultDao.saveObject(result);
}
@@ -678,7 +696,7 @@
// *****************************************************************************
// private methods
// *****************************************************************************
-
+
private static void escapeQuotes(Object object) {
if (object instanceof UserSummary) {
UserSummary userSummary = (UserSummary) object;
@@ -713,7 +731,7 @@
}
}
}
-
+
private static void escapeQuotesInQuestionResult(AssessmentQuestionResult questionResult) {
String answerString = questionResult.getAnswerString();
if (answerString != null) {
@@ -738,7 +756,7 @@
}
}
}
-
+
private Assessment getDefaultAssessment() throws AssessmentApplicationException {
Long defaultAssessmentId = getToolDefaultContentIdBySignature(AssessmentConstants.TOOL_SIGNATURE);
Assessment defaultAssessment = getAssessmentByContentId(defaultAssessmentId);
@@ -790,6 +808,15 @@
}
return node;
}
+
+ /**
+ * Get a message from the language files with the given key
+ * @param key
+ * @return
+ */
+ public String getMessage(String key) {
+ return messageService.getMessage(key);
+ }
// *****************************************************************************
// set methods for Spring Bean
@@ -846,7 +873,6 @@
this.assessmentResultDao = assessmentResultDao;
}
-
// *******************************************************************************
// ToolContentManager, ToolSessionManager methods
// *******************************************************************************
@@ -921,12 +947,14 @@
}
/**
- * Get the definitions for possible output for an activity, based on the toolContentId. These may be definitions
- * that are always available for the tool (e.g. number of marks for Multiple Choice) or a custom definition created
- * for a particular activity such as the answer to the third question contains the word Koala and hence the need for
- * the toolContentId
+ * Get the definitions for possible output for an activity, based on the
+ * toolContentId. These may be definitions that are always available for the
+ * tool (e.g. number of marks for Multiple Choice) or a custom definition
+ * created for a particular activity such as the answer to the third
+ * question contains the word Koala and hence the need for the toolContentId
*
- * @return SortedMap of ToolOutputDefinitions with the key being the name of each definition
+ * @return SortedMap of ToolOutputDefinitions with the key being the name of
+ * each definition
*/
public SortedMap getToolOutputDefinitions(Long toolContentId) throws ToolException {
Assessment assessment = getAssessmentByContentId(toolContentId);
@@ -1045,8 +1073,8 @@
/**
* Get the tool output for the given tool output names.
*
- * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.util.List, java.lang.Long,
- * java.lang.Long)
+ * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.util.List,
+ * java.lang.Long, java.lang.Long)
*/
public SortedMap getToolOutput(List names, Long toolSessionId, Long learnerId) {
return assessmentOutputFactory.getToolOutput(names, this, toolSessionId, learnerId);
@@ -1055,8 +1083,8 @@
/**
* Get the tool output for the given tool output name.
*
- * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.lang.String, java.lang.Long,
- * java.lang.Long)
+ * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.lang.String,
+ * java.lang.Long, java.lang.Long)
*/
public ToolOutput getToolOutput(String name, Long toolSessionId, Long learnerId) {
return assessmentOutputFactory.getToolOutput(name, this, toolSessionId, learnerId);
@@ -1070,7 +1098,10 @@
public void import102ToolContent(Long toolContentId, UserDTO user, Hashtable importValues) {
}
- /** Set the description, throws away the title value as this is not supported in 2.0 */
+ /**
+ * Set the description, throws away the title value as this is not supported
+ * in 2.0
+ */
public void setReflectiveData(Long toolContentId, String title, String description) throws ToolException,
DataMissingException {
@@ -1118,7 +1149,7 @@
public String getLocalisedMessage(String key, Object[] args) {
return messageService.getMessage(key, args);
}
-
+
public AssessmentOutputFactory getAssessmentOutputFactory() {
return assessmentOutputFactory;
}
@@ -1136,11 +1167,13 @@
}
/**
- * Finds out which lesson the given tool content belongs to and returns its monitoring users.
+ * Finds out which lesson the given tool content belongs to and returns its
+ * monitoring users.
*
* @param sessionId
- * tool session ID
- * @return list of teachers that monitor the lesson which contains the tool with given session ID
+ * tool session ID
+ * @return list of teachers that monitor the lesson which contains the tool
+ * with given session ID
*/
public List getMonitorsByToolSessionId(Long sessionId) {
return getLessonService().getMonitorsByToolSessionId(sessionId);
Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java,v
diff -u -r1.10 -r1.10.2.1
--- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java 3 Apr 2009 18:38:48 -0000 1.10
+++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java 15 Jun 2009 00:42:50 -0000 1.10.2.1
@@ -246,4 +246,13 @@
* @return list of teachers that monitor the lesson which contains the tool with given session ID
*/
public List getMonitorsByToolSessionId(Long sessionId);
+
+ /**
+ * Get a message from the language files with the given key
+ * @param key
+ * @return
+ */
+ public String getMessage(String key);
}
+
+
Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java
===================================================================
RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java,v
diff -u -r1.8.2.1 -r1.8.2.2
--- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java 11 Jun 2009 06:27:38 -0000 1.8.2.1
+++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java 15 Jun 2009 00:42:50 -0000 1.8.2.2
@@ -27,6 +27,7 @@
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
+import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Set;
@@ -197,9 +198,20 @@
HttpServletResponse response) {
String sessionMapID = request.getParameter(AssessmentConstants.ATTR_SESSION_MAP_ID);
SessionMap sessionMap = (SessionMap) request.getSession().getAttribute(sessionMapID);
- request.setAttribute(AssessmentConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID());
+ String fileName = null;
+ boolean showUserNames = true;
- Long contentId = (Long) sessionMap.get(AssessmentConstants.ATTR_TOOL_CONTENT_ID);
+ Long contentId = null;
+ if (sessionMap != null) {
+ request.setAttribute(AssessmentConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID());
+ contentId = (Long) sessionMap.get(AssessmentConstants.ATTR_TOOL_CONTENT_ID);
+ showUserNames = true;
+ } else {
+ contentId = WebUtil.readLongParam(request, "toolContentID");
+ fileName = WebUtil.readStrParam(request, "fileName");
+ showUserNames = false;
+ }
+
service = getAssessmentService();
Assessment assessment = service.getAssessmentByContentId(contentId);
@@ -208,20 +220,26 @@
try {
LinkedHashMap dataToExport = new LinkedHashMap();
- ExcelCell[][] summaryData = getSummaryData(assessment);
- dataToExport.put(assessment.getTitle(), summaryData);
+ ExcelCell[][] questionSummaryData = getQuestionSummaryData(assessment, showUserNames);
+ dataToExport.put(service.getMessage("label.export.summary.by.question"), questionSummaryData);
- String fileName = "assessment_export.xls";
- if (assessment.getTitle() != null) {
+ ExcelCell[][] userSummaryData = getUserSummaryData(assessment, showUserNames);
+ dataToExport.put(service.getMessage("label.export.summary.by.user"), userSummaryData);
+
+ // Setting the filename if it wasn't passed in the request
+ if (fileName == null && assessment.getTitle() != null) {
fileName = assessment.getTitle().replaceAll(" ", "_") + "_export.xls";
+ } else if (fileName == null) {
+ fileName = "assessment_export.xls";
}
response.setContentType("application/x-download");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
log.debug("Exporting assessment to a spreadsheet: " + assessment.getContentId());
ServletOutputStream out = response.getOutputStream();
- AssessmentExportXLSUtil.exportAssessmentToExcel(out, "Exported on: ", dataToExport);
+ AssessmentExportXLSUtil.exportAssessmentToExcel(out, service.getMessage("label.export.exported.on"),
+ dataToExport);
} catch (IOException e) {
MonitoringAction.log.error(e);
@@ -244,23 +262,25 @@
}
@SuppressWarnings("unchecked")
- private ExcelCell[][] getSummaryData(Assessment assessment) {
+ private ExcelCell[][] getUserSummaryData(Assessment assessment, boolean showUserNames) {
ArrayList data = new ArrayList();
service = getAssessmentService();
if (assessment != null) {
// Create the question summary
ExcelCell[] summaryTitle = new ExcelCell[1];
- summaryTitle[0] = new ExcelCell("Question Summary", true);
+ summaryTitle[0] = new ExcelCell(service.getMessage("label.export.user.summary"), true);
data.add(summaryTitle);
// Adding the question summary -------------------------------------
ExcelCell[] summaryRowTitle = new ExcelCell[5];
- summaryRowTitle[0] = new ExcelCell("Question", true);
- summaryRowTitle[1] = new ExcelCell("Type", true);
- summaryRowTitle[2] = new ExcelCell("Penalty Factor", true);
- summaryRowTitle[3] = new ExcelCell("Default Grade", true);
- summaryRowTitle[4] = new ExcelCell("Average", true);
+ summaryRowTitle[0] = new ExcelCell(service.getMessage("label.monitoring.question.summary.question"), true);
+ summaryRowTitle[1] = new ExcelCell(service.getMessage("label.authoring.basic.list.header.type"), true);
+ summaryRowTitle[2] = new ExcelCell(service.getMessage("label.authoring.basic.penalty.factor"), true);
+ summaryRowTitle[3] = new ExcelCell(service.getMessage("label.monitoring.question.summary.default.mark"),
+ true);
+ summaryRowTitle[4] = new ExcelCell(service.getMessage("label.monitoring.question.summary.average.mark"),
+ true);
data.add(summaryRowTitle);
Float totalGradesPossible = new Float(0);
Float totalAverage = new Float(0);
@@ -287,7 +307,7 @@
}
if (totalGradesPossible.floatValue() > 0) {
ExcelCell[] totalCell = new ExcelCell[5];
- totalCell[2] = new ExcelCell("Total", true);
+ totalCell[2] = new ExcelCell(service.getMessage("label.monitoring.summary.total"), true);
totalCell[3] = new ExcelCell(totalGradesPossible, false);
totalCell[4] = new ExcelCell(totalAverage, false);
data.add(totalCell);
@@ -319,13 +339,29 @@
for (AssessmentUser assessmentUser : assessmentUsers) {
- ExcelCell[] userTitleRow = new ExcelCell[5];
- userTitleRow[0] = new ExcelCell("User", true);
- userTitleRow[1] = new ExcelCell("Date Attempted", true);
- userTitleRow[2] = new ExcelCell("Question", true);
- userTitleRow[3] = new ExcelCell("Answer", true);
- userTitleRow[4] = new ExcelCell("Grade", true);
- data.add(userTitleRow);
+ if (showUserNames) {
+ ExcelCell[] userTitleRow = new ExcelCell[6];
+ userTitleRow[0] = new ExcelCell(service.getMessage("label.export.user.id"), true);
+ userTitleRow[1] = new ExcelCell(service
+ .getMessage("label.monitoring.user.summary.user.name"), true);
+ userTitleRow[2] = new ExcelCell(service.getMessage("label.export.date.attempted"), true);
+ userTitleRow[3] = new ExcelCell(service
+ .getMessage("label.monitoring.question.summary.question"), true);
+ userTitleRow[4] = new ExcelCell(service
+ .getMessage("label.authoring.basic.option.answer"), true);
+ userTitleRow[5] = new ExcelCell(service.getMessage("label.export.mark"), true);
+ data.add(userTitleRow);
+ } else {
+ ExcelCell[] userTitleRow = new ExcelCell[5];
+ userTitleRow[0] = new ExcelCell(service.getMessage("label.export.user.id"), true);
+ userTitleRow[1] = new ExcelCell(service.getMessage("label.export.date.attempted"), true);
+ userTitleRow[2] = new ExcelCell(service
+ .getMessage("label.monitoring.question.summary.question"), true);
+ userTitleRow[3] = new ExcelCell(service
+ .getMessage("label.authoring.basic.option.answer"), true);
+ userTitleRow[4] = new ExcelCell(service.getMessage("label.export.mark"), true);
+ data.add(userTitleRow);
+ }
AssessmentResult assessmentResult = service.getLastAssessmentResult(assessment.getUid(),
assessmentUser.getUserId());
@@ -337,21 +373,35 @@
if (assessmentQuestionResults != null) {
for (AssessmentQuestionResult assessmentQuestionResult : assessmentQuestionResults) {
- ExcelCell[] userResultRow = new ExcelCell[5];
- userResultRow[0] = new ExcelCell(assessmentUser.getLoginName(), false);
- userResultRow[1] = new ExcelCell(assessmentResult.getStartDate(), false);
- userResultRow[2] = new ExcelCell(assessmentQuestionResult
- .getAssessmentQuestion().getTitle(), false);
- userResultRow[3] = new ExcelCell(getAnswerObject(assessmentQuestionResult),
- false);
- userResultRow[4] = new ExcelCell(assessmentQuestionResult.getMark(), false);
- data.add(userResultRow);
- }
+ if (showUserNames) {
+ ExcelCell[] userResultRow = new ExcelCell[6];
+ userResultRow[0] = new ExcelCell(assessmentUser.getUserId(), false);
+ userResultRow[1] = new ExcelCell(assessmentUser.getLoginName(), false);
+ userResultRow[2] = new ExcelCell(assessmentResult.getStartDate(), false);
+ userResultRow[3] = new ExcelCell(assessmentQuestionResult
+ .getAssessmentQuestion().getTitle(), false);
+ userResultRow[4] = new ExcelCell(getAnswerObject(assessmentQuestionResult),
+ false);
+ userResultRow[5] = new ExcelCell(assessmentQuestionResult.getMark(), false);
+ data.add(userResultRow);
+ } else {
+ ExcelCell[] userResultRow = new ExcelCell[5];
+ userResultRow[0] = new ExcelCell(assessmentUser.getUserId(), false);
+ userResultRow[1] = new ExcelCell(assessmentResult.getStartDate(), false);
+ userResultRow[2] = new ExcelCell(assessmentQuestionResult
+ .getAssessmentQuestion().getTitle(), false);
+ userResultRow[3] = new ExcelCell(getAnswerObject(assessmentQuestionResult),
+ false);
+ userResultRow[4] = new ExcelCell(assessmentQuestionResult.getMark(), false);
+ data.add(userResultRow);
+ }
+ }
}
ExcelCell[] userTotalRow = new ExcelCell[5];
- userTotalRow[3] = new ExcelCell("Total", true);
+ userTotalRow[3] = new ExcelCell(service.getMessage("label.monitoring.summary.total"),
+ true);
userTotalRow[4] = new ExcelCell(assessmentResult.getGrade(), false);
data.add(userTotalRow);
data.add(EMPTY_ROW);
@@ -368,6 +418,166 @@
return data.toArray(new ExcelCell[][] {});
}
+ @SuppressWarnings("unchecked")
+ private ExcelCell[][] getQuestionSummaryData(Assessment assessment, boolean showUserNames) {
+ ArrayList data = new ArrayList();
+ service = getAssessmentService();
+
+ if (assessment != null) {
+ // Create the question summary
+ ExcelCell[] summaryTitle = new ExcelCell[1];
+ summaryTitle[0] = new ExcelCell(service.getMessage("label.export.question.summary"), true);
+ data.add(summaryTitle);
+
+ if (assessment.getQuestions() != null) {
+ Set questions = (Set) assessment.getQuestions();
+
+ for (AssessmentQuestion question : questions) {
+
+ // Adding the question summary
+ if (showUserNames) {
+ ExcelCell[] summaryRowTitle = new ExcelCell[10];
+ summaryRowTitle[0] = new ExcelCell(service
+ .getMessage("label.monitoring.question.summary.question"), true);
+ summaryRowTitle[1] = new ExcelCell(
+ service.getMessage("label.authoring.basic.list.header.type"), true);
+ summaryRowTitle[2] = new ExcelCell(service.getMessage("label.export.user.id"), true);
+ summaryRowTitle[3] = new ExcelCell(service
+ .getMessage("label.monitoring.user.summary.user.name"), true);
+ summaryRowTitle[4] = new ExcelCell(service.getMessage("label.export.date.attempted"), true);
+ summaryRowTitle[5] = new ExcelCell(service.getMessage("label.authoring.basic.penalty.factor"),
+ true);
+ summaryRowTitle[6] = new ExcelCell(service
+ .getMessage("label.monitoring.question.summary.default.mark"), true);
+ summaryRowTitle[7] = new ExcelCell(service.getMessage("label.authoring.basic.option.answer"),
+ true);
+ summaryRowTitle[8] = new ExcelCell(service.getMessage("label.export.time.taken"), true);
+ summaryRowTitle[9] = new ExcelCell(service.getMessage("label.export.mark"), true);
+ data.add(summaryRowTitle);
+ } else {
+ ExcelCell[] summaryRowTitle = new ExcelCell[9];
+ summaryRowTitle[0] = new ExcelCell(service
+ .getMessage("label.monitoring.question.summary.question"), true);
+ summaryRowTitle[1] = new ExcelCell(
+ service.getMessage("label.authoring.basic.list.header.type"), true);
+ summaryRowTitle[2] = new ExcelCell(service.getMessage("label.export.user.id"), true);
+ summaryRowTitle[3] = new ExcelCell(service.getMessage("label.export.date.attempted"), true);
+ summaryRowTitle[4] = new ExcelCell(service.getMessage("label.authoring.basic.penalty.factor"),
+ true);
+ summaryRowTitle[5] = new ExcelCell(service
+ .getMessage("label.monitoring.question.summary.default.mark"), true);
+ summaryRowTitle[6] = new ExcelCell(service.getMessage("label.authoring.basic.option.answer"),
+ true);
+ summaryRowTitle[7] = new ExcelCell(service.getMessage("label.export.time.taken"), true);
+ summaryRowTitle[8] = new ExcelCell(service.getMessage("label.export.mark"), true);
+ data.add(summaryRowTitle);
+ }
+
+ QuestionSummary questionSummary = service.getQuestionSummary(assessment.getContentId(), question
+ .getUid());
+
+ List> allResultsForQuestion = questionSummary
+ .getQuestionResultsPerSession();
+
+ int markCount = 0;
+ Float markTotal = new Float(0.0);
+ int timeTakenCount = 0;
+ int timeTakenTotal = 0;
+ for (List resultList : allResultsForQuestion) {
+ for (AssessmentQuestionResult assessmentQuestionResult : resultList) {
+
+ if (showUserNames) {
+ ExcelCell[] userResultRow = new ExcelCell[10];
+ userResultRow[0] = new ExcelCell(assessmentQuestionResult.getAssessmentQuestion()
+ .getTitle(), false);
+ userResultRow[1] = new ExcelCell(getQuestionTypeLanguageLabel(assessmentQuestionResult
+ .getAssessmentQuestion().getType()), false);
+ userResultRow[2] = new ExcelCell(assessmentQuestionResult.getUser().getUserId(), false);
+ userResultRow[3] = new ExcelCell(assessmentQuestionResult.getUser().getLoginName(),
+ false);
+ userResultRow[4] = new ExcelCell(assessmentQuestionResult.getFinishDate(), false);
+ userResultRow[5] = new ExcelCell(new Float(assessmentQuestionResult
+ .getAssessmentQuestion().getPenaltyFactor()), false);
+ userResultRow[6] = new ExcelCell(new Long(assessmentQuestionResult
+ .getAssessmentQuestion().getDefaultGrade()), false);
+ userResultRow[7] = new ExcelCell(getAnswerObject(assessmentQuestionResult), false);
+
+ Date startDate = assessmentQuestionResult.getAssessmentResult().getStartDate();
+ Date finishDate = assessmentQuestionResult.getFinishDate();
+ if (startDate != null && finishDate != null) {
+ Long seconds = (finishDate.getTime() - startDate.getTime()) / 1000;
+ userResultRow[8] = new ExcelCell(seconds, false);
+ timeTakenCount++;
+ timeTakenTotal += seconds;
+ }
+
+ userResultRow[9] = new ExcelCell(assessmentQuestionResult.getMark(), false);
+
+ if (assessmentQuestionResult.getMark() != null) {
+ markCount++;
+ markTotal += assessmentQuestionResult.getMark();
+ }
+
+ data.add(userResultRow);
+ } else {
+ ExcelCell[] userResultRow = new ExcelCell[9];
+ userResultRow[0] = new ExcelCell(assessmentQuestionResult.getAssessmentQuestion()
+ .getTitle(), false);
+ userResultRow[1] = new ExcelCell(getQuestionTypeLanguageLabel(assessmentQuestionResult
+ .getAssessmentQuestion().getType()), false);
+ userResultRow[2] = new ExcelCell(assessmentQuestionResult.getUser().getUserId(), false);
+ userResultRow[3] = new ExcelCell(assessmentQuestionResult.getFinishDate(), false);
+ userResultRow[4] = new ExcelCell(new Float(assessmentQuestionResult
+ .getAssessmentQuestion().getPenaltyFactor()), false);
+ userResultRow[5] = new ExcelCell(new Long(assessmentQuestionResult
+ .getAssessmentQuestion().getDefaultGrade()), false);
+ userResultRow[6] = new ExcelCell(getAnswerObject(assessmentQuestionResult), false);
+
+ Date startDate = assessmentQuestionResult.getAssessmentResult().getStartDate();
+ Date finishDate = assessmentQuestionResult.getFinishDate();
+ if (startDate != null && finishDate != null) {
+ Long seconds = (finishDate.getTime() - startDate.getTime()) / 1000;
+ userResultRow[7] = new ExcelCell(seconds, false);
+ timeTakenCount++;
+ timeTakenTotal += seconds;
+ }
+
+ userResultRow[8] = new ExcelCell(assessmentQuestionResult.getMark(), false);
+
+ if (assessmentQuestionResult.getMark() != null) {
+ markCount++;
+ markTotal += assessmentQuestionResult.getMark();
+ }
+
+ data.add(userResultRow);
+ }
+
+ }
+ }
+
+ // Calculating the averages
+ ExcelCell[] averageRow = new ExcelCell[9];
+ averageRow[6] = new ExcelCell(service.getMessage("label.export.average"), true);
+
+ if (timeTakenTotal > 0) {
+ averageRow[7] = new ExcelCell(new Long(timeTakenTotal / timeTakenCount), false);
+ }
+ if (markTotal > 0) {
+ Float averageMark = new Float(markTotal / markCount);
+ averageRow[8] = new ExcelCell(averageMark, false);
+ } else {
+ averageRow[8] = new ExcelCell(new Float(0.0), false);
+ }
+ data.add(averageRow);
+ data.add(EMPTY_ROW);
+ }
+
+ }
+ }
+
+ return data.toArray(new ExcelCell[][] {});
+ }
+
private String getQuestionTypeLanguageLabel(short type) {
switch (type) {
case AssessmentConstants.QUESTION_TYPE_ESSAY: