Clean client, use an Api class
authorCharles du Jeu <charles.dujeu@gmail.com>
Tue, 9 Dec 2008 11:43:37 +0000 (11:43 +0000)
committerCharles du Jeu <charles.dujeu@gmail.com>
Tue, 9 Dec 2008 11:43:37 +0000 (11:43 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@1978 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.slc.webapp/src/main/webapp/source/class/org/argeo/slc/web/Applet.js
org.argeo.slc.webapp/src/main/webapp/source/class/org/argeo/slc/web/SlcApi.js [new file with mode: 0644]
org.argeo.slc.webapp/src/main/webapp/source/class/org/argeo/slc/web/TestList.js
org.argeo.slc.webapp/src/main/webapp/source/class/org/argeo/slc/web/XmlRenderer.js

index 1ff9c71e3744c95cc272ff1529385671fd6b6e9f..b753a0b1a5c86bea79208fc68684674f7d8314a7 100644 (file)
@@ -69,11 +69,8 @@ qx.Class.define("org.argeo.slc.web.Applet",
                var service;            
                var NSMap = {slc:"http://argeo.org/projects/slc/schemas"};
                var testId = qx.dom.Node.getText(org.argeo.ria.util.Element.selectSingleNode(this.data, "slc:uuid"));           
-               this.info("Opening test "+testId);
                this.getView().setViewTitle("Test "+testId);
-               service = "../resultViewXml.xslt?uuid="+testId;
-               var serviceManager = org.argeo.ria.remote.RequestManager.getInstance();
-               var request = serviceManager.getRequest(service, "GET", "application/xml");
+               var request = org.argeo.slc.web.SlcApi.getLoadResultService(testId);            
                request.addListener("completed", function(response){
                        this.createXmlGui(response.getContent());
                        this.getView().setOnLoad(false);
@@ -131,14 +128,34 @@ qx.Class.define("org.argeo.slc.web.Applet",
                                var simpleResults = org.argeo.ria.util.Element.selectNodes(node, "slc:part-sub-list/slc:parts/slc:simple-result-part", NSMap);
 
                                var newId;
-                               newId = model.addBranch(currentParentId, label, false);
+                               //newId = model.addBranch(currentParentId, label, false);
                                
                                // Test Leaf Node
                                if(!simpleResults || !simpleResults.length){
+                                       newId = model.addBranch(currentParentId, label, false);
                                        addedPaths[crtPath] = newId;
                                        currentParentId = newId;
                                        continue;
                                }
+                               if(simpleResults.length == 1){
+                                       //newId = model.addBranch(currentParentId, label, false);
+                                       var sResNode = simpleResults[0];
+                                       newId = model.addBranch(currentParentId, label);
+                                       model.setColumnData(newId, 3, org.argeo.ria.util.Element.getSingleNodeText(sResNode, "slc:test-run-uuid", NSMap));
+                                       model.setColumnData(newId, 2, org.argeo.ria.util.Element.getSingleNodeText(sResNode, "slc:message", NSMap));
+                                       var status = org.argeo.ria.util.Element.getSingleNodeText(sResNode, "slc:status", NSMap);
+                                       if(status != "PASSED"){
+                                               status = this.failedStatus ;
+                                               this._setParentBranchAsFailed(newId);
+                                       }else{
+                                               status = this.passedStatus;
+                                       }
+                                       model.setColumnData(newId, 1, status);                                                                                  
+                                       addedPaths[crtPath] = newId;
+                                       currentParentId = newId;
+                                       continue;
+                               }
+                               newId = model.addBranch(currentParentId, label, false);
                                for(var k=0;k<simpleResults.length;k++){
                                        var sResNode = simpleResults[k];
                                        resId = model.addLeaf(currentParentId, label);
@@ -158,6 +175,7 @@ qx.Class.define("org.argeo.slc.web.Applet",
                                currentParentId = newId;
                        }
                }
+               this._refineLeaves(this.tree, 0);
                this.add(this.tree, {flex:1});
                model.setData();
                var columnModel = this.tree.getTableColumnModel();
@@ -195,6 +213,17 @@ qx.Class.define("org.argeo.slc.web.Applet",
                }               
        },
        
+       _refineLeaves : function(tree, nodeId){
+               var node = tree.nodeGet(nodeId);                
+               if(node.children && node.children.length){
+                       for(var i=0;i<node.children.length;i++){
+                               this._refineLeaves(tree, node.children[i]);
+                       }
+               }else{
+                       node.type = qx.ui.treevirtual.SimpleTreeDataModel.Type.LEAF;
+               }
+       },
+       
        createHtmlGui : function(responseText){
                var htmlElement = new qx.ui.embed.Html(responseText);
                htmlElement.setOverflowX("auto");
diff --git a/org.argeo.slc.webapp/src/main/webapp/source/class/org/argeo/slc/web/SlcApi.js b/org.argeo.slc.webapp/src/main/webapp/source/class/org/argeo/slc/web/SlcApi.js
new file mode 100644 (file)
index 0000000..14be9b5
--- /dev/null
@@ -0,0 +1,121 @@
+qx.Class.define("org.argeo.slc.web.SlcApi",\r
+{\r
+  extend : qx.core.Object,\r
+  \r
+  statics : {\r
+       DEFAULT_CONTEXT : "/org.argeo.slc.webapp",\r
+       \r
+       REMOVE_RESULT_FROM_COLL_SERVICE : "removeResultFromCollection.service",\r
+       ADD_RESULT_TO_COLL_SERVICE : "addResultToCollection.service",\r
+       LIST_COLLECTIONS_SERVICE : "listCollectionRefs.service",\r
+       LIST_RESULTS_SERVICE : "listResultAttributes.service",\r
+       GET_RESULT_SERVICE : "getResult.service",\r
+       \r
+       /**\r
+        * Standard Request getter\r
+        * @param serviceName {String} The name of the service to call (without base context)\r
+        * @param fireReloadEventType {String} Whether query should trigger a ReloadEvent\r
+        * @param iLoadStatusables {org.argeo.ria.components.ILoadStatusables[]} Gui parts to update\r
+        * @return {qx.io.remote.Request}\r
+        */\r
+       getServiceRequest:function(serviceName, fireReloadEventType, iLoadStatusables){\r
+               var serviceManager = org.argeo.ria.remote.RequestManager.getInstance();\r
+               return serviceManager.getRequest(\r
+                       org.argeo.slc.web.SlcApi.DEFAULT_CONTEXT+"/"+serviceName,\r
+                       "GET",\r
+                       "application/xml",\r
+                       fireReloadEventType,\r
+                       iLoadStatusables\r
+               );\r
+       },\r
+       \r
+       /**\r
+        * Remove a result from a collection\r
+        * @param collectionId {String} Id of the destination collection\r
+        * @param resultId {String} Id of the test result to remove\r
+        * @param fireReloadEventType {String} Whether query should trigger a ReloadEvent\r
+        * @param iLoadStatusables {org.argeo.ria.components.ILoadStatusables[]} Gui parts to update\r
+        * @return {qx.io.remote.Request}\r
+        */\r
+       getRemoveResultService : function(collectionId, resultId, fireReloadEventType, iLoadStatusables){\r
+               var request = org.argeo.slc.web.SlcApi.getServiceRequest(\r
+                       org.argeo.slc.web.SlcApi.REMOVE_RESULT_FROM_COLL_SERVICE, \r
+                       fireReloadEventType, \r
+                       iLoadStatusables\r
+               );\r
+               request.setParameter("collectionId", collectionId);\r
+               request.setParameter("resultUuid", resultId);\r
+               return request;\r
+       },\r
+       \r
+       /**\r
+        * Add a result to a given collection\r
+        * @param collectionId {String} Id of the destination collection\r
+        * @param resultId {String} Id of the test result to add\r
+        * @param fireReloadEventType {String} Whether query should trigger a ReloadEvent\r
+        * @param iLoadStatusables {org.argeo.ria.components.ILoadStatusables[]} Gui parts to update\r
+        * @return {qx.io.remote.Request}\r
+        */\r
+       getAddResultService : function(collectionId, resultId, fireReloadEventType, iLoadStatusables){\r
+               var request = org.argeo.slc.web.SlcApi.getServiceRequest(\r
+                       org.argeo.slc.web.SlcApi.ADD_RESULT_TO_COLL_SERVICE, \r
+                       fireReloadEventType, \r
+                       iLoadStatusables\r
+               );\r
+               request.setParameter("collectionId", collectionId);\r
+               request.setParameter("resultUuid", resultId);\r
+               return request;\r
+       },\r
+       \r
+       /**\r
+        * List current collections\r
+        * @param fireReloadEventType {String} Whether query should trigger a ReloadEvent\r
+        * @param iLoadStatusables {org.argeo.ria.components.ILoadStatusables[]} Gui parts to update\r
+        * @return {qx.io.remote.Request}\r
+        */\r
+       getListCollectionsService : function(fireReloadEventType, iLoadStatusables){\r
+               return org.argeo.slc.web.SlcApi.getServiceRequest(\r
+                       org.argeo.slc.web.SlcApi.LIST_COLLECTIONS_SERVICE, \r
+                       fireReloadEventType, \r
+                       iLoadStatusables\r
+               );\r
+       },\r
+       \r
+       /**\r
+        * List all results or results of a given collection \r
+        * @param collectionId {String} Id of the collection to load\r
+        * @param fireReloadEventType {String} Whether query should trigger a ReloadEvent\r
+        * @param iLoadStatusables {org.argeo.ria.components.ILoadStatusables[]} Gui parts to update\r
+        * @return {qx.io.remote.Request}\r
+        */\r
+       getListResultsService : function(collectionId, fireReloadEventType, iLoadStatusables){\r
+               var request = org.argeo.slc.web.SlcApi.getServiceRequest(\r
+                       org.argeo.slc.web.SlcApi.LIST_RESULTS_SERVICE, \r
+                       fireReloadEventType, \r
+                       iLoadStatusables\r
+               );\r
+               if(collectionId){\r
+                       request.setParameter("id", collectionId);\r
+               }\r
+               return request;\r
+       },\r
+       \r
+       /**\r
+        * Load a result test\r
+        * @param resultId {String} Id of the test result to load\r
+        * @param fireReloadEventType {String} Whether query should trigger a ReloadEvent\r
+        * @param iLoadStatusables {org.argeo.ria.components.ILoadStatusables[]} Gui parts to update\r
+        * @return {qx.io.remote.Request}\r
+        */\r
+       getLoadResultService : function(resultId, fireReloadEventType, iLoadStatusables){\r
+               var request = org.argeo.slc.web.SlcApi.getServiceRequest(\r
+                       org.argeo.slc.web.SlcApi.GET_RESULT_SERVICE, \r
+                       fireReloadEventType, \r
+                       iLoadStatusables\r
+               );\r
+               request.setParameter("uuid", resultId);\r
+               return request;\r
+       }\r
+       \r
+  }\r
+});
\ No newline at end of file
index 71d61322e02e0a775219076b25d134df5a73030c..17ac3458f2ea9b90872fe00072865c9df79746ae 100644 (file)
@@ -44,6 +44,20 @@ qx.Class.define("org.argeo.slc.web.TestList",
                                }, \r
                                command         : null\r
                        },\r
+                       "polllistloading" : {\r
+                               label           : "Auto load", \r
+                               icon            : "resource/slc/document-open-recent.png",\r
+                               shortcut        : "Control+l",\r
+                               enabled         : true,\r
+                               toggle          : true,\r
+                               menu            : "Collection",\r
+                               toolbar         : "collection",\r
+                               callback        : function(event){\r
+                                       this.pollListLoading(event.getTarget().getUserData("slc.command.toggleState"));\r
+                               }, \r
+                               command         : null\r
+                       },\r
+                       /*\r
                        "copyfullcollection" : {\r
                                label           : "Copy to...", \r
                                icon            : "resource/slc/edit-copy.png",\r
@@ -69,6 +83,7 @@ qx.Class.define("org.argeo.slc.web.TestList",
                                },\r
                                command         : null\r
                        },\r
+                       */\r
                        "opentest" : {\r
                                label           : "Open", \r
                                icon            : "resource/slc/media-playback-start.png",\r
@@ -100,7 +115,12 @@ qx.Class.define("org.argeo.slc.web.TestList",
                                toolbar         : "selection",\r
                                callback        : function(e){ },\r
                                command         : null,\r
-                               submenu         : {},\r
+                               submenu         : [\r
+                                               {'label':"Xsl", 'icon':'resource/slc/mime-xsl.png', 'commandId':'xsl'},\r
+                                               {'label':"Xml", 'icon':'resource/slc/mime-xml.png', 'commandId':'xml'},\r
+                                               {'label':"Excel", 'icon':'resource/slc/mime-xls.png', 'commandId':'xls'},\r
+                                               {'label':"Pdf", 'icon':'resource/slc/mime-pdf.png', 'commandId':'pdf'}\r
+                                       ],\r
                                submenuCallback : function(commandId){\r
                                        var uuid = this.extractTestUuid();\r
                                        var urls = {\r
@@ -116,69 +136,14 @@ qx.Class.define("org.argeo.slc.web.TestList",
                                                var win = window.open(url);\r
                                        }\r
                                },\r
-                               init : function(command){\r
-                                       this.setMenu([\r
-                                               {'label':"Xsl", 'icon':'resource/slc/mime-xsl.png', 'commandId':'xsl'},\r
-                                               {'label':"Xml", 'icon':'resource/slc/mime-xml.png', 'commandId':'xml'},\r
-                                               {'label':"Excel", 'icon':'resource/slc/mime-xls.png', 'commandId':'xls'},\r
-                                               {'label':"Pdf", 'icon':'resource/slc/mime-pdf.png', 'commandId':'pdf'}\r
-                                       ]);\r
-                               },\r
                                selectionChange : function(viewId, xmlNodes){\r
                                        if(viewId!="list")return;\r
                                        //this.clearMenus();\r
                                        this.setEnabled(false);\r
                                        if(xmlNodes == null || !xmlNodes.length) return;\r
                                        this.setEnabled(true);\r
-                                       /*\r
-                                       var reports = qx.xml.Element.selectNodes(xmlNodes[0],'report[@type="download"]');\r
-                                       if(reports == null || !reports.length)return;\r
-                                       var submenus = [];\r
-                                       for(var i=0; i<reports.length;i++){\r
-                                               var report = reports[i];\r
-                                               var commandId = qx.dom.Node.getText(org.argeo.ria.util.Element.selectSingleNode(report, "@commandid"));\r
-                                               submenus.push({\r
-                                                       "label":qx.dom.Node.getText(report), \r
-                                                       "icon":"resource/slc/mime-"+commandId+".png", \r
-                                                       "commandId":commandId\r
-                                               });\r
-                                       }\r
-                                       this.setMenu(submenus);\r
-                                       this.setEnabled(true);\r
-                                       */\r
                                }\r
                        },\r
-                       "deletetest" : {\r
-                               label           : "Delete", \r
-                               icon            : "resource/slc/edit-delete.png",\r
-                               shortcut        : "Control+d",\r
-                               enabled         : false,\r
-                               menu            : "Selection",\r
-                               toolbar         : "selection",\r
-                               callback        : function(e){\r
-                                       var serviceManager = org.argeo.ria.remote.RequestManager.getInstance();\r
-                                       var request = serviceManager.getRequest(\r
-                                               "/org.argeo.slc.webapp/removeResultFromCollection.service",\r
-                                               "GET",\r
-                                               "application/xml"\r
-                                       );\r
-                                       request.setParameter("collectionId", this.getCollectionId());\r
-                                       request.setParameter("resultUuid", this.extractTestUuid());\r
-                                       request.addListener("completed", function(response){\r
-                                               this.loadCollections();\r
-                                               this.loadList();\r
-                                               this.info("Test was successfully deleted");\r
-                                       }, this);\r
-                                       request.send();\r
-                               },\r
-                               selectionChange : function(viewId, xmlNodes){\r
-                                       if(viewId != "list") return;\r
-                                       this.setEnabled(false);\r
-                                       if(xmlNodes == null || !xmlNodes.length) return;\r
-                                       this.setEnabled(true);                                                  \r
-                               },\r
-                               command         : null\r
-                       },\r
                        "copytocollection" : {\r
                                label           : "Copy to...", \r
                                icon            : "resource/slc/edit-copy.png",\r
@@ -209,7 +174,32 @@ qx.Class.define("org.argeo.slc.web.TestList",
                                        this.setEnabled(true);                                                  \r
                                },\r
                                command         : null\r
-                       }                       \r
+                       },\r
+                       "deletetest" : {\r
+                               label           : "Delete", \r
+                               icon            : "resource/slc/edit-delete.png",\r
+                               shortcut        : "Control+d",\r
+                               enabled         : false,\r
+                               menu            : "Selection",\r
+                               toolbar         : "selection",\r
+                               callback        : function(e){\r
+                                       \r
+                                       var request = org.argeo.slc.web.SlcApi.getRemoveResultService(this.getCollectionId(), this.extractTestUuid());\r
+                                       request.addListener("completed", function(response){\r
+                                               this.loadCollections();\r
+                                               this.loadList();\r
+                                               this.info("Test was successfully deleted");\r
+                                       }, this);\r
+                                       request.send();\r
+                               },\r
+                               selectionChange : function(viewId, xmlNodes){\r
+                                       if(viewId != "list") return;\r
+                                       this.setEnabled(false);\r
+                                       if(xmlNodes == null || !xmlNodes.length) return;\r
+                                       this.setEnabled(true);                                                  \r
+                               },\r
+                               command         : null\r
+                       }\r
                }\r
        }\r
   },\r
@@ -223,7 +213,7 @@ qx.Class.define("org.argeo.slc.web.TestList",
                statusBarVisible: false,\r
                showCellFocusIndicator:false,\r
                columnVisibilityButtonVisible:false,\r
-               contextMenu : org.argeo.ria.event.CommandsManager.getInstance().createMenuFromIds(["opentest", "deletetest", "copytocollection"]),\r
+               contextMenu : org.argeo.ria.event.CommandsManager.getInstance().createMenuFromIds(["opentest", "download", "copytocollection", "deletetest"]),\r
                decorator : new qx.ui.decoration.Background("#fff")\r
          });\r
          var viewPane = this.getView();\r
@@ -274,13 +264,7 @@ qx.Class.define("org.argeo.slc.web.TestList",
        },\r
        \r
        loadCollections : function(){\r
-               var url = "/org.argeo.slc.webapp/listCollectionRefs.service";\r
-               var serviceManager = org.argeo.ria.remote.RequestManager.getInstance();\r
-               var request = serviceManager.getRequest(\r
-                       url,\r
-                       "GET",\r
-                       "application/xml"\r
-               );\r
+               var request = org.argeo.slc.web.SlcApi.getListCollectionsService();\r
                var NSMap = {slc:"http://argeo.org/projects/slc/schemas"};\r
                request.addListener("completed", function(response){\r
                        var xml = response.getContent();\r
@@ -298,23 +282,14 @@ qx.Class.define("org.argeo.slc.web.TestList",
        },\r
        \r
        loadList : function(){\r
-               var url = "/org.argeo.slc.webapp/listResultAttributes.service";\r
                var model = this.table.getTableModel();\r
                model.removeRows(0, model.getRowCount());\r
-               var serviceManager = org.argeo.ria.remote.RequestManager.getInstance();\r
                var commandManager = org.argeo.ria.event.CommandsManager.getInstance();\r
-               var request = serviceManager.getRequest(\r
-                       url, \r
-                       "GET", \r
-                       "application/xml",      \r
-                       null,\r
-                       [commandManager.getCommandById("loadtestlist"), this.getView()]\r
-               );       \r
-               request.setParameter("id", this.getCollectionId());\r
+               var request = org.argeo.slc.web.SlcApi.getListResultsService(this.getCollectionId(), null, [commandManager.getCommandById("loadtestlist"), this.getView()]);\r
                var NSMap = {slc:"http://argeo.org/projects/slc/schemas"};\r
                request.addListener("completed", function(response){\r
                        var xml = response.getContent();\r
-                       this.info("Successfully loaded XML");\r
+                       this.debug("Successfully loaded XML");\r
                        var nodes = org.argeo.ria.util.Element.selectNodes(xml, "//slc:result-attributes", NSMap);\r
                        for(var i=0; i<nodes.length;i++){\r
                                var rowData = nodes[i];\r
@@ -324,6 +299,19 @@ qx.Class.define("org.argeo.slc.web.TestList",
                request.send();         \r
        },\r
        \r
+       pollListLoading : function(state){\r
+               if(!this.timer){\r
+                       this.timer = new qx.event.Timer(5000);\r
+                       this.timer.addListener("interval", this.loadList, this);\r
+               }\r
+               if(state){\r
+                       this.loadList();\r
+                       this.timer.start();\r
+               }else{\r
+                       this.timer.stop();\r
+               }\r
+       },\r
+       \r
        collectionListToMenu : function(command, checkSelection){\r
                command.setEnabled(false);\r
                command.clearMenus();\r
@@ -338,6 +326,7 @@ qx.Class.define("org.argeo.slc.web.TestList",
                                "commandId":key\r
                        });\r
                }               \r
+               submenus.push({'separator':true});\r
                submenus.push({"label":"New...", "icon":"resource/slc/folder-new.png", "commandId":"slc.client.create"});\r
                command.setMenu(submenus);\r
                if(checkSelection){\r
@@ -366,24 +355,17 @@ qx.Class.define("org.argeo.slc.web.TestList",
                        return;\r
                }\r
 \r
-               var serviceManager = org.argeo.ria.remote.RequestManager.getInstance();\r
-               var request = serviceManager.getRequest(\r
-                       "/org.argeo.slc.webapp/addResultToCollection.service", \r
-                       "GET", \r
-                       "application/xml"\r
-               );\r
-\r
                if(selectionType == "current_collection"){\r
                        this.error("Not implemented yet!");                     \r
                }else if(selectionType == "current_selection"){\r
                        // get selection ID\r
-                       request.setParameter("collectionId", collectionId);\r
-                       request.setParameter("resultUuid", this.extractTestUuid());\r
+                       var request = org.argeo.slc.web.SlcApi.getAddResultService(collectionId,this.extractTestUuid());\r
+                       request.addListener("completed", function(response){\r
+                               this.info("Result successfully copied to collection!");\r
+                               this.loadCollections();\r
+                       }, this);\r
+                       request.send();         \r
                }\r
-               request.addListener("completed", function(response){\r
-                       this.loadCollections();\r
-               }, this);\r
-               request.send();         \r
        },\r
        \r
        extractTestUuid: function(){\r
index 00be48f42f551ed6d93aa95ce21e815016e57a49..c369bb347f3845a0b42f06c601bf0d7aeffd0379 100644 (file)
@@ -34,22 +34,18 @@ qx.Class.define("org.argeo.slc.web.XmlRenderer",
                        var value = qx.bom.String.escape(qx.dom.Node.getText(nameParam) || "Not Found");\r
                        break;\r
                case 1 : \r
-                       return "-";\r
-                       xPath = 'param[@name="date"]';\r
+                       xPath = "slc:close-date";\r
                        var nameParam = org.argeo.ria.util.Element.selectSingleNode(xmlNode, xPath, NSMap);\r
-                       //qx.log.Logger.info(nameParam);\r
-                       var value = qx.bom.String.escape(qx.dom.Node.getText(nameParam) || 0);\r
+                       var value = qx.bom.String.escape(qx.dom.Node.getText(nameParam) || "NOT CLOSED");\r
                        if(value == "NOT CLOSED") return value;\r
                        var splits = value.split(".");\r
-                               //qx.log.Logger.info(value);\r
+                       value = splits[0].replace("T", " ");                            \r
                        var dateFormat = new qx.util.format.DateFormat("yyyy-MM-dd HH:mm:ss");\r
                        try {\r
-                               var date = dateFormat.parse(splits[0]);\r
+                               var date = dateFormat.parse(value);\r
                                var dateFormat2 = new qx.util.format.DateFormat("MMM d, yy HH:mm:ss");\r
                                return dateFormat2.format(date);\r
-                       }catch(e){\r
-                               qx.log.Logger.info(e);\r
-                       }\r
+                       }catch(e){}\r
                        break;\r
                default :\r
                        return "";\r