]> 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
New function close() in the IView interface
[gpl/argeo-slc.git] / org.argeo.slc.webapp / src / main / webapp / argeo-ria-lib / slc / class / org / argeo / slc / ria / LauncherApplet.js
index 572544b508c8060fdd3fad629e19b2b58da63270..162453861e6d23dc6c3d20f685ff65d9f2d5aff6 100644 (file)
@@ -51,6 +51,11 @@ qx.Class.define("org.argeo.slc.ria.LauncherApplet",
                                command         : null
                        }
                }
+       },
+       registeredTopics : {
+               init : {},
+               check : "Map", 
+               event : "changeRegisteredTopics"
        }
   },
 
@@ -64,20 +69,40 @@ qx.Class.define("org.argeo.slc.ria.LauncherApplet",
                this.setView(viewPane);
                this._createLayout();
                this._createForm();
+               this._amqClient = org.argeo.ria.remote.JmsClient.getInstance();
+               this._amqClient.startPolling();
        },
        
        /**
-        * Load a given row : the data passed must be a simple data array.
-        * @param data {Element} The text xml description. 
+        *  
         */
        load : function(){
-               this.getView().setViewTitle("Slc Execution Launcher");
-               org.argeo.ria.event.CommandsManager.getInstance().getCommandById("reloadagents").execute();
+               this.getView().setViewTitle("Execution Launcher");
+               this.addListener("changeRegisteredTopics", function(event){
+                       this._refreshTopicsSubscriptions(event);
+                       this._feedSelector(event);
+               }, this);
+               var reloadHandler = function(message){
+                       org.argeo.ria.event.CommandsManager.getInstance().getCommandById("reloadagents").execute();
+               }
+               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);
+               reloadHandler();
        },
         
        addScroll : function(){
                return false;
        },
+       
+       close : function(){
+               this._amqClient.removeListener("agentregister", "topic://agent.register");
+               this._amqClient.removeListener("agentunregister", "topic://agent.unregister");
+               
+               this.setRegisteredTopics({});
+               this._amqClient.stopPolling();
+       },
                
        _createLayout : function(){
                this.formPane = new qx.ui.container.Composite(new qx.ui.layout.VBox(5));                
@@ -87,7 +112,7 @@ qx.Class.define("org.argeo.slc.ria.LauncherApplet",
                this.add(this.scroll, {edge:'west'});
                
                this.logModel = new qx.ui.table.model.Simple();
-               this.logModel.setColumns(["Date", "Agent Uuid", "Status", "Type"]);
+               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)
@@ -104,7 +129,6 @@ qx.Class.define("org.argeo.slc.ria.LauncherApplet",
                });
                var columnModel = this.logPane.getTableColumnModel(); 
                columnModel.getBehavior().setWidth(2, "12%");
-               columnModel.getBehavior().setWidth(3, "12%");           
        },
        
        _createForm : function(){
@@ -127,14 +151,21 @@ qx.Class.define("org.argeo.slc.ria.LauncherApplet",
                var serviceManager = org.argeo.ria.remote.RequestManager.getInstance();
                serviceManager.addListener("reload", function(reloadEvent){
                        if(reloadEvent.getDataType()!= "agents") return ;
-                       this._xmlListToSelector(reloadEvent.getContent(), this.agentSelector);
+                       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._addFormHeader("Choose Agent Uuid");
                this._addFormEntry(new qx.ui.basic.Label("Agent Uuid"), this.agentSelector);
-               this._addFormHeader("Set SlcExecution Parameters");
+               this._addFormHeader("Set Execution Parameters");
                this._addFormInputText("status", "Status", "STARTED");
-               this._addFormInputText("type", "Type", "slcAnt");
                this._addFormInputText("host", "Host", "localhost");
                this._addFormInputText("user", "User", "user");
                
@@ -195,24 +226,55 @@ qx.Class.define("org.argeo.slc.ria.LauncherApplet",
                this.formPane.add(entryPane);
        },
        
-       _xmlListToSelector : function(xmlDoc, selector){
-               selector.removeAll();
-               var NSMap = {slc:"http://argeo.org/projects/slc/schemas"};
-               var nodes = org.argeo.ria.util.Element.selectNodes(xmlDoc, "//slc:slc-agent-descriptor", NSMap);
-               for(var i=0;i<nodes.length;i++){
-                       var uuid = org.argeo.ria.util.Element.getSingleNodeText(nodes[i], "@uuid", NSMap);
-                       var host = org.argeo.ria.util.Element.getSingleNodeText(nodes[i], "slc:host", NSMap);
-                       var listItem = new qx.ui.form.ListItem(uuid+' ('+host+')', null, uuid);
-                       selector.add(listItem);
+       _refreshTopicsSubscriptions : function(changeTopicsEvent){
+               var oldTopics = changeTopicsEvent.getOldData() || {};
+               var newTopics = changeTopicsEvent.getData();
+               var removed = [];
+               var added = [];
+               for(var key in oldTopics){
+                       if(!newTopics[key]) {
+                               this._removeAmqListener(key);
+                       }
+               }
+               for(var key in newTopics){
+                       if(!oldTopics[key]) {
+                               this._addAmqListener(key);
+                       }                       
                }
        },
+               
+       _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);
+               for(var key in topics){
+                       var listItem = new qx.ui.form.ListItem(topics[key], null, key);
+                       this.agentSelector.add(listItem);
+               }
+       },
+       
+       _addAmqListener: function(uuid){
+               this._amqClient.addListener("slcExec", "topic://agent."+uuid+".newExecution", function(response){
+                       var message = org.argeo.ria.util.Element.selectSingleNode(response, "slc:slc-execution");                               
+                       var slcExec = new org.argeo.slc.ria.SlcExecutionMessage(message.getAttribute("uuid"));
+                       slcExec.fromXml(message);
+                       this.logModel.addRows([
+                               [new Date().toString(), slcExec.getHost()+' ('+slcExec.getUuid()+')', slcExec.getStatus()]
+                       ]);                             
+               }, this);
+       },
+       
+       _removeAmqListener : function(uuid){
+               this._amqClient.removeListener("slcExec", "topic://agent."+uuid+".newExecution");
+       },
        
        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.setType(this.fields.type.getValue());
+               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++){
@@ -222,13 +284,7 @@ qx.Class.define("org.argeo.slc.ria.LauncherApplet",
                        }
                }
                var destination = "topic://agent."+currentUuid+".newExecution";
-               var req = org.argeo.slc.ria.SlcApi.getSendAmqMessageRequest(destination, slcExec);
-               req.addListener("completed", function(e){                       
-                       this.logModel.addRows([
-                               [new Date().toString(), slcExec.getUuid(), slcExec.getStatus(), slcExec.getType()]
-                       ]);
-               }, this);
-               req.send();
+               this._amqClient.sendMessage(destination, slcExec.toXml());
        }
                
   }