]>
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
2 * The canonical SLC applet for test result viewing. It will display a TreeTestResult in a TreeVirtual component
3 * composed of four columns : test name, state (passed/failed/error), message and date.
5 * It makes use of the StatusCellRenderer class for the "state" cell being a background-colored cell, the color depending on the FAILED or PASSED state message.
6 * The only associated command is the "Close" command.
8 qx
. Class
. define ( "org.argeo.slc.ria.Applet" ,
10 extend
: qx
. ui
. container
. Composite
,
11 implement
: [ org
. argeo
. ria
. components
. IView
],
13 construct : function (){
15 this . setLayout ( new qx
. ui
. layout
. VBox ());
16 this . passedStatus
= "PASSED" ;
17 this . failedStatus
= "FAILED" ;
24 * The viewPane inside which this applet is added.
31 check
: "org.argeo.ria.components.ViewSelection"
40 * Commands definition, see {@link org.argeo.ria.event.CommandsManager#definitions}
45 label
: "Close Current" ,
46 icon
: "resource/slc/window-close.png" ,
47 shortcut
: "Control+w" ,
51 callback : function ( e
){
52 this . getView (). closeCurrent ();
53 //this.getView().empty();
59 "copytocollection" : {
61 selectionChange : function(viewId, xmlNode){
62 if(viewId != "applet") return;
64 this.setEnabled(false);
66 this.setEnabled(true);
72 callback : function(e){
74 alert("Should delete applet selection in " + this.getInstanceId());
76 selectionChange : function(viewId, xmlNode){
77 if(viewId != "applet") return;
79 this.setEnabled(false);
81 this.setEnabled(true);
92 init : function ( viewPane
, xmlNode
){
93 this . setView ( viewPane
);
94 this . setViewSelection ( new org
. argeo
. ria
. components
. ViewSelection ( viewPane
. getViewId ()));
97 this . testId
= org
. argeo
. ria
. util
. Element
. getSingleNodeText ( this . data
, "slc:uuid" );
98 this . setInstanceId ( "test:" + this . testId
);
99 this . setInstanceLabel ( "Test " + this . testId
. substring ( 0 , 4 )+ "..." );
104 if (! this . data
) return ;
105 if ( this . loaded
) return ;
106 // Load XML or Whatever
108 //this.testId = qx.dom.Node.getText(org.argeo.ria.util.Element.selectSingleNode(this.data, "slc:uuid"));
109 this . getView (). setViewTitle ( "Test " + this . testId
);
110 var request
= org
. argeo
. slc
. ria
. SlcApi
. getLoadResultService ( this . testId
);
111 request
. addListener ( "completed" , function ( response
){
112 this . createXmlGui ( response
. getContent ());
113 this . getView (). setOnLoad ( false );
116 this . getView (). setOnLoad ( true );
121 addScroll : function (){
131 * @param responseXml {Document} The xml response of the "load" query.
133 createXmlGui : function ( responseXml
){
135 "slc" : "http://argeo.org/projects/slc/schemas"
137 if (! qx
. Class
. hasMixin ( qx
. ui
. treevirtual
. TreeVirtual
, qx
. ui
. treevirtual
. MNode
)){
138 qx
. Class
. include ( qx
. ui
. treevirtual
. TreeVirtual
, qx
. ui
. treevirtual
. MNode
);
140 this . tree
= new qx
. ui
. treevirtual
. TreeVirtual ([ "Test" , "State" , "Message" , "Id" ]);
141 this . tree
. getTableColumnModel (). setDataCellRenderer ( 0 , new org
. argeo
. ria
. util
. TreeDataCellRenderer ());
142 this . tree
. getDataRowRenderer (). setHighlightFocusRow ( false ); // Default row renderer
143 this . tree
. setRowHeight ( 18 );
144 this . tree
. setStatusBarVisible ( false );
145 this . tree
. setDecorator ( new qx
. ui
. decoration
. Background ( "#fff" ));
146 var model
= this . tree
. getDataModel ();
147 var resNodes
= org
. argeo
. ria
. util
. Element
. selectNodes ( responseXml
, "//slc:result-part" , NSMap
);
148 var resultParts
= {};
150 for ( var i
= 0 ; i
< resNodes
. length
; i
++){
151 var currentParentId
= null ;
152 var node
= resNodes
[ i
];
153 var pathAttr
= qx
. xml
. Element
. getSingleNodeText ( node
, "@path" );
154 var pathParts
= pathAttr
. split ( "/" );
155 if ( pathParts
[ 0 ] == "" ){
159 for ( var j
= 0 ; j
< pathParts
. length
; j
++){
160 //if(pathParts[j] == "") continue;
161 crtPath
= crtPath
. concat ( "/" , pathParts
[ j
]);
162 if ( addedPaths
[ crtPath
]) {
163 currentParentId
= addedPaths
[ crtPath
];
164 continue ; // Node already exists, set as parent and go to next!
166 var element
= org
. argeo
. ria
. util
. Element
. selectSingleNode ( responseXml
, '//slc:element[@path="' + crtPath
+ '"]' , NSMap
);
169 label
= org
. argeo
. ria
. util
. Element
. getSingleNodeText ( element
, "*/slc:label" , NSMap
);
173 var simpleResults
= org
. argeo
. ria
. util
. Element
. selectNodes ( node
, "slc:part-sub-list/slc:parts/slc:simple-result-part" , NSMap
);
176 //newId = model.addBranch(currentParentId, label, false);
179 if (! simpleResults
|| ! simpleResults
. length
){
180 newId
= model
. addBranch ( currentParentId
, label
, false );
181 addedPaths
[ crtPath
] = newId
;
182 currentParentId
= newId
;
185 if ( simpleResults
. length
== 1 ){
186 //newId = model.addBranch(currentParentId, label, false);
187 var sResNode
= simpleResults
[ 0 ];
188 newId
= model
. addBranch ( currentParentId
, label
);
189 model
. setColumnData ( newId
, 3 , org
. argeo
. ria
. util
. Element
. getSingleNodeText ( sResNode
, "slc:test-run-uuid" , NSMap
));
190 model
. setColumnData ( newId
, 2 , org
. argeo
. ria
. util
. Element
. getSingleNodeText ( sResNode
, "slc:message" , NSMap
));
191 var status
= org
. argeo
. ria
. util
. Element
. getSingleNodeText ( sResNode
, "slc:status" , NSMap
);
192 if ( status
!= "PASSED" ){
193 status
= this . failedStatus
;
194 this . _setParentBranchAsFailed ( newId
);
196 status
= this . passedStatus
;
198 model
. setColumnData ( newId
, 1 , status
);
199 addedPaths
[ crtPath
] = newId
;
200 currentParentId
= newId
;
203 newId
= model
. addBranch ( currentParentId
, label
, false );
204 for ( var k
= 0 ; k
< simpleResults
. length
; k
++){
205 var sResNode
= simpleResults
[ k
];
206 resId
= model
. addLeaf ( currentParentId
, label
);
207 model
. setColumnData ( resId
, 3 , org
. argeo
. ria
. util
. Element
. getSingleNodeText ( sResNode
, "slc:test-run-uuid" , NSMap
));
208 model
. setColumnData ( resId
, 2 , org
. argeo
. ria
. util
. Element
. getSingleNodeText ( sResNode
, "slc:message" , NSMap
));
209 var status
= org
. argeo
. ria
. util
. Element
. getSingleNodeText ( sResNode
, "slc:status" , NSMap
);
210 if ( status
!= "PASSED" ){
211 status
= this . failedStatus
;
212 this . _setParentBranchAsFailed ( resId
);
214 status
= this . passedStatus
;
216 model
. setColumnData ( resId
, 1 , status
);
219 addedPaths
[ crtPath
] = newId
;
220 currentParentId
= newId
;
223 this . _refineLeaves ( this . tree
, 0 );
224 this . add ( this . tree
, { flex
: 1 });
226 var columnModel
= this . tree
. getTableColumnModel ();
227 var resize
= columnModel
. getBehavior ();
228 resize
. set ( 0 , { width
: 250 , minWidth
: 250 });
229 resize
. set ( 1 , { width
: 55 });
230 resize
. set ( 2 , { width
: "1*" });
231 resize
. set ( 3 , { width
: 150 });
232 columnModel
. setDataCellRenderer ( 1 , new org
. argeo
. slc
. ria
. StatusCellRenderer ());
234 this . tree
. getSelectionManager (). getSelectionModel (). addListener ( "changeSelection" , function ( e
){
235 var viewSelection
= this . getViewSelection ();
236 viewSelection
. clear ();
237 var nodes
= this . tree
. getDataModel (). getSelectedNodes ();
239 viewSelection
. addNode ( nodes
[ 0 ]);
241 this . getView (). focus ();
244 var contextMenu
= org
. argeo
. ria
. event
. CommandsManager
. getInstance (). createMenuFromIds ([ "close" ]);
245 this . tree
. setContextMenu ( contextMenu
);
250 * Goes up the parents recursively to set a whole tree branch in "failed" mode.
251 * @param id {Integer} The id of the child node.
253 _setParentBranchAsFailed : function ( id
){
254 var model
= this . tree
. getDataModel ();
255 while ( id
!= null && id
!= 0 ){
256 var node
= this . tree
. nodeGet ( id
);
257 id
= node
. parentNodeId
;
258 if ( id
!= null && id
!= 0 ){
259 model
. setColumnData ( id
, 1 , this . failedStatus
);
260 this . tree
. nodeSetOpened ( id
, true );
266 * Recursively make sur the last children are of qx.ui.treevirtual.SimpleTreeDataModel.Type.LEAF type.
268 * @param tree {qx.ui.treevirtual.TreeVirtual} The main tree of the applet.
269 * @param nodeId {Integer} Current node id.
271 _refineLeaves : function ( tree
, nodeId
){
272 var node
= tree
. nodeGet ( nodeId
);
273 if ( node
. children
&& node
. children
. length
){
274 for ( var i
= 0 ; i
< node
. children
. length
; i
++){
275 this . _refineLeaves ( tree
, node
. children
[ i
]);
278 node
. type
= qx
. ui
. treevirtual
. SimpleTreeDataModel
. Type
. LEAF
;
283 * Alternatively to the createXmlGui, create a simple HtmlElement and append the query responseText.
284 * Not used but sample.
285 * @param responseText {String} Html code to display.
287 createHtmlGui : function ( responseText
){
288 var htmlElement
= new qx
. ui
. embed
. Html ( responseText
);
289 htmlElement
. setOverflowX ( "auto" );
290 htmlElement
. setOverflowY ( "auto" );
291 this . add ( htmlElement
, { flex
: 1 });