]> git.argeo.org Git - gpl/argeo-slc.git/commitdiff
Use JmsClient instead of AmqClient
authorCharles du Jeu <charles.dujeu@gmail.com>
Thu, 15 Jan 2009 08:50:52 +0000 (08:50 +0000)
committerCharles du Jeu <charles.dujeu@gmail.com>
Thu, 15 Jan 2009 08:50:52 +0000 (08:50 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@2100 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.slc.webapp/src/main/webapp/argeo-ria-lib/slc/class/org/argeo/slc/ria/LauncherApplet.js

index a8886acc89308bfc7485961aafecaa7bc44b3cf7..b008aba067d183320b2aa484d053cd0dca761c59 100644 (file)
@@ -51,6 +51,11 @@ qx.Class.define("org.argeo.slc.ria.LauncherApplet",
                                command         : null
                        }
                }
+       },
+       registeredTopics : {
+               init : {},
+               check : "Map", 
+               event : "changeRegisteredTopics"
        }
   },
 
@@ -64,23 +69,40 @@ qx.Class.define("org.argeo.slc.ria.LauncherApplet",
                this.setView(viewPane);
                this._createLayout();
                this._createForm();
-               this._amqClient = new org.argeo.ria.remote.AmqClient();
-               this._amqClient.startPolling(); 
-               qx.io.remote.RequestQueue.getInstance().setDefaultTimeout(30000);
+               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));                
@@ -130,14 +152,22 @@ 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 NSMap = {slc:"http://argeo.org/projects/slc/schemas"};
+                       var nodes = org.argeo.ria.util.Element.selectNodes(xmlDoc, "//slc:slc-agent-descriptor", NSMap);
+                       var newTopics = {};
+                       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);
+                               newTopics[uuid] = uuid+" ("+host+")";
+                       }
+                       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");
                
@@ -198,38 +228,56 @@ 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);
-                       this._addAmqListenerDeferred(uuid, i);
+       _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 NSMap = {slc:"http://argeo.org/projects/slc/schemas"};
+                       var message = org.argeo.ria.util.Element.selectSingleNode(response, "slc:slc-execution", NSMap);                                
+                       var slcExec = new org.argeo.slc.ria.SlcExecutionMessage(message.getAttribute("uuid"));
+                       slcExec.fromXml(message);
+                       this.logModel.addRows([
+                               [new Date().toString(), slcExec.getUuid(), slcExec.getStatus(), slcExec.getType()]
+                       ]);                             
+               }, this);
        },
        
-       _addAmqListenerDeferred: function(uuid, index){
-               qx.event.Timer.once(function(){                 
-                       this._amqClient.addListener("launcherId", "topic://agent."+uuid+".newExecution", function(message){
-                               this.info("Received message!");
-                               var slcExec = new org.argeo.slc.ria.SlcExecutionMessage(message.getAttribute("uuid"));
-                               slcExec.fromXml(message);
-                               this.logModel.addRows([
-                                       [new Date().toString(), slcExec.getUuid(), slcExec.getStatus(), slcExec.getType()]
-                               ]);                             
-                       }, this);
-               }, this, 500*index);            
+       _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++){