Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/hibernate/McUsrAttemptDAO.java =================================================================== diff -u -r71d4ba0de556ac5712891e102bf8935fa4a01810 -rae7f0d44518e7b49d09bd544cc12bf7bce242cb3 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/hibernate/McUsrAttemptDAO.java (.../McUsrAttemptDAO.java) (revision 71d4ba0de556ac5712891e102bf8935fa4a01810) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/hibernate/McUsrAttemptDAO.java (.../McUsrAttemptDAO.java) (revision ae7f0d44518e7b49d09bd544cc12bf7bce242cb3) @@ -184,7 +184,7 @@ logger.debug("queUsrUid equal:" + queUsrUid); if (attempt.getMcQueUsr().getMcSession().getUid().toString().equals(mcSessionUid.toString())) { - logger.debug("user belong to this session:" + mcSessionUid); + logger.debug("user belongs to this session:" + mcSessionUid); if (attempt.getAttemptOrder().intValue() == attemptOrder.intValue()) userEntries.add(attempt); Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningAction.java =================================================================== diff -u -r71d4ba0de556ac5712891e102bf8935fa4a01810 -rae7f0d44518e7b49d09bd544cc12bf7bce242cb3 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningAction.java (.../McLearningAction.java) (revision 71d4ba0de556ac5712891e102bf8935fa4a01810) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McLearningAction.java (.../McLearningAction.java) (revision ae7f0d44518e7b49d09bd544cc12bf7bce242cb3) @@ -337,25 +337,26 @@ McUsrAttempt mcUsrAttempt = mcService.getAttemptWithLastAttemptOrderForUserInSession(mcQueUsr.getUid(), mcSession.getUid()); logger.debug("mcUsrAttempt with highest attempt order: " + mcUsrAttempt); String highestAttemptOrder=""; + if (mcUsrAttempt != null) { highestAttemptOrder=mcUsrAttempt.getAttemptOrder().toString(); + logger.debug("highestAttemptOrder: " + highestAttemptOrder); + List userAttempts=mcService.getAttemptsForUserOnHighestAttemptOrderInSession(mcQueUsr.getUid(), mcSession.getUid(), new Integer(highestAttemptOrder)); + logger.debug("userAttempts:" + userAttempts); + + Iterator itAttempts=userAttempts.iterator(); + while (itAttempts.hasNext()) + { + mcUsrAttempt=(McUsrAttempt)itAttempts.next(); + logger.debug("mcUsrAttempt: " + mcUsrAttempt); + mcUsrAttempt.setFinished(true); + mcService.updateMcUsrAttempt(mcUsrAttempt); + } + logger.debug("updated user records to finished"); } - logger.debug("highestAttemptOrder: " + highestAttemptOrder); - List userAttempts=mcService.getAttemptsForUserOnHighestAttemptOrderInSession(mcQueUsr.getUid(), mcSession.getUid(), new Integer(highestAttemptOrder)); - logger.debug("userAttempts:" + userAttempts); - - Iterator itAttempts=userAttempts.iterator(); - while (itAttempts.hasNext()) - { - mcUsrAttempt=(McUsrAttempt)itAttempts.next(); - logger.debug("mcUsrAttempt: " + mcUsrAttempt); - mcUsrAttempt.setFinished(true); - mcService.updateMcUsrAttempt(mcUsrAttempt); - } - logger.debug("updated user records to finished"); /* pay attention here*/ logger.debug("redirecting to the nextUrl: "+ nextUrl); Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McMonitoringStarterAction.java =================================================================== diff -u -rf931ace3d9f38ea25225bd0cd55adfdcb3dfc376 -rae7f0d44518e7b49d09bd544cc12bf7bce242cb3 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McMonitoringStarterAction.java (.../McMonitoringStarterAction.java) (revision f931ace3d9f38ea25225bd0cd55adfdcb3dfc376) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McMonitoringStarterAction.java (.../McMonitoringStarterAction.java) (revision ae7f0d44518e7b49d09bd544cc12bf7bce242cb3) @@ -348,6 +348,9 @@ request.getSession().setAttribute(LIST_MONITORED_ANSWERS_CONTAINER_DTO, listMonitoredAnswersContainerDTO); logger.debug("LIST_MONITORED_ANSWERS_CONTAINER_DTO: " + request.getSession().getAttribute(LIST_MONITORED_ANSWERS_CONTAINER_DTO)); + List listMonitoredMarksContainerDTO=MonitoringUtil.buildGroupsMarkData(request, mcContent, mcService); + request.getSession().setAttribute(LIST_MONITORED_MARKS_CONTAINER_DTO, listMonitoredMarksContainerDTO); + logger.debug("LIST_MONITORED_MARKS_CONTAINER_DTO: " + request.getSession().getAttribute(LIST_MONITORED_MARKS_CONTAINER_DTO)); /* ends here*/ /* this section is related to instructions tab. Starts here. */ Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/MonitoringUtil.java =================================================================== diff -u -r8924c33e8d628e97e7e3668ada071f38b6372c02 -rae7f0d44518e7b49d09bd544cc12bf7bce242cb3 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/MonitoringUtil.java (.../MonitoringUtil.java) (revision 8924c33e8d628e97e7e3668ada071f38b6372c02) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/MonitoringUtil.java (.../MonitoringUtil.java) (revision ae7f0d44518e7b49d09bd544cc12bf7bce242cb3) @@ -26,6 +26,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.TreeMap; import javax.servlet.http.HttpServletRequest; @@ -34,7 +35,9 @@ import org.lamsfoundation.lams.tool.mc.McAppConstants; import org.lamsfoundation.lams.tool.mc.McMonitoredAnswersDTO; import org.lamsfoundation.lams.tool.mc.McMonitoredUserDTO; +import org.lamsfoundation.lams.tool.mc.McSessionMarkDTO; import org.lamsfoundation.lams.tool.mc.McStringComparator; +import org.lamsfoundation.lams.tool.mc.McUserMarkDTO; import org.lamsfoundation.lams.tool.mc.McUtils; import org.lamsfoundation.lams.tool.mc.pojos.McContent; import org.lamsfoundation.lams.tool.mc.pojos.McQueContent; @@ -137,9 +140,192 @@ logger.debug("final listMonitoredAnswersContainerDTO:..." + listMonitoredAnswersContainerDTO); return listMonitoredAnswersContainerDTO; } + + public static List buildGroupsMarkData(HttpServletRequest request, McContent mcContent, IMcService mcService) + { + logger.debug("will be building groups mark data for content:..." + mcContent); + List listMonitoredMarksContainerDTO= new LinkedList(); + Set sessions=mcContent.getMcSessions(); + Iterator sessionsIterator=sessions.iterator(); + + while (sessionsIterator.hasNext()) + { + McSession mcSession=(McSession) sessionsIterator.next(); + logger.debug("iterating mcSession:..." + mcSession); + + McSessionMarkDTO mcSessionMarkDTO= new McSessionMarkDTO(); + mcSessionMarkDTO.setSessionId(mcSession.getMcSessionId().toString()); + mcSessionMarkDTO.setSessionName(mcSession.getSession_name().toString()); + + Set sessionUsers=mcSession.getMcQueUsers(); + Iterator usersIterator=sessionUsers.iterator(); + + LinkedList sessionUsersData= new LinkedList(); + Map mapSessionUsersData= new TreeMap(new McStringComparator()); + while (usersIterator.hasNext()) + { + McQueUsr mcQueUsr=(McQueUsr) usersIterator.next(); + logger.debug("iterating mcQueUsr:..." + mcQueUsr); + + McUserMarkDTO mcUserMarkDTO= new McUserMarkDTO(); + mcUserMarkDTO.setSessionId(mcSession.getMcSessionId().toString()); + mcUserMarkDTO.setUserName(mcQueUsr.getFullname()); + mcUserMarkDTO.setQueUsrId(mcQueUsr.getQueUsrId().toString()); + + + List listQuestions=mcService.getAllQuestionEntries(mcContent.getUid()); + logger.debug("listQuestions:..." + listQuestions); + + Iterator itListQuestions = listQuestions.iterator(); + LinkedList userMarks= new LinkedList(); + + while (itListQuestions.hasNext()) + { + McQueContent mcQueContent =(McQueContent)itListQuestions.next(); + logger.debug("mcQueContent:..." + mcQueContent); + if (mcQueContent != null) + { + String learnerMark=getLearnerMarkForQuestionInSession(mcQueContent.getUid(), mcSession.getUid(), mcQueUsr.getUid(), mcSession, mcService); + logger.debug("learnerMark for queContent uid, mcSession uid, mcUser uid:..." + mcQueContent.getUid() + "--" + mcSession.getUid() + + "--" + mcQueUsr.getUid() + "is: " + learnerMark); + + userMarks.add(learnerMark); + } + } + + logger.debug("final userMarks:..." + userMarks); + mcUserMarkDTO.setMarks(userMarks); + + String totalMark=getTotalUserMarkForQuestions(userMarks); + logger.debug("totalMark: " + totalMark); + mcUserMarkDTO.setTotalMark(totalMark); + + logger.debug("final mcUserMarkDTO:..." + mcUserMarkDTO); + sessionUsersData.add(mcUserMarkDTO); + } + logger.debug("final sessionUsersData: " + sessionUsersData); + mapSessionUsersData=convertToMcUserMarkDTOMap(sessionUsersData); + logger.debug("final mapSessionUsersData: " + mapSessionUsersData); + mcSessionMarkDTO.setUserMarks(mapSessionUsersData); + listMonitoredMarksContainerDTO.add(mcSessionMarkDTO); + } + + logger.debug("final listMonitoredMarksContainerDTO:..." + listMonitoredMarksContainerDTO); + return listMonitoredMarksContainerDTO; + } + + public static String getLearnerMarkForQuestionInSession(Long mcQueContentUid, Long mcSessionUid, Long mcQueUsrUid, McSession mcSession, IMcService mcService) + { + logger.debug("starting getLearnerMarkForQuestionInSession: mcQueContentUid" + mcQueContentUid); + logger.debug("using getLearnerMarkForQuestionInSession: mcSessionUid" + mcSessionUid); + logger.debug("using getLearnerMarkForQuestionInSession: mcQueUsrUid" + mcQueUsrUid); + + McUsrAttempt mcUsrAttempt = mcService.getAttemptWithLastAttemptOrderForUserInSession(mcQueUsrUid, mcSessionUid); + logger.debug("mcUsrAttempt with highest attempt order: " + mcUsrAttempt); + String highestAttemptOrder=""; + + List listUserAttempts=null; + if (mcUsrAttempt != null) + { + highestAttemptOrder=mcUsrAttempt.getAttemptOrder().toString(); + logger.debug("highestAttemptOrder: " + highestAttemptOrder); + listUserAttempts=mcService.getAttemptsOnHighestAttemptOrder(mcQueUsrUid,mcQueContentUid, mcSessionUid, new Integer(highestAttemptOrder)); + logger.debug("listUserAttempts: " + listUserAttempts); + } + else + { + return "0"; + } + + + Iterator itAttempts=listUserAttempts.iterator(); + + if (!mcSession.getMcContent().isRetries()) + { + logger.debug("retries is OFF."); + boolean isAttemptCorrect=false; + McUsrAttempt mcUsrAttemptUser=null; + + while (itAttempts.hasNext()) + { + mcUsrAttempt=(McUsrAttempt)itAttempts.next(); + logger.debug("mcUsrAttempt: " + mcUsrAttempt); + mcUsrAttemptUser=mcUsrAttempt; + + if (mcUsrAttempt != null) + { + if (mcUsrAttempt.isAttemptCorrect()) + { + isAttemptCorrect=true; + } + } + } + logger.debug("final isAttemptCorrect: " + isAttemptCorrect); + logger.debug("mcUsrAttemptUser: " + mcUsrAttemptUser); + logger.debug("mcUsrAttemptUser weight: " + mcUsrAttemptUser.getMcQueContent().getWeight().toString()); + + if (isAttemptCorrect) + { + return mcUsrAttemptUser.getMcQueContent().getWeight().toString(); + } + else + { + return "0"; + } + } + else + { + logger.debug("retries is ON. User had to PASS. Print the final attempt's data"); + McMonitoredUserDTO mcMonitoredUserDTO = new McMonitoredUserDTO(); + boolean isAttemptCorrect=false; + McUsrAttempt mcUsrAttemptGeneral=null; + while (itAttempts.hasNext()) + { + mcUsrAttempt=(McUsrAttempt)itAttempts.next(); + logger.debug("mcUsrAttempt: " + mcUsrAttempt); + mcUsrAttemptGeneral=mcUsrAttempt; + + if (mcUsrAttempt != null) + { + if (mcUsrAttempt.isFinished() && mcUsrAttempt.isPassed()) + { + logger.debug("this is a individual question attempt that is finished and passed: " + mcUsrAttempt); + isAttemptCorrect=mcService.getUserAttemptCorrectForQuestionContentAndSessionUid(mcQueUsrUid,mcQueContentUid, mcSession.getUid(), new Integer(highestAttemptOrder)); + logger.debug("isAttemptCorrect: " + isAttemptCorrect); + break; + } + } + } + + logger.debug("final isAttemptCorrect: " + isAttemptCorrect); + if (isAttemptCorrect) + { + return mcUsrAttemptGeneral.getMcQueContent().getWeight().toString(); + } + else + { + return "0"; + } + } + } + + public static String getTotalUserMarkForQuestions(LinkedList userMarks) + { + Iterator itAttempts=userMarks.iterator(); + int totalMark= 0; + while (itAttempts.hasNext()) + { + String mark=(String)itAttempts.next(); + int intMark= new Integer(mark).intValue(); + totalMark=totalMark + intMark; + } + return new Integer(totalMark).toString(); + } + + public static List buildSessionQuestionData(HttpServletRequest request, McContent mcContent, Long sessionId, Long userID) { logger.debug("doing buildSessionQuestionData with sessionId: " + sessionId); @@ -306,99 +492,117 @@ McUsrAttempt mcUsrAttempt = mcService.getAttemptWithLastAttemptOrderForUserInSession(mcQueUsr.getUid(), mcSession.getUid()); logger.debug("mcUsrAttempt with highest attempt order: " + mcUsrAttempt); String highestAttemptOrder=""; + + List listUserAttempts=null; + boolean attempExists=true; if (mcUsrAttempt != null) { highestAttemptOrder=mcUsrAttempt.getAttemptOrder().toString(); - } - logger.debug("highestAttemptOrder: " + highestAttemptOrder); + logger.debug("highestAttemptOrder: " + highestAttemptOrder); - List listUserAttempts=mcService.getAttemptsOnHighestAttemptOrder(mcQueUsr.getUid(), new Long(questionUid), mcSession.getUid(), new Integer(highestAttemptOrder)); - logger.debug("listUserAttempts: " + listUserAttempts); - - Iterator itAttempts=listUserAttempts.iterator(); - - if (!mcSession.getMcContent().isRetries()) - { - logger.debug("retries is OFF."); - boolean isAttemptCorrect=false; - McUsrAttempt mcUsrAttemptUser=null; - - while (itAttempts.hasNext()) - { - mcUsrAttempt=(McUsrAttempt)itAttempts.next(); - logger.debug("mcUsrAttempt: " + mcUsrAttempt); - mcUsrAttemptUser=mcUsrAttempt; - - if (mcUsrAttempt != null) - { - if (mcUsrAttempt.isAttemptCorrect()) - { - isAttemptCorrect=true; - } - } - } - logger.debug("final isAttemptCorrect: " + isAttemptCorrect); - logger.debug("mcUsrAttemptUser: " + mcUsrAttemptUser); - + listUserAttempts=mcService.getAttemptsOnHighestAttemptOrder(mcQueUsr.getUid(), new Long(questionUid), mcSession.getUid(), new Integer(highestAttemptOrder)); + logger.debug("listUserAttempts: " + listUserAttempts); + } + else + { + attempExists=false; McMonitoredUserDTO mcMonitoredUserDTO = new McMonitoredUserDTO(); mcMonitoredUserDTO.setUserName(mcQueUsr.getFullname()); mcMonitoredUserDTO.setSessionId(sessionId.toString()); mcMonitoredUserDTO.setQuestionUid(questionUid); - - if (isAttemptCorrect) - { - mcMonitoredUserDTO.setMark(mcUsrAttemptUser.getMcQueContent().getWeight().toString()); - } - else - { - mcMonitoredUserDTO.setMark("0"); - } - + mcMonitoredUserDTO.setMark("0"); logger.debug("final constructed mcMonitoredUserDTO: " + mcMonitoredUserDTO); listMonitoredUserContainerDTO.add(mcMonitoredUserDTO); - } - else - { - logger.debug("retries is ON. User had to PASS. Print the final attempt's data"); - McMonitoredUserDTO mcMonitoredUserDTO = new McMonitoredUserDTO(); - boolean isAttemptCorrect=false; - McUsrAttempt mcUsrAttemptGeneral=null; - while (itAttempts.hasNext()) - { - mcUsrAttempt=(McUsrAttempt)itAttempts.next(); - logger.debug("mcUsrAttempt: " + mcUsrAttempt); - mcUsrAttemptGeneral=mcUsrAttempt; + } + logger.debug("attempExists: " + attempExists); + + if (attempExists) + { + Iterator itAttempts=listUserAttempts.iterator(); + + if (!mcSession.getMcContent().isRetries()) + { + logger.debug("retries is OFF."); + boolean isAttemptCorrect=false; + McUsrAttempt mcUsrAttemptUser=null; + + while (itAttempts.hasNext()) + { + mcUsrAttempt=(McUsrAttempt)itAttempts.next(); + logger.debug("mcUsrAttempt: " + mcUsrAttempt); + mcUsrAttemptUser=mcUsrAttempt; - if (mcUsrAttempt != null) - { - if (mcUsrAttempt.isFinished() && mcUsrAttempt.isPassed()) + if (mcUsrAttempt != null) + { + if (mcUsrAttempt.isAttemptCorrect()) + { + isAttemptCorrect=true; + } + } + } + logger.debug("final isAttemptCorrect: " + isAttemptCorrect); + logger.debug("mcUsrAttemptUser: " + mcUsrAttemptUser); + + McMonitoredUserDTO mcMonitoredUserDTO = new McMonitoredUserDTO(); + mcMonitoredUserDTO.setUserName(mcQueUsr.getFullname()); + mcMonitoredUserDTO.setSessionId(sessionId.toString()); + mcMonitoredUserDTO.setQuestionUid(questionUid); + + if (isAttemptCorrect) + { + mcMonitoredUserDTO.setMark(mcUsrAttemptUser.getMcQueContent().getWeight().toString()); + } + else + { + mcMonitoredUserDTO.setMark("0"); + } + + logger.debug("final constructed mcMonitoredUserDTO: " + mcMonitoredUserDTO); + listMonitoredUserContainerDTO.add(mcMonitoredUserDTO); + } + else + { + logger.debug("retries is ON. User had to PASS. Print the final attempt's data"); + McMonitoredUserDTO mcMonitoredUserDTO = new McMonitoredUserDTO(); + boolean isAttemptCorrect=false; + McUsrAttempt mcUsrAttemptGeneral=null; + while (itAttempts.hasNext()) + { + mcUsrAttempt=(McUsrAttempt)itAttempts.next(); + logger.debug("mcUsrAttempt: " + mcUsrAttempt); + mcUsrAttemptGeneral=mcUsrAttempt; + + if (mcUsrAttempt != null) { - logger.debug("this is a individual question attempt that is finished and passed: " + mcUsrAttempt); - isAttemptCorrect=mcService.getUserAttemptCorrectForQuestionContentAndSessionUid(mcQueUsr.getUid(), new Long(questionUid), mcSession.getUid(), new Integer(highestAttemptOrder)); - logger.debug("isAttemptCorrect: " + isAttemptCorrect); - break; + if (mcUsrAttempt.isFinished() && mcUsrAttempt.isPassed()) + { + logger.debug("this is a individual question attempt that is finished and passed: " + mcUsrAttempt); + isAttemptCorrect=mcService.getUserAttemptCorrectForQuestionContentAndSessionUid(mcQueUsr.getUid(), new Long(questionUid), mcSession.getUid(), new Integer(highestAttemptOrder)); + logger.debug("isAttemptCorrect: " + isAttemptCorrect); + break; + } } - } - } + } - logger.debug("final isAttemptCorrect: " + isAttemptCorrect); - if (isAttemptCorrect) - { - mcMonitoredUserDTO.setMark(mcUsrAttemptGeneral.getMcQueContent().getWeight().toString()); - } - else - { - mcMonitoredUserDTO.setMark("0"); - } + logger.debug("final isAttemptCorrect: " + isAttemptCorrect); + if (isAttemptCorrect) + { + mcMonitoredUserDTO.setMark(mcUsrAttemptGeneral.getMcQueContent().getWeight().toString()); + } + else + { + mcMonitoredUserDTO.setMark("0"); + } - mcMonitoredUserDTO.setUserName(mcQueUsr.getFullname()); - mcMonitoredUserDTO.setSessionId(sessionId.toString()); - mcMonitoredUserDTO.setQuestionUid(questionUid); - - logger.debug("final constructed mcMonitoredUserDTO: " + mcMonitoredUserDTO); - listMonitoredUserContainerDTO.add(mcMonitoredUserDTO); - - } + mcMonitoredUserDTO.setUserName(mcQueUsr.getFullname()); + mcMonitoredUserDTO.setSessionId(sessionId.toString()); + mcMonitoredUserDTO.setQuestionUid(questionUid); + + logger.debug("final constructed mcMonitoredUserDTO: " + mcMonitoredUserDTO); + listMonitoredUserContainerDTO.add(mcMonitoredUserDTO); + + } + } } } logger.debug("final listMonitoredUserContainerDTO: " + listMonitoredUserContainerDTO); @@ -528,6 +732,24 @@ } + public static Map convertToMcUserMarkDTOMap(List list) + { + logger.debug("using McUserMarkDTOMap: " + list); + Map map= new TreeMap(new McStringComparator()); + + Iterator listIterator=list.iterator(); + Long mapIndex=new Long(1); + + while (listIterator.hasNext()) + { + McUserMarkDTO data=(McUserMarkDTO)listIterator.next(); + map.put(mapIndex.toString(), data); + mapIndex=new Long(mapIndex.longValue()+1); + } + return map; + } + + public static Map convertToMcMonitoredUserDTOMap(List list) { logger.debug("using convertToMcMonitoredUserDTOMap: " + list); Index: lams_tool_lamc/web/monitoring/Summary.jsp =================================================================== diff -u -r8924c33e8d628e97e7e3668ada071f38b6372c02 -rae7f0d44518e7b49d09bd544cc12bf7bce242cb3 --- lams_tool_lamc/web/monitoring/Summary.jsp (.../Summary.jsp) (revision 8924c33e8d628e97e7e3668ada071f38b6372c02) +++ lams_tool_lamc/web/monitoring/Summary.jsp (.../Summary.jsp) (revision ae7f0d44518e7b49d09bd544cc12bf7bce242cb3) @@ -92,17 +92,18 @@ - + +     - + : -   ( - ) +   ( + ) @@ -115,7 +116,7 @@ -   ( ) +   () @@ -133,89 +134,88 @@ - +

+ + - - - + + + - - - - + + + + + + + + + + - - - - - - - - - - - - + - - - - - - + + + + + + + + + + + + + + + + + + + +
- -
   
+   ( + ) + +
- -   ( - ) -
- - - - - + + + + + + + + + + + + + + + + + -
-                  - -
+ + + + + + + +
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- ( ) - -
+ + + + + + + +