+/**\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