]> 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/LauncherApplet.js
Splitted the LauncherApplet into two different applets. The first one is a generic...
[gpl/argeo-slc.git] / org.argeo.slc.webapp / src / main / webapp / argeo-ria-lib / slc / class / org / argeo / slc / ria / LauncherApplet.js
index 162453861e6d23dc6c3d20f685ff65d9f2d5aff6..7d53e3f419fd5bbb582ba123318306f0772561a1 100644 (file)
@@ -9,7 +9,11 @@ qx.Class.define("org.argeo.slc.ria.LauncherApplet",
 
   construct : function(){
        this.base(arguments);
-       this.setLayout(new qx.ui.layout.Dock());        
+       this.setLayout(new qx.ui.layout.Dock());
+       
+       this.COMMON_FORM_HEADER_LABEL = "Choose Agent";
+       this.CHOOSE_AGENT_LABEL = "Agent Uuid";
+       this.CHOOSE_FORM_PART_LABEL = "Test Type";
   },
 
   properties : 
@@ -33,7 +37,7 @@ qx.Class.define("org.argeo.slc.ria.LauncherApplet",
                                menu            : "Launcher",
                                toolbar         : "launcher",
                                callback        : function(e){
-                                       this.getView().getContent().submitForm();
+                                       this.submitForm();
                                },
                                command         : null
                        },                      
@@ -83,12 +87,13 @@ qx.Class.define("org.argeo.slc.ria.LauncherApplet",
                        this._feedSelector(event);
                }, this);
                var reloadHandler = function(message){
-                       org.argeo.ria.event.CommandsManager.getInstance().getCommandById("reloadagents").execute();
+                       // Delay reload to be sure the jms was first integrated by the db, then ask the db.
+                       qx.event.Timer.once(function(){
+                               org.argeo.ria.event.CommandsManager.getInstance().getCommandById("reloadagents").execute();
+                       }, this, 1000);                 
                }
                this._amqClient.addListener("agentregister", "topic://agent.register", reloadHandler, this);
-               //qx.event.Timer.once(function(){               
-                       this._amqClient.addListener("agentunregister", "topic://agent.unregister", reloadHandler, this);
-               //}, this, 500);
+               this._amqClient.addListener("agentunregister", "topic://agent.unregister", reloadHandler, this);
                reloadHandler();
        },
         
