]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc.webapp/src/main/webapp/argeo-ria-lib/slc/class/org/argeo/slc/ria/LauncherApplet.js
First run of using AmqClient to listen to agent queues. Working good, make a try...
[gpl/argeo-slc.git] / org.argeo.slc.webapp / src / main / webapp / argeo-ria-lib / slc / class / org / argeo / slc / ria / LauncherApplet.js
1 /**
2 * A simple Hello World applet for documentation purpose.
3 * The only associated command is the "Close" command.
4 */
5 qx.Class.define("org.argeo.slc.ria.LauncherApplet",
6 {
7 extend : qx.ui.container.Composite,
8 implement : [org.argeo.ria.components.IView],
9
10 construct : function(){
11 this.base(arguments);
12 this.setLayout(new qx.ui.layout.Dock());
13 },
14
15 properties :
16 {
17 /**
18 * The viewPane inside which this applet is added.
19 */
20 view : {
21 init : null
22 },
23 /**
24 * Commands definition, see {@link org.argeo.ria.event.CommandsManager#definitions}
25 */
26 commands : {
27 init : {
28 "submitform" : {
29 label : "Execute",
30 icon : "resource/slc/media-playback-start.png",
31 shortcut : "Control+e",
32 enabled : true,
33 menu : "Launcher",
34 toolbar : "launcher",
35 callback : function(e){
36 this.getView().getContent().submitForm();
37 },
38 command : null
39 },
40 "reloadagents" : {
41 label : "Reload Agents",
42 icon : "resource/slc/view-refresh.png",
43 shortcut : "Control+r",
44 enabled : true,
45 menu : "Launcher",
46 toolbar : "launcher",
47 callback : function(e){
48 var req = org.argeo.slc.ria.SlcApi.getListAgentsService("agents");
49 req.send();
50 },
51 command : null
52 }
53 }
54 }
55 },
56
57 members :
58 {
59 /**
60 * Called at applet creation. Just registers viewPane.
61 * @param viewPane {org.argeo.ria.components.ViewPane} The viewPane.
62 */
63 init : function(viewPane){
64 this.setView(viewPane);
65 this._createLayout();
66 this._createForm();
67 this._amqClient = new org.argeo.ria.remote.AmqClient();
68 this._amqClient.startPolling();
69 qx.io.remote.RequestQueue.getInstance().setDefaultTimeout(30000);
70 },
71
72 /**
73 * Load a given row : the data passed must be a simple data array.
74 * @param data {Element} The text xml description.
75 */
76 load : function(){
77 this.getView().setViewTitle("Slc Execution Launcher");
78 org.argeo.ria.event.CommandsManager.getInstance().getCommandById("reloadagents").execute();
79 },
80
81 addScroll : function(){
82 return false;
83 },
84
85 _createLayout : function(){
86 this.formPane = new qx.ui.container.Composite(new qx.ui.layout.VBox(5));
87 this.scroll = new qx.ui.container.Scroll(this.formPane);
88 this.scroll.setWidth(290);
89 this.formPane.setPadding(10);
90 this.add(this.scroll, {edge:'west'});
91
92 this.logModel = new qx.ui.table.model.Simple();
93 this.logModel.setColumns(["Date", "Agent Uuid", "Status", "Type"]);
94 this.logPane = new qx.ui.table.Table(this.logModel, {
95 tableColumnModel: function(obj){
96 return new qx.ui.table.columnmodel.Resize(obj)
97 }
98 });
99 this._initLogger();
100 this.add(this.logPane, {edge:'center'});
101 },
102
103 _initLogger : function(){
104 this.logPane.set({
105 statusBarVisible: false,
106 showCellFocusIndicator:false
107 });
108 var columnModel = this.logPane.getTableColumnModel();
109 columnModel.getBehavior().setWidth(2, "12%");
110 columnModel.getBehavior().setWidth(3, "12%");
111 },
112
113 _createForm : function(){
114 this.fields = {};
115 this.freeFields = [];
116
117 var execButtonPane = new qx.ui.container.Composite(new qx.ui.layout.Dock());
118 var execButton = new qx.ui.form.Button(
119 "Execute",
120 "resource/slc/media-playback-start-32.png"
121 )
122 execButton.addListener("click", function(){
123 this.submitForm();
124 }, this);
125 execButtonPane.setPadding(10, 80);
126 execButtonPane.add(execButton, {edge:"center"});
127 this.formPane.add(execButtonPane);
128
129 this.agentSelector = new qx.ui.form.SelectBox();
130 var serviceManager = org.argeo.ria.remote.RequestManager.getInstance();
131 serviceManager.addListener("reload", function(reloadEvent){
132 if(reloadEvent.getDataType()!= "agents") return ;
133 this._xmlListToSelector(reloadEvent.getContent(), this.agentSelector);
134 }, this);
135
136 this._addFormHeader("Choose Agent Uuid");
137 this._addFormEntry(new qx.ui.basic.Label("Agent Uuid"), this.agentSelector);
138 this._addFormHeader("Set SlcExecution Parameters");
139 this._addFormInputText("status", "Status", "STARTED");
140 this._addFormInputText("type", "Type", "slcAnt");
141 this._addFormInputText("host", "Host", "localhost");
142 this._addFormInputText("user", "User", "user");
143
144 var moreButton = new qx.ui.basic.Image("resource/slc/list-add.png");
145 moreButton.setToolTip(new qx.ui.tooltip.ToolTip("Add a parameter"));
146 moreButton.setCursor("pointer");
147 moreButton.addListener("click", function(){
148 this._addFormInputText();
149 }, this);
150 this._addFormHeader("Add optionnal parameters", moreButton);
151 this._addFormInputText();
152 this._addFormInputText();
153 },
154
155 _addFormInputText : function(fieldName, fieldLabel, defaultValue){
156 var labelElement;
157 var fieldElement = new qx.ui.form.TextField();
158 if(defaultValue){
159 fieldElement.setValue(defaultValue);
160 }
161 if(fieldName && fieldLabel){
162 labelElement = new qx.ui.basic.Label(fieldLabel);
163 this.fields[fieldName] = fieldElement;
164 }else{
165 labelElement = new qx.ui.form.TextField();
166 this.freeFields.push({
167 labelEl:labelElement,
168 valueEl:fieldElement
169 });
170 }
171 this._addFormEntry(labelElement, fieldElement);
172 },
173
174 _addFormHeader : function(content, additionnalButton){
175 var header = new qx.ui.basic.Label('<b>'+content+'</b>');
176 header.setRich(true);
177 if(!additionnalButton){
178 header.setPaddingTop(10);
179 this.formPane.add(header);
180 }else{
181 var pane = new qx.ui.container.Composite(new qx.ui.layout.Dock());
182 pane.setPaddingTop(10);
183 pane.setPaddingRight(10);
184 pane.add(header, {edge:'center'});
185 pane.add(additionnalButton, {edge:'east'});
186 this.formPane.add(pane);
187 }
188 },
189
190 _addFormEntry : function(labelElement, fieldElement){
191 var entryPane = new qx.ui.container.Composite(new qx.ui.layout.HBox(5));
192 labelElement.setWidth(100);
193 labelElement.setTextAlign("right");
194 entryPane.add(labelElement);
195 entryPane.add(new qx.ui.basic.Label(':'));
196 fieldElement.setWidth(150);
197 entryPane.add(fieldElement);
198 this.formPane.add(entryPane);
199 },
200
201 _xmlListToSelector : function(xmlDoc, selector){
202 selector.removeAll();
203 var NSMap = {slc:"http://argeo.org/projects/slc/schemas"};
204 var nodes = org.argeo.ria.util.Element.selectNodes(xmlDoc, "//slc:slc-agent-descriptor", NSMap);
205 for(var i=0;i<nodes.length;i++){
206 var uuid = org.argeo.ria.util.Element.getSingleNodeText(nodes[i], "@uuid", NSMap);
207 var host = org.argeo.ria.util.Element.getSingleNodeText(nodes[i], "slc:host", NSMap);
208 var listItem = new qx.ui.form.ListItem(uuid+' ('+host+')', null, uuid);
209 selector.add(listItem);
210 this._addAmqListenerDeferred(uuid, i);
211 }
212 },
213
214 _addAmqListenerDeferred: function(uuid, index){
215 qx.event.Timer.once(function(){
216 this._amqClient.addListener("launcherId", "topic://agent."+uuid+".newExecution", function(message){
217 this.info("Received message!");
218 var slcExec = new org.argeo.slc.ria.SlcExecutionMessage(message.getAttribute("uuid"));
219 slcExec.fromXml(message);
220 this.logModel.addRows([
221 [new Date().toString(), slcExec.getUuid(), slcExec.getStatus(), slcExec.getType()]
222 ]);
223 }, this);
224 }, this, 500*index);
225 },
226
227 submitForm : function(){
228 var currentUuid = this.agentSelector.getValue();
229 if(!currentUuid) return;
230 var slcExec = new org.argeo.slc.ria.SlcExecutionMessage(currentUuid);
231 slcExec.setStatus(this.fields.status.getValue());
232 slcExec.setType(this.fields.type.getValue());
233 slcExec.setHost(this.fields.host.getValue());
234 slcExec.setUser(this.fields.user.getValue());
235 for(var i=0;i<this.freeFields.length;i++){
236 var fF = this.freeFields[i];
237 if(fF.labelEl.getValue() != "" && fF.valueEl.getValue() != ""){
238 slcExec.addAttribute(fF.labelEl.getValue(), fF.valueEl.getValue());
239 }
240 }
241 var destination = "topic://agent."+currentUuid+".newExecution";
242 this._amqClient.sendMessage(destination, slcExec.toXml());
243 }
244
245 }
246 });