Index: lams_documents/lams_monitoring/Monitoring.doc =================================================================== diff -u -r8d371d1c4992874017b55b45b8f5926790dde0e0 -rc1dfdde7a9d5ed9b49fc9772bbb9f018b085d00b Binary files differ Index: lams_monitoring/build.xml =================================================================== diff -u -rd19571b6bebebee0b82472f3727a4aa9d40b62cd -rc1dfdde7a9d5ed9b49fc9772bbb9f018b085d00b --- lams_monitoring/build.xml (.../build.xml) (revision d19571b6bebebee0b82472f3727a4aa9d40b62cd) +++ lams_monitoring/build.xml (.../build.xml) (revision c1dfdde7a9d5ed9b49fc9772bbb9f018b085d00b) @@ -189,6 +189,7 @@ + Index: lams_monitoring/conf/xdoclet/filter-mappings.xml =================================================================== diff -u -r4ffb4f1a2bfc99e753289a089a51c92129409397 -rc1dfdde7a9d5ed9b49fc9772bbb9f018b085d00b --- lams_monitoring/conf/xdoclet/filter-mappings.xml (.../filter-mappings.xml) (revision 4ffb4f1a2bfc99e753289a089a51c92129409397) +++ lams_monitoring/conf/xdoclet/filter-mappings.xml (.../filter-mappings.xml) (revision c1dfdde7a9d5ed9b49fc9772bbb9f018b085d00b) @@ -24,7 +24,7 @@ HibernateFilter - *.do + /* HibernateFilter Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java =================================================================== diff -u --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java (revision 0) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java (revision c1dfdde7a9d5ed9b49fc9772bbb9f018b085d00b) @@ -0,0 +1,32 @@ +/* + *Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * + *This program is free software; you can redistribute it and/or modify + *it under the terms of the GNU General Public License as published by + *the Free Software Foundation; either version 2 of the License, or + *(at your option) any later version. + * + *This program is distributed in the hope that it will be useful, + *but WITHOUT ANY WARRANTY; without even the implied warranty of + *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + *GNU General Public License for more details. + * + *You should have received a copy of the GNU General Public License + *along with this program; if not, write to the Free Software + *Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + *USA + * + *http://www.gnu.org/licenses/gpl.txt + */ +package org.lamsfoundation.lams.monitoring; + + +public class MonitoringConstants { + + public static final String MONITORING_SERVICE_BEAN_NAME = "monitoringService"; + public static final String CREATE_LESSON_MESSAGE_KEY = "createLesson"; + public static final String KEY_ORGANISATION_ID = "organisationID"; + public static final String KEY_LESSON_ID = "lessonID"; + public static final String KEY_STAFF = "staff"; + public static final String KEY_LEARNER = "learners"; +} Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml =================================================================== diff -u -r683bf4251c56ab76b4eded4ff621fc9fc069ac21 -rc1dfdde7a9d5ed9b49fc9772bbb9f018b085d00b --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml (.../monitoringApplicationContext.xml) (revision 683bf4251c56ab76b4eded4ff621fc9fc069ac21) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml (.../monitoringApplicationContext.xml) (revision c1dfdde7a9d5ed9b49fc9772bbb9f018b085d00b) @@ -41,6 +41,8 @@ + + Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java =================================================================== diff -u -r5e6c54928232a27095304e6223bdcb7e02aabac9 -rc1dfdde7a9d5ed9b49fc9772bbb9f018b085d00b --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision 5e6c54928232a27095304e6223bdcb7e02aabac9) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision c1dfdde7a9d5ed9b49fc9772bbb9f018b085d00b) @@ -28,6 +28,7 @@ import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.tool.exception.LamsToolServiceException; import org.lamsfoundation.lams.usermanagement.Organisation; +import org.lamsfoundation.lams.usermanagement.User; /** @@ -54,9 +55,28 @@ * @return the lesson initialized. */ public Lesson initializeLesson(String lessonName, String lessonDescription,long learningDesignId,Integer userID); - - /** + * Create a lession according to the input lession WDDX package. The sample package is following: + * + *
+     * 
+ * 135 + * 10 + * 78 + * 12 + * 3456 + * + *
+ *
+ *

The lesson will includes creator who create this lesson as staff and learner. + * + * @param creatorUserId The lesson creator, who will be add to lesson as staff and learner. + * @param lessionPackage + * @return + */ + public String createLesson(Integer creatorUserId,String lessionPackage); + + /** * Setup the lesson class and organization for a lesson according to the * input from monitoring GUI interface. * @@ -316,4 +336,6 @@ public List getOrganisationsUsers(Integer userId); public List getLearningDesigns(Long userId); + + } Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java =================================================================== diff -u -r683bf4251c56ab76b4eded4ff621fc9fc069ac21 -rc1dfdde7a9d5ed9b49fc9772bbb9f018b085d00b --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 683bf4251c56ab76b4eded4ff621fc9fc069ac21) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision c1dfdde7a9d5ed9b49fc9772bbb9f018b085d00b) @@ -26,10 +26,12 @@ import java.util.HashSet; import java.util.Hashtable; import java.util.Iterator; +import java.util.LinkedList; import java.util.List; import java.util.Set; import java.util.Vector; +import org.apache.commons.lang.math.NumberUtils; import org.apache.log4j.Logger; import org.lamsfoundation.lams.authoring.service.IAuthoringService; import org.lamsfoundation.lams.learningdesign.Activity; @@ -47,6 +49,7 @@ import org.lamsfoundation.lams.lesson.LessonClass; import org.lamsfoundation.lams.lesson.dao.ILessonClassDAO; import org.lamsfoundation.lams.lesson.dao.ILessonDAO; +import org.lamsfoundation.lams.monitoring.MonitoringConstants; import org.lamsfoundation.lams.tool.ToolAccessMode; import org.lamsfoundation.lams.tool.ToolSession; import org.lamsfoundation.lams.tool.exception.DataMissingException; @@ -58,10 +61,13 @@ import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.Workspace; import org.lamsfoundation.lams.usermanagement.WorkspaceFolder; +import org.lamsfoundation.lams.usermanagement.dao.IOrganisationDAO; +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.util.wddx.WDDXProcessor; import org.lamsfoundation.lams.web.util.AttributeNames; import org.quartz.JobDetail; import org.quartz.Scheduler; @@ -72,6 +78,7 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; + /** *

This is the major service facade for all monitoring functionalities. It is * configured as a Spring factory bean so as to utilize the Spring's IOC and @@ -99,6 +106,8 @@ private IActivityDAO activityDAO; private IWorkspaceFolderDAO workspaceFolderDAO; private ILearningDesignDAO learningDesignDAO; + private IOrganisationDAO organisationDAO; + private IUserDAO userDAO; private IAuthoringService authoringService; private ILamsCoreToolService lamsCoreToolService; private IUserManagementService userManagementService; @@ -158,6 +167,13 @@ { this.lessonDAO = lessonDAO; } + /** + * + * @param userDAO + */ + public void setUserDAO(IUserDAO userDAO) { + this.userDAO = userDAO; + } /** * @param lamsToolService The lamsToolService to set. @@ -174,7 +190,10 @@ { this.activityDAO = activityDAO; } - /** + public void setOrganisationDAO(IOrganisationDAO organisationDAO) { + this.organisationDAO = organisationDAO; + } + /** * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext) */ public void setApplicationContext(ApplicationContext applicationContext) throws BeansException @@ -203,7 +222,7 @@ * *

