]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc.webapp/src/main/webapp/source/class/org/argeo/slc/web/util/RequestManager.js
db6dd8a3a4943456632837e76e2449cefa4378e6
[gpl/argeo-slc.git] / org.argeo.slc.webapp / src / main / webapp / source / class / org / argeo / slc / web / util / RequestManager.js
1 qx.Class.define("org.argeo.slc.web.util.RequestManager",
2 {
3 type : "singleton",
4 extend : qx.core.Object,
5
6 events : {
7 "reload" : "org.argeo.slc.web.event.ReloadEvent"
8 },
9
10 construct : function(){
11 this.base(arguments);
12 },
13
14 members : {
15
16 setStopCommand : function(stopCommand){
17 this.command = stopCommand;
18 },
19
20 getRequest : function(url, method, responseType, fireReloadEventType, iLoadStatusables){
21 var request = new qx.io.remote.Request(url, method, responseType);
22 if(iLoadStatusables){
23 request.setUserData("iLoadStatusables", iLoadStatusables);
24 }
25 if(fireReloadEventType){
26 request.addListener("completed", function(response){
27 this.fireReloadEvent(fireReloadEventType, response.getContent());
28 }, this);
29 }
30 this.enableCommand(request);
31 request.addListener("timeout", this.requestTerminated, this);
32 request.addListener("failed", this.requestTerminated, this);
33 request.addListener("aborted", this.requestTerminated, this);
34 request.addListener("completed", this.requestCompleted, this);
35 return request;
36 },
37
38 fireReloadEvent : function(dataType, content){
39 this.fireEvent("reload", org.argeo.slc.web.event.ReloadEvent, [dataType, content]);
40 },
41
42 requestCreated : function(e){
43 var request = e.getTarget();
44 this.enableCommand(request);
45 },
46
47 requestCompleted : function(e){
48 var request = e.getTarget();
49 this.disableCommand(request);
50 },
51
52 requestTerminated : function(e){
53 var request = e.getTarget();
54 var errorType = e.getType();
55 this.disableCommand(request);
56 var message = "";
57 if(errorType == "aborted"){
58 message = "Request aborted by user";
59 }else if(errorType == "failed"){
60 message = "Request failed!";
61 }else if(errorType == "timeout"){
62 message = "Request timed out!";
63 }
64 this.error(message);
65 },
66
67 disableCommand : function(request){
68 this.command.setEnabled(false);
69 if(request.getUserData("iLoadStatusables")){
70 this.updateGuiParts(request.getUserData("iLoadStatusables"), false);
71 }
72 var listener = request.getUserData("listener");
73 if(listener){
74 this.command.removeListener("execute", listener);
75 }
76 },
77
78 enableCommand : function(request){
79 this.command.setEnabled(true);
80 if(request.getUserData("iLoadStatusables")){
81 this.updateGuiParts(request.getUserData("iLoadStatusables"), true);
82 }
83 qx.ui.core.queue.Manager.flush();
84 var listener = request.abort;
85 request.setUserData("listener", listener);
86 this.command.addListener("execute", listener, request);
87 },
88
89 updateGuiParts : function(iLoadStatusables, loadStatus){
90 for(var i=0;i<iLoadStatusables.length;i++){
91 if(qx.Class.implementsInterface(qx.Class.getByName(iLoadStatusables[i].classname), org.argeo.slc.web.components.ILoadStatusable)){
92 iLoadStatusables[i].setOnLoad(loadStatus);
93 }else{
94 this.debug("Does not implement the ILoadStatusable interface! GUIPART type : "+ iLoadStatusables[i].classname);
95 }
96 }
97 }
98 }
99 });