Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/LearningUtil.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/LearningUtil.java,v diff -u -r1.16 -r1.17 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/LearningUtil.java 26 Jan 2006 18:22:37 -0000 1.16 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/LearningUtil.java 28 Jan 2006 23:31:10 -0000 1.17 @@ -488,7 +488,10 @@ logger.debug("incoming mapGeneralCorrectOptions : " + mapGeneralCorrectOptions); logger.debug("incoming mapGeneralCheckedOptionsContent : " + mapGeneralCheckedOptionsContent); - Map mapLeanerAssessmentResults= new TreeMap(new McComparator()); + Map mapLeanerAssessmentResults= new TreeMap(new McComparator()); + + if (mapGeneralCheckedOptionsContent == null) + return mapLeanerAssessmentResults; Iterator itMap = mapGeneralCorrectOptions.entrySet().iterator(); boolean compareResult= false; @@ -656,24 +659,27 @@ Long toolContentUID= (Long) request.getSession().getAttribute(TOOL_CONTENT_UID); logger.debug("toolContentUID: " + toolContentUID); - Iterator itCheckedMap = mapGeneralCheckedOptionsContent.entrySet().iterator(); - while (itCheckedMap.hasNext()) - { - Map.Entry checkedPairs = (Map.Entry)itCheckedMap.next(); - Map mapCheckedOptions=(Map) checkedPairs.getValue(); - Long questionDisplayOrder=new Long(checkedPairs.getKey().toString()); - - logger.debug("questionDisplayOrder: " + questionDisplayOrder); - String isAttemptCorrect=(String)mapLeanerAssessmentResults.get(questionDisplayOrder.toString()); - logger.debug("isAttemptCorrect: " + isAttemptCorrect); - - McQueContent mcQueContent=mcService.getQuestionContentByDisplayOrder(questionDisplayOrder, toolContentUID); - logger.debug("mcQueContent: " + mcQueContent); - if (mcQueContent != null) - { - createIndividualOptions(request, mapCheckedOptions, mcQueContent, mcQueUsr, attempTime, timeZone, mark, passed, new Integer(highestAttemptOrder), isAttemptCorrect); - } - } + if (toolContentUID != null) + { + Iterator itCheckedMap = mapGeneralCheckedOptionsContent.entrySet().iterator(); + while (itCheckedMap.hasNext()) + { + Map.Entry checkedPairs = (Map.Entry)itCheckedMap.next(); + Map mapCheckedOptions=(Map) checkedPairs.getValue(); + Long questionDisplayOrder=new Long(checkedPairs.getKey().toString()); + + logger.debug("questionDisplayOrder: " + questionDisplayOrder); + String isAttemptCorrect=(String)mapLeanerAssessmentResults.get(questionDisplayOrder.toString()); + logger.debug("isAttemptCorrect: " + isAttemptCorrect); + + McQueContent mcQueContent=mcService.getQuestionContentByDisplayOrder(questionDisplayOrder, toolContentUID); + logger.debug("mcQueContent: " + mcQueContent); + if (mcQueContent != null) + { + createIndividualOptions(request, mapCheckedOptions, mcQueContent, mcQueUsr, attempTime, timeZone, mark, passed, new Integer(highestAttemptOrder), isAttemptCorrect); + } + } + } } @@ -734,6 +740,41 @@ return mapWeights; } + + public static Map buildQuestionContentMap(HttpServletRequest request, McContent mcContent) + { + IMcService mcService =McUtils.getToolService(request); + Map mapQuestionsContent= new TreeMap(new McComparator()); + + Iterator contentIterator=mcContent.getMcQueContents().iterator(); + while (contentIterator.hasNext()) + { + McQueContent mcQueContent=(McQueContent)contentIterator.next(); + if (mcQueContent != null) + { + int displayOrder=mcQueContent.getDisplayOrder().intValue(); + if (displayOrder != 0) + { + /* add the question to the questions Map in the displayOrder*/ + mapQuestionsContent.put(new Integer(displayOrder).toString(),mcQueContent.getQuestion()); + } + + /* prepare the first question's candidate answers for presentation*/ + if (displayOrder == 1) + { + logger.debug("first question... "); + Long uid=mcQueContent.getUid(); + logger.debug("uid : " + uid); + List listMcOptions=mcService.findMcOptionsContentByQueId(uid); + logger.debug("listMcOptions : " + listMcOptions); + Map mapOptionsContent=McUtils.generateOptionsMap(listMcOptions); + request.getSession().setAttribute(MAP_OPTIONS_CONTENT, mapOptionsContent); + logger.debug("updated Options Map: " + request.getSession().getAttribute(MAP_OPTIONS_CONTENT)); + } + } + } + return mapQuestionsContent; + } /** * removes Learning session attributes Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McAuthoringForm.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McAuthoringForm.java,v diff -u -r1.26 -r1.27 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McAuthoringForm.java 7 Jan 2006 14:35:44 -0000 1.26 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McAuthoringForm.java 28 Jan 2006 23:31:10 -0000 1.27 @@ -1,7 +1,6 @@ package org.lamsfoundation.lams.tool.mc.web; - -import org.apache.struts.action.ActionForm; +import org.lamsfoundation.lams.tool.mc.web.McLearningForm; import org.apache.struts.upload.FormFile; import org.lamsfoundation.lams.tool.mc.McAppConstants; @@ -10,7 +9,7 @@ * * ActionForm for the Authoring environment */ -public class McAuthoringForm extends ActionForm implements McAppConstants { +public class McAuthoringForm extends McLearningForm implements McAppConstants { /* form controllers */ protected String addOptionContent; Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningAction.java,v diff -u -r1.5 -r1.6 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningAction.java 26 Jan 2006 18:23:18 -0000 1.5 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningAction.java 28 Jan 2006 23:31:10 -0000 1.6 @@ -316,7 +316,6 @@ int mark=LearningUtil.getMark(mapLeanerAssessmentResults); logger.debug("mark: " + mark); - //request.getSession().setAttribute(LEARNER_MARK, new Integer(mark).toString()); Map mapQuestionWeights =(Map) request.getSession().getAttribute(MAP_QUESTION_WEIGHTS); logger.debug("mapQuestionWeights: " + mapQuestionWeights); @@ -354,6 +353,9 @@ String highestAttemptOrder=(String)request.getSession().getAttribute(LEARNER_LAST_ATTEMPT_ORDER); logger.debug("current highestAttemptOrder:" + highestAttemptOrder); + if (highestAttemptOrder == null) + highestAttemptOrder="0"; + logger.debug("passed: " + passed); LearningUtil.createAttempt(request, mcQueUsr, mapGeneralCheckedOptionsContent, mark, passed, new Integer(highestAttemptOrder).intValue(), mapLeanerAssessmentResults); logger.debug("created user attempt in the db"); @@ -625,6 +627,32 @@ mcService.saveMcContent(mcContent); } + + /** + * double check this: forwards to outside of the application. + * ActionForward donePreview(ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response) throws IOException, + ServletException + * + * @param mapping + * @param form + * @param request + * @param response + * @return + * @throws IOException + * @throws ServletException + */ + public ActionForward donePreview(ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response) throws IOException, + ServletException + { + logger.debug("dispatching donePreview..."); + return (mapping.findForward(LOAD_STARTER)); + } /** * redoQuestions(HttpServletRequest request, McLearningForm mcLearningForm, ActionMapping mapping) @@ -634,7 +662,7 @@ * @param mapping * @return */ - protected ActionForward redoQuestions(HttpServletRequest request, McLearningForm mcLearningForm, ActionMapping mapping) + public ActionForward redoQuestions(HttpServletRequest request, McLearningForm mcLearningForm, ActionMapping mapping) { logger.debug("requested redoQuestions..."); /* reset the checked options MAP */ Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningForm.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningForm.java,v diff -u -r1.8 -r1.9 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningForm.java 21 Nov 2005 13:30:27 -0000 1.8 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningForm.java 28 Jan 2006 23:31:10 -0000 1.9 @@ -1,6 +1,5 @@ package org.lamsfoundation.lams.tool.mc.web; - import org.apache.struts.action.ActionForm; import org.lamsfoundation.lams.tool.mc.McAppConstants; Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningStarterAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningStarterAction.java,v diff -u -r1.26 -r1.27 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningStarterAction.java 28 Jan 2006 18:30:14 -0000 1.26 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningStarterAction.java 28 Jan 2006 23:31:10 -0000 1.27 @@ -288,37 +288,11 @@ */ setupAttributes(request, mcContent); - /* * fetch question content from content */ - Iterator contentIterator=mcContent.getMcQueContents().iterator(); - while (contentIterator.hasNext()) - { - McQueContent mcQueContent=(McQueContent)contentIterator.next(); - if (mcQueContent != null) - { - int displayOrder=mcQueContent.getDisplayOrder().intValue(); - if (displayOrder != 0) - { - /* add the question to the questions Map in the displayOrder*/ - mapQuestionsContent.put(new Integer(displayOrder).toString(),mcQueContent.getQuestion()); - } - - /* prepare the first question's candidate answers for presentation*/ - if (displayOrder == 1) - { - logger.debug("first question... "); - Long uid=mcQueContent.getUid(); - logger.debug("uid : " + uid); - List listMcOptions=mcService.findMcOptionsContentByQueId(uid); - logger.debug("listMcOptions : " + listMcOptions); - Map mapOptionsContent=McUtils.generateOptionsMap(listMcOptions); - request.getSession().setAttribute(MAP_OPTIONS_CONTENT, mapOptionsContent); - logger.debug("updated Options Map: " + request.getSession().getAttribute(MAP_OPTIONS_CONTENT)); - } - } - } + mapQuestionsContent=LearningUtil.buildQuestionContentMap(request,mcContent); + logger.debug("mapQuestionsContent: " + mapQuestionsContent); request.getSession().setAttribute(MAP_QUESTION_CONTENT_LEARNER, mapQuestionsContent); logger.debug("MAP_QUESTION_CONTENT_LEARNER: " + request.getSession().getAttribute(MAP_QUESTION_CONTENT_LEARNER)); Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McStarterAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McStarterAction.java,v diff -u -r1.56 -r1.57 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McStarterAction.java 28 Jan 2006 13:07:10 -0000 1.56 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McStarterAction.java 28 Jan 2006 23:31:10 -0000 1.57 @@ -240,8 +240,53 @@ logger.debug("forwarding to: " + ERROR_LIST); return (mapping.findForward(ERROR_LIST)); } - + + /* + Preview The tool must be able to show the specified content as if it was running in a lesson. + It will be the learner url with tool access mode set to ToolAccessMode.AUTHOR + */ + String toolAccessMode= (String) request.getParameter("toolAccessMode"); + logger.debug("toolAccessMode: " + toolAccessMode); + if ((toolAccessMode != null) && (toolAccessMode.equals("Author"))) + { + logger.debug("Author requests for a preview of the content."); + + logger.debug("retrieving existing content for: " + toolContentId); + McContent mcContent=mcService.retrieveMc(new Long(toolContentId)); + logger.debug("existing mcContent:" + mcContent); + + + /* note common code here: the section below is also used in McLearneringStarterAction, might be refactored later*/ + Map mapQuestionsContent= new TreeMap(new McComparator()); + mapQuestionsContent=LearningUtil.buildQuestionContentMap(request,mcContent); + logger.debug("mapQuestionsContent: " + mapQuestionsContent); + + request.getSession().setAttribute(MAP_QUESTION_CONTENT_LEARNER, mapQuestionsContent); + logger.debug("MAP_QUESTION_CONTENT_LEARNER: " + request.getSession().getAttribute(MAP_QUESTION_CONTENT_LEARNER)); + logger.debug("mcContent has : " + mapQuestionsContent.size() + " entries."); + request.getSession().setAttribute(TOTAL_QUESTION_COUNT, new Long(mapQuestionsContent.size()).toString()); + + request.getSession().setAttribute(CURRENT_QUESTION_INDEX, "1"); + logger.debug("CURRENT_QUESTION_INDEX: " + request.getSession().getAttribute(CURRENT_QUESTION_INDEX)); + logger.debug("final Options Map for the first question: " + request.getSession().getAttribute(MAP_OPTIONS_CONTENT)); + + /*also prepare data into mapGeneralOptionsContent for combined answers view */ + Map mapGeneralOptionsContent=AuthoringUtil.generateGeneralOptionsContentMap(request, mcContent); + logger.debug("returned mapGeneralOptionsContent: " + mapGeneralOptionsContent); + request.getSession().setAttribute(MAP_GENERAL_OPTIONS_CONTENT, mapGeneralOptionsContent); + /* till here */ + + /*only allowing combined view in the preview mode. Might be improved to support sequential view as well. */ + request.getSession().setAttribute(QUESTION_LISTING_MODE, QUESTION_LISTING_MODE_COMBINED); + /* to disable the buttons on the screen*/ + request.getSession().setAttribute(PREVIEW_ONLY, new Boolean(true).toString()); + + request.getSession().setAttribute(CURRENT_QUESTION_INDEX, "1"); + McLearningAction mcLearningAction= new McLearningAction(); + return mcLearningAction.redoQuestions(request, mcAuthoringForm, mapping); + } + /* note: copyToolContent and removeToolContent code is redundant for production. * test whether the authoring level tool contract: public void copyToolContent(Long fromContentId, Long toContentId) throws ToolException; @@ -258,7 +303,6 @@ Long fromContentId=new Long(strToolContentId); logger.debug("fromContentId: " + fromContentId); - //Long toContentId=new Long(McUtils.generateId()); Long toContentId=new Long(9876); logger.debug("toContentId: " + toContentId);