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