]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc.webapp/src/main/webapp/source/class/org/argeo/slc/web/TestList.js
error
[gpl/argeo-slc.git] / org.argeo.slc.webapp / src / main / webapp / source / class / org / argeo / slc / web / TestList.js
1 /**
2 * @author Charles
3 */
4 qx.Class.define("org.argeo.slc.web.TestList",
5 {
6 extend : qx.ui.container.Composite,
7 implement : [org.argeo.ria.components.IView],
8
9 construct : function(){
10 this.base(arguments, new qx.ui.layout.VBox());
11 var model = new qx.ui.table.model.Simple();
12 model.setColumns(["Test Case", "Date"]);
13 this.table = new qx.ui.table.Table(model, {
14 tableColumnModel: function(obj){
15 return new qx.ui.table.columnmodel.Resize(obj)
16 }
17 });
18 },
19
20 properties :
21 {
22 view : {
23 init : null
24 },
25 collectionList : {
26 init : {},
27 check : "Map"
28 },
29 collectionId:{
30 init : 'My Collection',
31 check : "String"
32 },
33 commands : {
34 init : {
35 "loadtestlist" : {
36 label : "Load Collection",
37 icon : "resource/slc/view-refresh.png",
38 shortcut : "Control+l",
39 enabled : true,
40 menu : "Collection",
41 toolbar : "collection",
42 callback : function(e){
43 this.loadList();
44 },
45 command : null
46 },
47 "polllistloading" : {
48 label : "Auto load",
49 icon : "resource/slc/document-open-recent.png",
50 shortcut : "Control+l",
51 enabled : true,
52 toggle : true,
53 menu : "Collection",
54 toolbar : "collection",
55 callback : function(event){
56 this.pollListLoading(event.getTarget().getUserData("slc.command.toggleState"));
57 },
58 command : null
59 },
60 /*
61 "copyfullcollection" : {
62 label : "Copy to...",
63 icon : "resource/slc/edit-copy.png",
64 shortcut : null,
65 enabled : false,
66 menu : "Collection",
67 toolbar : "collection",
68 callback : function(e){
69 // Call service to copy
70 },
71 submenu : {},
72 submenuCallback : function(commandId){
73 this.copySelectionToCollection(commandId, "current_collection");
74 },
75 init : function(){
76 // Call at command creation
77 org.argeo.ria.remote.RequestManager.getInstance().addListener("reload", function(event){
78 if(event.getDataType() == "collection" || event.getDataType() == "test_cases"){
79 var testList = org.argeo.ria.components.ViewsManager.getInstance().getViewPaneById("list").getContent();
80 testList.collectionListToMenu(this);
81 }
82 }, this);
83 },
84 command : null
85 },
86 */
87 "opentest" : {
88 label : "Open",
89 icon : "resource/slc/media-playback-start.png",
90 shortcut : "Control+o",
91 enabled : false,
92 menu : "Selection",
93 toolbar : "selection",
94 callback : function(e){
95 var viewsManager = org.argeo.ria.components.ViewsManager.getInstance();
96 var classObj = org.argeo.slc.ria.Applet;
97 var iView = viewsManager.initIViewClass(classObj, "applet");
98 var xmlNodes = viewsManager.getViewPaneSelection("list").getNodes();
99 iView.load(xmlNodes[0]);
100 },
101 selectionChange : function(viewId, xmlNodes){
102 if(viewId != "list") return;
103 this.setEnabled(false);
104 if(xmlNodes == null || !xmlNodes.length) return;
105 this.setEnabled(true);
106 },
107 command : null
108 },
109 "download" : {
110 label : "Download as...",
111 icon : "resource/slc/go-down.png",
112 shortcut : null,
113 enabled : false,
114 menu : "Selection",
115 toolbar : "selection",
116 callback : function(e){ },
117 command : null,
118 submenu : [
119 {'label':"Xsl", 'icon':'resource/slc/mime-xsl.png', 'commandId':'xsl'},
120 {'label':"Xml", 'icon':'resource/slc/mime-xml.png', 'commandId':'xml'},
121 {'label':"Excel", 'icon':'resource/slc/mime-xls.png', 'commandId':'xls'},
122 {'label':"Pdf", 'icon':'resource/slc/mime-pdf.png', 'commandId':'pdf'}
123 ],
124 submenuCallback : function(commandId){
125 var uuid = this.extractTestUuid();
126 var urls = {
127 xsl : "resultView.xslt",
128 xml : "resultViewXml.xslt",
129 xls : "resultView.xls",
130 pdf : "resultView.pdf"
131 };
132 var url = "../"+urls[commandId]+"?uuid="+uuid;
133 if(commandId == "xls" || commandId == "pdf"){
134 document.location.href = url;
135 }else{
136 var win = window.open(url);
137 }
138 },
139 selectionChange : function(viewId, xmlNodes){
140 if(viewId!="list")return;
141 //this.clearMenus();
142 this.setEnabled(false);
143 if(xmlNodes == null || !xmlNodes.length) return;
144 this.setEnabled(true);
145 }
146 },
147 "copytocollection" : {
148 label : "Copy to...",
149 icon : "resource/slc/edit-copy.png",
150 shortcut : "Control+c",
151 enabled : false,
152 menu : "Selection",
153 toolbar : "selection",
154 callback : function(e){
155 // Call service to copy
156 },
157 submenu : {},
158 submenuCallback : function(commandId){
159 this.copySelectionToCollection(commandId, "current_selection");
160 },
161 init : function(){
162 // Call at command creation
163 org.argeo.ria.remote.RequestManager.getInstance().addListener("reload", function(event){
164 if(event.getDataType() == "collection" || event.getDataType() == "test_cases"){
165 var testList = org.argeo.ria.components.ViewsManager.getInstance().getViewPaneById("list").getContent();
166 testList.collectionListToMenu(this, true);
167 }
168 }, this);
169 },
170 selectionChange : function(viewId, xmlNodes){
171 if(viewId != "list") return;
172 this.setEnabled(false);
173 if(xmlNodes == null || !xmlNodes.length) return;
174 this.setEnabled(true);
175 },
176 command : null
177 },
178 "deletetest" : {
179 label : "Delete",
180 icon : "resource/slc/edit-delete.png",
181 shortcut : "Control+d",
182 enabled : false,
183 menu : "Selection",
184 toolbar : "selection",
185 callback : function(e){
186
187 var request = org.argeo.slc.ria.SlcApi.getRemoveResultService(this.getCollectionId(), this.extractTestUuid());
188 request.addListener("completed", function(response){
189 this.loadCollections();
190 this.loadList();
191 this.info("Test was successfully deleted");
192 }, this);
193 request.send();
194 },
195 selectionChange : function(viewId, xmlNodes){
196 if(viewId != "list") return;
197 this.setEnabled(false);
198 if(xmlNodes == null || !xmlNodes.length) return;
199 this.setEnabled(true);
200 },
201 command : null
202 }
203 }
204 }
205 },
206
207 members : {
208 init : function(viewPane){
209 this.setView(viewPane);
210 },
211 load : function(data){
212 this.table.set({
213 statusBarVisible: false,
214 showCellFocusIndicator:false,
215 columnVisibilityButtonVisible:false,
216 contextMenu : org.argeo.ria.event.CommandsManager.getInstance().createMenuFromIds(["opentest", "download", "copytocollection", "deletetest"]),
217 decorator : new qx.ui.decoration.Background("#fff")
218 });
219 var viewPane = this.getView();
220 this.table.addListener("dblclick", function(e){
221 org.argeo.ria.event.CommandsManager.getInstance().executeCommand("opentest");
222 }, this);
223 var columnModel = this.table.getTableColumnModel();
224 columnModel.getBehavior().setWidth(0, "60%");
225 var renderer = new org.argeo.slc.web.XmlRenderer();
226 columnModel.setDataCellRenderer(0, renderer);
227 columnModel.setDataCellRenderer(1, renderer);
228
229 this.table.getSelectionManager().getSelectionModel().addListener("changeSelection", function(e){
230 var viewSelection = viewPane.getViewSelection();
231 viewSelection.clear();
232 var selectionModel = this.table.getSelectionManager().getSelectionModel();
233 if(!selectionModel.getSelectedCount()){
234 return;
235 }
236 var ranges = this.table.getSelectionManager().getSelectionModel().getSelectedRanges();
237 var xmlNode = this.table.getTableModel().getRowData(ranges[0].minIndex);
238 viewSelection.addNode(xmlNode);
239 viewPane.setViewSelection(viewSelection);
240 }, this);
241
242 var select = new qx.ui.form.SelectBox();
243 this.getView().addHeaderComponent(select);
244 this.getView().setViewTitle("");
245 this.add(this.table, {flex:1});
246
247 select.addListener("changeValue", this.collectionSelectorListener, this);
248
249 org.argeo.ria.remote.RequestManager.getInstance().addListener("reload", function(event){
250 if(event.getDataType()!="collection") return;
251 select.removeListener("changeValue", this.collectionSelectorListener, this);
252 var collectionList = event.getContent();
253 select.removeAll();
254 for(key in collectionList){
255 var item = new qx.ui.form.ListItem(collectionList[key], "resource/slc/folder.png", key);
256 select.add(item);
257 if(key == this.getCollectionId()){
258 select.setSelected(item);
259 }
260 }
261 this.setCollectionId(select.getSelected().getValue());
262 select.addListener("changeValue", this.collectionSelectorListener, this);
263 }, this);
264
265 },
266
267 loadCollections : function(){
268 var request = org.argeo.slc.ria.SlcApi.getListCollectionsService();
269 var NSMap = {slc:"http://argeo.org/projects/slc/schemas"};
270 request.addListener("completed", function(response){
271 var xml = response.getContent();
272 var collections = {};
273 var nodes = org.argeo.ria.util.Element.selectNodes(xml, "//slc:ref", NSMap);
274 for(var i=0;i<nodes.length;i++){
275 var collId = qx.xml.Element.getSingleNodeText(nodes[i], ".");
276 collections[collId] = collId;
277 }
278 this.setCollectionList(collections);
279 org.argeo.ria.remote.RequestManager.getInstance().fireReloadEvent("collection", this.getCollectionList());
280 }, this);
281 request.setAsynchronous(false);
282 request.send();
283 },
284
285 loadList : function(){
286 var model = this.table.getTableModel();
287 model.removeRows(0, model.getRowCount());
288 var commandManager = org.argeo.ria.event.CommandsManager.getInstance();
289 var request = org.argeo.slc.ria.SlcApi.getListResultsService(this.getCollectionId(), null, [commandManager.getCommandById("loadtestlist"), this.getView()]);
290 var NSMap = {slc:"http://argeo.org/projects/slc/schemas"};
291 request.addListener("completed", function(response){
292 var xml = response.getContent();
293 this.debug("Successfully loaded XML");
294 var nodes = org.argeo.ria.util.Element.selectNodes(xml, "//slc:result-attributes", NSMap);
295 //model.addRows(nodes);
296
297 for(var i=0; i<nodes.length;i++){
298 model.addRows([nodes[i]]);
299 }
300 }, request);
301 request.send();
302 },
303
304 pollListLoading : function(state){
305 if(!this.timer){
306 this.timer = new qx.event.Timer(5000);
307 this.timer.addListener("interval", this.loadList, this);
308 }
309 if(state){
310 this.loadList();
311 this.timer.start();
312 }else{
313 this.timer.stop();
314 }
315 },
316
317 collectionListToMenu : function(command, checkSelection){
318 command.setEnabled(false);
319 command.clearMenus();
320 var collectionList = this.getCollectionList();
321 if(!collectionList) return;
322 var submenus = [];
323 for(var key in collectionList){
324 if(this.getCollectionId() && key == this.getCollectionId()) continue;
325 submenus.push({
326 "label":collectionList[key],
327 "icon":"resource/slc/folder.png",
328 "commandId":key
329 });
330 }
331 submenus.push({'separator':true});
332 submenus.push({"label":"New...", "icon":"resource/slc/folder-new.png", "commandId":"slc.client.create"});
333 command.setMenu(submenus);
334 if(checkSelection){
335 var viewSelection = this.getView().getViewSelection();
336 if(viewSelection.getCount()) command.setEnabled(true);
337 }else{
338 command.setEnabled(true);
339 }
340 },
341
342 copySelectionToCollection:function(collectionId, selectionType){
343 if(collectionId == "slc.client.create"){
344 var modal = new org.argeo.ria.components.Modal("Create collection", "resource/slc/folder-new.png");
345 modal.makePromptForm("Enter the new collection name", function(value){
346 if(value == ""){
347 alert("Please enter a name for the new collection!");
348 return false;
349 }
350 else {
351 // Create the collection now, then recall the callback with the new name.
352 this.copySelectionToCollection(value, selectionType);
353 return true;
354 }
355 }, this);
356 modal.attachAndShow();
357 return;
358 }
359
360 if(selectionType == "current_collection"){
361 this.error("Not implemented yet!");
362 }else if(selectionType == "current_selection"){
363 // get selection ID
364 var request = org.argeo.slc.ria.SlcApi.getAddResultService(collectionId,this.extractTestUuid());
365 request.addListener("completed", function(response){
366 this.info("Result successfully copied to collection!");
367 this.loadCollections();
368 }, this);
369 request.send();
370 }
371 },
372
373 extractTestUuid: function(){
374 var NSMap = {slc:"http://argeo.org/projects/slc/schemas"};
375 var xmlNodes = this.getView().getViewSelection().getNodes();
376 var uuid = qx.dom.Node.getText(org.argeo.ria.util.Element.selectSingleNode(xmlNodes[0], "slc:uuid"));
377 return uuid;
378 },
379
380 collectionSelectorListener : function(event){
381 this.setCollectionId(event.getData());
382 this.loadList();
383 },
384
385 addScroll : function(){
386 return false;
387 }
388 }
389 });