+++ /dev/null
-/**\r
- * The selector view\r
- * \r
- */\r
-qx.Class.define("org.argeo.slc.ria.monitor.FlowsSelectorView", {\r
- extend : org.argeo.slc.ria.FlowsSelectorView,\r
- implement : [org.argeo.ria.components.IView],\r
-\r
- construct : function() {\r
- this.base(arguments);\r
- },\r
-\r
- properties : {\r
- /**\r
- * Commands definition, see\r
- * {@link org.argeo.ria.event.CommandsManager#definitions}\r
- */\r
- commands : {\r
- refine : true,\r
- init : {\r
- "reloadtree" : {\r
- label : "Reload",\r
- icon : "org.argeo.slc.ria/view-refresh.png",\r
- shortcut : "Control+m",\r
- enabled : false,\r
- menu : "Launcher",\r
- toolbar : "launcher",\r
- callback : function(e) {\r
- if (this.tree.isSelectionEmpty()) { return; } \r
- var selected = this.tree.getSelection()[0];\r
- if (selected.classname == "org.argeo.ria.components.DynamicTreeFolder") {\r
- if (selected.getUserData("moduleData")) {\r
- // It's a "module" node, first trigger the\r
- // reloadBundle.service\r
- selected.setUserData("dataModel", {});\r
- selected.setEnabled(false);\r
- selected.setOpen(false);\r
- var moduleData = selected\r
- .getUserData("moduleData");\r
- var bundleService = org.argeo.slc.ria.SlcApi\r
- .getReloadBundleService(\r
- moduleData.name,\r
- moduleData.version);\r
- bundleService.addListener("completed",\r
- function(response) {\r
- selected.setEnabled(true);\r
- selected.setOpen(true);\r
- selected.reload();\r
- }, this);\r
- // bundleService.send();\r
- // Do not send, not implemented yet, false timer\r
- // instead.\r
- qx.event.Timer.once(function(response) {\r
- selected.setEnabled(true);\r
- selected.setOpen(true);\r
- selected.reload();\r
- }, this, 2000);\r
- } else {\r
- selected.reload();\r
- }\r
- }\r
- },\r
- selectionChange : function(viewId, selection) {\r
- if (viewId != "form:tree")\r
- return;\r
- if (!selection)\r
- return;\r
- if (selection.length > 1) {\r
- this.setEnabled(false);\r
- return;\r
- }\r
- var item = selection[0];\r
- if (!qx.Class.isSubClassOf(qx.Class\r
- .getByName(item.classname),\r
- qx.ui.tree.AbstractTreeItem))\r
- return;\r
- this.setEnabled(false);\r
- if (qx.Class.isSubClassOf(qx.Class\r
- .getByName(item.classname),\r
- org.argeo.ria.components.DynamicTreeFolder)) {\r
- this.setEnabled(true);\r
- }\r
- },\r
- command : null\r
- }\r
- }\r
- }\r
- },\r
-\r
- statics : {\r
- \r
- riaPreferences : {\r
- "flowSelector.monitor.preferred.hosts" : {\r
- label : "Preferred Hosts (Monitoring View)",\r
- type : "string"\r
- }\r
- },\r
- \r
- /**\r
- * Static loader for the "agent" level (first level)\r
- * \r
- * @param folder\r
- * {org.argeo.ria.components.PersistentTreeFolder} The root Tree Folder.\r
- */\r
- agentLoader : function(folder) {\r
-\r
- var req = org.argeo.slc.ria.SlcApi.getListAgentsService("agents"); \r
- var agents = {};\r
- if(folder.getState() == "loaded" && folder.getUserData("agentsMap")){\r
- // Diff loading, just add new nodes.\r
- agents = folder.getUserData("agentsMap");\r
- var newAgents = {};\r
- }\r
- req.addListener("completed", function(response) {\r
- var xmlDoc = response.getContent();\r
- var nodes = org.argeo.ria.util.Element.selectNodes(xmlDoc,\r
- "//slc:slc-agent-descriptor");\r
- var modulesLoader = org.argeo.slc.ria.FlowsSelectorView.modulesLoader;\r
- \r
- for (var i = 0; i < nodes.length; i++) {\r
- var uuid = org.argeo.ria.util.Element.getSingleNodeText(nodes[i], "@uuid");\r
- var host = org.argeo.ria.util.Element.getSingleNodeText(nodes[i], "slc:host");\r
- if(agents[uuid]){\r
- newAgents[uuid] = host;\r
- continue;\r
- }\r
- agents[uuid] = host;\r
- if(newAgents) newAgents[uuid] = host;\r
- var agentFolder = new org.argeo.ria.components.DynamicTreeFolder(\r
- host + ' (' + uuid + ')', modulesLoader,\r
- "Loading Modules...", folder.getDragData());\r
- agentFolder.setUserData("agentUuid", uuid);\r
- agentFolder.setIcon("org.argeo.slc.ria/mime-xsl-22.png");\r
- folder.add(agentFolder);\r
- }\r
- if(newAgents){\r
- // Make sure some agents should not be removed\r
- for(var agentKey in agents){\r
- if(!newAgents[agentKey]){\r
- var node = org.argeo.slc.ria.FlowsSelectorView.findAgentNodeById(folder, agentKey);\r
- if(node) folder.remove(node);\r
- delete agents[agentKey];\r
- var batchView = org.argeo.ria.components.ViewsManager.getInstance().getViewPaneById("batch").getContent();\r
- if(batchView) batchView.clearBatchForAgentId(agentKey);\r
- }\r
- }\r
- }\r
- folder.setUserData("agentsMap", agents);\r
- folder.setLoaded(true);\r
- folder.getTree().fireEvent("changeSelection"); \r
- });\r
- req.addListener("failed", function(response) {\r
- folder.setLoaded(true);\r
- });\r
- req.send();\r
-\r
- },\r
-\r
- /**\r
- * Loader for the "modules" level : takes any tree folder, currently the\r
- * root folder.\r
- * \r
- * @param folder\r
- * {org.argeo.ria.components.PersistentTreeFolder} The root folder\r
- */\r
- modulesLoader : function(folder) {\r
- var agentId = folder.getUserData("agentUuid");\r
- var req = org.argeo.slc.ria.SlcApi.getListModulesService(agentId);\r
- req.addListener("completed", function(response) {\r
- var descriptors = org.argeo.ria.util.Element.selectNodes(\r
- response.getContent(),\r
- "slc:object-list/slc:execution-module-descriptor");\r
- var mods = {};\r
- for (var i = 0; i < descriptors.length; i++) {\r
- var name = org.argeo.ria.util.Element.getSingleNodeText(\r
- descriptors[i], "slc:name");\r
- var version = org.argeo.ria.util.Element.getSingleNodeText(\r
- descriptors[i], "slc:version");\r
- if (!mods[name])\r
- mods[name] = [];\r
- mods[name].push(version);\r
- }\r
- var flowLoader = org.argeo.slc.ria.FlowsSelectorView.flowLoader;\r
- for (var key in mods) {\r
- for (var i = 0; i < mods[key].length; i++) {\r
- var versionFolder = new org.argeo.ria.components.DynamicTreeFolder(\r
- key + ' (' + mods[key][i] + ')', flowLoader,\r
- "Loading Flows", folder.getDragData());\r
- versionFolder.setUserData("moduleData", {\r
- name : key,\r
- version : mods[key][i]\r
- });\r
- versionFolder.setUserData("agentUuid", agentId);\r
- // Warning, we must add it AFTER setting the user data, \r
- // because of the persistent loading mechanism.\r
- folder.add(versionFolder);\r
- }\r
- }\r
- folder.setLoaded(true);\r
- folder.getTree().fireEvent("changeSelection");\r
- });\r
- req.addListener("failed", function(response) {\r
- folder.setLoaded(true);\r
- });\r
- req.send();\r
- },\r
-\r
- /**\r
- * Loader for the "flow" level : takes a folder containing "moduleData"\r
- * and create its children.\r
- * \r
- * @param folder\r
- * {org.argeo.ria.components.PersistentTreeFolder} A Tree folder containing in the\r
- * key "moduleData" of its user data a map containing the\r
- * keys {name,version}\r
- */\r
- flowLoader : function(folder) {\r
- var moduleData = folder.getUserData("moduleData");\r
- var agentUuid = folder.getUserData("agentUuid");\r
-\r
- var req = org.argeo.slc.ria.SlcApi\r
- .getLoadExecutionDescriptorService(agentUuid,\r
- moduleData.name, moduleData.version);\r
- req.addListener("completed", function(response) {\r
- var executionModule = new org.argeo.slc.ria.execution.Module();\r
- try {\r
- executionModule.setXmlNode(response.getContent());\r
- } catch (e) {\r
- this.error(e);\r
- }\r
- var execFlows = executionModule.getExecutionFlows();\r
- for (var key in execFlows) {\r
- var file = new qx.ui.tree.TreeFile(key);\r
- var path = execFlows[key].getPath();\r
- file.setUserData("executionModule", executionModule);\r
- file.setUserData("executionFlow", execFlows[key]);\r
- file.setUserData("agentUuid", agentUuid);\r
- org.argeo.slc.ria.FlowsSelectorView.attachNodeByPath(folder, path, file, {\r
- agentUuid : folder.getUserData("agentUuid")\r
- });\r
- folder.appendDragData(file);\r
- }\r
- folder.setLoaded(true);\r
- folder.getTree().fireEvent("changeSelection");\r
- });\r
- req.addListener("failed", function(response) {\r
- folder.setLoaded(true);\r
- });\r
- req.send();\r
- } \r
- },\r
-\r
- members : {\r
- \r
- /**\r
- * \r
- */\r
- load : function() {\r
- this._createLayout();\r
- this.UIBus.addListener("agentRegistered", this._addAgentHandler, this);\r
- this.UIBus.addListener("agentUnregistered", this._removeAgentHandler, this);\r
- }, \r
-\r
- /**\r
- * Creates the main applet layout.\r
- */\r
- _createLayout : function() {\r
-\r
- this.tree = new qx.ui.tree.Tree();\r
- this.tree.setDecorator(null);\r
- this.tree.setSelectionMode("multi");\r
-\r
- this.rootNode = new org.argeo.ria.components.DynamicTreeFolder(\r
- "Tests", this.self(arguments).agentLoader,\r
- "Loading Agents");\r
- this.tree.setRoot(this.rootNode);\r
- this.rootNode.setPersistentTreeID("org.argeo.slc.ria.monitor.FlowsSelector")\r
- this.rootNode.setOpen(true);\r
- this.tree.setContextMenu(org.argeo.ria.event.CommandsManager\r
- .getInstance().createMenuFromIds(["reloadtree"]));\r
-\r
- this.tree.addListener("changeSelection", function(e) {\r
- var viewSelection = this.getViewSelection();\r
- viewSelection.setViewId("form:tree");\r
- viewSelection.clear();\r
- var sel = this.tree.getSortedSelection();\r
- for (var i = 0; i < sel.length; i++) {\r
- viewSelection.addNode(sel[i]);\r
- }\r
- if(sel && sel[0]){\r
- var propViewPane = org.argeo.ria.components.ViewsManager.getInstance().getViewPaneById("properties");\r
- propViewPane.getContent().updateData(sel[0]);\r
- }\r
- }, this);\r
-\r
-\r
- this.add(this.tree);\r
- } \r
- }\r
-});
\ No newline at end of file