@@ -107,32 +112,14 @@ qx.Class.define("org.argeo.slc.ria.LauncherApplet",
        _createLayout : function(){
                this.formPane = new qx.ui.container.Composite(new qx.ui.layout.VBox(5));                
                this.scroll = new qx.ui.container.Scroll(this.formPane);
-               this.scroll.setWidth(290);
                this.formPane.setPadding(10);
-               this.add(this.scroll, {edge:'west'});
+               this.add(this.scroll, {edge:'center'});
                
-               this.logModel = new qx.ui.table.model.Simple();
-               this.logModel.setColumns(["Date", "Agent Uuid", "Status"]);
-               this.logPane = new qx.ui.table.Table(this.logModel,  {
-                       tableColumnModel: function(obj){
-                               return new qx.ui.table.columnmodel.Resize(obj)
-                       }
-               });
-               this._initLogger();
-               this.add(this.logPane, {edge:'center'});
-       },
-       
-       _initLogger : function(){
-               this.logPane.set({              
-                       statusBarVisible: false,
-                       showCellFocusIndicator:false
-               });
-               var columnModel = this.logPane.getTableColumnModel(); 
-               columnModel.getBehavior().setWidth(2, "12%");
        },
-       
+               
        _createForm : function(){
                this.fields = {};
+               this.hiddenFields = {};
                this.freeFields = [];
                
                var execButtonPane = new qx.ui.container.Composite(new qx.ui.layout.Dock());
@@ -162,12 +149,85 @@ qx.Class.define("org.argeo.slc.ria.LauncherApplet",
                        this.setRegisteredTopics(newTopics);
                }, this);
                
-               this._addFormHeader("Choose Agent Uuid");
-               this._addFormEntry(new qx.ui.basic.Label("Agent Uuid"), this.agentSelector);
-               this._addFormHeader("Set Execution Parameters");
-               this._addFormInputText("status", "Status", "STARTED");
-               this._addFormInputText("host", "Host", "localhost");
-               this._addFormInputText("user", "User", "user");
+               var commonForm = {pane:this.formPane};          
+               this._addFormHeader(commonForm, this.COMMON_FORM_HEADER_LABEL);
+               this._addFormEntry(commonForm, new qx.ui.basic.Label(this.CHOOSE_AGENT_LABEL), this.agentSelector);
+               this._createFormVariableParts();
+               if(!this.parts) return;
+               if(qx.lang.Object.getLength(this.parts) > 1){
+                       // Add chooser
+                       this.partChooser = new qx.ui.form.SelectBox();
+                       for(var key in this.parts){
+                               this.partChooser.add(new qx.ui.form.ListItem(this.parts[key].label, null, key));
+                       }
+                       this._addFormEntry(commonForm, new qx.ui.basic.Label(this.CHOOSE_FORM_PART_LABEL), this.partChooser);
+                       this.partChooser.addListener("changeValue", function(ev){
+                               this._showSelectedPart(ev.getData());
+                       }, this);
+               }
+               this._showSelectedPart(qx.lang.Object.getKeys(this.parts)[0]);          
+       },
+       
+       _showSelectedPart : function(partId){
+               if(!this.parts) return;
+               if(!this.partsContainer){
+                       this.partsContainer = new qx.ui.container.Composite(new qx.ui.layout.Canvas());
+                       this.formPane.add(this.partsContainer);                 
+               }
+               for(var i in this.parts){
+                       var formObject = this.parts[i];
+                       if(!formObject.added){
+                               this.partsContainer.add(formObject.pane, {top:0, left:0});
+                               formObject.added = true;
+                       }
+                       formObject.pane.hide();
+               }
+               if(this.parts[partId]){
+                       this.parts[partId].pane.show();
+               }
+       },
+       
+       _initFormPart : function(formId, label){
+               if(!this.parts) this.parts = {};                
+               var formObject = {};
+               formObject.hiddenFields = {};
+               formObject.freeFields = [];
+               formObject.fields = {};
+               formObject.id = formId;
+               formObject.label = label;
+               this.parts[formId] = formObject;
+               formObject.pane = new qx.ui.container.Composite(new qx.ui.layout.VBox(5));
+               return formObject;
+       },
+       
+       _createFormVariableParts : function(){
+               var standard = this._initFormPart("standard", "Canonical");
+               this._createStandardForm(standard);
+               var simple = this._initFormPart("simple", "SLC Sample");
+               this._createSimpleForm(simple);
+       },
+       
+       _createSimpleForm : function(formObject){
+
+               this._addFormInputText(formObject, "ant.file", "File", "Category1/SubCategory2/build.xml");
+               var moreButton = new qx.ui.basic.Image("resource/slc/list-add.png");
+               moreButton.setToolTip(new qx.ui.tooltip.ToolTip("Add a parameter"));
+               moreButton.setCursor("pointer");
+               moreButton.addListener("click", function(){
+                       this._addFormInputText();
+               }, this);
+               this._addFormHeader(formObject, "Add optionnal parameters", moreButton);
+               this._addFormInputText(formObject);
+               this._addFormInputText(formObject);             
+               
+       },
+       
+       _createStandardForm : function(formObject){
+               
+               this._addFormHeader(formObject, "Set Execution Parameters");
+               this._addFormInputText(formObject, "status", "Status", "STARTED");
+               this._addFormInputText(formObject, "host", "Host", "localhost");
+               this._addFormInputText(formObject, "user", "User", "user");
                
                var moreButton = new qx.ui.basic.Image("resource/slc/list-add.png");
                moreButton.setToolTip(new qx.ui.tooltip.ToolTip("Add a parameter"));
@@ -175,47 +235,58 @@ qx.Class.define("org.argeo.slc.ria.LauncherApplet",
                moreButton.addListener("click", function(){
                        this._addFormInputText();
                }, this);
-               this._addFormHeader("Add optionnal parameters", moreButton);
-               this._addFormInputText();
-               this._addFormInputText();
+               this._addFormHeader(formObject, "Add optionnal parameters", moreButton);
+               this._addFormInputText(formObject);
+               this._addFormInputText(formObject);             
        },
        
-       _addFormInputText : function(fieldName, fieldLabel, defaultValue){
+       _addFormHiddenField : function(formObject, fieldName, fieldValue){
+               formObject.hiddenFields[fieldName] = fieldValue;
+       },
+       
+       _addFormInputText : function(formObject, fieldName, fieldLabel, defaultValue, choiceValues){
                var labelElement;
-               var fieldElement = new qx.ui.form.TextField();
+               if(choiceValues){
+                       var fieldElement = new qx.ui.form.SelectBox();
+                       for(var key in choiceValues){
+                               fieldElement.add(new qx.ui.form.ListItem(choiceValues[key], null, key));
+                       }
+               }else{
+                       var fieldElement = new qx.ui.form.TextField();
+               }
                if(defaultValue){
                        fieldElement.setValue(defaultValue);
                }
                if(fieldName && fieldLabel){
                        labelElement = new qx.ui.basic.Label(fieldLabel);
-                       this.fields[fieldName] = fieldElement;
+                       formObject.fields[fieldName] = fieldElement;
                }else{
                        labelElement = new qx.ui.form.TextField();
-                       this.freeFields.push({
+                       formObject.freeFields.push({
                                labelEl:labelElement, 
                                valueEl:fieldElement
                        });
                }
-               this._addFormEntry(labelElement, fieldElement);
+               this._addFormEntry(formObject, labelElement, fieldElement);
        },
        
-       _addFormHeader : function(content, additionnalButton){
+       _addFormHeader : function(formObject, content, additionnalButton){
                var header = new qx.ui.basic.Label('<b>'+content+'</b>');
                header.setRich(true);           
                if(!additionnalButton){
                        header.setPaddingTop(10);
-                       this.formPane.add(header);
+                       formObject.pane.add(header);
                }else{
                        var pane = new qx.ui.container.Composite(new qx.ui.layout.Dock());
                        pane.setPaddingTop(10);
                        pane.setPaddingRight(10);
                        pane.add(header, {edge:'center'});
                        pane.add(additionnalButton, {edge:'east'});
-                       this.formPane.add(pane);
+                       formObject.pane.add(pane);
                }
        },
        
-       _addFormEntry : function(labelElement, fieldElement){
+       _addFormEntry : function(formObject, labelElement, fieldElement){
                var entryPane = new qx.ui.container.Composite(new qx.ui.layout.HBox(5));
                labelElement.setWidth(100);
                labelElement.setTextAlign("right");             
@@ -223,7 +294,7 @@ qx.Class.define("org.argeo.slc.ria.LauncherApplet",
                entryPane.add(new qx.ui.basic.Label(':'));
                fieldElement.setWidth(150);
                entryPane.add(fieldElement);
-               this.formPane.add(entryPane);
+               formObject.pane.add(entryPane);
        },
        
        _refreshTopicsSubscriptions : function(changeTopicsEvent){
@@ -233,12 +304,12 @@ qx.Class.define("org.argeo.slc.ria.LauncherApplet",
                var added = [];
                for(var key in oldTopics){
                        if(!newTopics[key]) {
-                               this._removeAmqListener(key);
+                               //this._removeAmqListener(key);
                        }
                }
                for(var key in newTopics){
                        if(!oldTopics[key]) {
-                               this._addAmqListener(key);
+                               //this._addAmqListener(key);
                        }                       
                }
        },
@@ -270,21 +341,54 @@ qx.Class.define("org.argeo.slc.ria.LauncherApplet",
                this._amqClient.removeListener("slcExec", "topic://agent."+uuid+".newExecution");
        },
        
+       _prepareSlcExecutionMessage : function(crtPartId, slcExec, fields, hiddenFields, freeFields){
+               if(crtPartId == "standard"){
+                       slcExec.setStatus(fields.status.getValue());            
+                       slcExec.setHost(fields.host.getValue());
+                       slcExec.setUser(fields.user.getValue());
+               }else{
+                       slcExec.addAttribute("ant.file", fields["ant.file"].getValue());
+               }
+               for(var i=0;i<freeFields.length;i++){
+                       var fF = freeFields[i];
+                       if(fF.labelEl.getValue() != "" && fF.valueEl.getValue() != ""){
+                               slcExec.addAttribute(fF.labelEl.getValue(), fF.valueEl.getValue());
+                       }
+               }               
+       },
+       
        submitForm : function(){
                var currentUuid = this.agentSelector.getValue();
                if(!currentUuid) return;
                var slcExec = new org.argeo.slc.ria.SlcExecutionMessage(currentUuid);
-               slcExec.setStatus(this.fields.status.getValue());               
-               slcExec.setHost(this.fields.host.getValue());
-               slcExec.setUser(this.fields.user.getValue());
-               for(var i=0;i<this.freeFields.length;i++){
-                       var fF = this.freeFields[i];
-                       if(fF.labelEl.getValue() != "" && fF.valueEl.getValue() != ""){
-                               slcExec.addAttribute(fF.labelEl.getValue(), fF.valueEl.getValue());
+               
+               var fields = {};
+               var hiddenFields = {};
+               var freeFields = {};
+               var crtPartId = "";
+               if(this.parts){
+                       if(this.partChooser){
+                               crtPartId = this.partChooser.getValue();
+                       }else{
+                               crtPartId = qx.lang.Object.getKeys(this.parts)[0];
                        }
+                       var crtPart = this.parts[crtPartId];
+                       fields = crtPart.fields;
+                       hiddenFields = crtPart.hiddenFields;
+                       freeFields = crtPart.freeFields;
                }
+               
+               this._prepareSlcExecutionMessage(crtPartId, slcExec, fields, hiddenFields, freeFields);
+               
                var destination = "topic://agent."+currentUuid+".newExecution";
                this._amqClient.sendMessage(destination, slcExec.toXml());
+               // 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);
        }
                
   }