]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc.webapp/src/main/webapp/argeo-ria-lib/slc/class/org/argeo/slc/ria/NewLauncherApplet.js
Data model for batch entry, spec editor basis.
[gpl/argeo-slc.git] / org.argeo.slc.webapp / src / main / webapp / argeo-ria-lib / slc / class / org / argeo / slc / ria / NewLauncherApplet.js
index 4dac53ae200334083290069c0322a743a3469543..6004291975ee1bf064cfe62641b728c761e8cfe0 100644 (file)
@@ -36,17 +36,65 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet",
        commands : {
                init : {
                        "submitform" : {
-                               label           : "Execute", 
+                               label           : "Execute Batch On...", 
                                icon            : "resource/slc/media-playback-start.png",
-                               shortcut        : "Control+e",
+                               shortcut        : null,
                                enabled         : true,
                                menu            : "Launcher",
-                               toolbar         : "launcher",
-                               callback        : function(e){
-                                       this.submitForm();
+                               toolbar         : null,
+                               callback        : function(e){},
+                               submenu         : [],
+                               submenuCallback : function(commandId){
+                                       alert("Execute Batch on Agent "+commandId);
                                },
                                command         : null
                        },                      
+                       "editexecutionspecs" : {
+                               label           : "Edit Execution Specs", 
+                               icon            : "resource/slc/document-open.png",
+                               shortcut        : null,
+                               enabled         : false,
+                               menu            : "Launcher",
+                               toolbar         : null,
+                               callback        : function(e){
+                                       var sel = this.list.getSortedSelection();
+                                       var item = sel[0];
+                                       var execFlow = item.getUserData("batchEntrySpec").getFlow();
+                                       var specEditor = new org.argeo.slc.ria.execution.SpecEditor(execFlow);
+                                       specEditor.attachAndShow();
+                               },
+                               selectionChange : function(viewId, selection){
+                                       if(viewId != "form:list") return;
+                                       this.setEnabled(false);
+                                       if((selection && selection.length == 1)) this.setEnabled(true);
+                               },
+                               command         : null
+                       },
+                       "removefrombatch" : {
+                               label           : "Remove from batch", 
+                               icon            : "resource/slc/edit-delete.png",
+                               shortcut        : null,
+                               enabled         : false,
+                               menu            : "Launcher",
+                               toolbar         : null,
+                               callback        : function(e){
+                                       var sel = this.list.getSortedSelection();
+                                       var modal = new org.argeo.ria.components.Modal("Confirm", null);
+                                       modal.addConfirm("Are you sure you want to remove<br> the selected test" + (sel.length>1?"s":"") + " from the Batch?");
+                                       modal.addListener("ok", function(){
+                                               for(var i=0;i<sel.length;i++){
+                                                       this.list.remove(sel[i]);
+                                               }
+                                       }, this);
+                                       modal.attachAndShow();                                          
+                               },
+                               selectionChange : function(viewId, selection){
+                                       if(viewId != "form:list") return;                                       
+                                       this.setEnabled(false);
+                                       if((selection && selection.length > 0)) this.setEnabled(true);
+                               },                              
+                               command         : null
+                       },
                        "reloadagents" : {
                                label           : "Reload Agents", 
                                icon            : "resource/slc/view-refresh.png",
@@ -60,30 +108,28 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet",
                                },
                                command         : null
                        },
-                       "testloadmodules" : {
-                               label           : "Load Modules", 
+                       "reloadtree" : {
+                               label           : "Reload", 
                                icon            : "resource/slc/view-refresh.png",
                                shortcut        : "Control+m",
-                               enabled         : true,
+                               enabled         : false,
                                menu            : "Launcher",
                                toolbar         : "launcher",
                                callback        : function(e){
-                                       var req = org.argeo.ria.remote.RequestManager.getInstance().getRequest("stub.xml", "GET", "application/xml");
-                                       req.addListener("completed", function(response){
-                                               var executionModule = new org.argeo.slc.ria.module.ExecutionModule();                                           
-                                               executionModule.setXmlNode(response.getContent());
-                                               this.debug(executionModule.getName());
-                                               this.debug(qx.lang.Object.getLength(executionModule.getExecutionFlows()));
-                                               this.debug(qx.lang.Object.getLength(executionModule.getExecutionSpecs()));
-                                       }, this);
-                                       req.send();
-                                       /*
-                                       this._amqClient.sendMessage("modulesManager.request", "", {
-                                               "action":"getExecutionModuleDescriptor",
-                                               "name"  : "org.argeo.slc.demo.basic", 
-                                               "version" : "WHATEVER"
-                                       });
-                                       */
+                                       var selected = this.tree.getSelectedItem();
+                                       if(selected.classname == "org.argeo.ria.components.DynamicTreeFolder"){
+                                               selected.reload();
+                                       }
+                               },  
+                               selectionChange : function(viewId, selection){
+                                       if(viewId != "form:tree") return;
+                                       if(!selection || selection.length != 1) return;
+                                       var item = selection[0];
+                                       if(!qx.Class.isSubClassOf(qx.Class.getByName(item.classname), qx.ui.tree.AbstractTreeItem)) return;
+                                       this.setEnabled(false);
+                                       if(qx.Class.isSubClassOf(qx.Class.getByName(item.classname), org.argeo.ria.components.DynamicTreeFolder)){
+                                               this.setEnabled(true);
+                                       }
                                },
                                command         : null
                        }
@@ -99,6 +145,57 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet",
        }
   },
 
+  statics : {
+       flowLoader : function(folder){
+               var moduleData = folder.getUserData("moduleData");
+               var req = org.argeo.ria.remote.RequestManager.getInstance().getRequest("../argeo-ria-src/stub.xml", "GET", "application/xml");
+               req.addListener("completed", function(response){
+                       var executionModule = new org.argeo.slc.ria.execution.Module();                                         
+                       executionModule.setXmlNode(response.getContent());
+                       //
+                       // ARTIFIALLY REPLACE MODULE NAME / VERSION, FOR TESTS PURPOSES
+                       //
+                       executionModule.setName(moduleData.name);
+                       executionModule.setVersion(moduleData.version);
+                       // END
+                       var execFlows = executionModule.getExecutionFlows();
+                       for(var key in execFlows){
+                               var file = new qx.ui.tree.TreeFile(key);
+                               file.setUserData("executionModule", executionModule);
+                               file.setUserData("executionFlow", execFlows[key]);
+                               folder.add(file);
+                       }
+                       folder.setLoaded(true);
+               });
+               req.send();             
+       },
+       
+       modulesLoader : function(folder){
+               // Call service, and parse
+               var mods = {
+                       "Module 1":["ver1.1", "ver1.2", "ver1.3"], 
+                       "Module 2":["ver2.1", "ver2.2", "ver2.3", "ver2.4"], 
+                       "Module 3":["ver3.1", "ver3.2"]
+               };
+               var flowLoader = org.argeo.slc.ria.NewLauncherApplet.flowLoader;
+               for(var key in mods){
+                       var moduleFolder = new qx.ui.tree.TreeFolder(key);
+                       folder.add(moduleFolder);
+                       for(var i=0;i<mods[key].length;i++){
+                               var versionFolder = new org.argeo.ria.components.DynamicTreeFolder(
+                                       mods[key][i],
+                                       flowLoader,
+                                       "Loading Flows",
+                                       folder.getDragData()
+                               );
+                               moduleFolder.add(versionFolder);
+                               versionFolder.setUserData("moduleData", {name:key, version:mods[key][i]});
+                       }
+                       folder.setLoaded(true);
+               }
+       }
+  },
+  
   members :
   {
        /**
@@ -108,7 +205,6 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet",
        init : function(viewPane){
                this.setView(viewPane);
                this.setViewSelection(new org.argeo.ria.components.ViewSelection(viewPane.getViewId()));
-               this._createLayout();
                //this._createForm();
                this._amqClient = org.argeo.ria.remote.JmsClient.getInstance();
                this._amqClient.startPolling();
@@ -118,7 +214,20 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet",
         *  
         */
        load : function(){
+               this._createLayout();
                this.getView().setViewTitle("Execution Launcher");
+               org.argeo.ria.remote.RequestManager.getInstance().addListener("reload", function(reloadEvent){
+                       if(reloadEvent.getDataType()!= "agents") return ;
+                       var xmlDoc = reloadEvent.getContent();
+                       var nodes = org.argeo.ria.util.Element.selectNodes(xmlDoc, "//slc:slc-agent-descriptor");
+                       var newTopics = {};
+                       for(var i=0;i<nodes.length;i++){
+                               var uuid = org.argeo.ria.util.Element.getSingleNodeText(nodes[i], "@uuid");
+                               var host = org.argeo.ria.util.Element.getSingleNodeText(nodes[i], "slc:host");
+                               newTopics[uuid] = host+" ("+uuid+")";
+                       }
+                       this.setRegisteredTopics(newTopics);
+               }, this);
                this.addListener("changeRegisteredTopics", function(event){
                        //this._refreshTopicsSubscriptions(event);
                        this._feedSelector(event);
@@ -164,55 +273,83 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet",
                this.formPane.setPadding(10);
                
                this.tree = new qx.ui.tree.Tree();
-               var root = new qx.ui.tree.TreeFolder("All Tests");
+               this.tree.setDecorator(null);
+               var dragData = {
+                       "file" : {
+                               "type" : ["items"], 
+                               "action":["move"]
+                       }
+               };
+               
+               var root = new org.argeo.ria.components.DynamicTreeFolder(
+                       "All Tests", 
+                       this.self(arguments).modulesLoader,
+                       "Loading Modules",
+                       dragData
+               );
                this.tree.setRoot(root);
-               var module1 = new qx.ui.tree.TreeFolder("Module 1");
-               var module2 = new qx.ui.tree.TreeFolder("Module 2");
-               var module3 = new qx.ui.tree.TreeFolder("Module 3");
-               root.add(module1, module2, module3);
                root.setOpen(true);
-               for(var i=0;i<100;i++){
-                       var file1 = new qx.ui.tree.TreeFile("1-"+i);
-                       file1.setHeight(15);
-                       file1.setDraggable(true);
-                       file1.addListener("dragstart", function(e){
-                               e.addType("items");
-                               e.addAction("move");
-                       });
-                       module1.add(file1);
-                       var file2 = new qx.ui.tree.TreeFile("2-"+i)
-                       module2.add(file2);
-                       var file3 = new qx.ui.tree.TreeFile("3-"+i);
-                       module3.add(file3);
-               }
-               //tree.add()
+               
+               this.tree.addListener("changeSelection", function(e){
+                       var viewSelection = this.getViewSelection();
+                       viewSelection.setViewId("form:tree");
+                       viewSelection.clear();
+                       var sel = this.tree.getSortedSelection();
+                       for(var i=0;i<sel.length;i++){
+                               viewSelection.addNode(sel[i]);
+                       }                       
+               }, this);
+               
                this.listPane = new qx.ui.container.Composite(new qx.ui.layout.Dock());
                var listToolBar = new qx.ui.toolbar.ToolBar();          
-               var toolGroup = new qx.ui.toolbar.Part();
+               var toolGroup = new qx.ui.toolbar.Part();               
                listToolBar.add(toolGroup);
-               var execButton = new qx.ui.toolbar.Button("Execute","resource/slc/media-playback-start.png");  
-               toolGroup.add(execButton);
-               execButton.addListener("execute", function(e){
-                       this.getCommands()["submitform"].command.execute();
-               }, this);
                
-               this.listPane.add(toolGroup, {edge:"north"});
+               var execButton = this.getCommands()["submitform"].command.getToolbarButton();
+               toolGroup.add(execButton);
+
+           listToolBar.addSpacer();
+           listToolBar.setPaddingRight(4);
+           var delButton = this.getCommands()["removefrombatch"].command.getToolbarButton();
+           var formButton = this.getCommands()["editexecutionspecs"].command.getToolbarButton();
+           delButton.setShow("icon");
+           formButton.setShow("icon");
+           listToolBar.add(formButton);
+           listToolBar.add(delButton);
+                               
+               this.listPane.add(listToolBar, {edge:"north"});
                
                this.list = new qx.ui.form.List();
+               this.list.setDecorator(null);
+               this.list.setSelectionMode("multi");
                this.list.setDroppable(true);
                this.list.addListener("drop", function(e){
-                 var label = e.getRelatedTarget().getLabel();
-                 var li = new qx.ui.container.Composite(new qx.ui.layout.HBox(5));
-                 li.add(new qx.ui.basic.Label(label));
-                 var item = new qx.ui.form.ListItem(label);
-                 item.setIcon(e.getRelatedTarget().getIcon());
+                       var target = e.getRelatedTarget();
+                       var executionModule = target.getUserData("executionModule");
+                       var executionFlow = target.getUserData("executionFlow");
+                       var label = executionModule.getName()+"/"+executionModule.getVersion()+"/"+executionFlow.getName();
+                       var icon = target.getIcon();
+                       
+                 var item = new qx.ui.form.ListItem(label, icon);
+                 item.setUserData("batchEntrySpec", new org.argeo.slc.ria.execution.BatchEntrySpec(executionModule, executionFlow));
                  item.setPaddingTop(1);
                  item.setPaddingBottom(2);
                  this.list.add(item);
                  this.list.select(item);
+                 this.getCommands()["editexecutionspecs"].command.execute();
                }, this);               
                this.listPane.add(this.list, {edge:"center"});          
                
+               this.list.addListener("changeSelection", function(e){
+                       var viewSelection = this.getViewSelection();
+                       viewSelection.setViewId("form:list");
+                       viewSelection.clear();
+                       var listSel = this.list.getSortedSelection();
+                       for(var i=0;i<listSel.length;i++){
+                               viewSelection.addNode(listSel[i]);
+                       }
+               }, this);
+               
                splitPane.add(this.tree, 0);
                splitPane.add(this.listPane, 1);
                //this.add(this.scroll, {edge:'center'});
@@ -474,14 +611,16 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet",
         */
        _feedSelector : function(changeTopicsEvent){
                var topics = changeTopicsEvent.getData();
-               this.agentSelector.removeAll();
-               var emptyItem = new qx.ui.form.ListItem("", null, "");
-               this.agentSelector.add(emptyItem);
-               this.agentSelector.setSelected(emptyItem);
+               var command = this.getCommands()["submitform"].command;
+               command.setEnabled(false);
+               var menu = [];
                for(var key in topics){
-                       var listItem = new qx.ui.form.ListItem(topics[key], null, key);
-                       this.agentSelector.add(listItem);
+                       var submenu = {"label":topics[key],"icon":"resource/slc/mime-xsl.png", "commandId":key};
+                       menu.push(submenu);
                }
+               command.clearMenus();
+               command.setMenu(menu);
+               if(menu.length) command.setEnabled(true);
        },
        
        /*