--- /dev/null
+/**\r
+ * @author Charles\r
+ */\r
+qx.Class.define("org.argeo.slc.web.Perspective",\r
+{\r
+ extend : qx.core.Object,\r
+ implement : [org.argeo.ria.components.IPerspective], \r
+ \r
+ construct : function(){\r
+ this.base(arguments);\r
+ },\r
+ \r
+ members : {\r
+ \r
+ initViewPanes : function(viewsManager){\r
+ \r
+ var splitPane = new qx.ui.splitpane.Pane("horizontal");\r
+ var topLeft = new org.argeo.ria.components.ViewPane("list", "Collection", {\r
+ orientation : "horizontal",\r
+ min : 36\r
+ });\r
+ topLeft.set({width:300});\r
+ viewsManager.registerViewPane(topLeft);\r
+ \r
+ splitPane.add(topLeft, 0);\r
+ var rightPane = new org.argeo.ria.components.ViewPane("applet", "Test Detail"); \r
+ viewsManager.registerViewPane(rightPane);\r
+ splitPane.add(rightPane, 1);\r
+ \r
+ viewsManager.getViewPanesContainer().add(splitPane, {flex:1});\r
+ \r
+ },\r
+ \r
+ initViews : function(viewsManager){\r
+ var view = viewsManager.initIViewClass(org.argeo.slc.web.TestList, "list");\r
+ view.load();\r
+ //var command = org.argeo.ria.event.CommandsManager.getInstance().executeCommand("loadtestlist");\r
+ view.loadCollections(); // We know it is a TestList!\r
+ view.loadList();\r
+ }\r
+ \r
+ }\r
+\r
+});
\ No newline at end of file
--- /dev/null
+/**\r
+ * @author Charles\r
+ */\r
+qx.Class.define("org.argeo.slc.web.TestList",\r
+{\r
+ extend : qx.ui.container.Composite,\r
+ implement : [org.argeo.ria.components.IView], \r
+\r
+ construct : function(){\r
+ this.base(arguments, new qx.ui.layout.VBox()); \r
+ var model = new qx.ui.table.model.Simple();\r
+ model.setColumns(["Test Case", "Date"]);\r
+ this.table = new qx.ui.table.Table(model, {\r
+ tableColumnModel: function(obj){\r
+ return new qx.ui.table.columnmodel.Resize(obj)\r
+ }\r
+ });\r
+ },\r
+\r
+ properties : \r
+ {\r
+ view : {\r
+ init : null\r
+ },\r
+ collectionList : {\r
+ init : {},\r
+ check : "Map"\r
+ },\r
+ collectionId:{\r
+ init : 'My Collection',\r
+ check : "String"\r
+ },\r
+ commands : {\r
+ init : {\r
+ "loadtestlist" : {\r
+ label : "Load Collection", \r
+ icon : "resource/slc/view-refresh.png",\r
+ shortcut : "Control+l",\r
+ enabled : true,\r
+ menu : "Collection",\r
+ toolbar : "collection",\r
+ callback : function(e){\r
+ this.loadList();\r
+ }, \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
+ shortcut : null,\r
+ enabled : false,\r
+ menu : "Collection",\r
+ toolbar : "collection",\r
+ callback : function(e){\r
+ // Call service to copy\r
+ },\r
+ submenu : {},\r
+ submenuCallback : function(commandId){\r
+ this.copySelectionToCollection(commandId, "current_collection");\r
+ },\r
+ init : function(){\r
+ // Call at command creation\r
+ org.argeo.ria.remote.RequestManager.getInstance().addListener("reload", function(event){\r
+ if(event.getDataType() == "collection" || event.getDataType() == "test_cases"){\r
+ var testList = org.argeo.ria.components.ViewsManager.getInstance().getViewPaneById("list").getContent();\r
+ testList.collectionListToMenu(this);\r
+ }\r
+ }, this);\r
+ },\r
+ command : null\r
+ },\r
+ */\r
+ "opentest" : {\r
+ label : "Open", \r
+ icon : "resource/slc/media-playback-start.png",\r
+ shortcut : "Control+o",\r
+ enabled : false,\r
+ menu : "Selection",\r
+ toolbar : "selection",\r
+ callback : function(e){\r
+ var viewsManager = org.argeo.ria.components.ViewsManager.getInstance();\r
+ var classObj = org.argeo.slc.ria.Applet;\r
+ var iView = viewsManager.initIViewClass(classObj, "applet");\r
+ var xmlNodes = viewsManager.getViewPaneSelection("list").getNodes();\r
+ iView.load(xmlNodes[0]);\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
+ "download" : {\r
+ label : "Download as...", \r
+ icon : "resource/slc/go-down.png",\r
+ shortcut : null,\r
+ enabled : false,\r
+ menu : "Selection",\r
+ toolbar : "selection",\r
+ callback : function(e){ },\r
+ command : null,\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
+ xsl : "resultView.xslt",\r
+ xml : "resultViewXml.xslt",\r
+ xls : "resultView.xls",\r
+ pdf : "resultView.pdf"\r
+ };\r
+ var url = "../"+urls[commandId]+"?uuid="+uuid;\r
+ if(commandId == "xls" || commandId == "pdf"){\r
+ document.location.href = url;\r
+ }else{\r
+ var win = window.open(url);\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
+ },\r
+ "copytocollection" : {\r
+ label : "Copy to...", \r
+ icon : "resource/slc/edit-copy.png",\r
+ shortcut : "Control+c",\r
+ enabled : false,\r
+ menu : "Selection",\r
+ toolbar : "selection",\r
+ callback : function(e){\r
+ // Call service to copy\r
+ },\r
+ submenu : {},\r
+ submenuCallback : function(commandId){\r
+ this.copySelectionToCollection(commandId, "current_selection"); \r
+ },\r
+ init : function(){\r
+ // Call at command creation\r
+ org.argeo.ria.remote.RequestManager.getInstance().addListener("reload", function(event){\r
+ if(event.getDataType() == "collection" || event.getDataType() == "test_cases"){\r
+ var testList = org.argeo.ria.components.ViewsManager.getInstance().getViewPaneById("list").getContent();\r
+ testList.collectionListToMenu(this, true);\r
+ }\r
+ }, this);\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
+ "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.ria.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
+ \r
+ members : {\r
+ init : function(viewPane){\r
+ this.setView(viewPane);\r
+ },\r
+ load : function(data){\r
+ this.table.set({ \r
+ statusBarVisible: false,\r
+ showCellFocusIndicator:false,\r
+ columnVisibilityButtonVisible:false,\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
+ this.table.addListener("dblclick", function(e){\r
+ org.argeo.ria.event.CommandsManager.getInstance().executeCommand("opentest");\r
+ }, this);\r
+ var columnModel = this.table.getTableColumnModel(); \r
+ columnModel.getBehavior().setWidth(0, "60%");\r
+ var renderer = new org.argeo.slc.web.XmlRenderer();\r
+ columnModel.setDataCellRenderer(0, renderer);\r
+ columnModel.setDataCellRenderer(1, renderer);\r
+ \r
+ this.table.getSelectionManager().getSelectionModel().addListener("changeSelection", function(e){\r
+ var viewSelection = viewPane.getViewSelection();\r
+ viewSelection.clear();\r
+ var selectionModel = this.table.getSelectionManager().getSelectionModel();\r
+ if(!selectionModel.getSelectedCount()){\r
+ return;\r
+ }\r
+ var ranges = this.table.getSelectionManager().getSelectionModel().getSelectedRanges();\r
+ var xmlNode = this.table.getTableModel().getRowData(ranges[0].minIndex);\r
+ viewSelection.addNode(xmlNode);\r
+ viewPane.setViewSelection(viewSelection);\r
+ }, this); \r
+ \r
+ var select = new qx.ui.form.SelectBox();\r
+ this.getView().addHeaderComponent(select);\r
+ this.getView().setViewTitle("");\r
+ this.add(this.table, {flex:1});\r
+\r
+ select.addListener("changeValue", this.collectionSelectorListener, this);\r
+\r
+ org.argeo.ria.remote.RequestManager.getInstance().addListener("reload", function(event){\r
+ if(event.getDataType()!="collection") return;\r
+ select.removeListener("changeValue", this.collectionSelectorListener, this);\r
+ var collectionList = event.getContent();\r
+ select.removeAll();\r
+ for(key in collectionList){\r
+ var item = new qx.ui.form.ListItem(collectionList[key], "resource/slc/folder.png", key);\r
+ select.add(item);\r
+ if(key == this.getCollectionId()){\r
+ select.setSelected(item);\r
+ }\r
+ }\r
+ this.setCollectionId(select.getSelected().getValue());\r
+ select.addListener("changeValue", this.collectionSelectorListener, this);\r
+ }, this);\r
+ \r
+ },\r
+ \r
+ loadCollections : function(){\r
+ var request = org.argeo.slc.ria.SlcApi.getListCollectionsService();\r
+ var NSMap = {slc:"http://argeo.org/projects/slc/schemas"};\r
+ request.addListener("completed", function(response){\r
+ var xml = response.getContent();\r
+ var collections = {};\r
+ var nodes = org.argeo.ria.util.Element.selectNodes(xml, "//slc:ref", NSMap);\r
+ for(var i=0;i<nodes.length;i++){\r
+ var collId = qx.xml.Element.getSingleNodeText(nodes[i], ".");\r
+ collections[collId] = collId;\r
+ }\r
+ this.setCollectionList(collections);\r
+ org.argeo.ria.remote.RequestManager.getInstance().fireReloadEvent("collection", this.getCollectionList());\r
+ }, this);\r
+ request.setAsynchronous(false);\r
+ request.send();\r
+ },\r
+ \r
+ loadList : function(){\r
+ var model = this.table.getTableModel();\r
+ model.removeRows(0, model.getRowCount());\r
+ var commandManager = org.argeo.ria.event.CommandsManager.getInstance();\r
+ var request = org.argeo.slc.ria.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.debug("Successfully loaded XML");\r
+ var nodes = org.argeo.ria.util.Element.selectNodes(xml, "//slc:result-attributes", NSMap);\r
+ //model.addRows(nodes);\r
+ \r
+ for(var i=0; i<nodes.length;i++){ \r
+ model.addRows([nodes[i]]);\r
+ } \r
+ }, request);\r
+ 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
+ var collectionList = this.getCollectionList();\r
+ if(!collectionList) return;\r
+ var submenus = [];\r
+ for(var key in collectionList){\r
+ if(this.getCollectionId() && key == this.getCollectionId()) continue;\r
+ submenus.push({\r
+ "label":collectionList[key], \r
+ "icon":"resource/slc/folder.png", \r
+ "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
+ var viewSelection = this.getView().getViewSelection();\r
+ if(viewSelection.getCount()) command.setEnabled(true);\r
+ }else{\r
+ command.setEnabled(true);\r
+ }\r
+ },\r
+ \r
+ copySelectionToCollection:function(collectionId, selectionType){\r
+ if(collectionId == "slc.client.create"){\r
+ var modal = new org.argeo.ria.components.Modal("Create collection", "resource/slc/folder-new.png");\r
+ modal.makePromptForm("Enter the new collection name", function(value){\r
+ if(value == ""){\r
+ alert("Please enter a name for the new collection!");\r
+ return false;\r
+ }\r
+ else {\r
+ // Create the collection now, then recall the callback with the new name. \r
+ this.copySelectionToCollection(value, selectionType);\r
+ return true;\r
+ }\r
+ }, this);\r
+ modal.attachAndShow();\r
+ return;\r
+ }\r
+\r
+ if(selectionType == "current_collection"){\r
+ this.error("Not implemented yet!"); \r
+ }else if(selectionType == "current_selection"){\r
+ // get selection ID\r
+ var request = org.argeo.slc.ria.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
+ },\r
+ \r
+ extractTestUuid: function(){\r
+ var NSMap = {slc:"http://argeo.org/projects/slc/schemas"};\r
+ var xmlNodes = this.getView().getViewSelection().getNodes();\r
+ var uuid = qx.dom.Node.getText(org.argeo.ria.util.Element.selectSingleNode(xmlNodes[0], "slc:uuid"));\r
+ return uuid;\r
+ },\r
+ \r
+ collectionSelectorListener : function(event){\r
+ this.setCollectionId(event.getData());\r
+ this.loadList(); \r
+ },\r
+ \r
+ addScroll : function(){\r
+ return false;\r
+ } \r
+ }\r
+});
\ No newline at end of file
--- /dev/null
+/**\r
+ * Basic helper for SLC XML results to be displayed in a qx.ui.table.\r
+ * Overrides the html of the standard qx.ui.table.cellrenderer.String\r
+ * \r
+ * TODO : put in org.argeo.slc.ria package\r
+ * \r
+ */\r
+qx.Class.define("org.argeo.slc.web.XmlRenderer",\r
+{\r
+ extend : qx.ui.table.cellrenderer.String,\r
+\r
+ /*\r
+ *****************************************************************************\r
+ MEMBERS\r
+ *****************************************************************************\r
+ */\r
+\r
+ members :\r
+ {\r
+ /**\r
+ * Overrides the parent method.\r
+ * @param cellInfo {Map} The current cell data \r
+ * @return {String}\r
+ */\r
+ _getContentHtml : function(cellInfo) {\r
+ var xmlNode = cellInfo.rowData;\r
+ if(!xmlNode) return "";\r
+ var xPath;\r
+ var NSMap = {slc:"http://argeo.org/projects/slc/schemas"};\r
+ switch(cellInfo.col){\r
+ case 0 :\r
+ xPath = "slc:uuid";\r
+ var nameParam = org.argeo.ria.util.Element.selectSingleNode(xmlNode, xPath, NSMap);\r
+ var value = qx.bom.String.escape(qx.dom.Node.getText(nameParam) || "Not Found");\r
+ break;\r
+ case 1 : \r
+ xPath = "slc:close-date";\r
+ var nameParam = org.argeo.ria.util.Element.selectSingleNode(xmlNode, xPath, NSMap);\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
+ 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(value);\r
+ var dateFormat2 = new qx.util.format.DateFormat("MMM d, yy HH:mm:ss");\r
+ return dateFormat2.format(date);\r
+ }catch(e){}\r
+ break;\r
+ default :\r
+ return "";\r
+ break;\r
+ }\r
+ \r
+ return value;\r
+ },\r
+ \r
+ // overridden\r
+ /**\r
+ * Overrides parent method\r
+ * @param cellInfo {Map} Current cell data\r
+ * @return {String}\r
+ */\r
+ _getCellClass : function(cellInfo) {\r
+ return this.base(arguments, cellInfo);\r
+ }\r
+ \r
+ }\r
+});
\ No newline at end of file
--- /dev/null
+/**
+ * @author Charles
+ */
+qx.Class.define("org.argeo.slc.ria.Applet",
+{
+ extend : qx.ui.container.Composite,
+ implement : [org.argeo.ria.components.IView],
+
+ construct : function(){
+ this.base(arguments);
+ this.setLayout(new qx.ui.layout.VBox());
+ this.passedStatus = "PASSED";
+ this.failedStatus = "FAILED";
+ },
+
+ properties :
+ {
+ view : {
+ init : null
+ },
+ commands : {
+ init : {
+ "close" : {
+ label : "Close Result",
+ icon : "resource/slc/window-close.png",
+ shortcut : "Control+w",
+ enabled : true,
+ menu : "Test",
+ toolbar : "result",
+ callback : function(e){
+ // Call service to delete
+ this.getView().empty();
+ },
+ selectionChange : function(viewId, xmlNode){
+ if(viewId != "applet") return;
+ },
+ command : null
+ }
+ }
+ }
+ },
+
+ /*
+ *****************************************************************************
+ MEMBERS
+ *****************************************************************************
+ */
+
+ members :
+ {
+ init : function(viewPane){
+ this.setView(viewPane);
+ },
+
+ load : function(xmlNode){
+ this.data = xmlNode;
+ if(!xmlNode) return;
+ // Load XML or Whatever
+ 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.getView().setViewTitle("Test "+testId);
+ var request = org.argeo.slc.ria.SlcApi.getLoadResultService(testId);
+ request.addListener("completed", function(response){
+ this.createXmlGui(response.getContent());
+ this.getView().setOnLoad(false);
+ }, this);
+ this.getView().setOnLoad(true);
+ request.send();
+
+ },
+
+ addScroll : function(){
+ return false;
+ },
+
+ createXmlGui : function(responseXml){
+ var NSMap = {
+ "slc" : "http://argeo.org/projects/slc/schemas"
+ }
+ if(!qx.Class.hasMixin(qx.ui.treevirtual.TreeVirtual, qx.ui.treevirtual.MNode)){
+ qx.Class.include(qx.ui.treevirtual.TreeVirtual,qx.ui.treevirtual.MNode);
+ }
+ this.tree = new qx.ui.treevirtual.TreeVirtual(["Test", "State", "Message", "Id"]);
+ this.tree.getTableColumnModel().setDataCellRenderer(0, new org.argeo.ria.util.TreeDataCellRenderer());
+ this.tree.getDataRowRenderer().setHighlightFocusRow(false); // Default row renderer
+ this.tree.setRowHeight(18);
+ this.tree.setStatusBarVisible(false);
+ this.tree.setDecorator(new qx.ui.decoration.Background("#fff"));
+ var model = this.tree.getDataModel();
+ var resNodes = org.argeo.ria.util.Element.selectNodes(responseXml, "//slc:result-part", NSMap);
+ var resultParts = {};
+ var addedPaths = {};
+ for(var i=0;i<resNodes.length;i++){
+ var currentParentId = null;
+ var node = resNodes[i];
+ var pathAttr = qx.xml.Element.getSingleNodeText(node, "@path");
+ var pathParts = pathAttr.split("/");
+ if(pathParts[0] == ""){
+ pathParts.shift();
+ }
+ var crtPath = "";
+ for(var j=0;j<pathParts.length;j++){
+ //if(pathParts[j] == "") continue;
+ crtPath = crtPath.concat("/", pathParts[j]);
+ if(addedPaths[crtPath]) {
+ currentParentId = addedPaths[crtPath];
+ continue; // Node already exists, set as parent and go to next!
+ }
+ var element = org.argeo.ria.util.Element.selectSingleNode(responseXml, '//slc:element[@path="'+crtPath+'"]', NSMap);
+ var label;
+ if(element != null){
+ label = org.argeo.ria.util.Element.getSingleNodeText(element, "*/slc:label", NSMap);
+ }else{
+ label = crtPath;
+ }
+ 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);
+
+ // 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);
+ model.setColumnData(resId, 3, org.argeo.ria.util.Element.getSingleNodeText(sResNode, "slc:test-run-uuid", NSMap));
+ model.setColumnData(resId, 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(resId);
+ }else{
+ status = this.passedStatus;
+ }
+ model.setColumnData(resId, 1, status);
+ }
+
+ addedPaths[crtPath] = newId;
+ currentParentId = newId;
+ }
+ }
+ this._refineLeaves(this.tree, 0);
+ this.add(this.tree, {flex:1});
+ model.setData();
+ var columnModel = this.tree.getTableColumnModel();
+ var resize = columnModel.getBehavior();
+ resize.set(0, {width:250, minWidth:250});
+ resize.set(1, {width:55});
+ resize.set(2, {width:"1*"});
+ resize.set(3, {width:150});
+ columnModel.setDataCellRenderer(1, new org.argeo.slc.ria.StatusCellRenderer());
+
+ this.tree.getSelectionManager().getSelectionModel().addListener("changeSelection", function(e){
+ var viewSelection = this.getView().getViewSelection();
+ viewSelection.clear();
+ var nodes = this.tree.getDataModel().getSelectedNodes();
+ if(nodes.length){
+ viewSelection.addNode(nodes[0]);
+ this.getView().setViewSelection(viewSelection);
+ }
+ }, this);
+
+ var contextMenu = org.argeo.ria.event.CommandsManager.getInstance().createMenuFromIds(["close"]);
+ this.tree.setContextMenu(contextMenu);
+
+ },
+
+ _setParentBranchAsFailed : function(id){
+ var model = this.tree.getDataModel();
+ while(id != null && id!=0){
+ var node = this.tree.nodeGet(id);
+ id = node.parentNodeId;
+ if(id != null && id!=0){
+ model.setColumnData(id, 1, this.failedStatus);
+ this.tree.nodeSetOpened(id, true);
+ }
+ }
+ },
+
+ _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");
+ htmlElement.setOverflowY("auto");
+ this.add(htmlElement, {flex:1});
+ }
+
+ }
+});
\ No newline at end of file
--- /dev/null
+qx.Class.define("org.argeo.slc.ria.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.ria.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.ria.SlcApi.getServiceRequest(\r
+ org.argeo.slc.ria.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.ria.SlcApi.getServiceRequest(\r
+ org.argeo.slc.ria.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.ria.SlcApi.getServiceRequest(\r
+ org.argeo.slc.ria.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.ria.SlcApi.getServiceRequest(\r
+ org.argeo.slc.ria.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.ria.SlcApi.getServiceRequest(\r
+ org.argeo.slc.ria.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
--- /dev/null
+/* ************************************************************************
+
+ qooxdoo - the new era of web development
+
+ http://qooxdoo.org
+
+ Copyright:
+ 2007 OpenHex SPRL, http://www.openhex.org
+
+ License:
+ LGPL: http://www.gnu.org/licenses/lgpl.html
+ EPL: http://www.eclipse.org/org/documents/epl-v10.php
+ See the LICENSE file in the project's top-level directory for details.
+
+ Authors:
+ * Dirk Wellmann (dw(at)piponline.net)
+
+************************************************************************ */
+
+/**
+ * This Cellrender is for test status use. It create green or red background
+ * cells depending on the status value (PASSED or FAILED).
+ */
+qx.Class.define("org.argeo.slc.ria.StatusCellRenderer",
+{
+ extend : qx.ui.table.cellrenderer.Html,
+
+ construct : function(){
+ this.base(arguments);
+ var style =
+ [
+ ".slc-status-passed{background-color:#8fc98f;color:#008300;border-bottom:1px solid #cccccc;text-align:center;filter:alpha(opacity=80);opacity: 0.8;-moz-opacity:0.8;}",
+ ".slc-status-failed{background-color:#cb8f8f;color:#830000;border-bottom:1px solid #cccccc;text-align:center;filter:alpha(opacity=80);opacity: 0.8;-moz-opacity:0.8;}"
+ ];
+ // Include stylesheet
+ qx.bom.Stylesheet.createElement(style.join(""));
+ },
+
+ /*
+ *****************************************************************************
+ MEMBERS
+ *****************************************************************************
+ */
+
+ members :
+ {
+ // overridden
+ _getContentHtml : function(cellInfo) {
+ return (cellInfo.value || "");
+ },
+
+ // overridden
+ _getCellClass : function(cellInfo) {
+ if(cellInfo.value == "PASSED"){
+ return "qooxdoo-table-cell slc-status-passed";
+ }else if(cellInfo.value == "FAILED"){
+ return "qooxdoo-table-cell slc-status-failed";
+ }else{
+ return "qooxdoo-table-cell";
+ }
+ }
+ }
+});
+++ /dev/null
-/**
- * @author Charles
- */
-qx.Class.define("org.argeo.slc.ria.Applet",
-{
- extend : qx.ui.container.Composite,
- implement : [org.argeo.ria.components.IView],
-
- construct : function(){
- this.base(arguments);
- this.setLayout(new qx.ui.layout.VBox());
- this.passedStatus = "PASSED";
- this.failedStatus = "FAILED";
- },
-
- properties :
- {
- view : {
- init : null
- },
- commands : {
- init : {
- "close" : {
- label : "Close Result",
- icon : "resource/slc/window-close.png",
- shortcut : "Control+w",
- enabled : true,
- menu : "Test",
- toolbar : "result",
- callback : function(e){
- // Call service to delete
- this.getView().empty();
- },
- selectionChange : function(viewId, xmlNode){
- if(viewId != "applet") return;
- },
- command : null
- }
- }
- }
- },
-
- /*
- *****************************************************************************
- MEMBERS
- *****************************************************************************
- */
-
- members :
- {
- init : function(viewPane){
- this.setView(viewPane);
- },
-
- load : function(xmlNode){
- this.data = xmlNode;
- if(!xmlNode) return;
- // Load XML or Whatever
- 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.getView().setViewTitle("Test "+testId);
- var request = org.argeo.slc.ria.SlcApi.getLoadResultService(testId);
- request.addListener("completed", function(response){
- this.createXmlGui(response.getContent());
- this.getView().setOnLoad(false);
- }, this);
- this.getView().setOnLoad(true);
- request.send();
-
- },
-
- addScroll : function(){
- return false;
- },
-
- createXmlGui : function(responseXml){
- var NSMap = {
- "slc" : "http://argeo.org/projects/slc/schemas"
- }
- if(!qx.Class.hasMixin(qx.ui.treevirtual.TreeVirtual, qx.ui.treevirtual.MNode)){
- qx.Class.include(qx.ui.treevirtual.TreeVirtual,qx.ui.treevirtual.MNode);
- }
- this.tree = new qx.ui.treevirtual.TreeVirtual(["Test", "State", "Message", "Id"]);
- this.tree.getTableColumnModel().setDataCellRenderer(0, new org.argeo.ria.util.TreeDataCellRenderer());
- this.tree.getDataRowRenderer().setHighlightFocusRow(false); // Default row renderer
- this.tree.setRowHeight(18);
- this.tree.setStatusBarVisible(false);
- this.tree.setDecorator(new qx.ui.decoration.Background("#fff"));
- var model = this.tree.getDataModel();
- var resNodes = org.argeo.ria.util.Element.selectNodes(responseXml, "//slc:result-part", NSMap);
- var resultParts = {};
- var addedPaths = {};
- for(var i=0;i<resNodes.length;i++){
- var currentParentId = null;
- var node = resNodes[i];
- var pathAttr = qx.xml.Element.getSingleNodeText(node, "@path");
- var pathParts = pathAttr.split("/");
- if(pathParts[0] == ""){
- pathParts.shift();
- }
- var crtPath = "";
- for(var j=0;j<pathParts.length;j++){
- //if(pathParts[j] == "") continue;
- crtPath = crtPath.concat("/", pathParts[j]);
- if(addedPaths[crtPath]) {
- currentParentId = addedPaths[crtPath];
- continue; // Node already exists, set as parent and go to next!
- }
- var element = org.argeo.ria.util.Element.selectSingleNode(responseXml, '//slc:element[@path="'+crtPath+'"]', NSMap);
- var label;
- if(element != null){
- label = org.argeo.ria.util.Element.getSingleNodeText(element, "*/slc:label", NSMap);
- }else{
- label = crtPath;
- }
- 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);
-
- // 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);
- model.setColumnData(resId, 3, org.argeo.ria.util.Element.getSingleNodeText(sResNode, "slc:test-run-uuid", NSMap));
- model.setColumnData(resId, 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(resId);
- }else{
- status = this.passedStatus;
- }
- model.setColumnData(resId, 1, status);
- }
-
- addedPaths[crtPath] = newId;
- currentParentId = newId;
- }
- }
- this._refineLeaves(this.tree, 0);
- this.add(this.tree, {flex:1});
- model.setData();
- var columnModel = this.tree.getTableColumnModel();
- var resize = columnModel.getBehavior();
- resize.set(0, {width:250, minWidth:250});
- resize.set(1, {width:55});
- resize.set(2, {width:"1*"});
- resize.set(3, {width:150});
- columnModel.setDataCellRenderer(1, new org.argeo.slc.ria.StatusCellRenderer());
-
- this.tree.getSelectionManager().getSelectionModel().addListener("changeSelection", function(e){
- var viewSelection = this.getView().getViewSelection();
- viewSelection.clear();
- var nodes = this.tree.getDataModel().getSelectedNodes();
- if(nodes.length){
- viewSelection.addNode(nodes[0]);
- this.getView().setViewSelection(viewSelection);
- }
- }, this);
-
- var contextMenu = org.argeo.ria.event.CommandsManager.getInstance().createMenuFromIds(["close"]);
- this.tree.setContextMenu(contextMenu);
-
- },
-
- _setParentBranchAsFailed : function(id){
- var model = this.tree.getDataModel();
- while(id != null && id!=0){
- var node = this.tree.nodeGet(id);
- id = node.parentNodeId;
- if(id != null && id!=0){
- model.setColumnData(id, 1, this.failedStatus);
- this.tree.nodeSetOpened(id, true);
- }
- }
- },
-
- _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");
- htmlElement.setOverflowY("auto");
- this.add(htmlElement, {flex:1});
- }
-
- }
-});
\ No newline at end of file
+++ /dev/null
-qx.Class.define("org.argeo.slc.ria.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.ria.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.ria.SlcApi.getServiceRequest(\r
- org.argeo.slc.ria.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.ria.SlcApi.getServiceRequest(\r
- org.argeo.slc.ria.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.ria.SlcApi.getServiceRequest(\r
- org.argeo.slc.ria.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.ria.SlcApi.getServiceRequest(\r
- org.argeo.slc.ria.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.ria.SlcApi.getServiceRequest(\r
- org.argeo.slc.ria.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
+++ /dev/null
-/* ************************************************************************
-
- qooxdoo - the new era of web development
-
- http://qooxdoo.org
-
- Copyright:
- 2007 OpenHex SPRL, http://www.openhex.org
-
- License:
- LGPL: http://www.gnu.org/licenses/lgpl.html
- EPL: http://www.eclipse.org/org/documents/epl-v10.php
- See the LICENSE file in the project's top-level directory for details.
-
- Authors:
- * Dirk Wellmann (dw(at)piponline.net)
-
-************************************************************************ */
-
-/**
- * This Cellrender is for test status use. It create green or red background
- * cells depending on the status value (PASSED or FAILED).
- */
-qx.Class.define("org.argeo.slc.ria.StatusCellRenderer",
-{
- extend : qx.ui.table.cellrenderer.Html,
-
- construct : function(){
- this.base(arguments);
- var style =
- [
- ".slc-status-passed{background-color:#8fc98f;color:#008300;border-bottom:1px solid #cccccc;text-align:center;filter:alpha(opacity=80);opacity: 0.8;-moz-opacity:0.8;}",
- ".slc-status-failed{background-color:#cb8f8f;color:#830000;border-bottom:1px solid #cccccc;text-align:center;filter:alpha(opacity=80);opacity: 0.8;-moz-opacity:0.8;}"
- ];
- // Include stylesheet
- qx.bom.Stylesheet.createElement(style.join(""));
- },
-
- /*
- *****************************************************************************
- MEMBERS
- *****************************************************************************
- */
-
- members :
- {
- // overridden
- _getContentHtml : function(cellInfo) {
- return (cellInfo.value || "");
- },
-
- // overridden
- _getCellClass : function(cellInfo) {
- if(cellInfo.value == "PASSED"){
- return "qooxdoo-table-cell slc-status-passed";
- }else if(cellInfo.value == "FAILED"){
- return "qooxdoo-table-cell slc-status-failed";
- }else{
- return "qooxdoo-table-cell";
- }
- }
- }
-});
+++ /dev/null
-/**\r
- * @author Charles\r
- */\r
-qx.Class.define("org.argeo.slc.web.Perspective",\r
-{\r
- extend : qx.core.Object,\r
- implement : [org.argeo.ria.components.IPerspective], \r
- \r
- construct : function(){\r
- this.base(arguments);\r
- },\r
- \r
- members : {\r
- \r
- initViewPanes : function(viewsManager){\r
- \r
- var splitPane = new qx.ui.splitpane.Pane("horizontal");\r
- var topLeft = new org.argeo.ria.components.ViewPane("list", "Collection", {\r
- orientation : "horizontal",\r
- min : 36\r
- });\r
- topLeft.set({width:300});\r
- viewsManager.registerViewPane(topLeft);\r
- \r
- splitPane.add(topLeft, 0);\r
- var rightPane = new org.argeo.ria.components.ViewPane("applet", "Test Detail"); \r
- viewsManager.registerViewPane(rightPane);\r
- splitPane.add(rightPane, 1);\r
- \r
- viewsManager.getViewPanesContainer().add(splitPane, {flex:1});\r
- \r
- },\r
- \r
- initViews : function(viewsManager){\r
- var view = viewsManager.initIViewClass(org.argeo.slc.web.TestList, "list");\r
- view.load();\r
- //var command = org.argeo.ria.event.CommandsManager.getInstance().executeCommand("loadtestlist");\r
- view.loadCollections(); // We know it is a TestList!\r
- view.loadList();\r
- }\r
- \r
- }\r
-\r
-});
\ No newline at end of file
+++ /dev/null
-/**\r
- * @author Charles\r
- */\r
-qx.Class.define("org.argeo.slc.web.TestList",\r
-{\r
- extend : qx.ui.container.Composite,\r
- implement : [org.argeo.ria.components.IView], \r
-\r
- construct : function(){\r
- this.base(arguments, new qx.ui.layout.VBox()); \r
- var model = new qx.ui.table.model.Simple();\r
- model.setColumns(["Test Case", "Date"]);\r
- this.table = new qx.ui.table.Table(model, {\r
- tableColumnModel: function(obj){\r
- return new qx.ui.table.columnmodel.Resize(obj)\r
- }\r
- });\r
- },\r
-\r
- properties : \r
- {\r
- view : {\r
- init : null\r
- },\r
- collectionList : {\r
- init : {},\r
- check : "Map"\r
- },\r
- collectionId:{\r
- init : 'My Collection',\r
- check : "String"\r
- },\r
- commands : {\r
- init : {\r
- "loadtestlist" : {\r
- label : "Load Collection", \r
- icon : "resource/slc/view-refresh.png",\r
- shortcut : "Control+l",\r
- enabled : true,\r
- menu : "Collection",\r
- toolbar : "collection",\r
- callback : function(e){\r
- this.loadList();\r
- }, \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
- shortcut : null,\r
- enabled : false,\r
- menu : "Collection",\r
- toolbar : "collection",\r
- callback : function(e){\r
- // Call service to copy\r
- },\r
- submenu : {},\r
- submenuCallback : function(commandId){\r
- this.copySelectionToCollection(commandId, "current_collection");\r
- },\r
- init : function(){\r
- // Call at command creation\r
- org.argeo.ria.remote.RequestManager.getInstance().addListener("reload", function(event){\r
- if(event.getDataType() == "collection" || event.getDataType() == "test_cases"){\r
- var testList = org.argeo.ria.components.ViewsManager.getInstance().getViewPaneById("list").getContent();\r
- testList.collectionListToMenu(this);\r
- }\r
- }, this);\r
- },\r
- command : null\r
- },\r
- */\r
- "opentest" : {\r
- label : "Open", \r
- icon : "resource/slc/media-playback-start.png",\r
- shortcut : "Control+o",\r
- enabled : false,\r
- menu : "Selection",\r
- toolbar : "selection",\r
- callback : function(e){\r
- var viewsManager = org.argeo.ria.components.ViewsManager.getInstance();\r
- var classObj = org.argeo.slc.ria.Applet;\r
- var iView = viewsManager.initIViewClass(classObj, "applet");\r
- var xmlNodes = viewsManager.getViewPaneSelection("list").getNodes();\r
- iView.load(xmlNodes[0]);\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
- "download" : {\r
- label : "Download as...", \r
- icon : "resource/slc/go-down.png",\r
- shortcut : null,\r
- enabled : false,\r
- menu : "Selection",\r
- toolbar : "selection",\r
- callback : function(e){ },\r
- command : null,\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
- xsl : "resultView.xslt",\r
- xml : "resultViewXml.xslt",\r
- xls : "resultView.xls",\r
- pdf : "resultView.pdf"\r
- };\r
- var url = "../"+urls[commandId]+"?uuid="+uuid;\r
- if(commandId == "xls" || commandId == "pdf"){\r
- document.location.href = url;\r
- }else{\r
- var win = window.open(url);\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
- },\r
- "copytocollection" : {\r
- label : "Copy to...", \r
- icon : "resource/slc/edit-copy.png",\r
- shortcut : "Control+c",\r
- enabled : false,\r
- menu : "Selection",\r
- toolbar : "selection",\r
- callback : function(e){\r
- // Call service to copy\r
- },\r
- submenu : {},\r
- submenuCallback : function(commandId){\r
- this.copySelectionToCollection(commandId, "current_selection"); \r
- },\r
- init : function(){\r
- // Call at command creation\r
- org.argeo.ria.remote.RequestManager.getInstance().addListener("reload", function(event){\r
- if(event.getDataType() == "collection" || event.getDataType() == "test_cases"){\r
- var testList = org.argeo.ria.components.ViewsManager.getInstance().getViewPaneById("list").getContent();\r
- testList.collectionListToMenu(this, true);\r
- }\r
- }, this);\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
- "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.ria.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
- \r
- members : {\r
- init : function(viewPane){\r
- this.setView(viewPane);\r
- },\r
- load : function(data){\r
- this.table.set({ \r
- statusBarVisible: false,\r
- showCellFocusIndicator:false,\r
- columnVisibilityButtonVisible:false,\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
- this.table.addListener("dblclick", function(e){\r
- org.argeo.ria.event.CommandsManager.getInstance().executeCommand("opentest");\r
- }, this);\r
- var columnModel = this.table.getTableColumnModel(); \r
- columnModel.getBehavior().setWidth(0, "60%");\r
- var renderer = new org.argeo.slc.web.XmlRenderer();\r
- columnModel.setDataCellRenderer(0, renderer);\r
- columnModel.setDataCellRenderer(1, renderer);\r
- \r
- this.table.getSelectionManager().getSelectionModel().addListener("changeSelection", function(e){\r
- var viewSelection = viewPane.getViewSelection();\r
- viewSelection.clear();\r
- var selectionModel = this.table.getSelectionManager().getSelectionModel();\r
- if(!selectionModel.getSelectedCount()){\r
- return;\r
- }\r
- var ranges = this.table.getSelectionManager().getSelectionModel().getSelectedRanges();\r
- var xmlNode = this.table.getTableModel().getRowData(ranges[0].minIndex);\r
- viewSelection.addNode(xmlNode);\r
- viewPane.setViewSelection(viewSelection);\r
- }, this); \r
- \r
- var select = new qx.ui.form.SelectBox();\r
- this.getView().addHeaderComponent(select);\r
- this.getView().setViewTitle("");\r
- this.add(this.table, {flex:1});\r
-\r
- select.addListener("changeValue", this.collectionSelectorListener, this);\r
-\r
- org.argeo.ria.remote.RequestManager.getInstance().addListener("reload", function(event){\r
- if(event.getDataType()!="collection") return;\r
- select.removeListener("changeValue", this.collectionSelectorListener, this);\r
- var collectionList = event.getContent();\r
- select.removeAll();\r
- for(key in collectionList){\r
- var item = new qx.ui.form.ListItem(collectionList[key], "resource/slc/folder.png", key);\r
- select.add(item);\r
- if(key == this.getCollectionId()){\r
- select.setSelected(item);\r
- }\r
- }\r
- this.setCollectionId(select.getSelected().getValue());\r
- select.addListener("changeValue", this.collectionSelectorListener, this);\r
- }, this);\r
- \r
- },\r
- \r
- loadCollections : function(){\r
- var request = org.argeo.slc.ria.SlcApi.getListCollectionsService();\r
- var NSMap = {slc:"http://argeo.org/projects/slc/schemas"};\r
- request.addListener("completed", function(response){\r
- var xml = response.getContent();\r
- var collections = {};\r
- var nodes = org.argeo.ria.util.Element.selectNodes(xml, "//slc:ref", NSMap);\r
- for(var i=0;i<nodes.length;i++){\r
- var collId = qx.xml.Element.getSingleNodeText(nodes[i], ".");\r
- collections[collId] = collId;\r
- }\r
- this.setCollectionList(collections);\r
- org.argeo.ria.remote.RequestManager.getInstance().fireReloadEvent("collection", this.getCollectionList());\r
- }, this);\r
- request.setAsynchronous(false);\r
- request.send();\r
- },\r
- \r
- loadList : function(){\r
- var model = this.table.getTableModel();\r
- model.removeRows(0, model.getRowCount());\r
- var commandManager = org.argeo.ria.event.CommandsManager.getInstance();\r
- var request = org.argeo.slc.ria.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.debug("Successfully loaded XML");\r
- var nodes = org.argeo.ria.util.Element.selectNodes(xml, "//slc:result-attributes", NSMap);\r
- //model.addRows(nodes);\r
- \r
- for(var i=0; i<nodes.length;i++){ \r
- model.addRows([nodes[i]]);\r
- } \r
- }, request);\r
- 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
- var collectionList = this.getCollectionList();\r
- if(!collectionList) return;\r
- var submenus = [];\r
- for(var key in collectionList){\r
- if(this.getCollectionId() && key == this.getCollectionId()) continue;\r
- submenus.push({\r
- "label":collectionList[key], \r
- "icon":"resource/slc/folder.png", \r
- "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
- var viewSelection = this.getView().getViewSelection();\r
- if(viewSelection.getCount()) command.setEnabled(true);\r
- }else{\r
- command.setEnabled(true);\r
- }\r
- },\r
- \r
- copySelectionToCollection:function(collectionId, selectionType){\r
- if(collectionId == "slc.client.create"){\r
- var modal = new org.argeo.ria.components.Modal("Create collection", "resource/slc/folder-new.png");\r
- modal.makePromptForm("Enter the new collection name", function(value){\r
- if(value == ""){\r
- alert("Please enter a name for the new collection!");\r
- return false;\r
- }\r
- else {\r
- // Create the collection now, then recall the callback with the new name. \r
- this.copySelectionToCollection(value, selectionType);\r
- return true;\r
- }\r
- }, this);\r
- modal.attachAndShow();\r
- return;\r
- }\r
-\r
- if(selectionType == "current_collection"){\r
- this.error("Not implemented yet!"); \r
- }else if(selectionType == "current_selection"){\r
- // get selection ID\r
- var request = org.argeo.slc.ria.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
- },\r
- \r
- extractTestUuid: function(){\r
- var NSMap = {slc:"http://argeo.org/projects/slc/schemas"};\r
- var xmlNodes = this.getView().getViewSelection().getNodes();\r
- var uuid = qx.dom.Node.getText(org.argeo.ria.util.Element.selectSingleNode(xmlNodes[0], "slc:uuid"));\r
- return uuid;\r
- },\r
- \r
- collectionSelectorListener : function(event){\r
- this.setCollectionId(event.getData());\r
- this.loadList(); \r
- },\r
- \r
- addScroll : function(){\r
- return false;\r
- } \r
- }\r
-});
\ No newline at end of file
+++ /dev/null
-/**\r
- * Basic helper for SLC XML results to be displayed in a qx.ui.table.\r
- * Overrides the html of the standard qx.ui.table.cellrenderer.String\r
- * \r
- * TODO : put in org.argeo.slc.ria package\r
- * \r
- */\r
-qx.Class.define("org.argeo.slc.web.XmlRenderer",\r
-{\r
- extend : qx.ui.table.cellrenderer.String,\r
-\r
- /*\r
- *****************************************************************************\r
- MEMBERS\r
- *****************************************************************************\r
- */\r
-\r
- members :\r
- {\r
- /**\r
- * Overrides the parent method.\r
- * @param cellInfo {Map} The current cell data \r
- * @return {String}\r
- */\r
- _getContentHtml : function(cellInfo) {\r
- var xmlNode = cellInfo.rowData;\r
- if(!xmlNode) return "";\r
- var xPath;\r
- var NSMap = {slc:"http://argeo.org/projects/slc/schemas"};\r
- switch(cellInfo.col){\r
- case 0 :\r
- xPath = "slc:uuid";\r
- var nameParam = org.argeo.ria.util.Element.selectSingleNode(xmlNode, xPath, NSMap);\r
- var value = qx.bom.String.escape(qx.dom.Node.getText(nameParam) || "Not Found");\r
- break;\r
- case 1 : \r
- xPath = "slc:close-date";\r
- var nameParam = org.argeo.ria.util.Element.selectSingleNode(xmlNode, xPath, NSMap);\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
- 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(value);\r
- var dateFormat2 = new qx.util.format.DateFormat("MMM d, yy HH:mm:ss");\r
- return dateFormat2.format(date);\r
- }catch(e){}\r
- break;\r
- default :\r
- return "";\r
- break;\r
- }\r
- \r
- return value;\r
- },\r
- \r
- // overridden\r
- /**\r
- * Overrides parent method\r
- * @param cellInfo {Map} Current cell data\r
- * @return {String}\r
- */\r
- _getCellClass : function(cellInfo) {\r
- return this.base(arguments, cellInfo);\r
- }\r
- \r
- }\r
-});
\ No newline at end of file