Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/DesignDataModel.as =================================================================== diff -u -rc95f1b333e2008ea8902d1ba470d061399605c3d -rd9f9e33ff90f8ff1a0077688ad3ee5dbc233c209 --- lams_central/src/flash/org/lamsfoundation/lams/authoring/DesignDataModel.as (.../DesignDataModel.as) (revision c95f1b333e2008ea8902d1ba470d061399605c3d) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/DesignDataModel.as (.../DesignDataModel.as) (revision d9f9e33ff90f8ff1a0077688ad3ee5dbc233c209) @@ -415,6 +415,62 @@ } /** + * Returns a data object to send in a WDDX packet to the initialise a Lesson for a Normal Session + * Static call because DDM doesn't exist in the Wizard model + * + * @param title + * @param description + * @param designID + * @param orgID + * @param lExportPortfolio + * + * @return data obj + */ + + public static function getDataForInitializing(title:String, description:String, designID:Number, orgID:Number, lExportPortfolio:Boolean):Object{ + var data:Object = new Object(); + + if(title) { data.lessonName = title; } + if(description) { data.lessonDescription = description; } + + if(designID) {data.learningDesignID = designID; } + if(orgID) { data.organisationID = orgID; } + else { data.organisationID = Config.NUMERIC_NULL_VALUE; } + + if(lExportPortfolio != null) { data.learnerExportPortfolio = lExportPortfolio } + else { data.learnerExportPortfolio = false } + + data.copyType = COPY_TYPE_ID_RUN; + + return data; + } + + /** + * Returns a data object to send in a WDDX packet to the initialise a Lesson for a Preview Session + * DDM exists in + * + * @param title + * @param description + * + * @return data obj + */ + + public function getDataForPreview(title:String, description:String):Object{ + var data:Object = new Object(); + + if(title) { data.lessonName = title; } + if(description) { data.lessonDescription = description; } + + if(_learningDesignID) { data.learningDesignID = _learningDesignID; } + data.organisationID = Config.NUMERIC_NULL_VALUE; + + data.learnerExportPortfolio = false; + data.copyType = COPY_TYPE_ID_PREVIEW; + + return data; + } + + /** * Get details of currently saved design for use in workspace * * @return Design details used in Workspace Index: lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/Canvas.as =================================================================== diff -u -rb92c9032ebbd455eb0d4601d29ae2f8f6e8468e2 -rd9f9e33ff90f8ff1a0077688ad3ee5dbc233c209 --- lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/Canvas.as (.../Canvas.as) (revision b92c9032ebbd455eb0d4601d29ae2f8f6e8468e2) +++ lams_central/src/flash/org/lamsfoundation/lams/authoring/cv/Canvas.as (.../Canvas.as) (revision d9f9e33ff90f8ff1a0077688ad3ee5dbc233c209) @@ -993,18 +993,27 @@ public function launchPreviewWindow():Void{ if(_ddm.validDesign){ - var designID = _ddm.learningDesignID - var uID = Config.getInstance().userID; - var previewTitle = Dictionary.getValue('preview_btn'); - Debugger.log('Launching Preview Window',Debugger.GEN,'launchPreviewWindow','Canvas'); - var callback:Function = Proxy.create(this,onLaunchPreviewResponse); - Application.getInstance().getComms().getRequest('monitoring/monitoring.do?method=startPreviewLesson&userID='+uID+'&learningDesignID='+designID+'&title=' + previewTitle.toLowerCase() + '&description=started%20automatically ',callback, false); + Debugger.log('Launching Preview Window (initialising)',Debugger.GEN,'launchPreviewWindow','Canvas'); + var callback:Function = Proxy.create(this,onInitPreviewResponse); + Application.getInstance().getComms().sendAndReceive(_ddm.getDataForPreview(Dictionary.getValue('preview_btn'),"started%20automatically"),"monitoring/initializeLesson",callback,false) - }//Cursor.showCursor(Application.C_GATE); - //canvasModel.activeTool = null; //CanvasModel.GATE_TOOL; + //Application.getInstance().getComms().getRequest('monitoring/monitoring.do?method=startPreviewLesson&userID='+uID+'&learningDesignID='+designID+'&title=' + previewTitle.toLowerCase() + '&description=started%20automatically ',callback, false); + + } } + public function onInitPreviewResponse(r):Void{ + if(r instanceof LFError) { + r.showMessageConfirm(); + } else { + Debugger.log('Launching Preview Window (starting lesson ' + r + ')',Debugger.GEN,'onInitPreviewResponse','Canvas'); + var callback:Function = Proxy.create(this,onLaunchPreviewResponse); + Application.getInstance().getComms().getRequest('monitoring/monitoring.do?method=startPreviewLesson&lessonID='+r,callback, false); + + } + } + /** * now contains a Lession ID response from wddx packet * Returns the lessionID to send it to popup method in JsPopup . @@ -1017,6 +1026,9 @@ if(r instanceof LFError){ r.showMessageConfirm(); }else{ + + //Application.getInstance().getComms().getRequest('monitoring/monitoring.do?method=startPreviewLesson&userID='+uID+'&learningDesignID='+designID+'&title=' + previewTitle.toLowerCase() + '&description=started%20automatically ',callback, false); + //LFMessage.showMessageAlert('calling javascript from Austhor.jsp'); var uID = Config.getInstance().userID; var serverUrl = Config.getInstance().serverUrl; Index: lams_central/src/flash/org/lamsfoundation/lams/monitoring/mv/tabviews/LearnerTabView.as =================================================================== diff -u -r9ab50c7ac0968734ac995676cdba54f0c80bbeed -rd9f9e33ff90f8ff1a0077688ad3ee5dbc233c209 --- lams_central/src/flash/org/lamsfoundation/lams/monitoring/mv/tabviews/LearnerTabView.as (.../LearnerTabView.as) (revision 9ab50c7ac0968734ac995676cdba54f0c80bbeed) +++ lams_central/src/flash/org/lamsfoundation/lams/monitoring/mv/tabviews/LearnerTabView.as (.../LearnerTabView.as) (revision d9f9e33ff90f8ff1a0077688ad3ee5dbc233c209) @@ -461,20 +461,26 @@ trace("Monitor Tab Grid Width: "+s.w+" Monitor Tab Grid Height: "+s.h); trace("scp width: "+mm.getMonitor().getMV().getMonitorLearnerScp()._width) + var scpWidth:Number = mm.getMonitor().getMV().getMonitorLearnerScp()._width + var newWidth:Number + if (_activityLayer_mc._width < scpWidth){ newWidth = scpWidth - 6 }else { newWidth = _activityLayer_mc._width - } + } + for (var i=0; i= 0) { Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java =================================================================== diff -u -r08950e1090443c3423a3d1c587416a2fccd8bbdf -rd9f9e33ff90f8ff1a0077688ad3ee5dbc233c209 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java (.../MonitoringConstants.java) (revision 08950e1090443c3423a3d1c587416a2fccd8bbdf) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java (.../MonitoringConstants.java) (revision d9f9e33ff90f8ff1a0077688ad3ee5dbc233c209) @@ -30,6 +30,7 @@ public static final String MONITORING_SERVICE_BEAN_NAME = "monitoringService"; public static final String CREATE_LESSON_MESSAGE_KEY = "createLessonClass"; + public static final String INIT_LESSON_MESSAGE_KEY = "initializeLesson"; public static final String PERFORM_CHOSEN_GROUPING_KEY = "performChosenGrouping"; public static final String KEY_ORGANISATION_ID = "organisationID"; public static final String KEY_LESSON_ID = "lessonID"; Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java =================================================================== diff -u -rca668f79995a896bc1f79a2e89af255a8fe7ef76 -rd9f9e33ff90f8ff1a0077688ad3ee5dbc233c209 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision ca668f79995a896bc1f79a2e89af255a8fe7ef76) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision d9f9e33ff90f8ff1a0077688ad3ee5dbc233c209) @@ -67,13 +67,26 @@ * @return the lesson initialized. */ public Lesson initializeLesson(String lessonName, String lessonDescription,Boolean learnerExportAvailable,long learningDesignId,Integer organisationId,Integer userID); + /** + * Initialize a new lesson so as to start the learning process for a normal or preview learning session. + * It needs to notify lams which learning design it belongs to. The initialize process + * doesn't involve the setup of lesson class and organization. + * + * @param creatorUserId the user who want to create this lesson. + * @param lessonPacket The WDDX packet containing the required initialisation paramaters + * @return WDDX message packet containing the Lesson ID + * @throws Exception + */ + public String initializeLesson(Integer creatorUserId, String lessonPacket) throws Exception; + + /** * Create new lesson according to the learning design specified by the * user, but for a preview session rather than a normal learning session. * The design is not assigned to any workspace folder. */ public Lesson initializeLessonForPreview(String lessonName,String lessonDescription,long learningDesignId,Integer userID); - + /** * Create a lession according to the input lession WDDX package. The sample package is following: * Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java =================================================================== diff -u -r73d7525900f6af5419b7188f890a32101f52bfdb -rd9f9e33ff90f8ff1a0077688ad3ee5dbc233c209 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 73d7525900f6af5419b7188f890a32101f52bfdb) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision d9f9e33ff90f8ff1a0077688ad3ee5dbc233c209) @@ -82,6 +82,7 @@ import org.lamsfoundation.lams.usermanagement.exception.UserAccessDeniedException; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.usermanagement.util.LastNameAlphabeticComparator; +import org.lamsfoundation.lams.web.util.AttributeNames; import org.lamsfoundation.lams.util.Configuration; import org.lamsfoundation.lams.util.ConfigurationKeys; import org.lamsfoundation.lams.util.MessageService; @@ -422,6 +423,51 @@ } /** + * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#initializeLesson(java.util.Integer, java.lang.String) + */ + public String initializeLesson(Integer creatorUserId, String lessonPacket) throws Exception { + FlashMessage flashMessage = null; + + try{ + Hashtable table = (Hashtable)WDDXProcessor.deserialize(lessonPacket); + + // parse WDDX values + + String title = WDDXProcessor.convertToString("lessonName", table.get("lessonName")); + if ( title == null ) title = "lesson"; // TODO Use getMessage + + String desc = WDDXProcessor.convertToString("lessonDescription", table.get("lessonDescription")); + if ( desc == null ) desc = "description"; // TODO Use getMessage + + int copyType = WDDXProcessor.convertToInt("copyType", table.get("copyType")); + + Integer organisationId = WDDXProcessor.convertToInteger("organisationID", table.get("organisationID")); + long ldId = WDDXProcessor.convertToLong(AttributeNames.PARAM_LEARNINGDESIGN_ID, table.get(AttributeNames.PARAM_LEARNINGDESIGN_ID)); + + boolean learnerExportAvailable = WDDXProcessor.convertToBoolean("learnerExportPortfolio", table.get("learnerExportPortfolio")); + + // initialize lesson + + Lesson newLesson = null; + + if(copyType == LearningDesign.COPY_TYPE_PREVIEW) + newLesson = initializeLessonForPreview(title, desc, ldId, creatorUserId); + else + newLesson = initializeLesson(title, desc, learnerExportAvailable, ldId, organisationId, creatorUserId); + + if(newLesson != null) + flashMessage = new FlashMessage("initializeLesson",newLesson.getLessonId()); + + return flashMessage.serializeMessage(); + + } catch (Exception e) { + log.error("Exception occured trying to create a lesson class ",e); + throw new Exception(e); + } + + } + + /** * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#createLessonClassForLessonWDDX(Integer, String, java.util.Integer) */ public String createLessonClassForLessonWDDX(Integer creatorUserId, String lessonPacket) throws UserAccessDeniedException { Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/InitializeLessonServlet.java =================================================================== diff -u --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/InitializeLessonServlet.java (revision 0) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/InitializeLessonServlet.java (revision d9f9e33ff90f8ff1a0077688ad3ee5dbc233c209) @@ -0,0 +1,116 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +/* $$Id$$ */ +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.WebUtil; +import org.lamsfoundation.lams.util.audit.IAuditService; +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; + +/** + * Initialize a new lesson so as to start the learning process for normal or preview lesson sessions + * and return the ID of the newly created Lesson. + * + * Setup of lesson class and organisation are completed in a separate service call. + * + * @author Mitchell Seaton + * + * @version 2.0.2 + * @web:servlet name="initializeLesson" + * @web:servlet-mapping url-pattern="/initializeLesson" + */ +public class InitializeLessonServlet extends AbstractStoreWDDXPacketServlet { + //--------------------------------------------------------------------- + // Instance variables + //--------------------------------------------------------------------- + private static Logger log = Logger.getLogger(InitializeLessonServlet.class); + private static final long serialVersionUID = 6474150792777819606L; + private static IAuditService auditService; + + protected String process(String lessonPackage, HttpServletRequest request) throws Exception { + auditService = getAuditService(); + //get User infomation from shared session. + HttpSession ss = SessionManager.getSession(); + + UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); + Integer userID = (user != null) ? user.getUserID() : null; + + if(userID == 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(); + } + + if ( log.isDebugEnabled() ) { + log.debug("InitializeLessonServlet process received packet "+lessonPackage); + } + + try { + IMonitoringService monitoringService = getMonitoringService(); + return monitoringService.initializeLesson(userID, lessonPackage); + } catch ( Exception e ) { + log.error("Exception thrown while creating lesson class.",e); + FlashMessage flashMessage = FlashMessage.getExceptionOccured("initializeLesson",e.getMessage()); + auditService.log(InitializeLessonServlet.class.getName(), e.getMessage()); + return flashMessage.serializeMessage(); + } + } + + protected String getMessageKey(String packet, HttpServletRequest request) { + return MonitoringConstants.INIT_LESSON_MESSAGE_KEY; + } + + + public IMonitoringService getMonitoringService(){ + WebApplicationContext webContext = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()); + return (IMonitoringService) webContext.getBean(MonitoringConstants.MONITORING_SERVICE_BEAN_NAME); + } + + /** + * Get AuditService bean. + * @return + */ + private IAuditService getAuditService(){ + if(auditService==null){ + WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext()); + auditService = (IAuditService) ctx.getBean("auditService"); + } + return auditService; + } + +} Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java =================================================================== diff -u -rca668f79995a896bc1f79a2e89af255a8fe7ef76 -rd9f9e33ff90f8ff1a0077688ad3ee5dbc233c209 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java (.../MonitoringAction.java) (revision ca668f79995a896bc1f79a2e89af255a8fe7ef76) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java (.../MonitoringAction.java) (revision d9f9e33ff90f8ff1a0077688ad3ee5dbc233c209) @@ -155,6 +155,7 @@ * the user is to go next. * @throws IOException * @throws ServletException + * @deprecated */ public ActionForward initializeLesson(ActionMapping mapping, ActionForm form, @@ -803,15 +804,12 @@ try { Integer userID = getUserId(); - long learningDesignID = WebUtil.readLongParam(request,AttributeNames.PARAM_LEARNINGDESIGN_ID); - String title = WebUtil.readStrParam(request,"title"); - String desc = WebUtil.readStrParam(request,"description"); + long lessonID = WebUtil.readLongParam(request, AttributeNames.PARAM_LESSON_ID); - // initialize the lesson - Lesson previewLesson = monitoringService.initializeLessonForPreview(title,desc,learningDesignID,userID); - if ( previewLesson != null ) { - - long lessonID = previewLesson.getLessonId().longValue(); + /** InitializeLessonServlet handles the Lesson initialisation process. + * Create Lesson Class and start Lesson Preview. */ + + if(new Long(lessonID) != null) { monitoringService.createPreviewClassForLesson(userID, lessonID); monitoringService.startLesson(lessonID, getUserId()); Index: lams_monitoring/web/lams_wizard.swf =================================================================== diff -u -r119493e10bcf57b116fcd689cee496bcb513b6f3 -rd9f9e33ff90f8ff1a0077688ad3ee5dbc233c209 Binary files differ Index: lams_monitoring/web/lams_wizard_library.swf =================================================================== diff -u -r119493e10bcf57b116fcd689cee496bcb513b6f3 -rd9f9e33ff90f8ff1a0077688ad3ee5dbc233c209 Binary files differ