X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=server%2Forg.argeo.slc.ria%2Fsrc%2Fargeo-ria-lib%2Fslc%2Fclass%2Forg%2Fargeo%2Fslc%2Fria%2FNewLauncherApplet.js;h=383b1d0bff88422cbec029f64324407e8077d578;hb=d8f7abb3102580b01ffbeecc201f7bdfbd082150;hp=f05c70d593dbbfffc4c529188f70682e21639a9b;hpb=7d09d24d6c54c8abf6e849dabd26c6f297fc9166;p=gpl%2Fargeo-slc.git 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 index f05c70d59..383b1d0bf 100644 --- 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 @@ -73,10 +73,19 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet", if(!selection || selection.length != 1) return; var item = selection[0]; this.setEnabled(false); - if(qx.Class.isSubClassOf(qx.Class.getByName(item.classname), qx.ui.tree.TreeFile)){ - this.setEnabled(true); + 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 }, @@ -150,20 +159,6 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet", }, command : null }, - "reloadagents" : { - label : "Reload Agents", - icon : "resource/slc/view-refresh.png", - shortcut : "Control+r", - enabled : true, - menu : "Launcher", - toolbar : "launcher", - callback : function(e){ - //var req = org.argeo.slc.ria.SlcApi.getListAgentsService("agents"); - //req.send(); - this.rootNode.reload(); - }, - command : null - }, "reloadtree" : { label : "Reload", icon : "resource/slc/view-refresh.png", @@ -172,7 +167,7 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet", menu : "Launcher", toolbar : "launcher", callback : function(e){ - var selected = this.tree.getSelectedItem(); + 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 @@ -200,7 +195,11 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet", }, selectionChange : function(viewId, selection){ if(viewId != "form:tree") return; - if(!selection || selection.length != 1) 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); @@ -239,7 +238,7 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet", folder.getDragData() ); agentFolder.setUserData("agentUuid", uuid); - agentFolder.setIcon("resource/slc/mime-xsl.png"); + agentFolder.setIcon("resource/slc/mime-xsl-22.png"); folder.add(agentFolder); } folder.setUserData("agentsMap", agents); @@ -291,14 +290,19 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet", * @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 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(moduleData.name, moduleData.version); + 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(); - executionModule.setXmlNode(response.getContent()); + 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); @@ -307,7 +311,7 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet", //indexStub ++; file.setUserData("executionModule", executionModule); file.setUserData("executionFlow", execFlows[key]); - file.setUserData("agentUuid", folder.getUserData("agentUuid")); + file.setUserData("agentUuid", agentUuid); org.argeo.slc.ria.NewLauncherApplet.attachNodeByPath( folder, path, @@ -372,9 +376,20 @@ 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._amqClient = org.argeo.ria.remote.JmsClient.getInstance(); - this._amqClient.uri = "/org.argeo.slc.webapp/amq"; - this._amqClient.startPolling(); + 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 : "; }, @@ -385,15 +400,11 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet", load : function(){ this._createLayout(); this.getView().setViewTitle("Execution Launcher"); - var reloadHandler = function(message){ - // 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.reloadHandler = function(message){ + this.rootNode.reload(); } - this._amqClient.addListener("agentregister", "topic://agent.register", reloadHandler, this); - this._amqClient.addListener("agentunregister", "topic://agent.unregister", reloadHandler, this); - //reloadHandler(); + this.UIBus.addListener("agentRegistered", this.reloadHandler, this); + this.UIBus.addListener("agentUnregistered", this.reloadHandler, this); }, addScroll : function(){ @@ -401,11 +412,9 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet", }, close : function(){ - this._amqClient.removeListener("agentregister", "topic://agent.register"); - this._amqClient.removeListener("agentunregister", "topic://agent.unregister"); - this._amqClient.removeListener("modulesResponse", "topic://modulesManager.response"); - this.setRegisteredAgents({}); - this._amqClient.stopPolling(); + this.UIBus.removeListener("agentRegistered", this.reloadHandler, this); + this.UIBus.removeListener("agentUnregistered", this.reloadHandler, this); + this.remoteNotifier.stopPolling(); }, /** @@ -423,15 +432,16 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet", 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( @@ -459,7 +469,7 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet", var toolGroup = new qx.ui.toolbar.Part(); listToolBar.add(toolGroup); - this.batchLabel = new qx.ui.basic.Atom(this._emptyAgentString, "resource/slc/mime-xsl.png"); + 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){ @@ -531,8 +541,10 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet", 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._addFlowToBatch(target, afterItem); }, this); this.listPane.add(this.list, {edge:"center"}); @@ -562,26 +574,34 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet", * @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){ - - // Empty or list target - if(!target){ - target = this.tree.getSelectedItem(); - if(!target) return; - }else if(target.classname == "qx.ui.form.ListItem"){ + _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; } - // Folder case, not really working yet. + if(!target){ + if(this.tree.isSelectionEmpty()){ + return; + } + selection = this.tree.getSelection(); + if(selection.length > 1){ + for(var i=0;i