Tries to copy the design into the user's default runtime sequence folder. If * this is not available, then it is copied into the existing folder.

- * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#createLesson(long, org.lamsfoundation.lams.usermanagement.User, java.util.List, java.util.List) + * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#initializeLesson(String, String, long, Integer) */ public Lesson initializeLesson(String lessonName, String lessonDescription, @@ -268,8 +287,78 @@ return createNewLesson(lessonName,lessonDescription,user,copiedLearningDesign); } - /** + * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#createLesson(Integer, String) + */ + public String createLesson(Integer creatorUserId, String lessonPacket){ + FlashMessage flashMessage = null; + try{ + Hashtable table = (Hashtable)WDDXProcessor.deserialize(lessonPacket); + //todo: convert:data type: + Integer orgId = + WDDXProcessor.convertToInteger(MonitoringConstants.KEY_ORGANISATION_ID, table.get(MonitoringConstants.KEY_ORGANISATION_ID)); + long lessonId = + WDDXProcessor.convertToLong(MonitoringConstants.KEY_LESSON_ID, table.get(MonitoringConstants.KEY_LESSON_ID)).longValue(); + List learners = (List) table.get(MonitoringConstants.KEY_LEARNER); + List staffs = (List) table.get(MonitoringConstants.KEY_STAFF); + if(learners == null) + learners = new LinkedList(); + if(staffs == null) + staffs = new LinkedList(); + + Organisation organisation = organisationDAO.getOrganisationById(orgId); + User creator = userDAO.getUserById(creatorUserId); + // create the lesson class - add all the users in this organisation to the lesson class + // add user as staff + List learnerList = new LinkedList(); + learnerList.add(creator); + Iterator iter = learners.iterator(); + while (iter.hasNext()) { + try { + int id = ((Double) iter.next()).intValue(); + learnerList.add(userDAO.getUserById(new Integer(id))); + } catch (Exception e) { + log.error("Error parsing learner ID from " + lessonPacket); + continue; + } + } + //get staff user info + List staffList = new LinkedList(); + staffList.add(creator); + iter = staffs.iterator(); + while (iter.hasNext()) { + try { + int id = ((Double) iter.next()).intValue(); + staffList.add(userDAO.getUserById(new Integer(id))); + } catch (Exception e) { + log.error("Error parsing staff ID from " + lessonPacket); + continue; + } + } + + //Create Lesson! + createLessonClassForLesson(lessonId, + organisation, + learnerList, + staffList); + + flashMessage = new FlashMessage("createLesson",Boolean.TRUE); + } catch (Exception e) { + flashMessage = new FlashMessage("createLesson", + e.getMessage(), + FlashMessage.ERROR); + } + + String message = "Failed on creating flash message:" + flashMessage; + try { + message = flashMessage.serializeMessage(); + } catch (IOException e) { + log.error(message); + } + + return message; + } + /** *

