Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentResultDAO.java =================================================================== diff -u -r89ed3ac4374cba2ee6ef0ffad853ccc673cb328a -rdb4bd53f341896f8d1087dda549c89b3ab785ede --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentResultDAO.java (.../AssessmentResultDAO.java) (revision 89ed3ac4374cba2ee6ef0ffad853ccc673cb328a) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentResultDAO.java (.../AssessmentResultDAO.java) (revision db4bd53f341896f8d1087dda549c89b3ab785ede) @@ -44,6 +44,14 @@ Integer getLastFinishedAssessmentResultTimeTaken(Long assessmentUid, Long userId); AssessmentResult getLastFinishedAssessmentResultBySessionId(Long sessionId, Long userId); + + /** + * Returns all last finished results for the specified assessment. + * + * @param contentId + * @return + */ + List getLastFinishedAssessmentResults(Long contentId); int getAssessmentResultCount(Long assessmentUid, Long userId); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java =================================================================== diff -u -r58769dd8bdda0dd07bbb90508b319c58b513c9aa -rdb4bd53f341896f8d1087dda549c89b3ab785ede --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java (.../AssessmentResultDAOHibernate.java) (revision 58769dd8bdda0dd07bbb90508b319c58b513c9aa) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentResultDAOHibernate.java (.../AssessmentResultDAOHibernate.java) (revision db4bd53f341896f8d1087dda549c89b3ab785ede) @@ -49,6 +49,10 @@ private static final String FIND_LAST_FINISHED_BY_SESSION_AND_USER = "FROM " + AssessmentResult.class.getName() + " AS r WHERE r.user.userId = ? AND r.sessionId=? AND (r.finishDate != null) AND r.latest=1"; + + private static final String FIND_LAST_FINISHED_RESULTS_BY_CONTENT_ID = "FROM " + + AssessmentResult.class.getName() + + " AS r WHERE r.assessment.contentId=? AND (r.finishDate != null) AND r.latest=1"; private static final String FIND_ASSESSMENT_RESULT_COUNT_BY_ASSESSMENT_AND_USER = "select COUNT(*) FROM " + AssessmentResult.class.getName() @@ -139,6 +143,12 @@ return (AssessmentResult) list.get(0); } } + + @Override + public List getLastFinishedAssessmentResults(Long contentId) { + return getHibernateTemplate().find(AssessmentResultDAOHibernate.FIND_LAST_FINISHED_RESULTS_BY_CONTENT_ID, + new Object[] { contentId }); + } @Override public int getAssessmentResultCount(Long assessmentUid, Long userId) { Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -r58769dd8bdda0dd07bbb90508b319c58b513c9aa -rdb4bd53f341896f8d1087dda549c89b3ab785ede --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 58769dd8bdda0dd07bbb90508b319c58b513c9aa) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision db4bd53f341896f8d1087dda549c89b3ab785ede) @@ -30,6 +30,7 @@ import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; @@ -108,6 +109,7 @@ import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; +import org.lamsfoundation.lams.util.ExcelCell; import org.lamsfoundation.lams.util.JsonUtil; import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.util.audit.IAuditService; @@ -388,24 +390,6 @@ } @Override - public List getAssessmentQuestionsBySessionId(Long sessionId) { - AssessmentSession session = assessmentSessionDao.getSessionBySessionId(sessionId); - if (session == null) { - AssessmentServiceImpl.log.error("Failed get AssessmentSession by ID [" + sessionId + "]"); - return null; - } - // add assessment questions from Authoring - Assessment assessment = session.getAssessment(); - List questions = new ArrayList(); - questions.addAll(assessment.getQuestions()); - - // add assessment questions from AssessmentSession - questions.addAll(session.getAssessmentQuestions()); - - return questions; - } - - @Override public Assessment getAssessmentBySessionId(Long sessionId) { AssessmentSession session = assessmentSessionDao.getSessionBySessionId(sessionId); // to skip CGLib problem @@ -420,11 +404,6 @@ } @Override - public void saveOrUpdateAssessmentSession(AssessmentSession resSession) { - assessmentSessionDao.saveObject(resSession); - } - - @Override public void setAttemptStarted(Assessment assessment, AssessmentUser assessmentUser, Long toolSessionId) { AssessmentResult lastResult = getLastAssessmentResult(assessment.getUid(), assessmentUser.getUserId()); if (lastResult != null) { @@ -854,11 +833,6 @@ } return nextUrl; } - - @Override - public AssessmentQuestion getAssessmentQuestionByUid(Long questionUid) { - return assessmentQuestionDao.getByUid(questionUid); - } @Override public List getSessionDtos(Long contentId) { @@ -879,7 +853,9 @@ return sessionDtos; } + //remove method once we remove export portfolio @Override + @Deprecated public List getSessionDataForExport(Long contentId) { List sessionDtos = new ArrayList(); @@ -1001,18 +977,26 @@ } @Override - public QuestionSummary getQuestionDataForExport(Long contentId, Long questionUid) { - QuestionSummary questionSummary = new QuestionSummary(); - AssessmentQuestion question = assessmentQuestionDao.getByUid(questionUid); - questionSummary.setQuestion(question); + public Map getQuestionSummaryForExport(Assessment assessment) { + Map questionSummaries = new HashMap(); + + if (assessment.getQuestions() == null) { + return questionSummaries; + } + + SortedSet sessions = new TreeSet(new AssessmentSessionComparator()); + sessions.addAll(assessmentSessionDao.getByContentId(assessment.getContentId())); + + List assessmentResults = assessmentResultDao.getLastFinishedAssessmentResults(assessment + .getContentId()); + Map userUidToResultMap = new HashMap(); + for (AssessmentResult assessmentResult : assessmentResults) { + userUidToResultMap.put(assessmentResult.getUser().getUid(), assessmentResult); + } + + Map> sessionIdToUsersMap = new HashMap>(); + for (AssessmentSession session : sessions) { - List> questionResults = new ArrayList>(); - SortedSet sessionList = new TreeSet(new AssessmentSessionComparator()); - sessionList.addAll(assessmentSessionDao.getByContentId(contentId)); - - for (AssessmentSession session : sessionList) { - - Assessment assessment = session.getAssessment(); Long sessionId = session.getSessionId(); List users = new ArrayList(); @@ -1026,49 +1010,499 @@ users = assessmentUserDao.getBySessionID(sessionId); } - ArrayList sessionQuestionResults = new ArrayList(); - for (AssessmentUser user : users) { - AssessmentResult assessmentResult = assessmentResultDao - .getLastFinishedAssessmentResultBySessionId(sessionId, user.getUserId()); - AssessmentQuestionResult questionResult = null; - if (assessmentResult == null) { - questionResult = new AssessmentQuestionResult(); - questionResult.setAssessmentQuestion(question); - } else { - for (AssessmentQuestionResult dbQuestionResult : assessmentResult.getQuestionResults()) { - if (dbQuestionResult.getAssessmentQuestion().getUid().equals(questionUid)) { - questionResult = dbQuestionResult; - break; + sessionIdToUsersMap.put(sessionId, users); + } + + for (AssessmentQuestion question : (Set) assessment.getQuestions()) { + Long questionUid = question.getUid(); + QuestionSummary questionSummary = new QuestionSummary(); + questionSummary.setQuestion(question); + + List> questionResults = new ArrayList>(); + + for (AssessmentSession session : sessions) { + + Long sessionId = session.getSessionId(); + List users = sessionIdToUsersMap.get(sessionId); + + ArrayList sessionQuestionResults = new ArrayList(); + for (AssessmentUser user : users) { + AssessmentResult assessmentResult = userUidToResultMap.get(user.getUid()); + AssessmentQuestionResult questionResult = null; + if (assessmentResult == null) { + questionResult = new AssessmentQuestionResult(); + questionResult.setAssessmentQuestion(question); + } else { + for (AssessmentQuestionResult dbQuestionResult : assessmentResult.getQuestionResults()) { + if (dbQuestionResult.getAssessmentQuestion().getUid().equals(questionUid)) { + questionResult = dbQuestionResult; + break; + } } + if (questionResult == null) { + continue; + } } - if (questionResult == null) { - continue; + questionResult.setUser(user); + sessionQuestionResults.add(questionResult); + } + questionResults.add(sessionQuestionResults); + } + questionSummary.setQuestionResultsPerSession(questionResults); + + int count = 0; + float total = 0; + for (List sessionQuestionResults : questionResults) { + for (AssessmentQuestionResult questionResult : sessionQuestionResults) { + if (questionResult.getUid() != null) { + count++; + total += questionResult.getMark(); } } - questionResult.setUser(user); - sessionQuestionResults.add(questionResult); } - questionResults.add(sessionQuestionResults); + float averageMark = (count == 0) ? 0 : total / count; + questionSummary.setAverageMark(averageMark); + + AssessmentEscapeUtils.escapeQuotes(questionSummary); + + questionSummaries.put(questionUid, questionSummary); } - questionSummary.setQuestionResultsPerSession(questionResults); - int count = 0; - float total = 0; - for (List sessionQuestionResults : questionResults) { - for (AssessmentQuestionResult questionResult : sessionQuestionResults) { - if (questionResult.getUid() != null) { - count++; - total += questionResult.getMark(); + return questionSummaries; + } + + @Override + public LinkedHashMap exportSummary(Assessment assessment, List sessionDtos, boolean showUserNames) { + LinkedHashMap dataToExport = new LinkedHashMap(); + final ExcelCell[] EMPTY_ROW = new ExcelCell[0]; + + // -------------- First tab: Summary ---------------------------------------------------- + if (showUserNames) { + ArrayList summaryTab = new ArrayList(); + + if (sessionDtos != null) { + for (SessionDTO sessionDTO : sessionDtos) { + Long sessionId = sessionDTO.getSessionId(); + + summaryTab.add(EMPTY_ROW); + + ExcelCell[] sessionTitle = new ExcelCell[1]; + sessionTitle[0] = new ExcelCell(sessionDTO.getSessionName(), true); + summaryTab.add(sessionTitle); + + ExcelCell[] summaryRowTitle = new ExcelCell[2]; + summaryRowTitle[0] = new ExcelCell(getMessage("label.monitoring.summary.user.name"), true); + summaryRowTitle[1] = new ExcelCell(getMessage("label.monitoring.summary.total"), true); + summaryTab.add(summaryRowTitle); + + List userDtos = new ArrayList(); + // in case of UseSelectLeaderToolOuput - display only one user + if (assessment.isUseSelectLeaderToolOuput()) { + + AssessmentSession session = getAssessmentSessionBySessionId(sessionId); + AssessmentUser groupLeader = session.getGroupLeader(); + + if (groupLeader != null) { + + float assessmentResult = getLastFinishedAssessmentResultGrade(assessment.getUid(), + groupLeader.getUserId()); + + AssessmentUserDTO userDto = new AssessmentUserDTO(); + userDto.setFirstName(groupLeader.getFirstName()); + userDto.setLastName(groupLeader.getLastName()); + userDto.setGrade(assessmentResult); + userDtos.add(userDto); + } + + } else { + int countSessionUsers = sessionDTO.getNumberLearners(); + + // Get the user list from the db + userDtos = getPagedUsersBySession(sessionId, 0, countSessionUsers, "userName", "ASC", ""); + } + + for (AssessmentUserDTO userDto : userDtos) { + ExcelCell[] userResultRow = new ExcelCell[2]; + userResultRow[0] = new ExcelCell(userDto.getFirstName() + " " + userDto.getLastName(), false); + userResultRow[1] = new ExcelCell(userDto.getGrade(), false); + summaryTab.add(userResultRow); + } + + summaryTab.add(EMPTY_ROW); } } + + dataToExport.put(getMessage("label.export.summary"), summaryTab.toArray(new ExcelCell[][] {})); } - float averageMark = (count == 0) ? 0 : total / count; - questionSummary.setAverageMark(averageMark); + + // ------------------------------------------------------------------ + // -------------- Second tab: Question Summary ---------------------- + + ArrayList questionSummaryTab = new ArrayList(); - AssessmentEscapeUtils.escapeQuotes(questionSummary); + // Create the question summary + ExcelCell[] summaryTitle = new ExcelCell[1]; + summaryTitle[0] = new ExcelCell(getMessage("label.export.question.summary"), true); + questionSummaryTab.add(summaryTitle); - return questionSummary; + Map questionSummaries = getQuestionSummaryForExport(assessment); + + if (assessment.getQuestions() != null) { + Set questions = (Set) assessment.getQuestions(); + + // question row title + int count = 0; + ExcelCell[] summaryRowTitle = showUserNames ? new ExcelCell[10] : new ExcelCell[9]; + summaryRowTitle[count++] = new ExcelCell(getMessage("label.monitoring.question.summary.question"), true); + summaryRowTitle[count++] = new ExcelCell(getMessage("label.authoring.basic.list.header.type"), true); + summaryRowTitle[count++] = new ExcelCell(getMessage("label.authoring.basic.penalty.factor"), true); + summaryRowTitle[count++] = new ExcelCell(getMessage("label.monitoring.question.summary.default.mark"), true); + summaryRowTitle[count++] = new ExcelCell(getMessage("label.export.user.id"), true); + if (showUserNames) { + summaryRowTitle[count++] = new ExcelCell(getMessage("label.monitoring.user.summary.user.name"), true); + } + summaryRowTitle[count++] = new ExcelCell(getMessage("label.export.date.attempted"), true); + summaryRowTitle[count++] = new ExcelCell(getMessage("label.authoring.basic.option.answer"), true); + summaryRowTitle[count++] = new ExcelCell(getMessage("label.export.time.taken"), true); + summaryRowTitle[count++] = new ExcelCell(getMessage("label.export.mark"), true); + + for (AssessmentQuestion question : questions) { + questionSummaryTab.add(summaryRowTitle); + + QuestionSummary questionSummary = questionSummaries.get(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 questionResult : resultList) { + + if (showUserNames) { + ExcelCell[] userResultRow = new ExcelCell[10]; + userResultRow[0] = new ExcelCell(questionResult.getAssessmentQuestion().getTitle(), false); + userResultRow[1] = new ExcelCell(getQuestionTypeLanguageLabel(questionResult + .getAssessmentQuestion().getType()), false); + userResultRow[2] = new ExcelCell(new Float(questionResult.getAssessmentQuestion() + .getPenaltyFactor()), false); + Float maxMark = (questionResult.getMaxMark() == null) ? 0 : new Float( + questionResult.getMaxMark()); + userResultRow[3] = new ExcelCell(maxMark, false); + userResultRow[4] = new ExcelCell(questionResult.getUser().getUserId(), false); + userResultRow[5] = new ExcelCell(questionResult.getUser().getFullName(), false); + userResultRow[6] = new ExcelCell(questionResult.getFinishDate(), false); + userResultRow[7] = new ExcelCell( + AssessmentEscapeUtils.printResponsesForExcelExport(questionResult), false); + + AssessmentResult assessmentResult = questionResult.getAssessmentResult(); + Date finishDate = questionResult.getFinishDate(); + if (assessmentResult != null && finishDate != null) { + Date startDate = assessmentResult.getStartDate(); + if (startDate != null) { + Long seconds = (finishDate.getTime() - startDate.getTime()) / 1000; + userResultRow[8] = new ExcelCell(seconds, false); + timeTakenCount++; + timeTakenTotal += seconds; + } + } + + Float mark = questionResult.getMark(); + if (mark != null) { + userResultRow[9] = new ExcelCell(questionResult.getMark(), false); + markCount++; + markTotal += questionResult.getMark(); + } + + questionSummaryTab.add(userResultRow); + } else { + ExcelCell[] userResultRow = new ExcelCell[9]; + userResultRow[0] = new ExcelCell(questionResult.getAssessmentQuestion().getTitle(), false); + userResultRow[1] = new ExcelCell(getQuestionTypeLanguageLabel(questionResult + .getAssessmentQuestion().getType()), false); + userResultRow[2] = new ExcelCell(new Float(questionResult.getAssessmentQuestion() + .getPenaltyFactor()), false); + Float maxMark = (questionResult.getMaxMark() == null) ? 0 : new Float( + questionResult.getMaxMark()); + userResultRow[3] = new ExcelCell(maxMark, false); + userResultRow[4] = new ExcelCell(questionResult.getUser().getUserId(), false); + userResultRow[5] = new ExcelCell(questionResult.getFinishDate(), false); + userResultRow[6] = new ExcelCell( + AssessmentEscapeUtils.printResponsesForExcelExport(questionResult), false); + + if (questionResult.getAssessmentResult() != null) { + Date startDate = questionResult.getAssessmentResult().getStartDate(); + Date finishDate = questionResult.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(questionResult.getMark(), false); + + if (questionResult.getMark() != null) { + markCount++; + markTotal += questionResult.getMark(); + } + + questionSummaryTab.add(userResultRow); + } + + } + } + + // Calculating the averages + ExcelCell[] averageRow; + + if (showUserNames) { + averageRow = new ExcelCell[10]; + + averageRow[7] = new ExcelCell(getMessage("label.export.average"), true); + + if (timeTakenTotal > 0) { + averageRow[8] = new ExcelCell(new Long(timeTakenTotal / timeTakenCount), false); + } + if (markTotal > 0) { + Float averageMark = new Float(markTotal / markCount); + averageRow[9] = new ExcelCell(averageMark, false); + } else { + averageRow[9] = new ExcelCell(new Float(0.0), false); + } + } else { + averageRow = new ExcelCell[9]; + averageRow[6] = new ExcelCell(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); + } + } + + questionSummaryTab.add(averageRow); + questionSummaryTab.add(EMPTY_ROW); + } + + } + dataToExport.put(getMessage("lable.export.summary.by.question"), + questionSummaryTab.toArray(new ExcelCell[][] {})); + + // ------------------------------------------------------------------ + // -------------- Third tab: User Summary --------------------------- + + ArrayList userSummaryTab = new ArrayList(); + + // Create the question summary + ExcelCell[] userSummaryTitle = new ExcelCell[1]; + userSummaryTitle[0] = new ExcelCell(getMessage("label.export.user.summary"), true); + userSummaryTab.add(userSummaryTitle); + + ExcelCell[] summaryRowTitle = new ExcelCell[5]; + summaryRowTitle[0] = new ExcelCell(getMessage("label.monitoring.question.summary.question"), true); + summaryRowTitle[1] = new ExcelCell(getMessage("label.authoring.basic.list.header.type"), true); + summaryRowTitle[2] = new ExcelCell(getMessage("label.authoring.basic.penalty.factor"), true); + summaryRowTitle[3] = new ExcelCell(getMessage("label.monitoring.question.summary.default.mark"), true); + summaryRowTitle[4] = new ExcelCell(getMessage("label.monitoring.question.summary.average.mark"), true); + userSummaryTab.add(summaryRowTitle); + Float totalGradesPossible = new Float(0); + Float totalAverage = new Float(0); + if (assessment.getQuestionReferences() != null) { + Set questionReferences = new TreeSet(new SequencableComparator()); + questionReferences.addAll(assessment.getQuestionReferences()); + + int randomQuestionsCount = 1; + for (QuestionReference questionReference : questionReferences) { + + String title; + String questionType; + Float penaltyFactor; + Float averageMark = null; + if (questionReference.isRandomQuestion()) { + + title = getMessage("label.authoring.basic.type.random.question") + randomQuestionsCount++; + questionType = getMessage("label.authoring.basic.type.random.question"); + penaltyFactor = null; + averageMark = null; + } else { + + AssessmentQuestion question = questionReference.getQuestion(); + title = question.getTitle(); + questionType = getQuestionTypeLanguageLabel(question.getType()); + penaltyFactor = question.getPenaltyFactor(); + + QuestionSummary questionSummary = questionSummaries.get(question.getUid()); + if (questionSummary != null) { + averageMark = questionSummary.getAverageMark(); + totalAverage += questionSummary.getAverageMark(); + } + } + + int maxGrade = questionReference.getDefaultGrade(); + totalGradesPossible += maxGrade; + + ExcelCell[] questCell = new ExcelCell[5]; + questCell[0] = new ExcelCell(title, false); + questCell[1] = new ExcelCell(questionType, false); + questCell[2] = new ExcelCell(penaltyFactor, false); + questCell[3] = new ExcelCell(maxGrade, false); + questCell[4] = new ExcelCell(averageMark, false); + + userSummaryTab.add(questCell); + } + + if (totalGradesPossible.floatValue() > 0) { + ExcelCell[] totalCell = new ExcelCell[5]; + totalCell[2] = new ExcelCell(getMessage("label.monitoring.summary.total"), true); + totalCell[3] = new ExcelCell(totalGradesPossible, false); + totalCell[4] = new ExcelCell(totalAverage, false); + userSummaryTab.add(totalCell); + } + userSummaryTab.add(EMPTY_ROW); + } + + if (sessionDtos != null) { + List assessmentResults = assessmentResultDao.getLastFinishedAssessmentResults(assessment + .getContentId()); + Map userUidToResultMap = new HashMap(); + for (AssessmentResult assessmentResult : assessmentResults) { + userUidToResultMap.put(assessmentResult.getUser().getUid(), assessmentResult); + } + + for (SessionDTO sessionDTO : sessionDtos) { + + userSummaryTab.add(EMPTY_ROW); + + ExcelCell[] sessionTitle = new ExcelCell[1]; + sessionTitle[0] = new ExcelCell(sessionDTO.getSessionName(), true); + userSummaryTab.add(sessionTitle); + + AssessmentSession assessmentSession = getAssessmentSessionBySessionId(sessionDTO.getSessionId()); + + Set assessmentUsers = assessmentSession.getAssessmentUsers(); + + if (assessmentUsers != null) { + + for (AssessmentUser assessmentUser : assessmentUsers) { + + if (showUserNames) { + ExcelCell[] userTitleRow = new ExcelCell[6]; + userTitleRow[0] = new ExcelCell(getMessage("label.export.user.id"), true); + userTitleRow[1] = new ExcelCell( + getMessage("label.monitoring.user.summary.user.name"), true); + userTitleRow[2] = new ExcelCell(getMessage("label.export.date.attempted"), true); + userTitleRow[3] = new ExcelCell( + getMessage("label.monitoring.question.summary.question"), true); + userTitleRow[4] = new ExcelCell(getMessage("label.authoring.basic.option.answer"), + true); + userTitleRow[5] = new ExcelCell(getMessage("label.export.mark"), true); + userSummaryTab.add(userTitleRow); + } else { + ExcelCell[] userTitleRow = new ExcelCell[5]; + userTitleRow[0] = new ExcelCell(getMessage("label.export.user.id"), true); + userTitleRow[1] = new ExcelCell(getMessage("label.export.date.attempted"), true); + userTitleRow[2] = new ExcelCell( + getMessage("label.monitoring.question.summary.question"), true); + userTitleRow[3] = new ExcelCell(getMessage("label.authoring.basic.option.answer"), + true); + userTitleRow[4] = new ExcelCell(getMessage("label.export.mark"), true); + userSummaryTab.add(userTitleRow); + } + + AssessmentResult assessmentResult = userUidToResultMap.get(assessmentUser.getUid()); + + if (assessmentResult != null) { + Set questionResults = assessmentResult.getQuestionResults(); + + if (questionResults != null) { + + for (AssessmentQuestionResult questionResult : questionResults) { + + if (showUserNames) { + ExcelCell[] userResultRow = new ExcelCell[6]; + userResultRow[0] = new ExcelCell(assessmentUser.getUserId(), false); + userResultRow[1] = new ExcelCell(assessmentUser.getFullName(), false); + userResultRow[2] = new ExcelCell(assessmentResult.getStartDate(), false); + userResultRow[3] = new ExcelCell(questionResult.getAssessmentQuestion() + .getTitle(), false); + userResultRow[4] = new ExcelCell( + AssessmentEscapeUtils.printResponsesForExcelExport(questionResult), + false); + userResultRow[5] = new ExcelCell(questionResult.getMark(), false); + userSummaryTab.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(questionResult.getAssessmentQuestion() + .getTitle(), false); + userResultRow[3] = new ExcelCell( + AssessmentEscapeUtils.printResponsesForExcelExport(questionResult), + false); + userResultRow[4] = new ExcelCell(questionResult.getMark(), false); + userSummaryTab.add(userResultRow); + } + } + } + + ExcelCell[] userTotalRow; + if (showUserNames) { + userTotalRow = new ExcelCell[6]; + userTotalRow[4] = new ExcelCell(getMessage("label.monitoring.summary.total"), + true); + userTotalRow[5] = new ExcelCell(assessmentResult.getGrade(), false); + } else { + userTotalRow = new ExcelCell[5]; + userTotalRow[3] = new ExcelCell(getMessage("label.monitoring.summary.total"), + true); + userTotalRow[4] = new ExcelCell(assessmentResult.getGrade(), false); + } + + userSummaryTab.add(userTotalRow); + userSummaryTab.add(EMPTY_ROW); + } + } + } + } + } + dataToExport.put(getMessage("label.export.summary.by.user"), userSummaryTab.toArray(new ExcelCell[][] {})); + + return dataToExport; } + + /** + * Used only for excell export (for getUserSummaryData() method). + */ + private String getQuestionTypeLanguageLabel(short type) { + switch (type) { + case AssessmentConstants.QUESTION_TYPE_ESSAY: + return "Essay"; + case AssessmentConstants.QUESTION_TYPE_MATCHING_PAIRS: + return "Matching Pairs"; + case AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE: + return "Multiple Choice"; + case AssessmentConstants.QUESTION_TYPE_NUMERICAL: + return "Numerical"; + case AssessmentConstants.QUESTION_TYPE_ORDERING: + return "Ordering"; + case AssessmentConstants.QUESTION_TYPE_SHORT_ANSWER: + return "Short Answer"; + case AssessmentConstants.QUESTION_TYPE_TRUE_FALSE: + return "True/False"; + case AssessmentConstants.QUESTION_TYPE_MARK_HEDGING: + return "Mark Hedging"; + default: + return null; + } + } @Override public void changeQuestionResultMark(Long questionResultUid, float newMark) { @@ -1479,11 +1913,6 @@ } @Override - public AssessmentUser getUser(Long uid) { - return (AssessmentUser) assessmentUserDao.getObject(AssessmentUser.class, uid); - } - - @Override public String getMessage(String key) { return messageService.getMessage(key); } @@ -1500,7 +1929,7 @@ @Override public void notifyTeachersOnAttemptCompletion(Long sessionId, String userName) { - String message = getLocalisedMessage("event.learner.completes.attempt.body", new Object[] { userName }); + String message = messageService.getMessage("event.learner.completes.attempt.body", new Object[] { userName }); eventNotificationService.notifyLessonMonitors(sessionId, message, false); } @@ -1922,11 +2351,6 @@ this.eventNotificationService = eventNotificationService; } - @Override - public String getLocalisedMessage(String key, Object[] args) { - return messageService.getMessage(key, args); - } - public AssessmentOutputFactory getAssessmentOutputFactory() { return assessmentOutputFactory; } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java =================================================================== diff -u -r93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6 -rdb4bd53f341896f8d1087dda549c89b3ab785ede --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision db4bd53f341896f8d1087dda549c89b3ab785ede) @@ -25,8 +25,10 @@ import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; import java.util.Set; import org.lamsfoundation.lams.notebook.model.NotebookEntry; @@ -43,6 +45,7 @@ import org.lamsfoundation.lams.tool.assessment.model.AssessmentUser; import org.lamsfoundation.lams.tool.assessment.model.QuestionReference; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.util.ExcelCell; /** * @author Andrey Balan @@ -160,14 +163,6 @@ void deleteQuestionReference(Long uid); /** - * Return all reource questions within the given toolSessionID. - * - * @param sessionId - * @return - */ - List getAssessmentQuestionsBySessionId(Long sessionId); - - /** * Get assessment which is relative with the special toolSession. * * @param sessionId @@ -182,13 +177,6 @@ * @return */ AssessmentSession getAssessmentSessionBySessionId(Long sessionId); - - /** - * Save or update assessment session. - * - * @param resSession - */ - void saveOrUpdateAssessmentSession(AssessmentSession resSession); /** * Save or update assessment result. @@ -297,8 +285,6 @@ * @return */ String finishToolSession(Long toolSessionId, Long userId) throws AssessmentApplicationException; - - AssessmentQuestion getAssessmentQuestionByUid(Long questionUid); /** * Returns sessionDtos containing only session ids and session names. @@ -343,30 +329,21 @@ * @param questionUid * @return */ - QuestionSummary getQuestionDataForExport(Long contentId, Long questionUid); + Map getQuestionSummaryForExport(Assessment assessment); - void changeQuestionResultMark(Long questionResultUid, float newMark); - /** - * Get user by UID + * Prepares data for Summary excel export * - * @param uid + * @param assessment + * @param sessionDtos + * @param showUserNames * @return */ - AssessmentUser getUser(Long uid); + LinkedHashMap exportSummary(Assessment assessment, List sessionDtos, boolean showUserNames); + + void changeQuestionResultMark(Long questionResultUid, float newMark); void notifyTeachersOnAttemptCompletion(Long sessionId, String userName); - - /** - * Gets a message from assessment bundle. Same as in JSP pages. - * - * @param key - * key of the message - * @param args - * arguments for the message - * @return message content - */ - String getLocalisedMessage(String key, Object[] args); /** * Get a message from the language files with the given key Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java =================================================================== diff -u -r78bf7a4e21b1530f5e8805ad75157ce623309eeb -rdb4bd53f341896f8d1087dda549c89b3ab785ede --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision 78bf7a4e21b1530f5e8805ad75157ce623309eeb) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision db4bd53f341896f8d1087dda549c89b3ab785ede) @@ -83,7 +83,6 @@ public class MonitoringAction extends Action { public static Logger log = Logger.getLogger(MonitoringAction.class); - public static final ExcelCell[] EMPTY_ROW = new ExcelCell[0]; private IAssessmentService service; @@ -464,7 +463,7 @@ } /** - * Export Excel format survey data. + * Excel Summary Export. * * @param mapping * @param form @@ -482,518 +481,43 @@ boolean showUserNames = true; Long contentId = null; + List sessionDtos; if (sessionMap != null) { request.setAttribute(AssessmentConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); contentId = (Long) sessionMap.get(AssessmentConstants.ATTR_TOOL_CONTENT_ID); showUserNames = true; + sessionDtos = (List) sessionMap.get("sessionDtos"); + } else { contentId = WebUtil.readLongParam(request, "toolContentID"); fileName = WebUtil.readStrParam(request, "fileName"); showUserNames = false; + sessionDtos = service.getSessionDtos(contentId); } - List sessionDtos = (List) sessionMap.get("sessionDtos"); Assessment assessment = service.getAssessmentByContentId(contentId); - - if (assessment != null) { - LinkedHashMap dataToExport = new LinkedHashMap(); - - if (showUserNames) { - ExcelCell[][] summaryData = getSummaryData(assessment, sessionDtos); - dataToExport.put(service.getMessage("label.export.summary"), summaryData); - } - - ExcelCell[][] questionSummaryData = getQuestionSummaryData(assessment, showUserNames); - dataToExport.put(service.getMessage("lable.export.summary.by.question"), questionSummaryData); - - ExcelCell[][] userSummaryData = getUserSummaryData(assessment, sessionDtos, 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) { - fileName = "assessment_" + assessment.getUid() + "_export.xlsx"; - } - - 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(); - ExcelUtil.createExcel(out, dataToExport, service.getMessage("label.export.exported.on"), true); - } - - return null; - } - - @SuppressWarnings("unchecked") - private ExcelCell[][] getSummaryData(Assessment assessment, List sessionDtos) { - initAssessmentService(); - ArrayList data = new ArrayList(); - if (assessment == null) { - return new ExcelCell[0][0]; + return null; } - // Adding the user results/marks summary --------------------------- - if (sessionDtos != null) { - for (SessionDTO sessionDTO : sessionDtos) { - Long sessionId = sessionDTO.getSessionId(); - - data.add(EMPTY_ROW); + LinkedHashMap dataToExport = service.exportSummary(assessment, sessionDtos, + showUserNames); - ExcelCell[] sessionTitle = new ExcelCell[1]; - sessionTitle[0] = new ExcelCell(sessionDTO.getSessionName(), true); - data.add(sessionTitle); - - // Adding the question summary ------------------------------------- - ExcelCell[] summaryRowTitle = new ExcelCell[2]; - summaryRowTitle[0] = new ExcelCell(service.getMessage("label.monitoring.summary.user.name"), true); - summaryRowTitle[1] = new ExcelCell(service.getMessage("label.monitoring.summary.total"), true); - data.add(summaryRowTitle); - - List userDtos = new ArrayList(); - //in case of UseSelectLeaderToolOuput - display only one user - if (assessment.isUseSelectLeaderToolOuput()) { - - AssessmentSession session = service.getAssessmentSessionBySessionId(sessionId); - AssessmentUser groupLeader = session.getGroupLeader(); - - if (groupLeader != null) { - - float assessmentResult = service.getLastFinishedAssessmentResultGrade(assessment.getUid(), - groupLeader.getUserId()); - - AssessmentUserDTO userDto = new AssessmentUserDTO(); - userDto.setFirstName(groupLeader.getFirstName()); - userDto.setLastName(groupLeader.getLastName()); - userDto.setGrade(assessmentResult); - userDtos.add(userDto); - } - - } else { - int countSessionUsers = sessionDTO.getNumberLearners(); - - // Get the user list from the db - userDtos = service.getPagedUsersBySession(sessionId, 0, countSessionUsers, "userName", "ASC", ""); - } - - for (AssessmentUserDTO userDto : userDtos) { - ExcelCell[] userResultRow = new ExcelCell[2]; - userResultRow[0] = new ExcelCell(userDto.getFirstName() + " " + userDto.getLastName(), false); - userResultRow[1] = new ExcelCell(userDto.getGrade(), false); - data.add(userResultRow); - } - - data.add(EMPTY_ROW); - } + // Setting the filename if it wasn't passed in the request + if (fileName == null) { + fileName = "assessment_" + assessment.getUid() + "_export.xlsx"; } - // ------------------------------------------------------------------ + response.setContentType("application/x-download"); + response.setHeader("Content-Disposition", "attachment;filename=" + fileName); + log.debug("Exporting assessment to a spreadsheet: " + assessment.getContentId()); - return data.toArray(new ExcelCell[][] {}); + ServletOutputStream out = response.getOutputStream(); + ExcelUtil.createExcel(out, dataToExport, service.getMessage("label.export.exported.on"), true); + + return null; } - @SuppressWarnings("unchecked") - private ExcelCell[][] getUserSummaryData(Assessment assessment, List sessionDtos, boolean showUserNames) { - initAssessmentService(); - ArrayList data = new ArrayList(); - - if (assessment != null) { - // Create the question summary - ExcelCell[] summaryTitle = new ExcelCell[1]; - 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(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); - if (assessment.getQuestionReferences() != null) { - Set questionReferences = new TreeSet(new SequencableComparator()); - questionReferences.addAll(assessment.getQuestionReferences()); - - int randomQuestionsCount = 1; - for (QuestionReference questionReference : questionReferences) { - - String title; - String questionType; - Float penaltyFactor; - Float averageMark = null; - if (questionReference.isRandomQuestion()) { - - title = service.getMessage("label.authoring.basic.type.random.question") - + randomQuestionsCount++; - questionType = service.getMessage("label.authoring.basic.type.random.question"); - penaltyFactor = null; - averageMark = null; - } else { - - AssessmentQuestion question = questionReference.getQuestion(); - title = question.getTitle(); - questionType = getQuestionTypeLanguageLabel(question.getType()); - penaltyFactor = question.getPenaltyFactor(); - - QuestionSummary questionSummary = service.getQuestionDataForExport(assessment.getContentId(), - question.getUid()); - if (questionSummary != null) { - averageMark = questionSummary.getAverageMark(); - totalAverage += questionSummary.getAverageMark(); - } - } - - int maxGrade = questionReference.getDefaultGrade(); - totalGradesPossible += maxGrade; - - ExcelCell[] questCell = new ExcelCell[5]; - questCell[0] = new ExcelCell(title, false); - questCell[1] = new ExcelCell(questionType, false); - questCell[2] = new ExcelCell(penaltyFactor, false); - questCell[3] = new ExcelCell(maxGrade, false); - questCell[4] = new ExcelCell(averageMark, false); - - data.add(questCell); - - } - - if (totalGradesPossible.floatValue() > 0) { - ExcelCell[] totalCell = new ExcelCell[5]; - 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); - } - data.add(EMPTY_ROW); - } - //------------------------------------------------------------------ - - // Adding the user results/marks summary --------------------------- - if (sessionDtos != null) { - for (SessionDTO sessionDTO : sessionDtos) { - - data.add(EMPTY_ROW); - - ExcelCell[] sessionTitle = new ExcelCell[1]; - sessionTitle[0] = new ExcelCell(sessionDTO.getSessionName(), true); - data.add(sessionTitle); - - //List assessmentResults = summary.getAssessmentResults(); - - AssessmentSession assessmentSession = service.getAssessmentSessionBySessionId(sessionDTO - .getSessionId()); - - Set assessmentUsers = assessmentSession.getAssessmentUsers(); - - if (assessmentUsers != null) { - - for (AssessmentUser assessmentUser : assessmentUsers) { - - 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.getLastFinishedAssessmentResult(assessment.getUid(), - assessmentUser.getUserId()); - - if (assessmentResult != null) { - Set questionResults = assessmentResult - .getQuestionResults(); - - if (questionResults != null) { - - for (AssessmentQuestionResult questionResult : questionResults) { - - if (showUserNames) { - ExcelCell[] userResultRow = new ExcelCell[6]; - userResultRow[0] = new ExcelCell(assessmentUser.getUserId(), false); - userResultRow[1] = new ExcelCell(assessmentUser.getFullName(), false); - userResultRow[2] = new ExcelCell(assessmentResult.getStartDate(), false); - userResultRow[3] = new ExcelCell(questionResult - .getAssessmentQuestion().getTitle(), false); - userResultRow[4] = new ExcelCell(AssessmentEscapeUtils.printResponsesForExcelExport(questionResult), - false); - userResultRow[5] = new ExcelCell(questionResult.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(questionResult - .getAssessmentQuestion().getTitle(), false); - userResultRow[3] = new ExcelCell(AssessmentEscapeUtils.printResponsesForExcelExport(questionResult), - false); - userResultRow[4] = new ExcelCell(questionResult.getMark(), false); - data.add(userResultRow); - } - } - } - - ExcelCell[] userTotalRow; - if (showUserNames) { - userTotalRow = new ExcelCell[6]; - userTotalRow[4] = new ExcelCell(service - .getMessage("label.monitoring.summary.total"), true); - userTotalRow[5] = new ExcelCell(assessmentResult.getGrade(), false); - } else { - userTotalRow = new ExcelCell[5]; - 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); - } - } - } - } - } - - //------------------------------------------------------------------ - - } - - return data.toArray(new ExcelCell[][] {}); - } - - @SuppressWarnings("unchecked") - private ExcelCell[][] getQuestionSummaryData(Assessment assessment, boolean showUserNames) { - initAssessmentService(); - ArrayList data = new ArrayList(); - - 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.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.export.user.id"), true); - summaryRowTitle[5] = new ExcelCell(service - .getMessage("label.monitoring.user.summary.user.name"), true); - summaryRowTitle[6] = new ExcelCell(service.getMessage("label.export.date.attempted"), 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.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.export.user.id"), true); - summaryRowTitle[5] = new ExcelCell(service.getMessage("label.export.date.attempted"), 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.getQuestionDataForExport(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 questionResult : resultList) { - - if (showUserNames) { - ExcelCell[] userResultRow = new ExcelCell[10]; - userResultRow[0] = new ExcelCell(questionResult.getAssessmentQuestion().getTitle(), - false); - userResultRow[1] = new ExcelCell(getQuestionTypeLanguageLabel(questionResult - .getAssessmentQuestion().getType()), false); - userResultRow[2] = new ExcelCell(new Float(questionResult.getAssessmentQuestion() - .getPenaltyFactor()), false); - Float maxMark = (questionResult.getMaxMark() == null) ? 0 : new Float( - questionResult.getMaxMark()); - userResultRow[3] = new ExcelCell(maxMark, false); - userResultRow[4] = new ExcelCell(questionResult.getUser().getUserId(), false); - userResultRow[5] = new ExcelCell(questionResult.getUser().getFullName(), false); - userResultRow[6] = new ExcelCell(questionResult.getFinishDate(), false); - userResultRow[7] = new ExcelCell(AssessmentEscapeUtils.printResponsesForExcelExport(questionResult), false); - - AssessmentResult assessmentResult = questionResult.getAssessmentResult(); - Date finishDate = questionResult.getFinishDate(); - if (assessmentResult != null && finishDate != null) { - Date startDate = assessmentResult.getStartDate(); - if (startDate != null) { - Long seconds = (finishDate.getTime() - startDate.getTime()) / 1000; - userResultRow[8] = new ExcelCell(seconds, false); - timeTakenCount++; - timeTakenTotal += seconds; - } - } - - Float mark = questionResult.getMark(); - if (mark != null) { - userResultRow[9] = new ExcelCell(questionResult.getMark(), false); - markCount++; - markTotal += questionResult.getMark(); - } - - data.add(userResultRow); - } else { - ExcelCell[] userResultRow = new ExcelCell[9]; - userResultRow[0] = new ExcelCell(questionResult.getAssessmentQuestion().getTitle(), - false); - userResultRow[1] = new ExcelCell(getQuestionTypeLanguageLabel(questionResult - .getAssessmentQuestion().getType()), false); - userResultRow[2] = new ExcelCell(new Float(questionResult.getAssessmentQuestion() - .getPenaltyFactor()), false); - Float maxMark = (questionResult.getMaxMark() == null) ? 0 : new Float( - questionResult.getMaxMark()); - userResultRow[3] = new ExcelCell(maxMark, false); - userResultRow[4] = new ExcelCell(questionResult.getUser().getUserId(), false); - userResultRow[5] = new ExcelCell(questionResult.getFinishDate(), false); - userResultRow[6] = new ExcelCell(AssessmentEscapeUtils.printResponsesForExcelExport(questionResult), false); - - if (questionResult.getAssessmentResult() != null) { - Date startDate = questionResult.getAssessmentResult().getStartDate(); - Date finishDate = questionResult.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(questionResult.getMark(), false); - - if (questionResult.getMark() != null) { - markCount++; - markTotal += questionResult.getMark(); - } - - data.add(userResultRow); - } - - } - } - - // Calculating the averages - ExcelCell[] averageRow; - - if (showUserNames) { - averageRow = new ExcelCell[10]; - - averageRow[7] = new ExcelCell(service.getMessage("label.export.average"), true); - - if (timeTakenTotal > 0) { - averageRow[8] = new ExcelCell(new Long(timeTakenTotal / timeTakenCount), false); - } - if (markTotal > 0) { - Float averageMark = new Float(markTotal / markCount); - averageRow[9] = new ExcelCell(averageMark, false); - } else { - averageRow[9] = new ExcelCell(new Float(0.0), false); - } - } else { - 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[][] {}); - } - - /** - * Used only for excell export (for getUserSummaryData() method). - */ - private String getQuestionTypeLanguageLabel(short type) { - switch (type) { - case AssessmentConstants.QUESTION_TYPE_ESSAY: - return "Essay"; - case AssessmentConstants.QUESTION_TYPE_MATCHING_PAIRS: - return "Matching Pairs"; - case AssessmentConstants.QUESTION_TYPE_MULTIPLE_CHOICE: - return "Multiple Choice"; - case AssessmentConstants.QUESTION_TYPE_NUMERICAL: - return "Numerical"; - case AssessmentConstants.QUESTION_TYPE_ORDERING: - return "Ordering"; - case AssessmentConstants.QUESTION_TYPE_SHORT_ANSWER: - return "Short Answer"; - case AssessmentConstants.QUESTION_TYPE_TRUE_FALSE: - return "True/False"; - case AssessmentConstants.QUESTION_TYPE_MARK_HEDGING: - return "Mark Hedging"; - default: - return null; - } - } - // ************************************************************************************* // Private method // ************************************************************************************* Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/servlet/ExportServlet.java =================================================================== diff -u -r93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6 -rdb4bd53f341896f8d1087dda549c89b3ab785ede --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/servlet/ExportServlet.java (.../ExportServlet.java) (revision 93b2c3db3a73ac8b1c91d7022ccf77c28a4586c6) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/servlet/ExportServlet.java (.../ExportServlet.java) (revision db4bd53f341896f8d1087dda549c89b3ab785ede) @@ -28,6 +28,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; import javax.servlet.ServletException; @@ -181,18 +182,12 @@ } List summaryList = service.getSessionDataForExport(toolContentID); + Map questionSummaries = service.getQuestionSummaryForExport(content); - ArrayList questionSummaryList = new ArrayList(); - Set questions = content.getQuestions(); - for (AssessmentQuestion question : questions) { - QuestionSummary questionSummary = service.getQuestionDataForExport(toolContentID, question.getUid()); - questionSummaryList.add(questionSummary); - } - // cache into sessionMap sessionMap.put(AssessmentConstants.ATTR_ASSESSMENT, content); sessionMap.put(AssessmentConstants.ATTR_SUMMARY_LIST, summaryList); - sessionMap.put(AssessmentConstants.ATTR_QUESTION_SUMMARY_LIST, questionSummaryList); + sessionMap.put(AssessmentConstants.ATTR_QUESTION_SUMMARY_LIST, questionSummaries.values()); // Create reflectList if reflection is enabled. if (content.isReflectOnActivity()) {