Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/QaAppConstants.java
===================================================================
diff -u -rdba99aacc32e5b7a5bbc7ab302f7a5a488e3c680 -rbb041188ecb180ae9cd8e01428c8f431aa89bd93
--- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/QaAppConstants.java (.../QaAppConstants.java) (revision dba99aacc32e5b7a5bbc7ab302f7a5a488e3c680)
+++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/QaAppConstants.java (.../QaAppConstants.java) (revision bb041188ecb180ae9cd8e01428c8f431aa89bd93)
@@ -73,15 +73,14 @@
public static final String IS_ADD_QUESTION ="isAddQuestion";
public static final String IS_REMOVE_QUESTION ="isRemoveQuestion";
public static final String IS_REMOVE_CONTENT ="isRemoveContent";
-
+
/*
* tab controllers, constants for authoring page html tabs, used within jsp
*/
public static final String CHOICE ="choice";
public static final String CHOICE_TYPE_BASIC ="choiceTypeBasic";
public static final String CHOICE_TYPE_ADVANCED ="choiceTypeAdvanced";
public static final String CHOICE_TYPE_INSTRUCTIONS ="choiceTypeInstructions";
-
/*
* authoring mode constants
@@ -138,7 +137,15 @@
public static final String USER_EXCEPTION_MONITORINGTAB_CONTENTID_REQUIRED ="userExceptionMonitoringTabContentIdRequired";
public static final String USER_EXCEPTION_DEFAULTCONTENT_NOTSETUP ="userExceptionDefaultContentNotSetup";
public static final String USER_EXCEPTION_NO_TOOL_SESSIONS ="userExceptionNoToolSessions";
+ public static final String USER_EXCEPTION_NO_STUDENT_ACTIVITY ="userExceptionNoStudentActivity";
+ public static final String COUNT_SESSION_COMPLETE ="countSessionComplete";
+ public static final String TOP_MARK ="topMark";
+ public static final String LOWEST_MARK ="lowestMark";
+ public static final String AVERAGE_MARK ="averageMark";
+ public static final String COUNT_ALL_USERS ="countAllUsers";
+ public static final String CURRENT_MONITORING_TAB ="currentMonitoringTab";
+
/*
* export portfolio constants
*/
Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/QaQueUsr.java
===================================================================
diff -u -rf2b7c28c53bfee9c676b5a836e42b71e0e1bf20f -rbb041188ecb180ae9cd8e01428c8f431aa89bd93
--- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/QaQueUsr.java (.../QaQueUsr.java) (revision f2b7c28c53bfee9c676b5a836e42b71e0e1bf20f)
+++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/QaQueUsr.java (.../QaQueUsr.java) (revision bb041188ecb180ae9cd8e01428c8f431aa89bd93)
@@ -76,6 +76,8 @@
/** persistent field */
private Set qaUsrResps;
+
+ public QaQueUsr(){};
/** full constructor */
public QaQueUsr(Long queUsrId,
Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/QaResources.properties
===================================================================
diff -u -rdba99aacc32e5b7a5bbc7ab302f7a5a488e3c680 -rbb041188ecb180ae9cd8e01428c8f431aa89bd93
--- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/QaResources.properties (.../QaResources.properties) (revision dba99aacc32e5b7a5bbc7ab302f7a5a488e3c680)
+++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/QaResources.properties (.../QaResources.properties) (revision bb041188ecb180ae9cd8e01428c8f431aa89bd93)
@@ -1,12 +1,17 @@
# Project lams_tool_qa
#Authoring mode resources
label.authoring =Q/A Authoring
+label.monitoring =Q/A Monitoring
label.authoring.qa =Questions and Answers
label.basic =Basic
label.advanced =Advanced
label.instructions =Instructions
label.authoring.title =Title
label.authoring.instructions =Instructions
+label.summary =Summary
+label.instructions =Instructions
+label.editActivity =Edit Activity
+label.stats =Stats
label.authoring.qa.basic =Please define the questions.
label.advanced.definitions =Advanced Definitions
label.authoring.instructions =Instructions
@@ -105,12 +110,19 @@
error.mode.required =Tool Activity Error! Can't continue
URL is not complete. The Tool Activity requires a mode.
error.toolSession.notAvailable =Tool Activity Error! Can't continue. Tool session is not ready in the tool's database yet.
Please verify the API method: public void createToolSession(Long toolSessionId, Long toolContentId) has already been executed.
error.learningUser.notAvailable =Tool Activity Error! Can't continue. Tool Activity expects a user id.
+error.noLearnerActivity =Summary report is not available since no users attempted the activity yet.
#Monitoring mode resources
button.startLesson =Start Lesson
button.deleteLesson =Delete Lesson
button.contributeLesson =Contribute -> Report
button.forceComplete =Force Complete
+count.total.user =Total User Count:
+count.finished.user =Finished User Count:
+label.topMark =Top Mark:
+label.avMark =Average Mark:
+label.loMark =Lowest Mark:
+count.max.attempt =Maximum Attempt Count:
error.synchInMonitor =The report is available only after all the students finish their activities.
Some of the students has not completed the activity yet. However, those students may be forced to complete.
error.monitorReportTitle =The field "Monitor Report Title (Advanced)" is mandatory.
Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/QaUtils.java
===================================================================
diff -u -rf2b7c28c53bfee9c676b5a836e42b71e0e1bf20f -rbb041188ecb180ae9cd8e01428c8f431aa89bd93
--- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/QaUtils.java (.../QaUtils.java) (revision f2b7c28c53bfee9c676b5a836e42b71e0e1bf20f)
+++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/QaUtils.java (.../QaUtils.java) (revision bb041188ecb180ae9cd8e01428c8f431aa89bd93)
@@ -27,8 +27,10 @@
import java.util.Date;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.Random;
import java.util.TimeZone;
+import java.util.TreeMap;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@@ -469,4 +471,40 @@
logger.debug("is run offline: " + qaContent.isRunOffline());
return qaContent.isRunOffline();
}
+
+ /**
+ * builds a String based map from a list
+ * convertToMap(List sessionsList)
+ *
+ * @param sessionsList
+ * @return Map
+ */
+ public static Map convertToStringMap(List sessionsList, String listType)
+ {
+ Map map= new TreeMap(new QaComparator());
+ logger.debug("listType: " + listType);
+
+ Iterator listIterator=sessionsList.iterator();
+ Long mapIndex=new Long(1);
+
+
+ while (listIterator.hasNext())
+ {
+ if (listType.equals("String"))
+ {
+ logger.debug("listType String");
+ String text=(String)listIterator.next();
+ map.put(mapIndex.toString(), text);
+ }
+ else if (listType.equals("Long"))
+ {
+ logger.debug("listType Long");
+ Long LongValue=(Long)listIterator.next();
+ map.put(mapIndex.toString(), LongValue.toString());
+ }
+ mapIndex=new Long(mapIndex.longValue()+1);
+ }
+ return map;
+ }
+
}
Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/IQaQueUsrDAO.java
===================================================================
diff -u -rf2b7c28c53bfee9c676b5a836e42b71e0e1bf20f -rbb041188ecb180ae9cd8e01428c8f431aa89bd93
--- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/IQaQueUsrDAO.java (.../IQaQueUsrDAO.java) (revision f2b7c28c53bfee9c676b5a836e42b71e0e1bf20f)
+++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/IQaQueUsrDAO.java (.../IQaQueUsrDAO.java) (revision bb041188ecb180ae9cd8e01428c8f431aa89bd93)
@@ -43,4 +43,6 @@
public void deleteQaQueUsr(QaQueUsr qaQueUsr);
public int countSessionUser(QaSession qaSession);
+
+ public int getTotalNumberOfUsers();
}
Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/IQaSessionDAO.java
===================================================================
diff -u -rf2b7c28c53bfee9c676b5a836e42b71e0e1bf20f -rbb041188ecb180ae9cd8e01428c8f431aa89bd93
--- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/IQaSessionDAO.java (.../IQaSessionDAO.java) (revision f2b7c28c53bfee9c676b5a836e42b71e0e1bf20f)
+++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/IQaSessionDAO.java (.../IQaSessionDAO.java) (revision bb041188ecb180ae9cd8e01428c8f431aa89bd93)
@@ -34,8 +34,10 @@
*/
public interface IQaSessionDAO
{
- public int countIncompleteSession(QaContent qa);
-
+ public int countSessionIncomplete();
+
+ public int countSessionComplete();
+
public QaSession getQaSessionById(long qaSessionId);
public List getToolSessionsForContent(QaContent qa);
@@ -49,6 +51,8 @@
public void UpdateQaSession(QaSession session);
public void deleteQaSession(QaSession session);
+
+ public List getSessionsFromContent(QaContent qaContent);
}
Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/hibernate/QaQueUsrDAO.java
===================================================================
diff -u -rf2b7c28c53bfee9c676b5a836e42b71e0e1bf20f -rbb041188ecb180ae9cd8e01428c8f431aa89bd93
--- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/hibernate/QaQueUsrDAO.java (.../QaQueUsrDAO.java) (revision f2b7c28c53bfee9c676b5a836e42b71e0e1bf20f)
+++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/hibernate/QaQueUsrDAO.java (.../QaQueUsrDAO.java) (revision bb041188ecb180ae9cd8e01428c8f431aa89bd93)
@@ -95,5 +95,8 @@
this.getHibernateTemplate().delete(qaQueUsr);
}
-
+ public int getTotalNumberOfUsers() {
+ String query="from obj in class QaQueUsr";
+ return this.getHibernateTemplate().find(query).size();
+ }
}
\ No newline at end of file
Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/hibernate/QaSessionDAO.java
===================================================================
diff -u -rf2b7c28c53bfee9c676b5a836e42b71e0e1bf20f -rbb041188ecb180ae9cd8e01428c8f431aa89bd93
--- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/hibernate/QaSessionDAO.java (.../QaSessionDAO.java) (revision f2b7c28c53bfee9c676b5a836e42b71e0e1bf20f)
+++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/hibernate/QaSessionDAO.java (.../QaSessionDAO.java) (revision bb041188ecb180ae9cd8e01428c8f431aa89bd93)
@@ -42,14 +42,34 @@
private static final String COUNT_SESSION_INCOMPLITE = "select qaSession.session_status from QaSession qaSession where qaSession.session_status='INCOMPLETE' and qaSession.qaContentId = :qa";
private static final String COUNT_SESSION_ACTIVITY = "select qaSession.session_status from QaSession qaSession where qaSession.qaContentId = :qa";
private static final String GET_SESSION_IDS_FOR_CONTENT = "select qaSession.qaSessionId from QaSession qaSession where qaSession.qaContentId = :qa";
-
-
- public int countIncompleteSession(QaContent qa)
+ private static final String COUNT_SESSION_COMPLETE = "from qaSession in class QaSession where qaSession.session_status='COMPLETE'";
+ private static final String COUNT_SESSION_INCOMPLETE = "from qaSession in class QaSession where qaSession.session_status='INCOMPLETE'";
+ private static final String GET_SESSIONS_FROM_CONTENT = "select qas.qaSessionId from QaSession qas where qas.qaContent=:qaContent";
+
+ public int countSessionComplete()
{
- return (getHibernateTemplate().findByNamedParam(COUNT_SESSION_INCOMPLITE,
- "qa",
- qa)).size();
- }
+ HibernateTemplate templ = this.getHibernateTemplate();
+ List list = getSession().createQuery(COUNT_SESSION_COMPLETE)
+ .list();
+
+ if(list != null && list.size() > 0){
+ return list.size();
+ }
+ else return 0;
+ }
+
+ public int countSessionIncomplete()
+ {
+ HibernateTemplate templ = this.getHibernateTemplate();
+ List list = getSession().createQuery(COUNT_SESSION_INCOMPLETE)
+ .list();
+
+ if(list != null && list.size() > 0){
+ return list.size();
+ }
+ else return 0;
+ }
+
public int studentActivityOccurred(QaContent qa)
{
@@ -118,5 +138,11 @@
this.getSession().setFlushMode(FlushMode.AUTO);
this.getHibernateTemplate().delete(qaSession);
}
-
+
+ public List getSessionsFromContent(QaContent qaContent)
+ {
+ return (getHibernateTemplate().findByNamedParam(GET_SESSIONS_FROM_CONTENT,
+ "qaContent",
+ qaContent));
+ }
}
Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/IQaService.java
===================================================================
diff -u -rf2b7c28c53bfee9c676b5a836e42b71e0e1bf20f -rbb041188ecb180ae9cd8e01428c8f431aa89bd93
--- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/IQaService.java (.../IQaService.java) (revision f2b7c28c53bfee9c676b5a836e42b71e0e1bf20f)
+++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/IQaService.java (.../IQaService.java) (revision bb041188ecb180ae9cd8e01428c8f431aa89bd93)
@@ -66,7 +66,11 @@
public QaContent getQaContentByUID(Long uid);
+ public int getTotalNumberOfUsers();
+ public int countSessionComplete();
+
+
/**
* Return the question content object according to the requested question content id.
* @param qaQueContentId qa question content id
@@ -98,6 +102,8 @@
public void removeToolSession(Long toolSessionId) throws DataMissingException, ToolException;
+ public List getSessionsFromContent(QaContent qaContent);
+
public void createQaQueUsr(QaQueUsr qaQueUsr);
public void updateQaSession(QaSession qaSession);
Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java
===================================================================
diff -u -rdba99aacc32e5b7a5bbc7ab302f7a5a488e3c680 -rbb041188ecb180ae9cd8e01428c8f431aa89bd93
--- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java (.../QaServicePOJO.java) (revision dba99aacc32e5b7a5bbc7ab302f7a5a488e3c680)
+++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java (.../QaServicePOJO.java) (revision bb041188ecb180ae9cd8e01428c8f431aa89bd93)
@@ -232,6 +232,20 @@
e);
}
}
+
+ public List getSessionsFromContent(QaContent qaContent) throws QaApplicationException
+ {
+ try
+ {
+ return qaSessionDAO.getSessionsFromContent(qaContent);
+ }
+ catch (DataAccessException e)
+ {
+ throw new QaApplicationException("Exception occured when lams is getting"
+ + " the qa sessions list: "
+ + e.getMessage(),e);
+ }
+ }
public void createQaQueUsr(QaQueUsr qaQueUsr) throws QaApplicationException
{
@@ -326,6 +340,19 @@
}
}
+ public int countSessionComplete() throws QaApplicationException
+ {
+ try
+ {
+ return qaSessionDAO.countSessionComplete();
+ }
+ catch(DataAccessException e)
+ {
+ throw new QaApplicationException("Exception occured when lams is counting complete sessions"
+ + e.getMessage(),e);
+ }
+ }
+
public QaQueContent retrieveQaQue(long qaQueContentId) throws QaApplicationException
@@ -526,7 +553,22 @@
e);
}
}
-
+
+ public int getTotalNumberOfUsers() throws QaApplicationException
+ {
+ try
+ {
+ return qaQueUsrDAO.getTotalNumberOfUsers();
+ }
+ catch (DataAccessException e)
+ {
+ throw new QaApplicationException("Exception occured when lams is retrieving total number of QaQueUsr: "
+ + e.getMessage(),
+ e);
+ }
+
+ }
+
public int countTotalNumberOfUserResponsed(QaContent qa) throws QaApplicationException
{
try
@@ -681,7 +723,7 @@
{
logger.debug("start of countIncompleteSession: " + qa);
logger.debug("qaContentId: " + qa.getQaContentId());
- int countIncompleteSession=qaSessionDAO.countIncompleteSession(qa);
+ int countIncompleteSession=qaSessionDAO.countSessionIncomplete();
logger.debug("countIncompleteSession: " + countIncompleteSession);
return countIncompleteSession;
}
Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/LearningUtil.java
===================================================================
diff -u -rf2b7c28c53bfee9c676b5a836e42b71e0e1bf20f -rbb041188ecb180ae9cd8e01428c8f431aa89bd93
--- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/LearningUtil.java (.../LearningUtil.java) (revision f2b7c28c53bfee9c676b5a836e42b71e0e1bf20f)
+++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/LearningUtil.java (.../LearningUtil.java) (revision bb041188ecb180ae9cd8e01428c8f431aa89bd93)
@@ -516,4 +516,5 @@
qaService.updateQa(qaContent);
logger.debug("content with id : " + toolContentId + "has been marked LOCKED and updated in the db");
}
+
}
Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/MonitoringUtil.java
===================================================================
diff -u -rf2b7c28c53bfee9c676b5a836e42b71e0e1bf20f -rbb041188ecb180ae9cd8e01428c8f431aa89bd93
--- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/MonitoringUtil.java (.../MonitoringUtil.java) (revision f2b7c28c53bfee9c676b5a836e42b71e0e1bf20f)
+++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/MonitoringUtil.java (.../MonitoringUtil.java) (revision bb041188ecb180ae9cd8e01428c8f431aa89bd93)
@@ -22,6 +22,8 @@
package org.lamsfoundation.lams.tool.qa.web;
import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
import javax.servlet.http.HttpServletRequest;
@@ -31,6 +33,7 @@
import org.lamsfoundation.lams.tool.qa.QaContent;
import org.lamsfoundation.lams.tool.qa.QaSession;
import org.lamsfoundation.lams.tool.qa.QaUsrResp;
+import org.lamsfoundation.lams.tool.qa.QaUtils;
import org.lamsfoundation.lams.tool.qa.service.IQaService;
import org.lamsfoundation.lams.web.util.AttributeNames;
@@ -218,4 +221,37 @@
qaService.updateQaUsrResp(qaUsrResp);
logger.debug("updated user response in the db: " + qaUsrResp);
}
+
+
+ /**
+ * populates all the tool sessions in a map
+ * populateToolSessions(HttpServletRequest request, McContent mcContent)
+ *
+ * @param request
+ * @param mcContent
+ * @return Map
+ */
+ public static Map populateToolSessions(HttpServletRequest request, QaContent qaContent, IQaService qaService)
+ {
+ List sessionsList=qaService.getSessionsFromContent(qaContent);
+ logger.debug("sessionsList size is:..." + sessionsList.size());
+
+ Map sessionsMap=QaUtils.convertToStringMap(sessionsList, "Long");
+ logger.debug("generated sessionsMap:..." + sessionsMap);
+ logger.debug("sessionsMap size:..." + sessionsMap.size());
+
+ if (sessionsMap.isEmpty())
+ {
+ logger.debug("sessionsMap size is 0:");
+ sessionsMap.put(new Long(1).toString() , "None");
+ }
+ else
+ {
+ logger.debug("sessionsMap has some entries: " + sessionsMap.size());
+ sessionsMap.put(new Long(sessionsMap.size()+ 1).toString() , "All");
+ }
+
+ logger.debug("final sessionsMap:" + sessionsMap);
+ return sessionsMap;
+ }
}
Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaMonitoringAction.java
===================================================================
diff -u -rf2b7c28c53bfee9c676b5a836e42b71e0e1bf20f -rbb041188ecb180ae9cd8e01428c8f431aa89bd93
--- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaMonitoringAction.java (.../QaMonitoringAction.java) (revision f2b7c28c53bfee9c676b5a836e42b71e0e1bf20f)
+++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaMonitoringAction.java (.../QaMonitoringAction.java) (revision bb041188ecb180ae9cd8e01428c8f431aa89bd93)
@@ -26,15 +26,11 @@
package org.lamsfoundation.lams.tool.qa.web;
import java.io.IOException;
-import java.util.Iterator;
-import java.util.List;
import java.util.Map;
-import java.util.TreeMap;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
import org.apache.log4j.Logger;
import org.apache.struts.Globals;
@@ -43,19 +39,12 @@
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
-import org.lamsfoundation.lams.web.action.LamsDispatchAction;
import org.lamsfoundation.lams.tool.exception.ToolException;
import org.lamsfoundation.lams.tool.qa.QaAppConstants;
-import org.lamsfoundation.lams.tool.qa.QaApplicationException;
import org.lamsfoundation.lams.tool.qa.QaContent;
-import org.lamsfoundation.lams.tool.qa.QaSession;
-import org.lamsfoundation.lams.tool.qa.QaStringComparator;
-import org.lamsfoundation.lams.tool.qa.QaUtils;
import org.lamsfoundation.lams.tool.qa.service.IQaService;
import org.lamsfoundation.lams.tool.qa.service.QaServiceProxy;
-import org.lamsfoundation.lams.usermanagement.dto.UserDTO;
-import org.lamsfoundation.lams.util.WebUtil;
-import org.lamsfoundation.lams.web.session.SessionManager;
+import org.lamsfoundation.lams.web.action.LamsDispatchAction;
import org.lamsfoundation.lams.web.util.AttributeNames;
@@ -68,753 +57,118 @@
public ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException, ToolException{
-
- QaMonitoringForm qaMonitoringForm = (QaMonitoringForm) form;
-
- IQaService qaService = QaServiceProxy.getQaService(getServlet().getServletContext());
-
- /*
- * persist time zone information to session scope.
- */
- QaUtils.persistTimeZone(request);
-
- /*
- * mark the http session as an authoring activity
- */
- request.getSession().setAttribute(TARGET_MODE,TARGET_MODE_MONITORING);
-
- /*
- * obtain and setup the current user's data
- */
- String userId = "";
- /* get session from shared session. */
- HttpSession ss = SessionManager.getSession();
- /* get back login user DTO */
- UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER);
- if ((user == null) || (user.getUserID() == null))
- {
- logger.debug("error: The tool expects userId");
- persistError(request,"error.authoringUser.notAvailable");
- request.setAttribute(USER_EXCEPTION_USERID_NOTAVAILABLE, new Boolean(true));
- return (mapping.findForward(LOAD_QUESTIONS));
- }else
- userId = user.getUserID().toString();
-
- logger.debug("TOOL_USER is:" + user);
-
- Long toolContentId = new Long(WebUtil.readLongParam(request,AttributeNames.PARAM_TOOL_CONTENT_ID));
- logger.debug("TOOL_CONTENT_ID: " + toolContentId);
- qaMonitoringForm.setToolContentID(toolContentId);
-
- try
- {
- if ((toolContentId != null) && (toolContentId.longValue() != 0))
- {
- if (!QaUtils.existsContent(toolContentId.longValue(), qaService))
- {
- persistError(request,"error.content.doesNotExist");
- request.setAttribute(USER_EXCEPTION_CONTENT_DOESNOTEXIST, new Boolean(true));
- logger.debug("forwarding to: " + MONITORING_ERROR);
- return (mapping.findForward(MONITORING_REPORT));
- }
- }
- }
- catch(NumberFormatException e)
- {
- persistError(request,"error.numberFormatException");
- request.setAttribute(USER_EXCEPTION_NUMBERFORMAT, new Boolean(true));
- logger.debug("forwarding to: " + MONITORING_ERROR);
- return (mapping.findForward(MONITORING_REPORT));
- }
-
-
- /*
- * find out if only content id but no tool sessions has been passed
- * since with the updated tool contract only userId+toolContentId is passed
- * this will always return true
- */
-
- boolean isOnlyContentIdAvailable = isOnlyContentIdAvailable(request);
- logger.debug("final isOnlyContentIdAvailable: " + isOnlyContentIdAvailable);
-
- request.getSession().setAttribute(NO_TOOL_SESSIONS_AVAILABLE, new Boolean(false));
- if (isOnlyContentIdAvailable == false)
- {
- /*
- * this block of code will normally never run!
- */
- logger.debug("Warning! We are not supposed to reach here!");
- }
- else
- {
- logger.debug("isOnlyContentIdAvailable: " + isOnlyContentIdAvailable);
- logger.debug("no tool sessions passed and they will be populated from toolContentId.");
- qaMonitoringForm.resetUserAction();
- logger.debug("getting qaContent for toolContentId: " + toolContentId);
- QaContent qaContent=qaService.loadQa(toolContentId.longValue());
- logger.debug("retrieved qaContent: " + qaContent);
- List listToolSessionIds=qaService.getToolSessionsForContent(qaContent);
- logger.debug("retrieved listToolSessionIds: " + listToolSessionIds);
-
- Map originalSessionList= new TreeMap(new QaStringComparator());
- Iterator sessionIdsIterator=listToolSessionIds.iterator();
- int sessionIdCounter=1;
- while (sessionIdsIterator.hasNext())
- {
- Long derivedToolSessionId=(Long) sessionIdsIterator.next();
- logger.debug("derivedToolSessionId: " + derivedToolSessionId);
- originalSessionList.put(new Integer(sessionIdCounter).toString(), derivedToolSessionId.toString());
- sessionIdCounter++;
- }
- logger.debug("constructed originalSessionList: " + originalSessionList);
-
- if (originalSessionList.size() == 0)
- request.getSession().setAttribute(NO_TOOL_SESSIONS_AVAILABLE, new Boolean(true));
- else
- request.getSession().setAttribute(ORIGINAL_TOOL_SESSIONS,originalSessionList);
-
- qaMonitoringForm.setSummary("summary");
- }
-
- String strFromToolContentId="";
- String strToToolContentId="";
-
- /*
- * simulate Monitoring Service bean by calling the interface methods here
- */
- if (qaMonitoringForm.getStartLesson() != null)
- {
- qaMonitoringForm.resetUserAction();
- /*
- * In deployment, we won't be passing FROM_TOOL_CONTENT_ID, TO_TOOL_CONTENT_ID and TOOL_SESSION_ID from url
- * the Monitoring Service bean calls:
- * copyToolContent(Long fromContentId, Long toContentId)
- */
- strFromToolContentId=request.getParameter(FROM_TOOL_CONTENT_ID);
- logger.debug("FROM_TOOL_CONTENT_ID: " + strFromToolContentId);
-
- strToToolContentId=request.getParameter(TO_TOOL_CONTENT_ID);
- logger.debug("TO_TOOL_CONTENT_ID: " + strToToolContentId);
- try
- {
- qaService.copyToolContent(new Long(strFromToolContentId), new Long(strToToolContentId));
- }
- catch(ToolException e)
- {
- logger.debug("exception copying content.");
- throw e;
- }
- logger.debug("test successfull: copyToolContent.");
-
- /*
- * calls to these two methods will be made from Monitoring Service bean optionally depending on
- * the the tool is setup for DefineLater and (or) RunOffline
- */
-
- /*
- * TESTED to work
- * qaService.setAsDefineLater(new Long(strToToolContentId));
- qaService.setAsRunOffline(new Long(strToToolContentId));
- *
- */
- }
- else if (qaMonitoringForm.getDeleteLesson() != null)
- {
- qaMonitoringForm.resetUserAction();
- /*
- * TESTED to work
- */
- strToToolContentId=request.getParameter(TO_TOOL_CONTENT_ID);
- logger.debug("TO_TOOL_CONTENT_ID: " + strToToolContentId);
- if (strToToolContentId == null)
- {
- throw new QaApplicationException("Exception occured: " +
- "Tool expects a legitimate TO_TOOL_CONTENT_ID from the container. Can't continue!");
- }
- qaService.removeToolContent(new Long(strToToolContentId));
- }
- /*
- *forceComplete is an API call to service bean from monitoring environment with userId as the parameter
- */
- else if (qaMonitoringForm.getForceComplete() != null)
- {
- /*
- * Parameter: userId
- */
- qaMonitoringForm.resetUserAction();
- logger.debug("request for forceComplete");
- userId=request.getParameter(MONITOR_USER_ID);
- logger.debug("MONITOR_USER_ID: " + userId);
- qaService.setAsForceComplete(new Long(userId));
- logger.debug("end of setAsForceComplete with userId: " + userId);
- }
- /*
- * summary tab is one of the main tabs in monitoring screen, summary is the default tab
- */
- else if (qaMonitoringForm.getSummary() != null)
- {
- qaMonitoringForm.resetUserAction();
- logger.debug("do generateToolSessionDataMap");
-// QaMonitoringAction qaMonitoringAction= new QaMonitoringAction();
- return showSummary(mapping, form, request, response);
- }
- else if (qaMonitoringForm.getInstructions() != null)
- {
- qaMonitoringForm.resetUserAction();
- logger.debug("request for instructions");
- }
- else if (qaMonitoringForm.getEditActivity() != null)
- {
- qaMonitoringForm.resetUserAction();
- logger.debug("request for editActivity");
- }
- else if (qaMonitoringForm.getStats() != null)
- {
- qaMonitoringForm.resetUserAction();
- logger.debug("request for stats");
- }
- return null;
+ logger.debug("dispatching unspecified...");
+ return null;
}
+
- public ActionForward showStats(ActionMapping mapping,
+ /**
+ * switches to Stats tab of the Monitoring url
+ * getStats(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
- HttpServletResponse response) throws IOException, ServletException
- {
- QaMonitoringForm qaMonitoringForm = (QaMonitoringForm) form;
- Boolean noToolSessionsAvailable=(Boolean)request.getSession().getAttribute(NO_TOOL_SESSIONS_AVAILABLE);
- if ((noToolSessionsAvailable !=null) && (noToolSessionsAvailable.booleanValue()))
- {
- qaMonitoringForm.resetUserAction();
- logger.debug("detected noToolSessionsAvailable:" + noToolSessionsAvailable);
- persistError(request,"error.content.noToolSessions");
- request.setAttribute(USER_EXCEPTION_ONLYCONTENT_ANDNOSESSIONS, new Boolean(true));
- logger.debug("forwarding to: " + MONITORING_REPORT);
- return (mapping.findForward(MONITORING_REPORT));
- }
-
- IQaService qaService = QaServiceProxy.getQaService(getServlet().getServletContext());
- logger.debug("retrieving qaService: " + qaService);
-
- Map mapStats= new TreeMap(new QaStringComparator());
- request.getSession().setAttribute(MAP_STATS,mapStats);
-
- Map sessionList=(Map)request.getSession().getAttribute(SUMMARY_TOOL_SESSIONS);
- for (int toolSessionIdCounter=1; toolSessionIdCounter < READABLE_TOOL_SESSION_COUNT.intValue(); toolSessionIdCounter++)
- {
- String strToolSessionId=(String)sessionList.get("Group" + toolSessionIdCounter);
- logger.debug("strToolSessionId from http session: " + strToolSessionId);
- if ((strToolSessionId != null) && (strToolSessionId.length() > 0))
- {
- QaSession qaSession=qaService.retrieveQaSessionOrNullById(new Long(strToolSessionId).longValue());
- logger.debug("retrieving qaSession: " + qaSession);
- if (qaSession != null)
- {
- logger.debug("retrieving qaSession: " + qaSession);
- int countSessionUser=qaService.countSessionUser(qaSession);
- logger.debug("countSessionUser: " + countSessionUser);
- mapStats.put(strToolSessionId, new Integer(countSessionUser).toString());
- request.getSession().setAttribute(MAP_STATS,mapStats);
- }
-
- }
- }
- mapStats=(Map)request.getSession().getAttribute(MAP_STATS);
- logger.debug("final MAP_STATS: " + mapStats);
- qaMonitoringForm.resetUserAction();
-
- request.getSession().setAttribute(CHOICE_MONITORING, CHOICE_TYPE_MONITORING_STATS);
- return (mapping.findForward(MONITORING_REPORT));
- }
-
- public ActionForward showEditActivity(ActionMapping mapping,
+ HttpServletResponse response) throws IOException,
+ ServletException
+ *
+ * @param mapping
+ * @param form
+ * @param request
+ * @param response
+ * @return
+ * @throws IOException
+ * @throws ServletException
+ */
+ public ActionForward getStats(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
- HttpServletResponse response) throws IOException, ServletException
- {
- QaMonitoringForm qaMonitoringForm = (QaMonitoringForm) form;
- IQaService qaService = QaServiceProxy.getQaService(getServlet().getServletContext());
- logger.debug("retrieving qaService: " + qaService);
+ HttpServletResponse response) throws IOException,
+ ServletException
+ {
+ logger.debug("dispatching getStats..." + request);
+
+ request.getSession().setAttribute(CURRENT_MONITORING_TAB, "stats");
+ return (mapping.findForward(LOAD_MONITORING));
+ }
- Long toolContentId = qaMonitoringForm.getToolContentID();
- logger.debug("toolContentId: " + toolContentId);
-
- request.getSession().setAttribute(CHOICE_MONITORING, CHOICE_TYPE_MONITORING_EDITACTIVITY);
- request.getSession().setAttribute(CONTENT_LOCKED, new Boolean(false));
-
- if (toolContentId == null)
- {
- /*
- * toolContentId is not available from the toolSessions passed to the monitoring url.
- * in this case, toolContentId must have been passed separetely
- */
- Long monitoredContentId=(Long)request.getSession().getAttribute(MONITORED_CONTENT_ID);
- logger.debug("will generateEditActivityScreen: " + monitoredContentId);
-
- if (monitoredContentId == null)
- {
- throw new QaApplicationException("Exception occured: " +
- "Tool expects a legitimate TOOL_CONTENT_ID from the container since it is also not available from the toolSession(s) passed. Can't continue!");
- }
- toolContentId=monitoredContentId;
- }
- request.getSession().setAttribute(MONITORED_CONTENT_ID, toolContentId);
-
- logger.debug("will use monitoredContentId: " + toolContentId);
- QaContent qaContent=qaService.loadQa(toolContentId.longValue());
- logger.debug("will use qaContent: " + qaContent);
-
- request.getSession().setAttribute(IS_MONITORING_DEFINE_LATER, new Boolean(qaContent.isDefineLater()));
- logger.debug("IS_MONITORING_DEFINE_LATER: " + request.getSession().getAttribute(IS_MONITORING_DEFINE_LATER));
-
- logger.debug("calling studentActivityOccurredGlobal with: " + qaContent);
- boolean studentActivity=qaService.studentActivityOccurredGlobal(qaContent);
- logger.debug("studentActivity on content: " + studentActivity);
-
- qaMonitoringForm.resetUserAction();
- if (studentActivity == false)
- {
- /*
- * forward to Authoring Basic tab
- */
- QaStarterAction qaStarterAction = new QaStarterAction();
- QaAuthoringForm qaAuthoringForm = new QaAuthoringForm();
- logger.debug("forward to Authoring Basic tab ");
- ActionForward actionForward=qaStarterAction.startMonitoringSummary(mapping, qaAuthoringForm, request, response);
- logger.debug("actionForward: " + actionForward);
- return (actionForward);
- }
- else
- {
- logger.debug("forward to warning screen as the content is not allowed to be modified.");
- ActionMessages errors= new ActionMessages();
- errors.add(Globals.ERROR_KEY, new ActionMessage("error.content.inUse"));
- saveErrors(request,errors);
- request.getSession().setAttribute(CONTENT_LOCKED, new Boolean(true));
- request.setAttribute(START_MONITORING_SUMMARY_REQUEST, new Boolean(true));
- logger.debug("forwarding to:" + LOAD);
- return (mapping.findForward(LOAD));
- }
- }
- public ActionForward showInstructions(ActionMapping mapping,
+ /**
+ * switches to instructions tab of the monitoring url.
+ * getInstructions(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
- HttpServletResponse response) throws IOException, ServletException
- {
- logger.debug(logger + " " + this.getClass().getName() + "will generateInstructionsScreen.");
- QaMonitoringForm qaMonitoringForm = (QaMonitoringForm) form;
-
-// Long initialMonitoringContentId=(Long)request.getSession().getAttribute(INITIAL_MONITORING_TOOL_CONTENT_ID);
-// if (initialMonitoringContentId == null)
-// {
-// logger.debug("missing content id:");
-// persistError(request,"error.tab.contentId.required");
-// request.setAttribute(USER_EXCEPTION_MONITORINGTAB_CONTENTID_REQUIRED, new Boolean(true));
-// logger.debug("forwarding to: " + MONITORING_REPORT);
-// return (mapping.findForward(MONITORING_REPORT));
-// }
-
- qaMonitoringForm.resetUserAction();
-
- request.getSession().setAttribute(CHOICE_MONITORING, CHOICE_TYPE_MONITORING_INSTRUCTIONS);
- return (mapping.findForward(MONITORING_REPORT));
- }
-
- public ActionForward showSummary(ActionMapping mapping,
+ HttpServletResponse response) throws IOException,
+ ServletException
+ *
+ * @param mapping
+ * @param form
+ * @param request
+ * @param response
+ * @return
+ * @throws IOException
+ * @throws ServletException
+ */
+ public ActionForward getInstructions(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
- HttpServletResponse response) throws IOException, ServletException
- {
- QaMonitoringForm qaMonitoringForm = (QaMonitoringForm) form;
- IQaService qaService = QaServiceProxy.getQaService(getServlet().getServletContext());
-
-
- MonitoringUtil monitoringUtil = new MonitoringUtil();
- qaMonitoringForm.setUpdatedResponse("");
- logger.debug("request for summary");
-
- String isToolSessionChanged=request.getParameter(IS_TOOL_SESSION_CHANGED);
- logger.debug("IS_TOOL_SESSION_CHANGED - initial: " + isToolSessionChanged);
-
- /*
- * sessionList holds all the toolSessionIds passed to summary page to be presented in a drop-down box.
- */
- Map sessionList = new TreeMap();
- int SELECTION_CASE=0;
-
- logger.debug("isNonDefaultScreensVisited: " + monitoringUtil.isNonDefaultScreensVisited(request));
-
- /*
- * Following conditions test which entry has been selected in the monitoring mode-summary screen drop box.
- * is Default page
- */
- String selectionCase=(String)request.getSession().getAttribute("selectionCase");
- logger.debug("current selectionCase: " + selectionCase);
-
- boolean sessionListReadable=false;
- if ((isToolSessionChanged == null) && !monitoringUtil.isNonDefaultScreensVisited(request))
- {
- logger.debug("First case based on null. Gets rendered only once in http session life time");
- logger.debug("summary to use MAX_TOOL_SESSION_COUNT");
- /*
- * initialize sessionList with "All", which is the default option.
- */
- sessionList.put("All", "All");
- READABLE_TOOL_SESSION_COUNT=MAX_TOOL_SESSION_COUNT;
- SELECTION_CASE=1;
- }
- else if ((isToolSessionChanged == null) && monitoringUtil.isNonDefaultScreensVisited(request))
- {
- logger.debug("Other tabs visited. Gets rendered for all tool sessions");
- sessionList.put("All", "All");
- READABLE_TOOL_SESSION_COUNT=MAX_TOOL_SESSION_COUNT;
- SELECTION_CASE=2;
- sessionListReadable=true;
- }
- else if ((isToolSessionChanged != null) && isToolSessionChanged.equalsIgnoreCase("1"))
- {
- String selectedToolSessionId=(String)request.getParameter("toolSessionId1");
- logger.debug("selectedToolSessionId" + selectedToolSessionId);
- /*
- * is "All" selected
- */
- if (selectedToolSessionId.equalsIgnoreCase("All"))
- {
- logger.debug("Second case");
- logger.debug("summary to use MAX_TOOL_SESSION_COUNT");
- /*
- * initialize sessionList with "All", which is the default option.
- */
- sessionList.put("All", "All");
- READABLE_TOOL_SESSION_COUNT=MAX_TOOL_SESSION_COUNT;
- SELECTION_CASE=2;
- sessionListReadable=true;
- }
- else
- {
- /*
- * is a single session id selected
- */
- logger.debug("Third case");
- logger.debug("selectedToolSessionId" + selectedToolSessionId);
- READABLE_TOOL_SESSION_COUNT=new Integer(2);
- SELECTION_CASE=3;
- request.getSession().setAttribute(CURRENT_MONITORED_TOOL_SESSION,selectedToolSessionId);
- logger.debug("CURRENT_MONITORED_TOOL_SESSION " + selectedToolSessionId);
- }
- }
- else if (isToolSessionChanged.equals("") && (selectionCase.equals("3")))
- {
- /*
- * is a single session id selected
- */
- logger.debug("case with single session and edit or update selected");
- READABLE_TOOL_SESSION_COUNT=new Integer(2);
- SELECTION_CASE=3;
- }
- else if (isToolSessionChanged.equals(""))
- {
- logger.debug("All is selected");
- sessionList.put("All", "All");
- READABLE_TOOL_SESSION_COUNT=MAX_TOOL_SESSION_COUNT;
- SELECTION_CASE=2;
- sessionListReadable=true;
- }
- logger.debug("final SELECTION_CASE: " + SELECTION_CASE);
-
- boolean useSelectedToolSessionId=false;
- String selectedToolSessionId = (String) request.getSession().getAttribute(CURRENT_MONITORED_TOOL_SESSION);
- if ((selectedToolSessionId != null) && (SELECTION_CASE == 3) && (READABLE_TOOL_SESSION_COUNT.intValue() == 2))
- {
- useSelectedToolSessionId=true;
- }
-
- if ((qaMonitoringForm.getEditReport() == null) && (qaMonitoringForm.getUpdateReport() == null))
- {
- logger.debug("no editReport or updateReport selected");
- request.getSession().setAttribute(DATAMAP_EDITABLE_RESPONSE_ID, "");
- request.getSession().setAttribute("selectionCase",new Long(SELECTION_CASE).toString());
- }
- qaMonitoringForm.resetUserAction();
-
- /*
- * holds all the toolSessionIds passed in the form toolSessionId1, toolSessionId2 etc.
- */
- Map mapToolSessions= new TreeMap(new QaStringComparator());
- request.getSession().setAttribute(MAP_TOOL_SESSIONS,mapToolSessions);
- logger.debug("MAP_TOOL_SESSIONS placed into session");
-
- Map mapUserResponses= new TreeMap(new QaStringComparator());
- request.getSession().setAttribute(MAP_USER_RESPONSES,mapUserResponses);
- logger.debug("MAP_USER_RESPONSES placed into session");
- logger.debug("request for contributeLesson");
- /*
- * monitoring reads all the toolSessionsIds appended one after other until it finds a null one. The cap was limited to 500.
- * This is the case all the tool sessions are using the same content.
- *
- * The final Map mapToolSessions holds the Map mapQuestions which in turn holds the Map mapUserResponses.
- * The key of mapToolSessions: incremental numbers
- * The key of mapQuestions: questions themselves
- * The key of mapUserResponses: incremental numbers
- *
- */
-
- request.getSession().setAttribute(NO_AVAILABLE_SESSIONS,new Boolean(false));
- logger.debug("NO_AVAILABLE_SESSIONS: " + false);
-
- logger.debug("retrieving ORIGINAL_TOOL_SESSIONS");
- Map originalSessionList=(Map)request.getSession().getAttribute(ORIGINAL_TOOL_SESSIONS);
- logger.debug("retrieved ORIGINAL_TOOL_SESSIONS : " + originalSessionList);
- /*
- * monitoredToolSessionsCounter holds the total number of valid toolSessionIds passed to the monitoring url
- */
- logger.debug("READABLE_TOOL_SESSION_COUNT: " + READABLE_TOOL_SESSION_COUNT);
- int monitoredToolSessionsCounter=0;
- for (int toolSessionIdCounter=1; toolSessionIdCounter < READABLE_TOOL_SESSION_COUNT.intValue(); toolSessionIdCounter++)
- {
- logger.debug("toolSessionIdCounter: " + toolSessionIdCounter);
- String strToolSessionId="";
- if (useSelectedToolSessionId)
- {
- strToolSessionId=(String) request.getSession().getAttribute(CURRENT_MONITORED_TOOL_SESSION);
- logger.debug("using strToolSessionId: " +strToolSessionId);
- }
- else
- {
- strToolSessionId=(String) originalSessionList.get(""+toolSessionIdCounter);
- logger.debug("using strToolSessionId from the session: ");
- }
- logger.debug("original strToolSessionId: " + strToolSessionId);
-
- String strRetrievableToolSessionId="";
- /*
- * catering for un-formatted monitoring url
- * Watch for case where the "All" is selected in the drop-down.
- */
- logger.debug("SELECTION_CASE: " + SELECTION_CASE);
- if ((strToolSessionId == null) && (SELECTION_CASE == 1))
- {
- logger.debug("un-formatted monitoring url, exiting...");
- break;
- }
- else if ((!sessionListReadable) && ((strToolSessionId == null) || (strToolSessionId.length() == 0)))
- {
- logger.debug("un-formatted monitoring url, exiting...");
- break;
- }
- else
- {
- if (sessionListReadable)
- {
- logger.debug("sessionListReadable is true.");
- logger.debug("strToolSessionId is All: " + strToolSessionId);
- sessionList=(Map)request.getSession().getAttribute(SUMMARY_TOOL_SESSIONS);
- logger.debug("toolSessionIdCounter: " + toolSessionIdCounter);
- logger.debug(logger + " " + this.getClass().getName() + "sessionList size: " + sessionList.size());
-
- if (toolSessionIdCounter==sessionList.size())
- {
- logger.debug("sessionList size equals toolSessionIdCounter, exiting...");
- break;
- }
-
- logger.debug("sessionList: " + sessionList);
- strToolSessionId=(String)sessionList.get("Group" + toolSessionIdCounter);
- logger.debug("strToolSessionId from sessionList: " + strToolSessionId);
- }
-
- strRetrievableToolSessionId=strToolSessionId;
- logger.debug("retrievableStrToolSessionId: " + strRetrievableToolSessionId);
-
- QaSession qaSession=qaService.retrieveQaSessionOrNullById(new Long(strRetrievableToolSessionId).longValue());
- logger.debug("retrieving qaSession: " + qaSession);
-
- if (qaSession !=null)
- {
- monitoredToolSessionsCounter++;
- request.getSession().setAttribute(AttributeNames.PARAM_TOOL_SESSION_ID, new Long(strToolSessionId));
- logger.debug("TOOL_SESSION_ID in session");
-
- if (READABLE_TOOL_SESSION_COUNT.equals(MAX_TOOL_SESSION_COUNT))
- {
- logger.debug("default screen - READABLE_TOOL_SESSION_COUNT equals MAX_TOOL_SESSION_COUNT");
- /*
- * add the current toolSessionId to the arraylist for the drop-down box
- */
- sessionList.put("Group" + monitoredToolSessionsCounter, strToolSessionId);
- logger.debug("sessionList Map new entry, strToolSessionId added to the list: " + toolSessionIdCounter + "->" + strToolSessionId );
- }
-
- /*
- * get to content from the tool session
- */
- QaContent qaContent=qaSession.getQaContent();
- logger.debug("using qaContent: " + qaContent);
- logger.debug("Monitor - contribute will be using TOOL_CONTENT_ID: " + qaContent.getQaContentId());
-
- /*
- * editActivity-defineLater screen depends on MONITORED_CONTENT_ID
- */
- request.getSession().setAttribute(MONITORED_CONTENT_ID,qaContent.getQaContentId());
-
- /*
- * place it into TOOL_CONTENT_ID session attribute since learningUtil.buidLearnerReport(request) depends on it
- * to generate a report
- */
- request.getSession().setAttribute(AttributeNames.PARAM_TOOL_CONTENT_ID,qaContent.getQaContentId());
-
- /*
- * this is to convince jsp although usernameVisible applies only to learning mode
- */
- request.getSession().setAttribute(IS_USERNAME_VISIBLE, new Boolean(true));
-
- logger.debug("REPORT_TITLE_MONITOR: " + qaContent.getMonitoringReportTitle());
- request.getSession().setAttribute(REPORT_TITLE_MONITOR,qaContent.getMonitoringReportTitle());
-
-
- /*
- * check if the author requires that the all tool sessions must be COMPLETED before the report in Monitoring
- */
- boolean isAllSessionsCompleted=monitoringUtil.isSessionsSync(qaContent);
- logger.debug("Monitor - contribute will be using isAllSessionsCompleted: " + isAllSessionsCompleted);
- logger.debug("Monitor - contribute will be using isSynchInMonitor: " + qaContent.isSynchInMonitor());
- /*
- * if the author requires syncronization but not all the sessions are COMPLETED give an error
- */
- if (qaContent.isSynchInMonitor() && (!isAllSessionsCompleted))
- {
- request.getSession().setAttribute(CHECK_ALL_SESSIONS_COMPLETED, new Boolean(true));
- request.getSession().setAttribute(IS_ALL_SESSIONS_COMPLETED, new Boolean(isAllSessionsCompleted));
+ HttpServletResponse response) throws IOException,
+ ServletException
+ {
+ logger.debug("dispatching getInstructions..." + request);
+
+ request.getSession().setAttribute(CURRENT_MONITORING_TAB, "instructions");
+ return (mapping.findForward(LOAD_MONITORING));
+ }
+
- ActionMessages errors= new ActionMessages();
- errors.add(Globals.ERROR_KEY, new ActionMessage("error.synchInMonitor"));
- logger.debug("add synchInMonitor to ActionMessages");
- saveErrors(request,errors);
- }
- else
- {
- request.getSession().setAttribute(CHECK_ALL_SESSIONS_COMPLETED, new Boolean(false));
- }
- logger.debug("IS_ALL_SESSIONS_COMPLETED:" + request.getSession().getAttribute(IS_ALL_SESSIONS_COMPLETED));
- logger.debug("CHECK_ALL_SESSIONS_COMPLETED" + request.getSession().getAttribute(CHECK_ALL_SESSIONS_COMPLETED));
-
- LearningUtil learningUtil= new LearningUtil();
- /*
- * generate a report for the Author/Teacher
- */
- logger.debug("calling buidMonitoringReport with toolSessionIdCounter:" + toolSessionIdCounter);
- learningUtil.buidLearnerReport(request, toolSessionIdCounter, qaService);
- }
- }
- }
-
- /*
- * store the arrayList in the session
- */
- if (READABLE_TOOL_SESSION_COUNT.equals(MAX_TOOL_SESSION_COUNT))
- {
- logger.debug("sessionList storable");
- request.getSession().setAttribute(SUMMARY_TOOL_SESSIONS,sessionList);
- logger.debug("SUMMARY_TOOL_SESSIONS stored into the session:" + request.getSession().getAttribute(SUMMARY_TOOL_SESSIONS));
- }
-
- mapToolSessions=(Map)request.getSession().getAttribute(MAP_TOOL_SESSIONS);
- logger.debug("before forwarding MAP_TOOL_SESSIONS:" + mapToolSessions);
-
- if (mapToolSessions.size() == 0)
- {
- request.getSession().setAttribute(NO_AVAILABLE_SESSIONS,new Boolean(true));
- logger.debug("NO_AVAILABLE_SESSIONS: " +true);
- ActionMessages errors= new ActionMessages();
- errors.add(Globals.ERROR_KEY, new ActionMessage("error.noStudentActivity"));
- logger.debug("add error.noStudentActivity to ActionMessages");
- saveErrors(request,errors);
- }
-
- Boolean noAvailableSessions=(Boolean) request.getSession().getAttribute(NO_AVAILABLE_SESSIONS);
- logger.debug("before forwarding NO_AVAILABLE_SESSIONS:" + noAvailableSessions);
-
- Map mapMonitoringQuestions=(Map)request.getSession().getAttribute(MAP_MONITORING_QUESTIONS);
- logger.debug("before forwarding MAP_MONITORING_QUESTIONS:" + mapMonitoringQuestions);
-
- String targetMode=(String )request.getSession().getAttribute(TARGET_MODE);
- logger.debug("TARGET_MODE: " + targetMode);
- request.getSession().setAttribute(CHOICE_MONITORING, CHOICE_TYPE_MONITORING_SUMMARY);
- return (mapping.findForward(MONITORING_REPORT));
- }
-
-
- public ActionForward editResponse(ActionMapping mapping,
+ /**
+ * switches to summary tab of the monitoring url
+ * getSummary(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
- HttpServletResponse response) throws IOException, ServletException
- {
- QaMonitoringForm qaMonitoringForm = (QaMonitoringForm)form;
- String responseId=qaMonitoringForm.getResponseId();
- request.getSession().setAttribute(DATAMAP_EDITABLE_RESPONSE_ID, responseId);
-
- return showSummary(mapping, form, request, response);
- }
-
-
- public ActionForward updateReport(ActionMapping mapping,
+ HttpServletResponse response) throws IOException,
+ ServletException
+ *
+ * @param mapping
+ * @param form
+ * @param request
+ * @param response
+ * @return
+ * @throws IOException
+ * @throws ServletException
+ */
+ public ActionForward getSummary(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
- HttpServletResponse response) throws IOException, ServletException
- {
- QaMonitoringForm qaMonitoringForm = (QaMonitoringForm) form;
- IQaService qaService = QaServiceProxy.getQaService(getServlet().getServletContext());
- MonitoringUtil monitoringUtil = new MonitoringUtil();
- String responseId=qaMonitoringForm.getResponseId();
-
- responseId=(String)request.getSession().getAttribute(DATAMAP_EDITABLE_RESPONSE_ID);
- String updatedResponse=qaMonitoringForm.getUpdatedResponse();
- monitoringUtil.updateResponse(qaService, responseId, updatedResponse);
-
- request.getSession().setAttribute(DATAMAP_EDITABLE_RESPONSE_ID, "");
- return showSummary(mapping, form, request, response);
- }
-
- public ActionForward selectToolSession(ActionMapping mapping,
- ActionForm form,
- HttpServletRequest request,
- HttpServletResponse response) throws IOException, ServletException
- {
- return showSummary(mapping, form, request, response);
- }
-
- public ActionForward hideResponse(ActionMapping mapping,
- ActionForm form,
- HttpServletRequest request,
- HttpServletResponse response) throws IOException, ServletException
- {
- QaMonitoringForm qaMonitoringForm = (QaMonitoringForm) form;
- IQaService qaService = QaServiceProxy.getQaService(getServlet().getServletContext());
- String hiddenResponseId=qaMonitoringForm.getHiddenResponseId();
- MonitoringUtil monitoringUtil = new MonitoringUtil();
-
- request.getSession().setAttribute(DATAMAP_HIDDEN_RESPONSE_ID, hiddenResponseId);
- monitoringUtil.hideResponse(qaService, hiddenResponseId);
-
- return showSummary(mapping, form, request, response);
- }
-
- public ActionForward unhideResponse(ActionMapping mapping,
- ActionForm form,
- HttpServletRequest request,
- HttpServletResponse response) throws IOException, ServletException
- {
- QaMonitoringForm qaMonitoringForm = (QaMonitoringForm) form;
- IQaService qaService = QaServiceProxy.getQaService(getServlet().getServletContext());
- String unHiddenResponseId=qaMonitoringForm.getUnHiddenResponseId();
- MonitoringUtil monitoringUtil = new MonitoringUtil();
-
- request.getSession().setAttribute(DATAMAP_HIDDEN_RESPONSE_ID, "");
- monitoringUtil.unHideResponse(qaService, unHiddenResponseId);
-
- return showSummary(mapping, form, request, response);
- }
+ HttpServletResponse response) throws IOException,
+ ServletException
+ {
+ logger.debug("dispatching getSummary..." + request);
+
+ IQaService qaService = (IQaService)request.getSession().getAttribute(TOOL_SERVICE);
+ logger.debug("qaService: " + qaService);
+
+ Long toolContentId =(Long) request.getSession().getAttribute(TOOL_CONTENT_ID);
+ logger.debug("toolContentId: " + toolContentId);
+
+ QaContent qaContent=qaService.loadQa(toolContentId.longValue());
+ logger.debug("existing qaContent:" + qaContent);
+
+ /* this section is related to summary tab. Starts here. */
+ Map summaryToolSessions=MonitoringUtil.populateToolSessions(request, qaContent, qaService);
+ logger.debug("summaryToolSessions: " + summaryToolSessions);
+ if (summaryToolSessions.isEmpty())
+ {
+ /* inform in the Summary tab that the tool has no active sessions */
+ request.setAttribute(USER_EXCEPTION_NO_TOOL_SESSIONS, new Boolean(true));
+ }
+
+ request.getSession().setAttribute(SUMMARY_TOOL_SESSIONS, summaryToolSessions);
+ logger.debug("SUMMARY_TOOL_SESSIONS: " + request.getSession().getAttribute(SUMMARY_TOOL_SESSIONS));
+ /* ends here. */
+
+ request.getSession().setAttribute(CURRENT_MONITORING_TAB, "summary");
+ return (mapping.findForward(LOAD_MONITORING));
+ }
/**
@@ -830,8 +184,8 @@
logger.debug("add " + message +" to ActionMessages:");
saveErrors(request,errors);
}
-
-
+
+
/**
* boolean isOnlyContentIdAvailable(HttpServletRequest request)
* @param request
Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaMonitoringForm.java
===================================================================
diff -u -rf2b7c28c53bfee9c676b5a836e42b71e0e1bf20f -rbb041188ecb180ae9cd8e01428c8f431aa89bd93
--- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaMonitoringForm.java (.../QaMonitoringForm.java) (revision f2b7c28c53bfee9c676b5a836e42b71e0e1bf20f)
+++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaMonitoringForm.java (.../QaMonitoringForm.java) (revision bb041188ecb180ae9cd8e01428c8f431aa89bd93)
@@ -39,6 +39,8 @@
protected String deleteLesson;
protected String forceComplete;
+ protected String method;
+
protected String editReport;
protected String updateReport;
protected String hideReport;
@@ -304,4 +306,17 @@
public void setToolContentID(Long toolContentID) {
this.toolContentID = toolContentID;
}
+
+ /**
+ * @return Returns the method.
+ */
+ public String getMethod() {
+ return method;
+ }
+ /**
+ * @param method The method to set.
+ */
+ public void setMethod(String method) {
+ this.method = method;
+ }
}
Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaMonitoringStarterAction.java
===================================================================
diff -u -rdba99aacc32e5b7a5bbc7ab302f7a5a488e3c680 -rbb041188ecb180ae9cd8e01428c8f431aa89bd93
--- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaMonitoringStarterAction.java (.../QaMonitoringStarterAction.java) (revision dba99aacc32e5b7a5bbc7ab302f7a5a488e3c680)
+++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/QaMonitoringStarterAction.java (.../QaMonitoringStarterAction.java) (revision bb041188ecb180ae9cd8e01428c8f431aa89bd93)
@@ -2,6 +2,7 @@
package org.lamsfoundation.lams.tool.qa.web;
import java.io.IOException;
+import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
@@ -17,6 +18,9 @@
import org.apache.struts.action.ActionMessages;
import org.lamsfoundation.lams.tool.qa.QaAppConstants;
import org.lamsfoundation.lams.tool.qa.QaApplicationException;
+import org.lamsfoundation.lams.tool.qa.QaContent;
+import org.lamsfoundation.lams.tool.qa.service.IQaService;
+import org.lamsfoundation.lams.tool.qa.service.QaServiceProxy;
import org.lamsfoundation.lams.web.util.AttributeNames;
@@ -67,6 +71,61 @@
public boolean initialiseMonitoringData(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
{
logger.debug("start initializing monitoring data...");
+ IQaService qaService = QaServiceProxy.getQaService(getServlet().getServletContext());
+ request.getSession().setAttribute(TOOL_SERVICE, qaService);
+
+ request.getSession().setAttribute(CURRENT_MONITORING_TAB, "summary");
+
+
+ /* we have made sure TOOL_CONTENT_ID is passed */
+ Long toolContentId =(Long) request.getSession().getAttribute(TOOL_CONTENT_ID);
+ logger.debug("toolContentId: " + toolContentId);
+
+ QaContent qaContent=qaService.loadQa(toolContentId.longValue());
+ logger.debug("existing qaContent:" + qaContent);
+
+ if (qaContent == null)
+ {
+ persistError(request, "error.content.doesNotExist");
+ //McUtils.cleanUpSessionAbsolute(request);
+ return false;
+ }
+
+ /* this section is related to summary tab. Starts here. */
+ Map summaryToolSessions=MonitoringUtil.populateToolSessions(request, qaContent, qaService);
+ logger.debug("summaryToolSessions: " + summaryToolSessions);
+ if (summaryToolSessions.isEmpty())
+ {
+ /* inform in the Summary tab that the tool has no active sessions */
+ request.setAttribute(USER_EXCEPTION_NO_TOOL_SESSIONS, new Boolean(true));
+ }
+
+ request.getSession().setAttribute(SUMMARY_TOOL_SESSIONS, summaryToolSessions);
+ logger.debug("SUMMARY_TOOL_SESSIONS: " + request.getSession().getAttribute(SUMMARY_TOOL_SESSIONS));
+ /* ends here. */
+
+
+ /* this section is related to Stats tab. Starts here. */
+ /* it is possible that no users has ever logged in for the activity yet*/
+ int countAllUsers=qaService.getTotalNumberOfUsers();
+ logger.debug("countAllUsers: " + countAllUsers);
+
+ if (countAllUsers == 0)
+ {
+ logger.debug("error: countAllUsers is 0");
+ request.getSession().setAttribute(USER_EXCEPTION_NO_STUDENT_ACTIVITY, new Boolean(true));
+ }
+ request.getSession().setAttribute(COUNT_ALL_USERS, new Integer(countAllUsers).toString());
+
+ int countSessionComplete=qaService.countSessionComplete();
+ logger.debug("countSessionComplete: " + countSessionComplete);
+ request.getSession().setAttribute(COUNT_SESSION_COMPLETE, new Integer(countSessionComplete).toString());
+ /* ends here. */
+
+ /* this section is related to instructions tab. Starts here. */
+ request.getSession().setAttribute(RICHTEXT_ONLINEINSTRUCTIONS,qaContent.getOnlineInstructions());
+ request.getSession().setAttribute(RICHTEXT_OFFLINEINSTRUCTIONS,qaContent.getOfflineInstructions());
+ /* ends here. */
return true;
}
Index: lams_tool_laqa/web/WEB-INF/struts-config.xml
===================================================================
diff -u -rdba99aacc32e5b7a5bbc7ab302f7a5a488e3c680 -rbb041188ecb180ae9cd8e01428c8f431aa89bd93
--- lams_tool_laqa/web/WEB-INF/struts-config.xml (.../struts-config.xml) (revision dba99aacc32e5b7a5bbc7ab302f7a5a488e3c680)
+++ lams_tool_laqa/web/WEB-INF/struts-config.xml (.../struts-config.xml) (revision bb041188ecb180ae9cd8e01428c8f431aa89bd93)
@@ -157,7 +157,7 @@
type="org.lamsfoundation.lams.tool.qa.web.QaMonitoringStarterAction"
name="QaMonitoringForm"
scope="session"
- parameter="dispatch"
+ parameter="method"
unknown="false"
validate="false">
@@ -179,7 +179,7 @@
type="org.lamsfoundation.lams.tool.qa.web.QaMonitoringAction"
name="QaMonitoringForm"
scope="session"
- parameter="dispatch"
+ parameter="method"
unknown="false"
validate="false">
Fisheye: Tag f2b7c28c53bfee9c676b5a836e42b71e0e1bf20f refers to a dead (removed) revision in file `lams_tool_laqa/web/WEB-INF/struts/tlds/struts-logic-el.tld'.
Fisheye: No comparison available. Pass `N' to diff?
Index: lams_tool_laqa/web/monitoring/Instructions.jsp
===================================================================
diff -u -rdba99aacc32e5b7a5bbc7ab302f7a5a488e3c680 -rbb041188ecb180ae9cd8e01428c8f431aa89bd93
--- lams_tool_laqa/web/monitoring/Instructions.jsp (.../Instructions.jsp) (revision dba99aacc32e5b7a5bbc7ab302f7a5a488e3c680)
+++ lams_tool_laqa/web/monitoring/Instructions.jsp (.../Instructions.jsp) (revision bb041188ecb180ae9cd8e01428c8f431aa89bd93)
@@ -32,6 +32,33 @@
-
Index: lams_tool_laqa/web/monitoring/MonitoringMaincontent.jsp
===================================================================
diff -u -rdba99aacc32e5b7a5bbc7ab302f7a5a488e3c680 -rbb041188ecb180ae9cd8e01428c8f431aa89bd93
--- lams_tool_laqa/web/monitoring/MonitoringMaincontent.jsp (.../MonitoringMaincontent.jsp) (revision dba99aacc32e5b7a5bbc7ab302f7a5a488e3c680)
+++ lams_tool_laqa/web/monitoring/MonitoringMaincontent.jsp (.../MonitoringMaincontent.jsp) (revision bb041188ecb180ae9cd8e01428c8f431aa89bd93)
@@ -27,7 +27,6 @@
<%@ taglib uri="fck-editor" prefix="FCK" %>
<%@ taglib uri="tags-lams" prefix="lams" %>
-
@@ -183,8 +182,7 @@
-
-
+
Index: lams_tool_laqa/web/monitoring/Stats.jsp
===================================================================
diff -u -rdba99aacc32e5b7a5bbc7ab302f7a5a488e3c680 -rbb041188ecb180ae9cd8e01428c8f431aa89bd93
--- lams_tool_laqa/web/monitoring/Stats.jsp (.../Stats.jsp) (revision dba99aacc32e5b7a5bbc7ab302f7a5a488e3c680)
+++ lams_tool_laqa/web/monitoring/Stats.jsp (.../Stats.jsp) (revision bb041188ecb180ae9cd8e01428c8f431aa89bd93)
@@ -33,7 +33,32 @@
Index: lams_tool_laqa/web/monitoring/SummaryContent.jsp
===================================================================
diff -u -rdba99aacc32e5b7a5bbc7ab302f7a5a488e3c680 -rbb041188ecb180ae9cd8e01428c8f431aa89bd93
--- lams_tool_laqa/web/monitoring/SummaryContent.jsp (.../SummaryContent.jsp) (revision dba99aacc32e5b7a5bbc7ab302f7a5a488e3c680)
+++ lams_tool_laqa/web/monitoring/SummaryContent.jsp (.../SummaryContent.jsp) (revision bb041188ecb180ae9cd8e01428c8f431aa89bd93)
@@ -32,7 +32,21 @@
- summary screen
+
+
+
+
+
+ display summary screen
+
+
+
\ No newline at end of file