+++ /dev/null
-/**\r
- * A management class for all request sent to the server\r
- * Basically, to access the server, always get a new Request object from this class.\r
- * It will then trigger various user-interface events during the Request lifecycle. \r
- * \r
- * For the moment, it's about the "Stop" button command, handling any passed ILoadStatusable states, \r
- * and logging the Request status/errors.\r
- * \r
- * @author Charles du Jeu\r
- */\r
-qx.Class.define("org.argeo.ria.remote.RequestManager",\r
-{\r
- type : "singleton",\r
- extend : qx.core.Object,\r
- \r
- events : {\r
- /**\r
- * Triggered on the user demand at the end of the Request \r
- */\r
- "reload" : "org.argeo.ria.event.ReloadEvent"\r
- },\r
- \r
- construct : function(){\r
- this.base(arguments); \r
- },\r
- \r
- members : {\r
- /**\r
- * Sets the unique "stop" command of the application.\r
- * @param stopCommand {org.argeo.ria.event.Command} The command\r
- */\r
- setStopCommand : function(stopCommand){\r
- this.command = stopCommand;\r
- },\r
- \r
- /**\r
- * Creates a Request and handle various parts of its lifecycle.\r
- * @see org.argeo.ria.event.ReloadEvent\r
- * @see org.argeo.ria.components.ILoadStatusable\r
- * \r
- * @param url {String} The server url\r
- * @param method {String} Connexion method (POST, GET, etc.)\r
- * @param responseType {String} Expected response mime type (application/xml, etc...).\r
- * @param fireReloadEventType {String} On user-demand, if this parameter is not null, a org.argeo.ria.event.ReloadEvent will be triggered when the request is completed. \r
- * @param iLoadStatusables {Array} An array of ILoadStatusable implementations that need to be updated by the Request state (loading/ended).\r
- * @return {qx.io.remote.Request}\r
- */\r
- getRequest : function(url, method, responseType, fireReloadEventType, iLoadStatusables){\r
- var request = new qx.io.remote.Request(url, method, responseType);\r
- if(iLoadStatusables){\r
- request.setUserData("iLoadStatusables", iLoadStatusables);\r
- }\r
- if(fireReloadEventType){\r
- request.addListener("completed", function(response){\r
- this.fireReloadEvent(fireReloadEventType, response.getContent());\r
- }, this);\r
- }\r
- this.enableCommand(request);\r
- request.addListener("timeout", this.requestTerminated, this);\r
- request.addListener("failed", this.requestTerminated, this);\r
- request.addListener("aborted", this.requestTerminated, this);\r
- request.addListener("completed", this.requestCompleted, this); \r
- return request;\r
- }, \r
- \r
- /**\r
- * Creates a ReloadEvent and fire it.\r
- * @param dataType {String} The data type \r
- * @param content {mixed} The content of the request response.\r
- */\r
- fireReloadEvent : function(dataType, content){\r
- this.fireEvent("reload", org.argeo.ria.event.ReloadEvent, [dataType, content]); \r
- },\r
- \r
- /**\r
- * Triggered when request is created\r
- * @param e {qx.event.type.Event} The event\r
- */\r
- requestCreated : function(e){\r
- var request = e.getTarget();\r
- this.enableCommand(request);\r
- },\r
- \r
- /**\r
- * Triggered when request is completed normally\r
- * @param e {qx.event.type.Event} The event\r
- */\r
- requestCompleted : function(e){\r
- var request = e.getTarget();\r
- this.disableCommand(request);\r
- },\r
- \r
- /**\r
- * Triggered when request is completed abnormally\r
- * @param e {qx.event.type.Event} The event\r
- */\r
- requestTerminated : function(e){\r
- var request = e.getTarget();\r
- var errorType = e.getType();\r
- this.disableCommand(request);\r
- var message = "";\r
- if(errorType == "aborted"){\r
- message = "Request aborted by user";\r
- }else if(errorType == "failed"){\r
- message = "Request failed!";\r
- }else if(errorType == "timeout"){\r
- message = "Request timed out!";\r
- }\r
- this.error(message);\r
- },\r
- \r
- /**\r
- * Triggered by a request creation. Update the GUI parts according to its status. \r
- * @param request {qx.io.remote.Request} The current Request \r
- */\r
- disableCommand : function(request){\r
- this.command.setEnabled(false);\r
- if(request.getUserData("iLoadStatusables")){\r
- this.updateGuiParts(request.getUserData("iLoadStatusables"), false);\r
- }\r
- var listener = request.getUserData("listener");\r
- if(listener){\r
- this.command.removeListener("execute", listener);\r
- }\r
- },\r
- \r
- /**\r
- * Triggered by a request ending. Update the GUI parts according to its status. \r
- * @param request {qx.io.remote.Request} The current Request \r
- */\r
- enableCommand : function(request){\r
- this.command.setEnabled(true);\r
- if(request.getUserData("iLoadStatusables")){\r
- this.updateGuiParts(request.getUserData("iLoadStatusables"), true);\r
- }\r
- qx.ui.core.queue.Manager.flush();\r
- var listener = request.abort;\r
- request.setUserData("listener", listener);\r
- this.command.addListener("execute", listener, request);\r
- },\r
- \r
- /**\r
- * Update the ILoadStatusable implementations\r
- * @param iLoadStatusables {Array} An array of ILoadStatusable \r
- * @param loadStatus {Boolean} The current status of a request \r
- */\r
- updateGuiParts : function(iLoadStatusables, loadStatus){\r
- for(var i=0;i<iLoadStatusables.length;i++){\r
- if(qx.Class.implementsInterface(qx.Class.getByName(iLoadStatusables[i].classname), org.argeo.ria.components.ILoadStatusable)){\r
- iLoadStatusables[i].setOnLoad(loadStatus);\r
- }else{\r
- this.debug("Does not implement the ILoadStatusable interface! GUIPART type : "+ iLoadStatusables[i].classname);\r
- }\r
- }\r
- }\r
- }\r
-});
\ No newline at end of file