Replaced by new views
authorCharles du Jeu <charles.dujeu@gmail.com>
Fri, 22 May 2009 22:13:37 +0000 (22:13 +0000)
committerCharles du Jeu <charles.dujeu@gmail.com>
Fri, 22 May 2009 22:13:37 +0000 (22:13 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@2436 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/NewLauncherApplet.js [deleted file]
server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/execution/SpecEditor.js [deleted file]

diff --git a/server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/NewLauncherApplet.js b/server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/NewLauncherApplet.js
deleted file mode 100644 (file)
index 383b1d0..0000000
+++ /dev/null
@@ -1,668 +0,0 @@
-/**
- * A simple Hello World applet for documentation purpose. 
- * The only associated command is the "Close" command.
- */
-qx.Class.define("org.argeo.slc.ria.NewLauncherApplet",
-{
-  extend : qx.ui.container.Composite,
-  implement : [org.argeo.ria.components.IView], 
-
-  construct : function(){
-       this.base(arguments);
-       this.setLayout(new qx.ui.layout.Dock());        
-  },
-
-  properties : 
-  {
-       /**
-        * The viewPane inside which this applet is added. 
-        */
-       view : {
-               init : null
-       },
-       viewSelection : {
-               nullable:false, 
-               check:"org.argeo.ria.components.ViewSelection"
-       },              
-       instanceId : {init:""},
-       instanceLabel : {init:""},
-       /**
-        * A boolean registering whether the SpecEditor must autoOpen or not when a spec is added to the Batch. 
-        */
-       autoOpen : {
-               init : true,
-               check : "Boolean"
-       },
-       batchAgentId : {
-               init : null,
-               nullable : true,
-               check : "String",
-               event : "changeBatchAgentId"
-       },
-       /**
-        * Commands definition, see {@link org.argeo.ria.event.CommandsManager#definitions} 
-        */
-       commands : {
-               init : {
-                       "submitform" : {
-                               label           : "Execute Batch", 
-                               icon            : "resource/slc/media-playback-start.png",
-                               shortcut        : null,
-                               enabled         : false,
-                               menu            : "Launcher",
-                               toolbar         : "launcher",
-                               callback        : function(e){
-                                       if(this.getBatchAgentId()){
-                                               this.executeBatchOnAgent(this.getBatchAgentId());
-                                       }
-                               },
-                               command         : null
-                       },                      
-                       "addtobatch" : {
-                               label           : "Add to batch", 
-                               icon            : "resource/slc/list-add.png",
-                               shortcut        : null,
-                               enabled         : true,
-                               menu            : null,
-                               toolbar         : null,
-                               callback        : function(e){
-                                       this._addFlowToBatch();
-                               },
-                               selectionChange : function(viewId, selection){
-                                       if(viewId != "form:tree") return;
-                                       if(!selection || selection.length != 1) return;
-                                       var item = selection[0];
-                                       this.setEnabled(false);
-                                       switch(item.classname){
-                                               case "qx.ui.tree.TreeFile" : 
-                                                       this.setEnabled(true);
-                                                       break;
-                                               case "qx.ui.tree.TreeFolder" :
-                                                       if(item.getTree().getRoot() == item) break;
-                                                       this.setEnabled(true);
-                                                       break;
-                                               case "org.argeo.ria.components.DynamicTreeFolder":
-                                                       if(item.getTree().getRoot() == item) break;
-                                                       if(item.getState() == "loaded") this.setEnabled(true);
-                                                       break;
-                                       }
-                               },                              
-                               command         : null
-                       }, 
-                       "toggleopenonadd" : {
-                               label           : "Auto Open", 
-                               icon            : "resource/slc/document-open.png",
-                               shortcut        : null,
-                               enabled         : true,
-                               toggle          : true,
-                               toggleInitialState      : true,
-                               menu            : "Launcher",
-                               toolbar         : "launcher",
-                               callback        : function(event){
-                                       var state = event.getTarget().getUserData("slc.command.toggleState");
-                                       this.setAutoOpen(state);
-                               },
-                               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 spec = sel[0].getUserData("batchEntrySpec");
-                                       if(spec.hasEditableValues()){
-                                               var specEditor = new org.argeo.slc.ria.execution.SpecEditor(spec);
-                                               specEditor.attachAndShow();
-                                       }
-                               },
-                               selectionChange : function(viewId, selection){
-                                       if(viewId != "form:list") return;
-                                       this.setEnabled(false);
-                                       if((selection && selection.length == 1)) {
-                                               var selectedItemSpec = selection[0].getUserData("batchEntrySpec");
-                                               if(selectedItemSpec.hasEditableValues()){
-                                                       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]);
-                                               }
-                                               if(!this.list.hasChildren()){
-                                                       this.setBatchAgentId(null);
-                                               }
-                                       }, 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
-                       },
-                       "reloadtree" : {
-                               label           : "Reload", 
-                               icon            : "resource/slc/view-refresh.png",
-                               shortcut        : "Control+m",
-                               enabled         : false,
-                               menu            : "Launcher",
-                               toolbar         : "launcher",
-                               callback        : function(e){
-                                       var selected = this.tree.getSelection()[0];
-                                       if(selected.classname == "org.argeo.ria.components.DynamicTreeFolder"){
-                                               if(selected.getUserData("moduleData")){
-                                                       // It's a "module" node, first trigger the reloadBundle.service
-                                                       selected.setUserData("dataModel", {});
-                                                       selected.setEnabled(false);
-                                                       selected.setOpen(false);
-                                                       var moduleData = selected.getUserData("moduleData");
-                                                       var bundleService = org.argeo.slc.ria.SlcApi.getReloadBundleService(moduleData.name, moduleData.version);
-                                                       bundleService.addListener("completed", function(response){
-                                                               selected.setEnabled(true);
-                                                               selected.setOpen(true);
-                                                               selected.reload();
-                                                       }, this);
-                                                       //bundleService.send();
-                                                       //Do not send, not implemented yet, false timer instead.
-                                                       qx.event.Timer.once(function(response){
-                                                               selected.setEnabled(true);
-                                                               selected.setOpen(true);
-                                                               selected.reload();
-                                                       }, this, 2000);
-                                               }else{
-                                                       selected.reload();
-                                               }
-                                       }
-                               },  
-                               selectionChange : function(viewId, selection){
-                                       if(viewId != "form:tree") return;
-                                       if(!selection) return;
-                                       if(selection.length > 1){
-                                               this.setEnabled(false);
-                                               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
-                       }
-               }
-       }
-  },
-
-  statics : {
-       /**
-        * Static loader for the "agent" level (first level)
-        * @param folder {qx.ui.tree.TreeFolder} The root Tree Folder.
-        */
-       agentLoader : function(folder){
-               
-               var req = org.argeo.slc.ria.SlcApi.getListAgentsService("agents");
-               var agents = {};
-               req.addListener("completed", function(response){
-                       var xmlDoc = response.getContent();
-                       var nodes = org.argeo.ria.util.Element.selectNodes(xmlDoc, "//slc:slc-agent-descriptor");
-                       //var newTopics = {};
-                       var modulesLoader = org.argeo.slc.ria.NewLauncherApplet.modulesLoader;
-                       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");
-                               agents[uuid] = host;
-                               var agentFolder = new org.argeo.ria.components.DynamicTreeFolder(
-                                       host + ' ('+uuid+')',
-                                       modulesLoader,
-                                       "Loading Modules...", 
-                                       folder.getDragData()
-                               );
-                               agentFolder.setUserData("agentUuid", uuid);
-                               agentFolder.setIcon("resource/slc/mime-xsl-22.png");
-                               folder.add(agentFolder);                                
-                       }
-                       folder.setUserData("agentsMap", agents);
-                       folder.setLoaded(true);
-               });
-               req.addListener("failed", function(response){folder.setLoaded(true);});
-               req.send();
-               
-       },
-       
-       /**
-        * Loader for the "modules" level : takes any tree folder, currently the root folder. 
-        * @param folder {qx.ui.tree.TreeFolder} The root folder
-        */
-       modulesLoader : function(folder){
-               var agentId = folder.getUserData("agentUuid");
-               var req = org.argeo.slc.ria.SlcApi.getListModulesService(agentId);
-               req.addListener("completed", function(response){
-                       var descriptors = org.argeo.ria.util.Element.selectNodes(response.getContent(), "slc:object-list/slc:execution-module-descriptor");
-                       var mods = {};
-                       for(var i=0;i<descriptors.length; i++){
-                               var name = org.argeo.ria.util.Element.getSingleNodeText(descriptors[i], "slc:name");
-                               var version = org.argeo.ria.util.Element.getSingleNodeText(descriptors[i], "slc:version");
-                               if(!mods[name]) mods[name] = [];
-                               mods[name].push(version);
-                       }
-                       var flowLoader = org.argeo.slc.ria.NewLauncherApplet.flowLoader;
-                       for(var key in mods){
-                               for(var i=0;i<mods[key].length;i++){
-                                       var versionFolder = new org.argeo.ria.components.DynamicTreeFolder(
-                                               key + ' ('+mods[key][i]+')',
-                                               flowLoader,
-                                               "Loading Flows",
-                                               folder.getDragData()
-                                       );
-                                       folder.add(versionFolder);
-                                       versionFolder.setUserData("moduleData", {name:key, version:mods[key][i]});
-                                       versionFolder.setUserData("agentUuid", agentId);
-                               }
-                               folder.setLoaded(true);
-                       }
-               });
-               req.addListener("failed", function(response){folder.setLoaded(true);});
-               req.send();             
-       },
-       
-       /**
-        * Loader for the "flow" level : takes a folder containing "moduleData" and create its children. 
-        * @param folder {qx.ui.tree.TreeFolder} A Tree folder containing in the key "moduleData" of its user data a map containing the keys {name,version} 
-        */
-       flowLoader : function(folder){
-               var moduleData = folder.getUserData("moduleData");
-               var agentUuid = folder.getUserData("agentUuid");
-               //var pathStub = ["", "/test/toto/zobi", "loop"];
-               //var indexStub = 0;
-               
-               var req = org.argeo.slc.ria.SlcApi.getLoadExecutionDescriptorService(agentUuid,moduleData.name, moduleData.version);
-               req.addListener("completed", function(response){
-                       var executionModule = new org.argeo.slc.ria.execution.Module();
-                       try{
-                               executionModule.setXmlNode(response.getContent());
-                       }catch(e){
-                               this.error(e);
-                       }
-                       var execFlows = executionModule.getExecutionFlows();
-                       for(var key in execFlows){
-                               var file = new qx.ui.tree.TreeFile(key);
-                               var path = execFlows[key].getPath();
-                               //path = pathStub[indexStub];
-                               //indexStub ++;
-                               file.setUserData("executionModule", executionModule);
-                               file.setUserData("executionFlow", execFlows[key]);
-                               file.setUserData("agentUuid", agentUuid);
-                               org.argeo.slc.ria.NewLauncherApplet.attachNodeByPath(
-                                       folder, 
-                                       path, 
-                                       file, 
-                                       {agentUuid:folder.getUserData("agentUuid")}
-                               );
-                               folder.appendDragData(file);                            
-                       }
-                       folder.setLoaded(true);
-               });
-               req.addListener("failed", function(response){folder.setLoaded(true);});
-               req.send();             
-       },
-       
-       /**
-        * Parse a string path and search if there is a root node.
-        * @param rootNode {org.argeo.ria.components.DynamicTreeFolder} The parent node (containing data model)
-        * @param path {String} The path of the node to attach.
-        * @param childNode {qx.ui.tree.TreeFile} The leaf node
-        * @param userData {Map} User data to attach at all levels.
-        */
-       attachNodeByPath : function(rootNode, path, childNode, userData){
-               if(!path || path=="" || path == "/" ){
-                       rootNode.add(childNode);
-                       return;
-               }
-               var model = rootNode.getUserData("dataModel");
-               if(!model){
-                       model = {};
-                       rootNode.setUserData("dataModel", model);
-               }
-               var parts = path.split("/");            
-               var keys = qx.lang.Object.getKeys(model);
-               var crtPath = "/";
-               var crtFolder = rootNode;
-               for(var i=0;i<parts.length;i++){
-                       if(parts[i] == "") continue;
-                       crtPath += parts[i];
-                       if(!model[parts[i]]) {
-                               var virtualFolder = new qx.ui.tree.TreeFolder(parts[i]);
-                               if(userData && qx.lang.Object.getLength(userData)){
-                                       for(var key in userData){ virtualFolder.setUserData(key, userData[key]); }
-                               }
-                               rootNode.appendDragData(virtualFolder);
-                               model[parts[i]] = virtualFolder;
-                               crtFolder.add(virtualFolder);
-                               crtFolder = virtualFolder;
-                       }else{
-                               crtFolder = model[parts[i]];
-                       }
-               }
-               crtFolder.add(childNode);
-       }
-  },
-  
-  members :
-  {
-       /**
-        * Called at applet creation. Just registers viewPane.
-        * @param viewPane {org.argeo.ria.components.ViewPane} The viewPane.
-        */
-       init : function(viewPane){
-               this.setView(viewPane);
-               this.setViewSelection(new org.argeo.ria.components.ViewSelection(viewPane.getViewId()));
-               this.remoteNotifier = new org.argeo.ria.remote.RemoteNotifier(
-                       "/org.argeo.slc.webapp/",
-                       "pollEvent.service",
-                       "addEventListener.service",
-                       "removeEventListener.service"
-               );
-               this.remoteNotifier.setEventParamName("slc_eventType");
-               this.remoteNotifier.setEventXPath("/slc:slc-event");
-               this.remoteNotifier.setEventTypeXPath('slc:headers/slc:header[@name="slc_eventType"]');
-               this.remoteNotifier.setEventDataXPath('slc:headers/slc:header[@name="slc_agentId"]');
-               this.remoteNotifier.startPolling();
-               this.UIBus = org.argeo.ria.event.UIBus.getInstance(); 
-               this.UIBus.registerNotifier(this.remoteNotifier);
-               
-               this._emptyAgentString = "Empty Batch";
-               this._crtAgentString = "Target Agent : ";               
-       },
-       
-       /**
-        *  
-        */
-       load : function(){
-               this._createLayout();
-               this.getView().setViewTitle("Execution Launcher");
-               this.reloadHandler = function(message){                         
-                       this.rootNode.reload();
-               }
-               this.UIBus.addListener("agentRegistered", this.reloadHandler, this);
-               this.UIBus.addListener("agentUnregistered", this.reloadHandler, this);
-       },
-        
-       addScroll : function(){
-               return false;
-       },
-       
-       close : function(){
-               this.UIBus.removeListener("agentRegistered", this.reloadHandler, this);
-               this.UIBus.removeListener("agentUnregistered", this.reloadHandler, this);
-               this.remoteNotifier.stopPolling();
-       },
-               
-       /**
-        * Creates the main applet layout.
-        */
-       _createLayout : function(){
-               
-               var splitPane = new qx.ui.splitpane.Pane("vertical");
-               splitPane.setDecorator(null);
-               this.add(splitPane);
-               
-               this.formPane = new qx.ui.container.Composite(new qx.ui.layout.VBox(5));                
-               this.scroll = new qx.ui.container.Scroll(this.formPane);
-               this.formPane.setPadding(10);
-               
-               this.tree = new qx.ui.tree.Tree();
-               this.tree.setDecorator(null);
-               this.tree.setSelectionMode("multi");
-               var dragData = {
-                       "file" : {
-                               "type" : ["items"], 
-                               "action":["move"]
-                       },
-                       "folder" : {
-                               "type" : ["items"], 
-                               "action":["move"]
-                       }               
-               };
-               
-               this.rootNode = new org.argeo.ria.components.DynamicTreeFolder(
-                       "Tests", 
-                       this.self(arguments).agentLoader,
-                       "Loading Agents",
-                       dragData
-               );
-               this.tree.setRoot(this.rootNode);
-               this.rootNode.setOpen(true);
-               this.tree.setContextMenu(org.argeo.ria.event.CommandsManager.getInstance().createMenuFromIds(["addtobatch", "reloadtree"]));
-               
-               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();               
-               listToolBar.add(toolGroup);
-               
-               this.batchLabel = new qx.ui.basic.Atom(this._emptyAgentString, "resource/slc/mime-xsl-22.png");
-               this.batchLabel.setPadding(6);
-               toolGroup.add(this.batchLabel);
-               this.addListener("changeBatchAgentId", function(event){
-                       var value = event.getData();
-                       if(value == null){
-                               this.batchLabel.setLabel(this._emptyAgentString);
-                       }else{
-                               var agentsList = this.rootNode.getUserData("agentsMap");
-                               this.batchLabel.setLabel(this._crtAgentString + agentsList[value]);
-                       }
-               }, this);
-               
-           listToolBar.addSpacer();
-           listToolBar.setPaddingRight(4);
-               var execButton = this.getCommands()["submitform"].command.getToolbarButton();       
-           var delButton = this.getCommands()["removefrombatch"].command.getToolbarButton();
-           var formButton = this.getCommands()["editexecutionspecs"].command.getToolbarButton();
-           execButton.setShow("icon");
-           delButton.setShow("icon");
-           formButton.setShow("icon");
-           listToolBar.add(execButton);
-           listToolBar.add(new qx.ui.toolbar.Separator());
-           listToolBar.add(formButton);
-           listToolBar.add(delButton);
-                               
-               this.listPane.add(listToolBar, {edge:"north"});
-               
-               var indicator = new qx.ui.core.Widget();
-               indicator.setDecorator(new qx.ui.decoration.Single().set({top:[1,"solid","#33508D"]}));
-               indicator.setHeight(0);
-               indicator.setOpacity(0.5);
-               indicator.setZIndex(100);
-               indicator.setLayoutProperties({left:-1000,top:-1000});
-               org.argeo.ria.Application.INSTANCE.getRoot().add(indicator);
-               
-               
-               this.list = new qx.ui.form.List();
-               this.list.setDecorator(null);
-               this.list.setSelectionMode("multi");
-               this.list.setDroppable(true);
-               this.list.setDraggable(true);
-               this.list.setContextMenu(org.argeo.ria.event.CommandsManager.getInstance().createMenuFromIds(["editexecutionspecs", "removefrombatch"]));
-               
-               
-               this.list.addListener("dragstart", function(e){
-                       e.addType(["items"]);
-                       e.addAction(["move"]);
-               },this);
-               this.list.addListener("dragend", function(e){
-                       indicator.setDomPosition(-1000,-1000);
-               });
-               this.list.addListener("dragover", function(e){
-                       var orig = e.getOriginalTarget();
-                       var origCoords = orig.getContainerLocation();
-                       indicator.setWidth(orig.getBounds().width);
-                       indicator.setDomPosition(origCoords.left, origCoords.bottom);
-               });
-               this.list.addListener("drag", function(e){
-                       var orig = e.getOriginalTarget();
-                       var origCoords = orig.getContainerLocation();
-                       indicator.setWidth(orig.getBounds().width);
-                       indicator.setDomPosition(origCoords.left, origCoords.bottom);
-               });
-               
-               this.list.addListener("drop", function(e){
-                       var target = e.getRelatedTarget();
-                       var afterItem = e.getOriginalTarget();
-                       indicator.setDomPosition(-1000,-1000);
-                       if(afterItem.classname != "qx.ui.form.ListItem") afterItem = null;
-                       if(!target){
-                               target = this.list.getSortedSelection()[0];
-                               this._addFlowToBatch(target, afterItem);
-                       }else{
-                               this._addFlowToBatch(null, afterItem);
-                       }
-               }, 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);
-               
-               listChangeListener = function(){
-                       var command = org.argeo.ria.event.CommandsManager.getInstance().getCommandById("submitform");
-                       command.setEnabled(this.list.hasChildren());
-               };
-               this.list.addListener("addItem", listChangeListener, this);
-               this.list.addListener("removeItem", listChangeListener, this);
-               
-               splitPane.add(this.tree, 0);
-               splitPane.add(this.listPane, 1);                
-       },
-       
-       /**
-        * Adds a given ExecutionFlow to the batch
-        * @param target {mixed} The dropped target, can be a TreeFile (add) or a ListItem (reorder).
-        * @param after {qx.ui.form.ListItem} Optional list item : if set, the flow will be added as a new list item positionned after this one. 
-        */
-       _addFlowToBatch : function(target, after, skipAutoOpen){
-               if(target && target.classname == "qx.ui.form.ListItem"){
-                       if(!after) return;
-                       if(after == "first") this.list.addAt(target, 0);
-                       else this.list.addAfter(target, after);
-                       return;
-               }
-               if(!target){
-                       if(this.tree.isSelectionEmpty()){
-                               return;
-                       }
-                       selection = this.tree.getSelection();
-                       if(selection.length > 1){
-                               for(var i=0;i<selection.length;i++){
-                                       this._addFlowToBatch(selection[i], null, true);
-                               }
-                               return;
-                       }else{
-                               target = selection[0];
-                       }
-               }
-               
-               // Folder case
-               if(qx.Class.isSubClassOf(qx.Class.getByName(target.classname), qx.ui.tree.TreeFolder)){
-                       var allChildren = target.getItems(true);
-                       for(var i=0;i<allChildren.length;i++){
-                               if(allChildren[i].getUserData("executionFlow")){
-                                       this._addFlowToBatch(allChildren[i], null, true); 
-                               }
-                       }
-                       return;
-               }
-               
-               // Check agent Uuid against current batch agent Id.
-               var agentUuid = target.getUserData("agentUuid");
-               if(!this.getBatchAgentId()){
-                       this.setBatchAgentId(agentUuid);
-               }else if(this.getBatchAgentId() != agentUuid){
-                       var modal = new org.argeo.ria.components.Modal("Wrong Agent!", null, "Batch can contain tests only of the same agent!");
-                       modal.attachAndShow();
-                       return;
-               }
-               
-               var executionModule = target.getUserData("executionModule");
-               var executionFlow = target.getUserData("executionFlow");
-               var batchEntry = new org.argeo.slc.ria.execution.BatchEntrySpec(executionModule, executionFlow);
-               var label = batchEntry.getLabel();
-               var icon = target.getIcon() || "resource/slc/office-document.png";
-               var item = new qx.ui.form.ListItem(label, icon);
-               item.addListener("dblclick", function(e){
-                       this.getCommands()["editexecutionspecs"].command.execute();
-               }, this);
-               item.setUserData("batchEntrySpec", batchEntry);
-               item.setPaddingTop(1);
-               item.setPaddingBottom(2);
-               if(after){
-                       if(after == "first") this.list.addAt(item, 0);
-                       else this.list.addAfter(item, after);
-               }else{
-                       this.list.add(item);
-               }
-               this.list.select(item);
-               if(this.getAutoOpen() && !skipAutoOpen){
-                       this.getCommands()["editexecutionspecs"].command.execute();
-               }
-       },
-                               
-       /**
-        * Called at execution
-        * @param agentUuid {String} The id of the target agent
-        */
-       executeBatchOnAgent : function(agentUuid){
-               var selection = this.list.getChildren();
-               if(!selection.length) return;
-               var slcExecMessage = new org.argeo.slc.ria.execution.Message();
-               for(var i=0;i<selection.length;i++){
-                       var batchEntrySpec = selection[i].getUserData("batchEntrySpec");
-                       slcExecMessage.addBatchEntrySpec(batchEntrySpec);
-               }                               
-               var req = org.argeo.slc.ria.SlcApi.getNewSlcExecutionService(agentUuid, slcExecMessage.toXml());
-               req.send();
-               // Force logs refresh right now!
-               qx.event.Timer.once(function(){
-                       var command = org.argeo.ria.event.CommandsManager.getInstance().getCommandById("reloadlogs");
-                       if(command){
-                               command.execute();
-                       }
-               }, this, 2000);         
-       }       
-               
-  }
-});
\ No newline at end of file
diff --git a/server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/execution/SpecEditor.js b/server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/execution/SpecEditor.js
deleted file mode 100644 (file)
index 6d86839..0000000
+++ /dev/null
@@ -1,254 +0,0 @@
-/**\r
- * Generic modal popup window.\r
- * It is layed out with a dock layout. When adding components to it, they are added as "center".\r
- * @author Charles du Jeu\r
- */\r
-qx.Class.define("org.argeo.slc.ria.execution.SpecEditor",\r
-{\r
-       extend : qx.ui.window.Window,\r
-  \r
-       properties : {\r
-               /**\r
-                * The Spec to edit\r
-                */\r
-               batchEntrySpec : {\r
-                       check : "org.argeo.slc.ria.execution.BatchEntrySpec"\r
-               }\r
-       },\r
-       \r
-       events : {\r
-               /**\r
-                * Triggered when the user clicks the "save" button. \r
-                */\r
-               "save" : "qx.event.type.Event",\r
-               /**\r
-                * Triggered when any data is modified\r
-                */\r
-               "modified" : "qx.event.type.Event"\r
-\r
-       },\r
-       /**\r
-        * Opens an editor with the given values. \r
-        * @param batchEntrySpec {org.argeo.slc.ria.execution.BatchEntrySpec} The initial spec to edit\r
-        */\r
-       construct : function(batchEntrySpec){\r
-               var editorLabel = "Edit Specs for "+batchEntrySpec.getLabel();\r
-               this.base(arguments, editorLabel);\r
-               this.set({\r
-                       batchEntrySpec : batchEntrySpec,\r
-                       showMaximize : false,\r
-                       showMinimize : false,\r
-                       width: Math.min(parseInt(qx.bom.Viewport.getWidth()*90/100), 400),\r
-                       height: parseInt(qx.bom.Viewport.getHeight()*60/100)\r
-               });\r
-               this.setLayout(new qx.ui.layout.Dock());\r
-               this.setModal(true);\r
-               this.center();\r
-               this._initFormObject(this.getBatchEntrySpec().getLabel());\r
-               this._addFormHeader(this.formObject, editorLabel);\r
-               this.createFormFromSpec();\r
-               this.addContent(this.formObject.pane);\r
-               this.addOkCancel();\r
-               this.addListener("save", function(e){\r
-                       this.saveFormToSpec();\r
-               }, this);\r
-       },\r
-       \r
-       members : {\r
-               /**\r
-                * Builds the form from the BatchEntrySpec\r
-                */\r
-               createFormFromSpec : function(){\r
-                       var values = this.getBatchEntrySpec().getValues();\r
-                       for(var key in values){\r
-                               var valueObj = values[key];\r
-                               var label = key;\r
-                               var hidden = valueObj.getHidden();\r
-                               var disabled = valueObj.getFrozen();\r
-                               var value = valueObj.getValue();\r
-                               var type = valueObj.getSpecType();\r
-                               var subType = valueObj.getSpecSubType();\r
-                               if(type == "primitive" && !hidden){\r
-                                       this._addFormInputText(this.formObject, key, key, value, disabled, subType);\r
-                               }\r
-                       }\r
-               },\r
-               /**\r
-                * Gather data from the form\r
-                */\r
-               saveFormToSpec : function(){\r
-                       var values = this.getBatchEntrySpec().getValues();\r
-                       for(var key in values){\r
-                               var valueObj = values[key];\r
-                               var hidden = valueObj.getHidden();\r
-                               var disabled = valueObj.getFrozen();\r
-                               if(valueObj.getSpecType() == "primitive"){\r
-                                       if(!hidden && !disabled){\r
-                                               valueObj.setValue(this.formObject.fields[key].getValue());\r
-                                       }\r
-                               }\r
-                       }                       \r
-               },\r
-               \r
-               /**\r
-                * Display a component (panel) in the center of the popup\r
-                * @param panel {qx.ui.core.Widget} A gui component (will be set at width 100%).\r
-                */\r
-               addContent: function(panel){\r
-                       this.add(new qx.ui.container.Scroll(panel), {edge:'center', width:'100%'});\r
-               },\r
-               /**\r
-                * Automatically attach to the application root, then show.\r
-                */\r
-               attachAndShow:function(){\r
-                       org.argeo.ria.components.ViewsManager.getInstance().getApplicationRoot().add(this);                     \r
-                       this.show();\r
-               },\r
-               /**\r
-                * Init a form part : creates a pane, a set of fields, etc.\r
-                * @param label {String} A label\r
-                * @return {Map} The form part.\r
-                */\r
-               _initFormObject : function(label){\r
-                       this.formObject = {};\r
-                       this.formObject.hiddenFields = {};\r
-                       this.formObject.freeFields = [];\r
-                       this.formObject.fields = {};\r
-                       this.formObject.label = label;\r
-                       this.formObject.pane = new qx.ui.container.Composite(new qx.ui.layout.VBox(5));\r
-                       return this.formObject;\r
-               },\r
-                               \r
-               /**\r
-                * Creates a simple label/input form entry.\r
-                * @param formObject {Map} The form part\r
-                * @param fieldName {String} Name\r
-                * @param fieldLabel {String} Label of the field\r
-                * @param defaultValue {String} The default value\r
-                * @param choiceValues {Map} An map of values\r
-                * @param disabled {Boolean} The field is not writable\r
-                * @param subType {String} The type expected (string, integer, etc).\r
-                */\r
-               _addFormInputText : function(formObject, fieldName, fieldLabel, defaultValue, disabled, subType, choiceValues){\r
-                       var labelElement;\r
-                       if(choiceValues){\r
-                               var fieldElement = new qx.ui.form.SelectBox();\r
-                               for(var key in choiceValues){\r
-                                       fieldElement.add(new qx.ui.form.ListItem(choiceValues[key], null, key));\r
-                               }\r
-                               fieldElement.addListener("changeSelected", function(e){this.fireEvent("modified")}, this);\r
-                       }else{\r
-                               var fieldElement = new qx.ui.form.TextField();\r
-                               if(subType == "integer"){\r
-                                       fieldElement.addListener("changeValue", function(e){\r
-                                               var isNum = !isNaN(e.getData() * 1);\r
-                                               if(!isNum){\r
-                                                       alert("Warning, this field only accepts Integers!");\r
-                                               }\r
-                                       }, this);                                       \r
-                               }\r
-                               fieldElement.addListener("input", function(e){this.fireEvent("modified")}, this);                       \r
-                       }\r
-                       if(defaultValue){\r
-                               fieldElement.setValue(defaultValue);\r
-                       }\r
-                       if(fieldName && fieldLabel){\r
-                               labelElement = new qx.ui.basic.Label(fieldLabel);\r
-                               formObject.fields[fieldName] = fieldElement;\r
-                       }else{\r
-                               labelElement = new qx.ui.form.TextField();\r
-                               formObject.freeFields.push({\r
-                                       labelEl:labelElement, \r
-                                       valueEl:fieldElement\r
-                               });\r
-                       }\r
-                       if(disabled) fieldElement.setEnabled(false);\r
-                       this._addFormEntry(formObject, labelElement, fieldElement);\r
-               },\r
-               \r
-               /**\r
-                * Add an header\r
-                * @param formObject {Map} The form part\r
-                * @param content {Mixed} Content to add.\r
-                * @param additionnalButton {Mixed} Any widget to add on the east.\r
-                */\r
-               _addFormHeader : function(formObject, content, additionnalButton){\r
-                       var header = new qx.ui.basic.Label('<big><b>'+content+'</b></big>');\r
-                       header.setRich(true);           \r
-                       if(!additionnalButton){\r
-                               header.setPaddingBottom(10);\r
-                               formObject.pane.add(header);\r
-                       }else{\r
-                               var pane = new qx.ui.container.Composite(new qx.ui.layout.Dock());\r
-                               pane.setPaddingBottom(10);\r
-                               pane.setPaddingRight(10);\r
-                               pane.add(header, {edge:'center'});\r
-                               pane.add(additionnalButton, {edge:'east'});\r
-                               formObject.pane.add(pane);\r
-                       }\r
-               },\r
-               \r
-               /**\r
-                * Adds a label/input like entry in the form.\r
-                * @param formObject {Map} The form part\r
-                * @param labelElement {Object} Either a label or an input \r
-                * @param fieldElement {Object} Any form input.\r
-                */\r
-               _addFormEntry : function(formObject, labelElement, fieldElement){\r
-                       var entryPane = new qx.ui.container.Composite(new qx.ui.layout.HBox(5));\r
-                       labelElement.setWidth(150);\r
-                       labelElement.setTextAlign("right");             \r
-                       entryPane.add(labelElement);\r
-                       entryPane.add(new qx.ui.basic.Label(':'));\r
-                       fieldElement.setWidth(150);\r
-                       entryPane.add(fieldElement);\r
-                       formObject.pane.add(entryPane);\r
-               },\r
-                       \r
-               /**\r
-                * Adds a close button bottom-center aligned to the popup\r
-                */\r
-               addCloseButton : function(){\r
-                       this.closeButton = new qx.ui.form.Button("Close");\r
-                       this.closeButton.addListener("execute", this._closeAndDestroy, this);\r
-                       this.add(this.closeButton, {edge:'south'});                     \r
-               },\r
-               /**\r
-                * Adds two buttons bottom-center aligned (Ok and Cancel). \r
-                * Ok button has no listener by default, Cancel will close and destroy the popup.\r
-                */\r
-               addOkCancel : function(){\r
-                       var buttonPane = new qx.ui.container.Composite(new qx.ui.layout.HBox(5, 'right'));\r
-                       buttonPane.setAlignX("center");\r
-                       this.add(buttonPane, {edge:"south"});\r
-                       this.okButton = new qx.ui.form.Button("Save");\r
-                       this.okButton.setEnabled(false);\r
-                       this.addListener("modified", function(e){\r
-                               this.okButton.setEnabled(true);\r
-                       }, this);\r
-                       this.okButton.addListener("execute", function(e){\r
-                               this.fireEvent("save");\r
-                               this.okButton.setEnabled(false);\r
-                       }, this);\r
-                       this.cancelButton = new qx.ui.form.Button("Close");\r
-                       this.cancelButton.addListener("execute", this._closeAndDestroy, this);\r
-\r
-                       this.saveCloseButton = new qx.ui.form.Button("Save & Close");\r
-                       this.saveCloseButton.addListener("execute", function(e){\r
-                               this.fireEvent("save");\r
-                               this._closeAndDestroy();\r
-                       }, this);\r
-                       \r
-                       buttonPane.add(this.okButton);\r
-                       buttonPane.add(this.cancelButton);\r
-                       buttonPane.add(this.saveCloseButton);\r
-               },\r
-               /**\r
-                * Close this modal window and destroy it.\r
-                */\r
-               _closeAndDestroy : function(){\r
-                       this.hide();\r
-                       this.destroy();                 \r
-               }\r
-       }\r
-});
\ No newline at end of file