]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc.webapp/src/main/webapp/argeo-ria-lib/slc/class/org/argeo/slc/ria/Applet.js
987e0a8b2f40e1e640189d0256a8bae51b6a717e
[gpl/argeo-slc.git] / org.argeo.slc.webapp / src / main / webapp / argeo-ria-lib / slc / class / org / argeo / slc / ria / Applet.js
1 /**
2 * @author Charles
3 */
4 qx.Class.define("org.argeo.slc.ria.Applet",
5 {
6 extend : qx.ui.container.Composite,
7 implement : [org.argeo.ria.components.IView],
8
9 construct : function(){
10 this.base(arguments);
11 this.setLayout(new qx.ui.layout.VBox());
12 this.passedStatus = "PASSED";
13 this.failedStatus = "FAILED";
14 },
15
16 properties :
17 {
18 view : {
19 init : null
20 },
21 commands : {
22 init : {
23 "close" : {
24 label : "Close Result",
25 icon : "resource/slc/window-close.png",
26 shortcut : "Control+w",
27 enabled : true,
28 menu : "Test",
29 toolbar : "result",
30 callback : function(e){
31 // Call service to delete
32 this.getView().empty();
33 },
34 selectionChange : function(viewId, xmlNode){
35 if(viewId != "applet") return;
36 },
37 command : null
38 }
39 }
40 }
41 },
42
43 /*
44 *****************************************************************************
45 MEMBERS
46 *****************************************************************************
47 */
48
49 members :
50 {
51 init : function(viewPane){
52 this.setView(viewPane);
53 },
54
55 load : function(xmlNode){
56 this.data = xmlNode;
57 if(!xmlNode) return;
58 // Load XML or Whatever
59 var service;
60 var NSMap = {slc:"http://argeo.org/projects/slc/schemas"};
61 var testId = qx.dom.Node.getText(org.argeo.ria.util.Element.selectSingleNode(this.data, "slc:uuid"));
62 this.getView().setViewTitle("Test "+testId);
63 var request = org.argeo.slc.ria.SlcApi.getLoadResultService(testId);
64 request.addListener("completed", function(response){
65 this.createXmlGui(response.getContent());
66 this.getView().setOnLoad(false);
67 }, this);
68 this.getView().setOnLoad(true);
69 request.send();
70
71 },
72
73 addScroll : function(){
74 return false;
75 },
76
77 createXmlGui : function(responseXml){
78 var NSMap = {
79 "slc" : "http://argeo.org/projects/slc/schemas"
80 }
81 if(!qx.Class.hasMixin(qx.ui.treevirtual.TreeVirtual, qx.ui.treevirtual.MNode)){
82 qx.Class.include(qx.ui.treevirtual.TreeVirtual,qx.ui.treevirtual.MNode);
83 }
84 this.tree = new qx.ui.treevirtual.TreeVirtual(["Test", "State", "Message", "Id"]);
85 this.tree.getTableColumnModel().setDataCellRenderer(0, new org.argeo.ria.util.TreeDataCellRenderer());
86 this.tree.getDataRowRenderer().setHighlightFocusRow(false); // Default row renderer
87 this.tree.setRowHeight(18);
88 this.tree.setStatusBarVisible(false);
89 this.tree.setDecorator(new qx.ui.decoration.Background("#fff"));
90 var model = this.tree.getDataModel();
91 var resNodes = org.argeo.ria.util.Element.selectNodes(responseXml, "//slc:result-part", NSMap);
92 var resultParts = {};
93 var addedPaths = {};
94 for(var i=0;i<resNodes.length;i++){
95 var currentParentId = null;
96 var node = resNodes[i];
97 var pathAttr = qx.xml.Element.getSingleNodeText(node, "@path");
98 var pathParts = pathAttr.split("/");
99 if(pathParts[0] == ""){
100 pathParts.shift();
101 }
102 var crtPath = "";
103 for(var j=0;j<pathParts.length;j++){
104 //if(pathParts[j] == "") continue;
105 crtPath = crtPath.concat("/", pathParts[j]);
106 if(addedPaths[crtPath]) {
107 currentParentId = addedPaths[crtPath];
108 continue; // Node already exists, set as parent and go to next!
109 }
110 var element = org.argeo.ria.util.Element.selectSingleNode(responseXml, '//slc:element[@path="'+crtPath+'"]', NSMap);
111 var label;
112 if(element != null){
113 label = org.argeo.ria.util.Element.getSingleNodeText(element, "*/slc:label", NSMap);
114 }else{
115 label = crtPath;
116 }
117 var simpleResults = org.argeo.ria.util.Element.selectNodes(node, "slc:part-sub-list/slc:parts/slc:simple-result-part", NSMap);
118
119 var newId;
120 //newId = model.addBranch(currentParentId, label, false);
121
122 // Test Leaf Node
123 if(!simpleResults || !simpleResults.length){
124 newId = model.addBranch(currentParentId, label, false);
125 addedPaths[crtPath] = newId;
126 currentParentId = newId;
127 continue;
128 }
129 if(simpleResults.length == 1){
130 //newId = model.addBranch(currentParentId, label, false);
131 var sResNode = simpleResults[0];
132 newId = model.addBranch(currentParentId, label);
133 model.setColumnData(newId, 3, org.argeo.ria.util.Element.getSingleNodeText(sResNode, "slc:test-run-uuid", NSMap));
134 model.setColumnData(newId, 2, org.argeo.ria.util.Element.getSingleNodeText(sResNode, "slc:message", NSMap));
135 var status = org.argeo.ria.util.Element.getSingleNodeText(sResNode, "slc:status", NSMap);
136 if(status != "PASSED"){
137 status = this.failedStatus ;
138 this._setParentBranchAsFailed(newId);
139 }else{
140 status = this.passedStatus;
141 }
142 model.setColumnData(newId, 1, status);
143 addedPaths[crtPath] = newId;
144 currentParentId = newId;
145 continue;
146 }
147 newId = model.addBranch(currentParentId, label, false);
148 for(var k=0;k<simpleResults.length;k++){
149 var sResNode = simpleResults[k];
150 resId = model.addLeaf(currentParentId, label);
151 model.setColumnData(resId, 3, org.argeo.ria.util.Element.getSingleNodeText(sResNode, "slc:test-run-uuid", NSMap));
152 model.setColumnData(resId, 2, org.argeo.ria.util.Element.getSingleNodeText(sResNode, "slc:message", NSMap));
153 var status = org.argeo.ria.util.Element.getSingleNodeText(sResNode, "slc:status", NSMap);
154 if(status != "PASSED"){
155 status = this.failedStatus ;
156 this._setParentBranchAsFailed(resId);
157 }else{
158 status = this.passedStatus;
159 }
160 model.setColumnData(resId, 1, status);
161 }
162
163 addedPaths[crtPath] = newId;
164 currentParentId = newId;
165 }
166 }
167 this._refineLeaves(this.tree, 0);
168 this.add(this.tree, {flex:1});
169 model.setData();
170 var columnModel = this.tree.getTableColumnModel();
171 var resize = columnModel.getBehavior();
172 resize.set(0, {width:250, minWidth:250});
173 resize.set(1, {width:55});
174 resize.set(2, {width:"1*"});
175 resize.set(3, {width:150});
176 columnModel.setDataCellRenderer(1, new org.argeo.slc.ria.StatusCellRenderer());
177
178 this.tree.getSelectionManager().getSelectionModel().addListener("changeSelection", function(e){
179 var viewSelection = this.getView().getViewSelection();
180 viewSelection.clear();
181 var nodes = this.tree.getDataModel().getSelectedNodes();
182 if(nodes.length){
183 viewSelection.addNode(nodes[0]);
184 this.getView().setViewSelection(viewSelection);
185 }
186 }, this);
187
188 var contextMenu = org.argeo.ria.event.CommandsManager.getInstance().createMenuFromIds(["close"]);
189 this.tree.setContextMenu(contextMenu);
190
191 },
192
193 _setParentBranchAsFailed : function(id){
194 var model = this.tree.getDataModel();
195 while(id != null && id!=0){
196 var node = this.tree.nodeGet(id);
197 id = node.parentNodeId;
198 if(id != null && id!=0){
199 model.setColumnData(id, 1, this.failedStatus);
200 this.tree.nodeSetOpened(id, true);
201 }
202 }
203 },
204
205 _refineLeaves : function(tree, nodeId){
206 var node = tree.nodeGet(nodeId);
207 if(node.children && node.children.length){
208 for(var i=0;i<node.children.length;i++){
209 this._refineLeaves(tree, node.children[i]);
210 }
211 }else{
212 node.type = qx.ui.treevirtual.SimpleTreeDataModel.Type.LEAF;
213 }
214 },
215
216 createHtmlGui : function(responseText){
217 var htmlElement = new qx.ui.embed.Html(responseText);
218 htmlElement.setOverflowX("auto");
219 htmlElement.setOverflowY("auto");
220 this.add(htmlElement, {flex:1});
221 }
222
223 }
224 });