Index: lams_central/src/java/org/lamsfoundation/lams/web/PresenceServlet.java =================================================================== diff -u -r4b24094f139dd10a9779ce6e678cb8ca38317148 -rdeab1a0aef578ae38f893dd99735fd61cbb85936 --- lams_central/src/java/org/lamsfoundation/lams/web/PresenceServlet.java (.../PresenceServlet.java) (revision 4b24094f139dd10a9779ce6e678cb8ca38317148) +++ lams_central/src/java/org/lamsfoundation/lams/web/PresenceServlet.java (.../PresenceServlet.java) (revision deab1a0aef578ae38f893dd99735fd61cbb85936) @@ -50,10 +50,12 @@ import org.lamsfoundation.lams.util.wddx.FlashMessage; /** - * @author pgeorges - * - * @web:servlet name="XMPP" - * @web:servlet-mapping url-pattern="/XMPP" + * @author Paul Georges + * @struts.action + * path = "/Presence" + * parameter = "method" + * validate = "false" + * @struts.action-forward name = "success" path = "/index.jsp" */ public class PresenceServlet extends LamsDispatchAction{ Index: lams_flash/src/central/flash/lams_learner.fla =================================================================== diff -u -rb5f1c6147aeaaec0f5084813209fe0cf59a1c386 -rdeab1a0aef578ae38f893dd99735fd61cbb85936 Binary files differ Index: lams_flash/src/central/flash/lams_monitoring_v1.fla =================================================================== diff -u -r26cc52350052392fed362c09ccb27a8ef43ce845 -rdeab1a0aef578ae38f893dd99735fd61cbb85936 Binary files differ Index: lams_flash/src/central/flash/main2.as =================================================================== diff -u -r3c82bedbc1162c8253d794dff60043a758605fb0 -rdeab1a0aef578ae38f893dd99735fd61cbb85936 --- lams_flash/src/central/flash/main2.as (.../main2.as) (revision 3c82bedbc1162c8253d794dff60043a758605fb0) +++ lams_flash/src/central/flash/main2.as (.../main2.as) (revision deab1a0aef578ae38f893dd99735fd61cbb85936) @@ -84,6 +84,11 @@ Debugger.log("PRESENCE: from javascript - " + msg, Debugger.MED, 'sendMessageToFlash', 'ROOT'); } +function attemptRegistration(){ + Debugger.log("PRESENCE: registration caught in main", Debugger.MED, 'sendMessageToFlash', 'ROOT'); + app.getPresence().attemptRegistration(); +} + function sendUsersToFlash(users:Array){ Debugger.log('PRESENCE: ' + users, Debugger.MED, 'sendUsersToFlash', 'ROOT'); app.getPresence().setupDataGrid(users); Index: lams_flash/src/central/flash/org/lamsfoundation/lams/learner/Presence.as =================================================================== diff -u -r5bdc7f93cfd1d06601a3dcc016546903bd170fab -rdeab1a0aef578ae38f893dd99735fd61cbb85936 --- lams_flash/src/central/flash/org/lamsfoundation/lams/learner/Presence.as (.../Presence.as) (revision 5bdc7f93cfd1d06601a3dcc016546903bd170fab) +++ lams_flash/src/central/flash/org/lamsfoundation/lams/learner/Presence.as (.../Presence.as) (revision deab1a0aef578ae38f893dd99735fd61cbb85936) @@ -19,53 +19,53 @@ * * http://www.gnu.org/licenses/gpl.txt * ************************************************************************ - */ - -import org.lamsfoundation.lams.learner.*; + */ + +import org.lamsfoundation.lams.learner.*; import org.lamsfoundation.lams.learner.ls.*; -import org.lamsfoundation.lams.common.Sequence; +import org.lamsfoundation.lams.common.Sequence; import org.lamsfoundation.lams.common.ToolTip; import org.lamsfoundation.lams.common.util.*; -import org.lamsfoundation.lams.common.dict.*; -import org.lamsfoundation.lams.common.style.*; -import org.lamsfoundation.lams.common.ApplicationParent; -import mx.controls.* -import mx.utils.* -import mx.managers.* -import mx.events.* +import org.lamsfoundation.lams.common.dict.*; +import org.lamsfoundation.lams.common.style.*; +import org.lamsfoundation.lams.common.ApplicationParent; +import mx.controls.* +import mx.utils.* +import mx.managers.* +import mx.events.* -class Presence extends MovieClip { - - //Height Properties - private var presenceHeightHide:Number = 20; - private var presenceHeightFull:Number = 217; - - //Open Close Identifier - private var _presenceIsExpanded:Boolean; - - //Presence stuff - private var selectedChatItem:Object; - private var lastClickX:Number; - private var lastClickY:Number; - private var clickInterval:Number; - private var dataGridInitialized:Boolean; - private var DOUBLECLICKSPEED:Number = 500; - private var chatDialog:MovieClip; - - //Component properties - private var _presence_mc:MovieClip; - private var presenceHead_pnl:MovieClip; - private var presenceTitle_lbl:Label; - private var presenceMinIcon:MovieClip; - private var presenceMaxIcon:MovieClip; - private var presenceClickTarget_mc:MovieClip; - private var _tip:ToolTip; - private var _users_dg:DataGrid; - +class Presence extends MovieClip { + + //Height Properties + private var presenceHeightHide:Number = 20; + private var presenceHeightFull:Number = 217; + + //Open Close Identifier + private var _presenceIsExpanded:Boolean; + + //Presence stuff + private var selectedChatItem:Object; + private var lastClickX:Number; + private var lastClickY:Number; + private var clickInterval:Number; + private var dataGridInitialized:Boolean; + private var DOUBLECLICKSPEED:Number = 500; + private var chatDialog:MovieClip; + + //Component properties + private var _presence_mc:MovieClip; + private var presenceHead_pnl:MovieClip; + private var presenceTitle_lbl:Label; + private var presenceMinIcon:MovieClip; + private var presenceMaxIcon:MovieClip; + private var presenceClickTarget_mc:MovieClip; + private var _tip:ToolTip; + private var _users_dg:DataGrid; + private var panel:MovieClip; - private var _lessonModel:LessonModel; - private var _lessonController:LessonController; - private var _tm:ThemeManager; + private var _lessonModel:LessonModel; + private var _lessonController:LessonController; + private var _tm:ThemeManager; private var _dictionary:Dictionary; //These are defined so that the compiler can 'see' the events that are added at runtime by EventDispatcher @@ -74,193 +74,214 @@ public var removeEventListener:Function; // Constructor - public function Presence() { - Debugger.log('PRESENCE: started constructor',Debugger.MED,'Presence','Presence'); + public function Presence() { + Debugger.log('PRESENCE: started constructor',Debugger.MED,'Presence','Presence'); // Set up this class to use the Flash event delegation model - EventDispatcher.initialize(this); - - _tm = ThemeManager.getInstance(); - _tip = new ToolTip(); - _dictionary = Dictionary.getInstance(); - _dictionary.addEventListener('init',Proxy.create(this,setLabels)); - this._visible = false; - - Stage.addListener(this); - - // Let it wait one frame to set up the components. - MovieClipUtils.doLater(Proxy.create(this,init)); - Debugger.log('PRESENCE: calling init method',Debugger.MED,'Presence','Presence'); + EventDispatcher.initialize(this); + + _tm = ThemeManager.getInstance(); + _tip = new ToolTip(); + _dictionary = Dictionary.getInstance(); + _dictionary.addEventListener('init',Proxy.create(this,setLabels)); + this._visible = false; + + Stage.addListener(this); + + // Let it wait one frame to set up the components. + MovieClipUtils.doLater(Proxy.create(this,init)); + Debugger.log('PRESENCE: calling init method',Debugger.MED,'Presence','Presence'); } // Called a frame after movie attached to allow components to initialise - public function init(){ - Debugger.log('PRESENCE: started init',Debugger.MED,'init','Presence'); + public function init(){ + Debugger.log('PRESENCE: started init',Debugger.MED,'init','Presence'); //Delete the enterframe dispatcher delete this.onEnterFrame; - _lessonModel = _lessonModel; - _lessonController = _lessonController; - _presence_mc = this; - _presenceIsExpanded = true; - dataGridInitialized = false; - presenceMaxIcon._visible = false; - presenceMinIcon._visible = true; - dataGridInitialized = false; - _lessonModel.setPresenceHeight(presenceHeightFull); - setLabels(); - resize(Stage.width); - - presenceClickTarget_mc.onRelease = Proxy.create(this, localOnRelease); - + _lessonModel = _lessonModel; + _lessonController = _lessonController; + _presence_mc = this; + _presenceIsExpanded = true; + dataGridInitialized = false; + presenceMaxIcon._visible = false; + presenceMinIcon._visible = true; + dataGridInitialized = false; + _lessonModel.setPresenceHeight(presenceHeightFull); + setLabels(); + resize(Stage.width); + + presenceClickTarget_mc.onRelease = Proxy.create(this, localOnRelease); + this.onEnterFrame = setLabels; - } - - // Click handler - private function localOnRelease():Void{ - if (_presenceIsExpanded){ - _presenceIsExpanded = false - presenceMinIcon._visible = false; - presenceMaxIcon._visible = true; - _lessonModel.setPresenceHeight(presenceHeightHide); - - }else { - _presenceIsExpanded = true - presenceMinIcon._visible = true; - presenceMaxIcon._visible = false; - _lessonModel.setPresenceHeight(presenceHeightFull); - //Application.getInstance().onResize(); - } - } - - // Attempts a connection with a given Jabber server - public function attemptConnection():Void{ - Debugger.log('PRESENCE: attempting to connect through Javascript',Debugger.MED,'attemptConnection','Presence'); - - var myDate = new Date(); - var h = myDate.getHours().toString(), m = myDate.getMinutes().toString(), s = myDate.getSeconds().toString(); - var resource = "LAMSPRESENCE"+h+""+m+""+s; - - Debugger.log("PRESENCE: with arguements - " + String(_root.presenceServerUrl) + " " + String(_root.userID) + " " + String(_root.userID) + " " + String(resource) + " " + String(_root.lessonID) + " " + _root.firstName + _root.lastName + " " + "false" + " " + "true",Debugger.MED,'attemptConnection','Presence'); - _root.proxy.call("doLogin", _root.presenceServerUrl, _root.userID, _root.userID, resource, _root.lessonID, _root.firstName + " " + _root.lastName, false, true); - } - - public function isPresenceExpanded():Boolean{ - return _presenceIsExpanded; - } - - public function presenceFullHeight():Number{ - return presenceHeightFull; - } - - public function showToolTip(btnObj, btnTT:String):Void{ - var Xpos = Application.HEADER_X+ 5; - var Ypos = Application.HEADER_Y+( btnObj._y+btnObj._height)+2; - var ttHolder = ApplicationParent.tooltip; - var ttMessage = Dictionary.getValue(btnTT); - var ttWidth = 150 - _tip.DisplayToolTip(ttHolder, ttMessage, Xpos, Ypos, undefined, ttWidth); - } - - public function hideToolTip():Void{ - _tip.CloseToolTip(); - } - - private function setStyles(){ - Debugger.log('PRESENCE: setting styles',Debugger.MED,'setStyles','Presence'); - var styleObj = _tm.getStyleObject('smallLabel'); - - styleObj = _tm.getStyleObject('textarea'); - presenceTitle_lbl.setStyle('styleName', styleObj); - - //For Panels - styleObj = _tm.getStyleObject('BGPanel'); - presenceHead_pnl.setStyle('styleName',styleObj); - } - - private function setLabels(){ - Debugger.log('PRESENCE: setting labels',Debugger.MED,'setLabels','Presence'); - - presenceTitle_lbl.text = Dictionary.getValue('pres_panel_lbl'); - setStyles(); - setupDataGrid(null); - delete this.onEnterFrame; - dispatchEvent({type:'load',target:this}); - - } - - public function setupDataGrid(dataProvider:Array){ - // If datagrid is not initialized, do so - if(!dataGridInitialized) { - Debugger.log('PRESENCE: setting up dataGrid',Debugger.MED,'setLabels','Presence'); - - _users_dg.addEventListener("cellPress", Proxy.create(this, cellPress)); - _users_dg.columnNames = ["nick"]; - - var col:mx.controls.gridclasses.DataGridColumn; - col = _users_dg.getColumnAt(0); - col.headerText = Dictionary.getValue('pres_colnamelearners_lbl'); - col.width = _users_dg._width; - dataGridInitialized = true; - } - - // If dataprovider is null (called from Presence), set label to loading and wait for call from javascript - if(!dataProvider) { - _users_dg.dataProvider = [{nick:Dictionary.getValue('pres_dataproviderloading_lbl')}]; - } - // Initialize dataprovider from javascript - else { - _users_dg.dataProvider = dataProvider; - _users_dg.sortItemsBy("nick"); - _users_dg.invalidate(); - } - - - } - - private function cellPress(event) { - // I'm not clicking on an empty cell - if (event.target.selectedItem.nick != undefined) { - //Double click action - if (clickInterval != null && _users_dg.selectedItem.nick == selectedChatItem.nick) { - Debugger.log('PRESENCE: double click event',Debugger.MED,'cellPress','Presence'); - - //_debugDialog = PopUpManager.createPopUp(Application.root, LFWindow, false,{title:'Debug',closeButton:true,scrollContentPath:'debugDialog'}); - - clearInterval(clickInterval); - clickInterval = null; - // First click - } else { - clearInterval(clickInterval); - clickInterval = null; - selectedChatItem = _users_dg.selectedItem; - lastClickX = _root._xmouse; - lastClickY = _root._ymouse; - clickInterval = setInterval(Proxy.create(this, endClickTimer), DOUBLECLICKSPEED); - } - } - } - - private function endClickTimer() { - // Do actions of first click - Debugger.log('PRESENCE: single click event',Debugger.MED,'cellPress','Presence'); - clearInterval(clickInterval); - //ajoutMenuChat(xK, yK); - clickInterval = null; - } - - public function resize(width:Number){ - panel._width = width; - - } + } + // Click handler + private function localOnRelease():Void{ + if (_presenceIsExpanded){ + _presenceIsExpanded = false + presenceMinIcon._visible = false; + presenceMaxIcon._visible = true; + _lessonModel.setPresenceHeight(presenceHeightHide); + + }else { + _presenceIsExpanded = true + presenceMinIcon._visible = true; + presenceMaxIcon._visible = false; + _lessonModel.setPresenceHeight(presenceHeightFull); + //Application.getInstance().onResize(); + } + } + + // Attempts a connection with a given Jabber server + public function attemptConnection():Void{ + Debugger.log('PRESENCE: attempting to connect through Javascript',Debugger.MED,'attemptConnection','Presence'); + + var myDate = new Date(); + var h = myDate.getHours().toString(), m = myDate.getMinutes().toString(), s = myDate.getSeconds().toString(); + var resource = "LAMSPRESENCE"+h+""+m+""+s; + + Debugger.log("PRESENCE: with arguements - " + String(_root.presenceServerUrl) + " " + String(_root.userID) + " " + String(_root.userID) + " " + String(resource) + " " + String(_root.lessonID) + " " + _root.firstName + _root.lastName + " " + "false" + " " + "true",Debugger.MED,'attemptConnection','Presence'); + _root.proxy.call("doLogin", _root.presenceServerUrl, _root.userID, _root.userID, resource, _root.lessonID, _root.firstName + " " + _root.lastName, false, true); + } + + // Attempts to register to the Jabber server + public function attemptRegistration():Void{ + Debugger.log('PRESENCE: attempting to register through Java call', Debugger.MED, 'attemptRegistration', 'Presence'); + + var callback:Function = Proxy.create(this, handlePresenceRegistration); + Application.getInstance().getComms().getRequest('Presence.do?method=createXmppId', callback, false); + } + + // Callback for Jabber server registration + public function handlePresenceRegistration(registrationInfo:Object):Void{ + Debugger.log('PRESENCE: registration handled' + String(registrationInfo), Debugger.MED, 'handlePresenceRegistration', 'Presence'); + + if (registrationInfo) { + Debugger.log('PRESENCE: registration succeeded', Debugger.MED, 'handlePresenceRegistration', 'Presence'); + attemptConnection(); + } + else { + Debugger.log('PRESENCE: registration failed', Debugger.MED, 'handlePresenceRegistration', 'Presence'); + } + } + + public function isPresenceExpanded():Boolean{ + return _presenceIsExpanded; + } + + public function presenceFullHeight():Number{ + return presenceHeightFull; + } + + public function showToolTip(btnObj, btnTT:String):Void{ + var Xpos = Application.HEADER_X+ 5; + var Ypos = Application.HEADER_Y+( btnObj._y+btnObj._height)+2; + var ttHolder = ApplicationParent.tooltip; + var ttMessage = Dictionary.getValue(btnTT); + var ttWidth = 150 + _tip.DisplayToolTip(ttHolder, ttMessage, Xpos, Ypos, undefined, ttWidth); + } + + public function hideToolTip():Void{ + _tip.CloseToolTip(); + } + + private function setStyles(){ + Debugger.log('PRESENCE: setting styles',Debugger.MED,'setStyles','Presence'); + var styleObj = _tm.getStyleObject('smallLabel'); + + styleObj = _tm.getStyleObject('textarea'); + presenceTitle_lbl.setStyle('styleName', styleObj); + + //For Panels + styleObj = _tm.getStyleObject('BGPanel'); + presenceHead_pnl.setStyle('styleName',styleObj); + } + + private function setLabels(){ + Debugger.log('PRESENCE: setting labels',Debugger.MED,'setLabels','Presence'); + + presenceTitle_lbl.text = Dictionary.getValue('pres_panel_lbl'); + setStyles(); + setupDataGrid(null); + delete this.onEnterFrame; + dispatchEvent({type:'load',target:this}); + + } + + public function setupDataGrid(dataProvider:Array){ + // If datagrid is not initialized, do so + if(!dataGridInitialized) { + Debugger.log('PRESENCE: setting up dataGrid',Debugger.MED,'setLabels','Presence'); + + _users_dg.addEventListener("cellPress", Proxy.create(this, cellPress)); + _users_dg.columnNames = ["nick"]; + + var col:mx.controls.gridclasses.DataGridColumn; + col = _users_dg.getColumnAt(0); + col.headerText = Dictionary.getValue('pres_colnamelearners_lbl'); + col.width = _users_dg._width; + dataGridInitialized = true; + } + + // If dataprovider is null (called from Presence), set label to loading and wait for call from javascript + if(!dataProvider) { + _users_dg.dataProvider = [{nick:Dictionary.getValue('pres_dataproviderloading_lbl')}]; + } + // Initialize dataprovider from javascript + else { + _users_dg.dataProvider = dataProvider; + _users_dg.sortItemsBy("nick"); + _users_dg.invalidate(); + } + + + } + + private function cellPress(event) { + // I'm not clicking on an empty cell + if (event.target.selectedItem.nick != undefined) { + //Double click action + if (clickInterval != null && _users_dg.selectedItem.nick == selectedChatItem.nick) { + Debugger.log('PRESENCE: double click event',Debugger.MED,'cellPress','Presence'); + + //_debugDialog = PopUpManager.createPopUp(Application.root, LFWindow, false,{title:'Debug',closeButton:true,scrollContentPath:'debugDialog'}); + + clearInterval(clickInterval); + clickInterval = null; + // First click + } else { + clearInterval(clickInterval); + clickInterval = null; + selectedChatItem = _users_dg.selectedItem; + lastClickX = _root._xmouse; + lastClickY = _root._ymouse; + clickInterval = setInterval(Proxy.create(this, endClickTimer), DOUBLECLICKSPEED); + } + } + } + + private function endClickTimer() { + // Do actions of first click + Debugger.log('PRESENCE: single click event',Debugger.MED,'cellPress','Presence'); + clearInterval(clickInterval); + //ajoutMenuChat(xK, yK); + clickInterval = null; + } + + public function resize(width:Number){ + panel._width = width; + + } + function get className():String { return 'Presence'; - } - - public function showPresence(v:Boolean) { - Debugger.log("Show/Hide Presence: " + v, Debugger.GEN, "showPresence", "Presence"); - this._visible = v; - } - + } + + public function showPresence(v:Boolean) { + Debugger.log("Show/Hide Presence: " + v, Debugger.GEN, "showPresence", "Presence"); + this._visible = v; + } + } \ No newline at end of file Index: lams_learning/web/includes/presence.js =================================================================== diff -u -r0b7d091f6bf6d5b3b2bd72b450903f0dc0f8b76c -rdeab1a0aef578ae38f893dd99735fd61cbb85936 --- lams_learning/web/includes/presence.js (.../presence.js) (revision 0b7d091f6bf6d5b3b2bd72b450903f0dc0f8b76c) +++ lams_learning/web/includes/presence.js (.../presence.js) (revision deab1a0aef578ae38f893dd99735fd61cbb85936) @@ -297,20 +297,25 @@ } } function handleError(e) { - //debug statement for error� - //alert("error" + e.getAttribute("code")); - if(FROMFLASH){ // notify flash flashProxy.call("sendMessageToFlash", "Code: " + e.getAttribute("code") + " Type: " + e.getAttribute("type")); - } - - switch(e.getAttribute("code")){ + + switch(e.getAttribute("code")){ // unauthorized, try register case "401": - doLogin(null, null, null, null, null, null, true, null); + flashProxy.call("attemptRegistration"); break; + } } + else{ + switch(e.getAttribute("code")){ + // unauthorized, try register + case "401": + attemptRegistration(); + break; + } + } } function breakPoint() { Index: lams_learning/web/lams_learner.swf =================================================================== diff -u -r3c82bedbc1162c8253d794dff60043a758605fb0 -rdeab1a0aef578ae38f893dd99735fd61cbb85936 Binary files differ Index: lams_learning/web/mainnoflash.jsp =================================================================== diff -u -r5bdc7f93cfd1d06601a3dcc016546903bd170fab -rdeab1a0aef578ae38f893dd99735fd61cbb85936 --- lams_learning/web/mainnoflash.jsp (.../mainnoflash.jsp) (revision 5bdc7f93cfd1d06601a3dcc016546903bd170fab) +++ lams_learning/web/mainnoflash.jsp (.../mainnoflash.jsp) (revision deab1a0aef578ae38f893dd99735fd61cbb85936) @@ -45,19 +45,32 @@