Pre-condition: This method must be called under the condition of the * existance of new lesson (without lesson class).

*

A lesson class record should be inserted and organization should be @@ -1026,6 +1115,5 @@ return learningDesignDAO.getLearningDesignByUserId(userId); } - } \ No newline at end of file Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/CreateLessionServlet.java =================================================================== diff -u --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/CreateLessionServlet.java (revision 0) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/CreateLessionServlet.java (revision c1dfdde7a9d5ed9b49fc9772bbb9f018b085d00b) @@ -0,0 +1,76 @@ +/* + *Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * + *This program is free software; you can redistribute it and/or modify + *it under the terms of the GNU General Public License as published by + *the Free Software Foundation; either version 2 of the License, or + *(at your option) any later version. + * + *This program is distributed in the hope that it will be useful, + *but WITHOUT ANY WARRANTY; without even the implied warranty of + *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + *GNU General Public License for more details. + * + *You should have received a copy of the GNU General Public License + *along with this program; if not, write to the Free Software + *Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + *USA + * + *http://www.gnu.org/licenses/gpl.txt + */ +package org.lamsfoundation.lams.monitoring.web; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +import org.apache.log4j.Logger; +import org.lamsfoundation.lams.monitoring.MonitoringConstants; +import org.lamsfoundation.lams.monitoring.service.IMonitoringService; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.util.wddx.FlashMessage; +import org.lamsfoundation.lams.web.servlet.AbstractStoreWDDXPacketServlet; +import org.lamsfoundation.lams.web.session.SessionManager; +import org.lamsfoundation.lams.web.util.AttributeNames; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.context.support.WebApplicationContextUtils; + +/** + * + * @author Steve.Ni + * + * @version $Revision$ + * @web:servlet name="createLesson" + * @web:servlet-mapping url-pattern="/monitoring/createLesson" + */ +public class CreateLessionServlet extends AbstractStoreWDDXPacketServlet { + //--------------------------------------------------------------------- + // Instance variables + //--------------------------------------------------------------------- + private static Logger log = Logger.getLogger(CreateLessionServlet.class); + private static final long serialVersionUID = 6474150792777819606L; + + public IMonitoringService getMonitoringService(){ + WebApplicationContext webContext = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()); + return (IMonitoringService) webContext.getBean(MonitoringConstants.MONITORING_SERVICE_BEAN_NAME); + } + + protected String process(String lessionPackage, HttpServletRequest request) throws Exception { + //get User infomation from shared session. + HttpSession ss = SessionManager.getSession(); + UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); + if(user == null || user.getUserID() == null){ + log.error("Can not find valid login user information"); + FlashMessage flashMessage = new FlashMessage("createLesson", + "Can not find valid login user information", + FlashMessage.ERROR); + return flashMessage.serializeMessage(); + } + IMonitoringService monitoringService = getMonitoringService(); + return monitoringService.createLesson(user.getUserID(),lessionPackage); + } + + protected String getMessageKey(String packet, HttpServletRequest request) { + return MonitoringConstants.CREATE_LESSON_MESSAGE_KEY; + } + +} Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java =================================================================== diff -u -r8d371d1c4992874017b55b45b8f5926790dde0e0 -rc1dfdde7a9d5ed9b49fc9772bbb9f018b085d00b --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java (.../MonitoringAction.java) (revision 8d371d1c4992874017b55b45b8f5926790dde0e0) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java (.../MonitoringAction.java) (revision c1dfdde7a9d5ed9b49fc9772bbb9f018b085d00b) @@ -28,17 +28,21 @@ 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.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +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.dto.UserDTO; import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.util.wddx.FlashMessage; import org.lamsfoundation.lams.web.action.LamsDispatchAction; +import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; @@ -108,10 +112,68 @@ } } + private UserDTO getUser() throws IOException { + HttpSession ss = SessionManager.getSession(); + UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); + if ( user != null ) { + return user; + } + + throw new IOException("Unable to get user. User in session manager is "+user); + } + //--------------------------------------------------------------------- // Struts Dispatch Method //--------------------------------------------------------------------- /** + * This STRUTS action method will initialize a lesson for specific learning design with the given lesson title + * and lesson description.

+ * If initialization is successed, this method will return a WDDX message which includes the ID of new lesson. + * + * @param mapping An ActionMapping class that will be used by the Action class to tell + * the ActionServlet where to send the end-user. + * + * @param form The ActionForm class that will contain any data submitted + * by the end-user via a form. + * @param request A standard Servlet HttpServletRequest class. + * @param response A standard Servlet HttpServletResponse class. + * @return An ActionForward class that will be returned to the ActionServlet indicating where + * the user is to go next. + * @throws IOException + * @throws ServletException + */ + public ActionForward initializeLesson(ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response) throws IOException, + ServletException + { + + this.monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet().getServletContext()); + FlashMessage flashMessage = null; + + try { + String title = WebUtil.readStrParam(request,"lessonName"); + if ( title == null ) title = "lesson"; + String desc = WebUtil.readStrParam(request,"lessonDescription"); + if ( desc == null ) desc = "description"; + long ldId = WebUtil.readLongParam(request, AttributeNames.PARAM_LEARNINGDESIGN_ID); + Integer userId = new Integer(WebUtil.readIntParam(request, AttributeNames.PARAM_USER_ID)); + Lesson newLesson = monitoringService.initializeLesson(title,desc,ldId,userId); + + flashMessage = new FlashMessage("initializeLesson",newLesson.getLessonId()); + } catch (Exception e) { + flashMessage = new FlashMessage("initializeLesson", + e.getMessage(), + FlashMessage.ERROR); + } + + String message = flashMessage.serializeMessage(); + + return outputPacket(mapping,request,response,message,"details"); + } + + /** * The Struts dispatch method that starts a lesson that has been created * beforehand. Most likely, the request to start lesson should be triggered * by the flash component. This method will delegate to the Spring service Index: lams_monitoring/web/WEB-INF/web.xml =================================================================== diff -u -r04ddbcceec831fcb71c1c9d160300569ac1547f6 -rc1dfdde7a9d5ed9b49fc9772bbb9f018b085d00b --- lams_monitoring/web/WEB-INF/web.xml (.../web.xml) (revision 04ddbcceec831fcb71c1c9d160300569ac1547f6) +++ lams_monitoring/web/WEB-INF/web.xml (.../web.xml) (revision c1dfdde7a9d5ed9b49fc9772bbb9f018b085d00b) @@ -113,7 +113,7 @@ HibernateFilter - *.do + /* HibernateFilter @@ -126,6 +126,12 @@ + + createLesson + org.lamsfoundation.lams.monitoring.web.CreateLessionServlet + + +