]> 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 d7d6eafeca323a8aa9d4d13e0429d23d8429a4c3..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
@@ -91,6 +101,36 @@ 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
@@ -173,6 +213,14 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
        },\r
 \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
@@ -181,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
@@ -207,9 +259,15 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                                                        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
@@ -267,7 +325,7 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                                        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
-                                                               module.getDescription(), flowLoader,\r
+                                                               module.getLabel(), flowLoader,\r
                                                                "Loading Flows", folder.getDragData());\r
                                                versionFolder.setUserData("moduleData", {\r
                                                                        name : key,\r
@@ -275,7 +333,8 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                                                                });\r
                                                versionFolder.setIcon("org.argeo.slc.ria/archive.png");\r
                                                versionFolder.setUserData("agentUuid", agentId);\r
-                                               org.argeo.slc.ria.FlowsSelectorView.attachToolTip(versionFolder, key + ' (' + module.getVersion() + ')');\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
@@ -467,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
@@ -495,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
@@ -507,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