]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/FlowsSelectorView.js
Double click on a script (tree leaf) will add/execute/remove it from batch.
[gpl/argeo-slc.git] / server / org.argeo.slc.ria / src / argeo-ria-lib / slc / class / org / argeo / slc / ria / FlowsSelectorView.js
index e06a819310548bfa4bdea206bf0f30705d43abb6..a6d7c78d66e2d59ada345a581cd2088d5fbdb9dd 100644 (file)
@@ -5,6 +5,7 @@
 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
@@ -28,6 +29,10 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                instanceLabel : {\r
                        init : ""\r
                },\r
+               executeAfterAdd : {\r
+                       init : false,\r
+                       check : "Boolean"\r
+               },\r
                /**\r
                 * Commands definition, see\r
                 * {@link org.argeo.ria.event.CommandsManager#definitions}\r
@@ -64,6 +69,11 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                                                                return;\r
                                                        }\r
                                                }\r
+                                               if(this.getExecuteAfterAdd() && batchView.getCommands()){\r
+                                                       batchView.setForceClearPreference(true);\r
+                                                       batchView.getCommands()["submitform"].command.execute();\r
+                                               }\r
+                                               this.setExecuteAfterAdd(false);\r
                                        },\r
                                        selectionChange : function(viewId, selection) {\r
                                                if (viewId != "form:tree")\r
@@ -77,12 +87,12 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                                                                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
@@ -91,13 +101,55 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                                        },\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
@@ -160,7 +212,15 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                }\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
@@ -169,6 +229,10 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                 */\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
@@ -179,7 +243,7 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                        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
@@ -192,11 +256,18 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                                        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/computer.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
@@ -234,29 +305,36 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                        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
@@ -297,6 +375,9 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                                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
@@ -316,6 +397,12 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                        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
@@ -439,6 +526,30 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                        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
@@ -467,7 +578,7 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                        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
@@ -479,6 +590,15 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                                }\r
                        }, this);\r
 \r
+                       this.tree.addListener("dblclick", function(e){\r
+                               var sel = this.tree.getSortedSelection();\r
+                               if(sel && sel.length!=1)  return;\r
+                               var origin = sel[0];\r
+                               if(origin.classname == "qx.ui.tree.TreeFile"){\r
+                                       this.setExecuteAfterAdd(true);\r
+                                       this.getCommands()["addtobatch"].command.execute();\r
+                               }\r
+                       }, this);\r
 \r
                        this.add(this.tree);\r
                },\r