]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc.webapp/src/main/webapp/source/class/org/argeo/slc/web/util/RequestManager.js
Last compile
[gpl/argeo-slc.git] / org.argeo.slc.webapp / src / main / webapp / source / class / org / argeo / slc / web / util / RequestManager.js
index a9ee7307d54556ee557962b2125bc39bee08cc8f..db6dd8a3a4943456632837e76e2449cefa4378e6 100644 (file)
@@ -3,6 +3,10 @@ qx.Class.define("org.argeo.slc.web.util.RequestManager",
        type : "singleton",\r
        extend : qx.core.Object,\r
   \r
+       events : {\r
+               "reload" : "org.argeo.slc.web.event.ReloadEvent"\r
+       },\r
+       \r
        construct : function(){\r
                this.base(arguments);           \r
        },\r
@@ -13,43 +17,58 @@ qx.Class.define("org.argeo.slc.web.util.RequestManager",
                        this.command = stopCommand;\r
                },\r
                \r
-               getRequest : function(url, method, responseType){\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", function(e){\r
-                               this.requestTimeout(request);\r
-                       }, this);\r
-                       request.addListener("failed", function(e){\r
-                               this.requestFailed(request);\r
-                       }, this);\r
-                       request.addListener("aborted", function(e){\r
-                               this.requestFailed(request);\r
-                       }, this);\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
-               requestCreated : function(req){\r
-                       this.enableCommand(req);\r
+               fireReloadEvent : function(dataType, content){\r
+                       this.fireEvent("reload", org.argeo.slc.web.event.ReloadEvent, [dataType, content]);                     \r
                },\r
                \r
-               requestAborted : function(req){\r
-                       this.disableCommand(req);\r
+               requestCreated : function(e){\r
+                       var request = e.getTarget();\r
+                       this.enableCommand(request);\r
                },\r
                \r
-               requestFailed : function(req){\r
-                       this.disableCommand(req);\r
+               requestCompleted : function(e){\r
+                       var request = e.getTarget();\r
+                       this.disableCommand(request);\r
                },\r
                \r
-               requestTimeout : function(req){\r
-                       this.disableCommand(req);\r
-               },\r
-\r
-               requestCompleted : function(request){\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
                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
@@ -58,10 +77,23 @@ qx.Class.define("org.argeo.slc.web.util.RequestManager",
                \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);\r
+                       this.command.addListener("execute", listener, request);\r
+               },\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.slc.web.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