qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {\r
extend : qx.ui.container.Composite,\r
implement : [org.argeo.ria.components.IView],\r
+ include : [org.argeo.ria.session.MPrefHolder],\r
\r
construct : function() {\r
this.base(arguments);\r
this.setEnabled(true);\r
break;\r
case "org.argeo.ria.components.PersistentTreeFolder" :\r
- if (item.getTree().getRoot() == item)\r
+ if (item.getTree() && item.getTree().getRoot() == item)\r
break;\r
this.setEnabled(true);\r
break;\r
case "org.argeo.ria.components.DynamicTreeFolder" :\r
- if (item.getTree().getRoot() == item)\r
+ if (item.getTree() && item.getTree().getRoot() == item)\r
break; \r
if (item.getState() == "loaded")\r
this.setEnabled(true);\r
},\r
command : null\r
},\r
+ "preferredHost" : {\r
+ label : "Toggle 'Preferred Host'",\r
+ icon : "ria/bookmark.png",\r
+ shortcut : null,\r
+ enabled : true,\r
+ menu : null,\r
+ toolbar : null,\r
+ callback : function(e) {\r
+ if (this.tree.isSelectionEmpty()) {\r
+ return;\r
+ }\r
+ var selection = this.tree.getSelection();\r
+ if(selection.length != 1) return;\r
+ var agentNode = selection[0];\r
+ if(!agentNode.getUserData("agentHost")) return;\r
+ this.togglePreferredHost(agentNode);\r
+ },\r
+ selectionChange : function(viewId, selection) {\r
+ if (viewId != "form:tree")\r
+ return;\r
+ if (!selection || selection.length != 1)\r
+ return;\r
+ var item = selection[0];\r
+ this.setEnabled(false);\r
+ if(item.getUserData("agentHost")){\r
+ this.setEnabled(true);\r
+ }\r
+ },\r
+ command : null\r
+ },\r
+ "reloadfull" : {\r
+ label : "Reload Agents",\r
+ icon : "org.argeo.slc.ria/view-refresh.png",\r
+ shortcut : "control+h",\r
+ enabled : true,\r
+ menu : "Launcher",\r
+ toolbar : "list",\r
+ callback : function(e) {\r
+ this.rootNode.reload();\r
+ },\r
+ command : null\r
+ }, \r
"reloadtree" : {\r
- label : "Reload",\r
+ label : "Reload Node",\r
icon : "org.argeo.slc.ria/view-refresh.png",\r
- shortcut : "Control+m",\r
+ shortcut : null,\r
enabled : false,\r
- menu : "Launcher",\r
- toolbar : "launcher",\r
+ menu : null,\r
+ toolbar : null,\r
callback : function(e) {\r
if (this.tree.isSelectionEmpty()) { return; } \r
var selected = this.tree.getSelection()[0];\r
}\r
},\r
\r
- statics : {\r
+ statics : { \r
+ \r
+ riaPreferences : {\r
+ "flowSelector.preferred.hosts" : {\r
+ label : "Preferred Hosts (Execution View)",\r
+ type : "string"\r
+ }\r
+ },\r
+ \r
/**\r
* Static loader for the "agent" level (first level)\r
* \r
*/\r
agentLoader : function(folder) {\r
\r
+ var preferredHosts = org.argeo.ria.session.MPrefHolder.loadRiaPreferenceValue("flowSelector.preferred.hosts");\r
+ if(preferredHosts && preferredHosts!=""){\r
+ preferredHosts = preferredHosts.split(",");\r
+ }\r
var req = org.argeo.slc.ria.SlcApi.getListAgentsService("agents"); \r
var agents = {};\r
if(folder.getState() == "loaded" && folder.getUserData("agentsMap")){\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
+ "/slc:object-list/slc:slc-agent-descriptor");\r
var modulesLoader = org.argeo.slc.ria.FlowsSelectorView.modulesLoader;\r
\r
for (var i = 0; i < nodes.length; i++) {\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
+ host, modulesLoader, "Loading Modules...", folder.getDragData());\r
+ org.argeo.slc.ria.FlowsSelectorView.attachToolTip(agentFolder, uuid);\r
+ agentFolder.setPersistentTreeID(folder.getPersistentTreeID()+"_"+uuid);\r
+ agentFolder.setUserData("agentHost", host); // Used by bookmark system\r
agentFolder.setUserData("agentUuid", uuid);\r
- agentFolder.setIcon("org.argeo.slc.ria/mime-xsl-22.png");\r
- folder.add(agentFolder);\r
+ if(preferredHosts && preferredHosts instanceof Array && qx.lang.Array.contains(preferredHosts, host)){\r
+ folder.addAtBegin(agentFolder);\r
+ agentFolder.setIcon("org.argeo.slc.ria/computer_bookmarked.png");\r
+ }else{\r
+ folder.add(agentFolder);\r
+ agentFolder.setIcon("org.argeo.slc.ria/computer.png");\r
+ }\r
}\r
if(newAgents){\r
// Make sure some agents should not be removed\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
+ "slc:object-list/" + org.argeo.slc.ria.execution.Module.XPATH_ROOT);\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
+ var tmpModule = new org.argeo.slc.ria.execution.Module();\r
+ try{ \r
+ tmpModule.setXmlNode(descriptors[i]);\r
+ }catch(e){\r
+ qx.log.Logger.error(e);\r
+ }\r
+ var name = tmpModule.getName();\r
+ var version = tmpModule.getVersion();\r
if (!mods[name])\r
mods[name] = [];\r
- mods[name].push(version);\r
+ mods[name].push(tmpModule);\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 module = mods[key][i];\r
var versionFolder = new org.argeo.ria.components.DynamicTreeFolder(\r
- key + ' (' + mods[key][i] + ')', flowLoader,\r
+ module.getLabel(), flowLoader,\r
"Loading Flows", folder.getDragData());\r
versionFolder.setUserData("moduleData", {\r
name : key,\r
- version : mods[key][i]\r
+ version : module.getVersion()\r
});\r
+ versionFolder.setIcon("org.argeo.slc.ria/archive.png");\r
versionFolder.setUserData("agentUuid", agentId);\r
+ var sep = (module.getDescription()!=""?" - ":"");\r
+ org.argeo.slc.ria.FlowsSelectorView.attachToolTip(versionFolder, key + ' (' + module.getVersion() + ')'+sep+module.getDescription());\r
// Warning, we must add it AFTER setting the user data, \r
// because of the persistent loading mechanism.\r
folder.add(versionFolder);\r
var execFlows = executionModule.getExecutionFlows();\r
for (var key in execFlows) {\r
var file = new qx.ui.tree.TreeFile(key);\r
+ if(execFlows[key].getDescription() != ""){\r
+ org.argeo.slc.ria.FlowsSelectorView.attachToolTip(file, execFlows[key].getDescription());\r
+ }\r
+ file.setIcon("org.argeo.slc.ria/system.png");\r
var path = execFlows[key].getPath();\r
file.setUserData("executionModule", executionModule);\r
file.setUserData("executionFlow", execFlows[key]);\r
req.send();\r
},\r
\r
+ attachToolTip : function(nodeItem, description){\r
+ var tt = new qx.ui.tooltip.ToolTip(description);\r
+ tt.setShowTimeout(0);\r
+ nodeItem.setToolTip(tt); \r
+ },\r
+ \r
/**\r
* Parse a string path and search if there is a root node.\r
* \r
this.remoteNotifier.stopPolling();\r
},\r
\r
+ /**\r
+ * \r
+ * @param agentNode {qx.ui.tree.AbstractTreeItem}\r
+ */\r
+ togglePreferredHost : function(agentNode){\r
+ var hostName = agentNode.getUserData("agentHost");\r
+ var pref = this.getRiaPreferenceValue("flowSelector.preferred.hosts");\r
+ var prefArray = [];\r
+ if(pref){\r
+ prefArray = pref.split(",");\r
+ }\r
+ if(qx.lang.Array.contains(prefArray, hostName)){\r
+ qx.lang.Array.remove(prefArray, hostName);\r
+ agentNode.setIcon("org.argeo.slc.ria/computer.png");\r
+ }else{\r
+ prefArray.push(hostName);\r
+ agentNode.setIcon("org.argeo.slc.ria/computer_bookmarked.png");\r
+ var parent = agentNode.getParent();\r
+ parent.remove(agentNode);\r
+ parent.addAtBegin(agentNode);\r
+ }\r
+ this.setRiaPreferenceValue("flowSelector.preferred.hosts", prefArray.join(","));\r
+ },\r
+ \r
/**\r
* Creates the main applet layout.\r
*/\r
"Tests", this.self(arguments).agentLoader,\r
"Loading Agents", dragData);\r
this.tree.setRoot(this.rootNode);\r
+ this.tree.setHideRoot(true);\r
+ this.rootNode.setPersistentTreeID("org.argeo.slc.ria.FlowsSelector")\r
this.rootNode.setOpen(true);\r
this.tree.setContextMenu(org.argeo.ria.event.CommandsManager\r
.getInstance().createMenuFromIds(["addtobatch",\r
- "reloadtree"]));\r
+ "reloadtree", "preferredHost"]));\r
\r
this.tree.addListener("changeSelection", function(e) {\r
var viewSelection = this.getViewSelection();\r