Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java =================================================================== diff -u -r4ffb4f1a2bfc99e753289a089a51c92129409397 -r374085d62f6975a2b7e03f2419e2475f67757138 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision 4ffb4f1a2bfc99e753289a089a51c92129409397) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision 374085d62f6975a2b7e03f2419e2475f67757138) @@ -213,16 +213,33 @@ */ public String getLearnerActivityURL(Long activityID,Integer userID)throws IOException,LamsToolServiceException; - /** + /** * This method returns the contribute url for the given activity * * @param activityID The activity_id of the Activity whose URL will be returned * @return String The required information in WDDX format * @throws IOException */ public String getActivityContributionURL(Long activityID)throws IOException; - /** + * This method returns the define later url for the given activity + * + * @param activityID The activity_id of the Activity whose URL will be returned + * @return String The required information in WDDX format + * @throws IOException + */ + public String getActivityDefineLaterURL(Long activityID)throws IOException; + + /** + * This method returns the monitor url for the given activity + * + * @param activityID The activity_id of the Activity whose URL will be returned + * @return String The required information in WDDX format + * @throws IOException + */ + public String getActivityMonitorURL(Long activityID)throws IOException; + + /** * This method moves the learning design corresponding to the given * Lesson into the specified workspaceFolder. But before this action * is performed it checks whether the user is authorized to do so. Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java =================================================================== diff -u -r4ffb4f1a2bfc99e753289a089a51c92129409397 -r374085d62f6975a2b7e03f2419e2475f67757138 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 4ffb4f1a2bfc99e753289a089a51c92129409397) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 374085d62f6975a2b7e03f2419e2475f67757138) @@ -61,7 +61,9 @@ import org.lamsfoundation.lams.usermanagement.dao.IUserDAO; import org.lamsfoundation.lams.usermanagement.dao.IWorkspaceFolderDAO; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; +import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.util.wddx.FlashMessage; +import org.lamsfoundation.lams.web.util.AttributeNames; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; @@ -100,7 +102,6 @@ private IUserDAO userDAO; private IWorkspaceFolderDAO workspaceFolderDAO; private ILearningDesignDAO learningDesignDAO; - private FlashMessage flashMessage; private IAuthoringService authoringService; private ILamsCoreToolService lamsCoreToolService; private IUserManagementService userManagementService; @@ -226,9 +227,13 @@ public Lesson initializeLesson(String lessonName, String lessonDescription, long learningDesignId, - User user) + User user) { LearningDesign originalLearningDesign = authoringService.getLearningDesign(new Long(learningDesignId)); + if ( originalLearningDesign == null) { + throw new MonitoringServiceException("Learning design for id="+learningDesignId+" is missing. Unable to initialize lesson."); + } + //copy the current learning design LearningDesign copiedLearningDesign = authoringService.copyLearningDesign(originalLearningDesign, new Integer(LearningDesign.COPY_TYPE_LESSON), @@ -285,7 +290,10 @@ List staffs) { Lesson newLesson = lessonDAO.getLesson(new Long(lessonId)); - + if ( newLesson == null) { + throw new MonitoringServiceException("Lesson for id="+lessonId+" is missing. Unable to create class for lesson."); + } + LessonClass newLessonClass = this.createLessonClass(organisation, organizationUsers, staffs, @@ -306,8 +314,13 @@ { if(log.isDebugEnabled()) log.debug("=============Starting Lesson "+lessonId+"=============="); + //we get the lesson just created Lesson requestedLesson = lessonDAO.getLesson(new Long(lessonId)); + if ( requestedLesson == null) { + throw new MonitoringServiceException("Lesson for id="+lessonId+" is missing. Unable to start lesson."); + } + Date lessonStartTime = new Date(); //initialize tool sessions if necessary Set activities = requestedLesson.getLearningDesign().getActivities(); @@ -408,6 +421,7 @@ */ public String getLessonDetails(Long lessonID)throws IOException{ Lesson lesson = lessonDAO.getLesson(lessonID); + FlashMessage flashMessage; if(lesson!=null){ flashMessage = new FlashMessage("getLessonDetails",lesson.getLessonDetails()); }else @@ -423,6 +437,7 @@ public String getLessonLearners(Long lessonID)throws IOException{ Vector lessonLearners = new Vector(); Lesson lesson = lessonDAO.getLesson(lessonID); + FlashMessage flashMessage; if(lesson!=null){ Iterator iterator = lesson.getLessonClass().getLearners().iterator(); while(iterator.hasNext()){ @@ -451,6 +466,7 @@ public String getAllLearnersProgress(Long lessonID)throws IOException { Vector progressData = new Vector(); Lesson lesson = lessonDAO.getLesson(lessonID); + FlashMessage flashMessage; if(lesson!=null){ Iterator iterator = lesson.getLearnerProgresses().iterator(); while(iterator.hasNext()){ @@ -459,7 +475,7 @@ } flashMessage = new FlashMessage("getAllLearnersProgress",progressData); }else{ - flashMessage = new FlashMessage("getAllLearnersProgress", + flashMessage = new FlashMessage("getAllLearnersProgress", "No such lesson with a lesson_id of :"+ lessonID + " exists", FlashMessage.ERROR); } @@ -480,6 +496,7 @@ */ public String getAllContributeActivities(Long lessonID)throws IOException{ Lesson lesson = lessonDAO.getLesson(lessonID); + FlashMessage flashMessage; if(lesson!=null){ Vector sortedSet = getOrderedActivityTree(lesson.getLearningDesign()); flashMessage = new FlashMessage("getAllContributeActivities",sortedSet); @@ -497,6 +514,7 @@ public String getLearnerActivityURL(Long activityID,Integer userID)throws IOException, LamsToolServiceException{ Activity activity = activityDAO.getActivityByActivityId(activityID); User user = userDAO.getUserById(userID); + FlashMessage flashMessage; if(activity==null || user==null){ flashMessage = new FlashMessage("getLearnerActivityURL", "Invalid activityID/User :" + activityID + " : " + userID, @@ -521,6 +539,7 @@ */ public String getActivityContributionURL(Long activityID)throws IOException{ Activity activity = activityDAO.getActivityByActivityId(activityID); + FlashMessage flashMessage = null; if(activity!=null){ if(activity.isToolActivity()){ ToolActivity toolActivity = (ToolActivity)activity; @@ -534,10 +553,79 @@ } /** * (non-Javadoc) + * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#getActivityDefineLaterURL(java.lang.Long) + */ + public String getActivityDefineLaterURL(Long activityID)throws IOException{ + Activity activity = activityDAO.getActivityByActivityId(activityID); + FlashMessage flashMessage = null; + if(activity!=null){ + if(activity.isToolActivity()){ + ToolActivity toolActivity = (ToolActivity)activity; + String url = toolActivity.getTool().getDefineLaterUrl(); + Long toolContentId = toolActivity.getToolContentId(); + if ( url !=null && toolContentId != null ) { + url = WebUtil.appendParameterToURL(url, + AttributeNames.TOOL_CONTENT_ID, + toolActivity.getToolContentId().toString()); + flashMessage = new FlashMessage("getActivityDefineLaterURL",new ProgressActivityDTO(activityID, url)); + } else { + flashMessage = generateDataMissingPacket(activityID, url, "Define Late URL", toolContentId, "Tool Content ID"); + } + } + }else + flashMessage = FlashMessage.getNoSuchActivityExists("getActivityDefineLaterURL",activityID); + + return flashMessage.serializeMessage(); + } + /** + * (non-Javadoc) + * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#getActivityMonitorURL(java.lang.Long) + */ + public String getActivityMonitorURL(Long activityID)throws IOException{ + Activity activity = activityDAO.getActivityByActivityId(activityID); + FlashMessage flashMessage = null; + if(activity!=null){ + if(activity.isToolActivity()){ + ToolActivity toolActivity = (ToolActivity)activity; + String url = toolActivity.getTool().getMonitorUrl(); + Long toolContentId = toolActivity.getToolContentId(); + if ( url !=null && toolContentId != null ) { + url = WebUtil.appendParameterToURL(url, + AttributeNames.TOOL_CONTENT_ID, + toolActivity.getToolContentId().toString()); + flashMessage = new FlashMessage("getActivityMonitorURL",new ProgressActivityDTO(activityID, url)); + } else { + flashMessage = generateDataMissingPacket(activityID, url, "Monitor URL", toolContentId, "Tool Content ID"); + } + } + }else + flashMessage = FlashMessage.getNoSuchActivityExists("getActivityMonitorURL",activityID); + + return flashMessage.serializeMessage(); + } + /** + * @param activityID + * @param url + * @param toolContentId + */ + private FlashMessage generateDataMissingPacket(Long activityID, String url, + String urlDescription, Long toolContentId, String toolContentIdDescription) { + String[] missing = null; + if ( url !=null && toolContentId != null ) + missing = new String[] {urlDescription, toolContentIdDescription}; + else if ( url !=null ) + missing = new String[] {urlDescription}; + else if ( toolContentId !=null ) + missing = new String[] {toolContentIdDescription}; + return FlashMessage.getDataMissing("getActivityMonitorURL",missing); + } + /** + * (non-Javadoc) * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#moveLesson(java.lang.Long, java.lang.Integer, java.lang.Integer) */ public String moveLesson(Long lessonID, Integer targetWorkspaceFolderID,Integer userID)throws IOException{ Lesson lesson = lessonDAO.getLesson(lessonID); + FlashMessage flashMessage; if(lesson!=null){ if(lesson.getUser().getUserId().equals(userID)){ WorkspaceFolder workspaceFolder = workspaceFolderDAO.getWorkspaceFolderByID(targetWorkspaceFolderID); @@ -566,6 +654,7 @@ */ public String renameLesson(Long lessonID, String newName, Integer userID)throws IOException{ Lesson lesson = lessonDAO.getLesson(lessonID); + FlashMessage flashMessage; if(lesson!=null){ if(lesson.getUser().getUserId().equals(userID)){ lesson.setLessonName(newName); @@ -586,6 +675,7 @@ */ public String checkGateStatus(Long activityID, Long lessonID) throws IOException { + FlashMessage flashMessage; GateActivity gate = (GateActivity)activityDAO.getActivityByActivityId(activityID); Lesson lesson = lessonDAO.getLesson(lessonID); //used to calculate the total learners. @@ -610,6 +700,7 @@ public String releaseGate(Long activityID)throws IOException { GateActivity gate = (GateActivity)activityDAO.getActivityByActivityId(activityID); + FlashMessage flashMessage; if (gate ==null) { flashMessage = new FlashMessage("releaseGate", Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/DummyMonitoringAction.java =================================================================== diff -u -r4ffb4f1a2bfc99e753289a089a51c92129409397 -r374085d62f6975a2b7e03f2419e2475f67757138 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/DummyMonitoringAction.java (.../DummyMonitoringAction.java) (revision 4ffb4f1a2bfc99e753289a089a51c92129409397) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/DummyMonitoringAction.java (.../DummyMonitoringAction.java) (revision 374085d62f6975a2b7e03f2419e2475f67757138) @@ -38,10 +38,12 @@ import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.monitoring.service.IMonitoringService; import org.lamsfoundation.lams.monitoring.service.MonitoringServiceProxy; +import org.lamsfoundation.lams.tool.exception.LamsToolServiceException; import org.lamsfoundation.lams.usermanagement.Organisation; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; +import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.web.action.LamsDispatchAction; import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; @@ -84,6 +86,7 @@ private static final String DUMMY_FORWARD = "dummy"; private static final String LESSONS_PARAMETER = "lessons"; + private static final Integer ORGANIZATION_ID = new Integer(1); @@ -179,9 +182,63 @@ } throw new IOException("Unable to get user. User in session manager is "+user); } -/* public ActionForward getLessonDetails(ActionMapping mapping, + + public ActionForward gotoLearnerActivityURL(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response)throws IOException,LamsToolServiceException{ + this.monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet().getServletContext()); + Integer userID = new Integer(WebUtil.readIntParam(request,AttributeNames.USER_ID)); + Long activityID = new Long(WebUtil.readLongParam(request,AttributeNames.ACTIVITY_ID)); + String wddxPacket = monitoringService.getLearnerActivityURL(activityID,userID); + String url = extractURL(wddxPacket); + response.sendRedirect(response.encodeRedirectURL(url)); + return null; + } + + public ActionForward gotoMonitoringActivityURL(ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response)throws IOException,LamsToolServiceException{ + this.monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet().getServletContext()); + Long activityID = new Long(WebUtil.readLongParam(request,AttributeNames.ACTIVITY_ID)); + String wddxPacket = monitoringService.getActivityMonitorURL(activityID); + String url = extractURL(wddxPacket); + response.sendRedirect(response.encodeRedirectURL(url)); + return null; + } + public ActionForward gotoDefineLaterActivityURL(ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response)throws IOException,LamsToolServiceException{ + this.monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet().getServletContext()); + Long activityID = new Long(WebUtil.readLongParam(request,AttributeNames.ACTIVITY_ID)); + String wddxPacket = monitoringService.getActivityDefineLaterURL(activityID); + String url = extractURL(wddxPacket); + response.sendRedirect(response.encodeRedirectURL(url)); + return null; + } + + /** + * @param wddxPacket + * @return + */ + private String extractURL(String wddxPacket) { + String url = null; + String previousString = ""; + int index = wddxPacket.indexOf(previousString); + if ( index > -1 && index+previousString.length() < wddxPacket.length() ) { + url = wddxPacket.substring(index+previousString.length()); + index = url.indexOf(""); + url = url.substring(0,index); + } + url = WebUtil.convertToFullURL(url); + return url; + } + + /* public ActionForward getLessonDetails(ActionMapping mapping, + ActionForm form, + HttpServletRequest request, HttpServletResponse response)throws IOException{ this.monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet().getServletContext()); Long lessonID = new Long(WebUtil.readLongParam(request,"lessonID")); @@ -224,16 +281,6 @@ String wddxPacket = monitoringService.getAllContributeActivities(lessonID); return outputPacket(mapping, request, response, wddxPacket, "details"); } - public ActionForward getLearnerActivityURL(ActionMapping mapping, - ActionForm form, - HttpServletRequest request, - HttpServletResponse response)throws IOException,LamsToolServiceException{ - this.monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet().getServletContext()); - Integer userID = new Integer(WebUtil.readIntParam(request,"userID")); - Long activityID = new Long(WebUtil.readLongParam(request,"activityID")); - String wddxPacket = monitoringService.getLearnerActivityURL(activityID,userID); - return outputPacket(mapping, request, response, wddxPacket, "details"); - } public ActionForward getActivityContributionURL(ActionMapping mapping, ActionForm form, HttpServletRequest request, Index: lams_monitoring/web/dummy.jsp =================================================================== diff -u -r63f35f9bd78604503bb0fce54fc18c3d7797cb20 -r374085d62f6975a2b7e03f2419e2475f67757138 --- lams_monitoring/web/dummy.jsp (.../dummy.jsp) (revision 63f35f9bd78604503bb0fce54fc18c3d7797cb20) +++ lams_monitoring/web/dummy.jsp (.../dummy.jsp) (revision 374085d62f6975a2b7e03f2419e2475f67757138) @@ -1,19 +1,39 @@ <%@ page language="java" import="java.util.*" %> -<%@ taglib uri="/WEB-INF/struts/struts-html-el.tld" prefix="html" %> -<%@ taglib uri="/WEB-INF/struts/struts-bean.tld" prefix="bean" %> -<%@ taglib uri="/WEB-INF/jstl/fmt.tld" prefix="fmt" %> -<%@ taglib uri="/WEB-INF/jstl/c.tld" prefix="c" %> -<%@ taglib uri="/WEB-INF/jstl/x.tld" prefix="x" %> +<%@ taglib uri="tags-html-el" prefix="html" %> +<%@ taglib uri="tags-bean" prefix="bean" %> +<%@ taglib uri="tags-fmt" prefix="fmt" %> +<%@ taglib uri="tags-core" prefix="c" %> <%@ taglib uri="tags-lams" prefix="lams" %> +<% +String protocol = request.getProtocol(); +if(protocol.startsWith("HTTPS")){ + protocol = "https://"; +}else{ + protocol = "http://"; +} +String pathToRoot = protocol+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/"; +String pathToShare = protocol+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/../"; + +%> + - Lesson Management - - + + + + +Lesson Management

Lesson Management

@@ -49,30 +69,80 @@

Monitor Lessons

- +

All the links below should pop-up in new windows.

+ +
- - - - - - - + + - - - - - - - - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
lessonIdlessonNamelessonDescriptioncreateDateTimestartDateTimeendDateTimelessonStateIdlessonId
Join Lesson as - Export Portfolio for all users - Export Portfolio as + lessonName
lessonDescription
learningDesignId
createDateTime
startDateTime
endDateTime
lessonStateId
Pretend to be learner:&lessonId=');>Join Lesson as +
Define Later & Monitor + + ');"> + Monitor
+ ');"> + Define Later +
+
Export Portfolio:');>Export Portfolio for all users
+ ');>Export Portfolio as +
User Progress:Login:
+ + Current Activity &activityID=');">View +
+ Completed Activities:
+ + &activityID=');">View
+
+
+
+