]>
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
2 * A simple Hello World applet for documentation purpose.
3 * The only associated command is the "Close" command.
5 qx
.Class
.define("org.argeo.slc.ria.LauncherApplet",
7 extend
: qx
.ui
.container
.Composite
,
8 implement
: [org
.argeo
.ria
.components
.IView
],
10 construct : function(){
12 this.setLayout(new qx
.ui
.layout
.Dock());
14 this.COMMON_FORM_HEADER_LABEL
= "Choose Agent";
15 this.CHOOSE_AGENT_LABEL
= "Agent Uuid";
16 this.CHOOSE_FORM_PART_LABEL
= "Test Type";
22 * The viewPane inside which this applet is added.
29 check
:"org.argeo.ria.components.ViewSelection"
31 instanceId
: {init
:""},
32 instanceLabel
: {init
:""},
34 * Commands definition, see {@link org.argeo.ria.event.CommandsManager#definitions}
40 icon
: "resource/slc/media-playback-start.png",
41 shortcut
: "Control+e",
45 callback : function(e
){
51 label
: "Reload Agents",
52 icon
: "resource/slc/view-refresh.png",
53 shortcut
: "Control+r",
57 callback : function(e
){
58 var req
= org
.argeo
.slc
.ria
.SlcApi
.getListAgentsService("agents");
68 event
: "changeRegisteredTopics"
75 * Called at applet creation. Just registers viewPane.
76 * @param viewPane {org.argeo.ria.components.ViewPane} The viewPane.
78 init : function(viewPane
){
79 this.setView(viewPane
);
80 this.setViewSelection(new org
.argeo
.ria
.components
.ViewSelection(viewPane
.getViewId()));
83 this._amqClient
= org
.argeo
.ria
.remote
.JmsClient
.getInstance();
84 this._amqClient
.startPolling();
91 this.getView().setViewTitle("Execution Launcher");
92 this.addListener("changeRegisteredTopics", function(event
){
93 this._refreshTopicsSubscriptions(event
);
94 this._feedSelector(event
);
96 var reloadHandler = function(message
){
97 // Delay reload to be sure the jms was first integrated by the db, then ask the db.
98 qx
.event
.Timer
.once(function(){
99 org
.argeo
.ria
.event
.CommandsManager
.getInstance().getCommandById("reloadagents").execute();
102 this._amqClient
.addListener("agentregister", "topic://agent.register", reloadHandler
, this);
103 this._amqClient
.addListener("agentunregister", "topic://agent.unregister", reloadHandler
, this);
107 addScroll : function(){
112 this._amqClient
.removeListener("agentregister", "topic://agent.register");
113 this._amqClient
.removeListener("agentunregister", "topic://agent.unregister");
115 this.setRegisteredTopics({});
116 this._amqClient
.stopPolling();
119 _createLayout : function(){
120 this.formPane
= new qx
.ui
.container
.Composite(new qx
.ui
.layout
.VBox(5));
121 this.scroll
= new qx
.ui
.container
.Scroll(this.formPane
);
122 this.formPane
.setPadding(10);
123 this.add(this.scroll
, {edge
:'center'});
127 _createForm : function(){
129 this.hiddenFields
= {};
130 this.freeFields
= [];
132 var execButtonPane
= new qx
.ui
.container
.Composite(new qx
.ui
.layout
.Dock());
133 var execButton
= new qx
.ui
.form
.Button(
135 "resource/slc/media-playback-start-32.png"
137 execButton
.addListener("click", function(){
140 execButtonPane
.setPadding(10, 80);
141 execButtonPane
.add(execButton
, {edge
:"center"});
142 this.formPane
.add(execButtonPane
);
144 this.agentSelector
= new qx
.ui
.form
.SelectBox();
145 var serviceManager
= org
.argeo
.ria
.remote
.RequestManager
.getInstance();
146 serviceManager
.addListener("reload", function(reloadEvent
){
147 if(reloadEvent
.getDataType()!= "agents") return ;
148 var xmlDoc
= reloadEvent
.getContent();
149 var nodes
= org
.argeo
.ria
.util
.Element
.selectNodes(xmlDoc
, "//slc:slc-agent-descriptor");
151 for(var i
=0;i
<nodes
.length
;i
++){
152 var uuid
= org
.argeo
.ria
.util
.Element
.getSingleNodeText(nodes
[i
], "@uuid");
153 var host
= org
.argeo
.ria
.util
.Element
.getSingleNodeText(nodes
[i
], "slc:host");
154 newTopics
[uuid
] = host
+" ("+uuid
+")";
156 this.setRegisteredTopics(newTopics
);
159 var commonForm
= {pane
:this.formPane
};
160 this._addFormHeader(commonForm
, this.COMMON_FORM_HEADER_LABEL
);
161 this._addFormEntry(commonForm
, new qx
.ui
.basic
.Label(this.CHOOSE_AGENT_LABEL
), this.agentSelector
);
162 this._createFormVariableParts();
163 if(!this.parts
) return;
164 if(qx
.lang
.Object
.getLength(this.parts
) > 1){
166 this.partChooser
= new qx
.ui
.form
.SelectBox();
167 for(var key
in this.parts
){
168 this.partChooser
.add(new qx
.ui
.form
.ListItem(this.parts
[key
].label
, null, key
));
170 this._addFormEntry(commonForm
, new qx
.ui
.basic
.Label(this.CHOOSE_FORM_PART_LABEL
), this.partChooser
);
171 this.partChooser
.addListener("changeValue", function(ev
){
172 this._showSelectedPart(ev
.getData());
175 this._showSelectedPart(qx
.lang
.Object
.getKeys(this.parts
)[0]);
178 _showSelectedPart : function(partId
){
179 if(!this.parts
) return;
180 if(!this.partsContainer
){
181 this.partsContainer
= new qx
.ui
.container
.Composite(new qx
.ui
.layout
.Canvas());
182 this.formPane
.add(this.partsContainer
);
184 for(var i
in this.parts
){
185 var formObject
= this.parts
[i
];
186 if(!formObject
.added
){
187 this.partsContainer
.add(formObject
.pane
, {top
:0, left
:0});
188 formObject
.added
= true;
190 formObject
.pane
.hide();
192 if(this.parts
[partId
]){
193 this.parts
[partId
].pane
.show();
197 _initFormPart : function(formId
, label
){
198 if(!this.parts
) this.parts
= {};
200 formObject
.hiddenFields
= {};
201 formObject
.freeFields
= [];
202 formObject
.fields
= {};
203 formObject
.id
= formId
;
204 formObject
.label
= label
;
205 this.parts
[formId
] = formObject
;
206 formObject
.pane
= new qx
.ui
.container
.Composite(new qx
.ui
.layout
.VBox(5));
210 _createFormVariableParts : function(){
211 var standard
= this._initFormPart("standard", "Canonical");
212 this._createStandardForm(standard
);
213 var simple
= this._initFormPart("simple", "SLC Sample");
214 this._createSimpleForm(simple
);
217 _createSimpleForm : function(formObject
){
219 this._addFormInputText(formObject
, "ant.file", "File", "Category1/SubCategory2/build.xml");
220 var moreButton
= new qx
.ui
.basic
.Image("resource/slc/list-add.png");
221 moreButton
.setToolTip(new qx
.ui
.tooltip
.ToolTip("Add a parameter"));
222 moreButton
.setCursor("pointer");
223 moreButton
.addListener("click", function(){
224 this._addFormInputText();
226 this._addFormHeader(formObject
, "Add optionnal parameters", moreButton
);
227 this._addFormInputText(formObject
);
228 this._addFormInputText(formObject
);
232 _createStandardForm : function(formObject
){
234 this._addFormHeader(formObject
, "Set Execution Parameters");
235 this._addFormInputText(formObject
, "status", "Status", "STARTED");
236 this._addFormInputText(formObject
, "host", "Host", "localhost");
237 this._addFormInputText(formObject
, "user", "User", "user");
239 var moreButton
= new qx
.ui
.basic
.Image("resource/slc/list-add.png");
240 moreButton
.setToolTip(new qx
.ui
.tooltip
.ToolTip("Add a parameter"));
241 moreButton
.setCursor("pointer");
242 moreButton
.addListener("click", function(){
243 this._addFormInputText();
245 this._addFormHeader(formObject
, "Add optionnal parameters", moreButton
);
246 this._addFormInputText(formObject
);
247 this._addFormInputText(formObject
);
250 _addFormHiddenField : function(formObject
, fieldName
, fieldValue
){
251 formObject
.hiddenFields
[fieldName
] = fieldValue
;
254 _addFormInputText : function(formObject
, fieldName
, fieldLabel
, defaultValue
, choiceValues
){
257 var fieldElement
= new qx
.ui
.form
.SelectBox();
258 for(var key
in choiceValues
){
259 fieldElement
.add(new qx
.ui
.form
.ListItem(choiceValues
[key
], null, key
));
262 var fieldElement
= new qx
.ui
.form
.TextField();
265 fieldElement
.setValue(defaultValue
);
267 if(fieldName
&& fieldLabel
){
268 labelElement
= new qx
.ui
.basic
.Label(fieldLabel
);
269 formObject
.fields
[fieldName
] = fieldElement
;
271 labelElement
= new qx
.ui
.form
.TextField();
272 formObject
.freeFields
.push({
273 labelEl
:labelElement
,
277 this._addFormEntry(formObject
, labelElement
, fieldElement
);
280 _addFormHeader : function(formObject
, content
, additionnalButton
){
281 var header
= new qx
.ui
.basic
.Label('<b>'+content
+'</b>');
282 header
.setRich(true);
283 if(!additionnalButton
){
284 header
.setPaddingTop(10);
285 formObject
.pane
.add(header
);
287 var pane
= new qx
.ui
.container
.Composite(new qx
.ui
.layout
.Dock());
288 pane
.setPaddingTop(10);
289 pane
.setPaddingRight(10);
290 pane
.add(header
, {edge
:'center'});
291 pane
.add(additionnalButton
, {edge
:'east'});
292 formObject
.pane
.add(pane
);
296 _addFormEntry : function(formObject
, labelElement
, fieldElement
){
297 var entryPane
= new qx
.ui
.container
.Composite(new qx
.ui
.layout
.HBox(5));
298 labelElement
.setWidth(100);
299 labelElement
.setTextAlign("right");
300 entryPane
.add(labelElement
);
301 entryPane
.add(new qx
.ui
.basic
.Label(':'));
302 fieldElement
.setWidth(150);
303 entryPane
.add(fieldElement
);
304 formObject
.pane
.add(entryPane
);
307 _refreshTopicsSubscriptions : function(changeTopicsEvent
){
308 var oldTopics
= changeTopicsEvent
.getOldData() || {};
309 var newTopics
= changeTopicsEvent
.getData();
312 for(var key
in oldTopics
){
313 if(!newTopics
[key
]) {
314 //this._removeAmqListener(key);
317 for(var key
in newTopics
){
318 if(!oldTopics
[key
]) {
319 //this._addAmqListener(key);
324 _feedSelector : function(changeTopicsEvent
){
325 var topics
= changeTopicsEvent
.getData();
326 this.agentSelector
.removeAll();
327 var emptyItem
= new qx
.ui
.form
.ListItem("", null, "");
328 this.agentSelector
.add(emptyItem
);
329 this.agentSelector
.setSelected(emptyItem
);
330 for(var key
in topics
){
331 var listItem
= new qx
.ui
.form
.ListItem(topics
[key
], null, key
);
332 this.agentSelector
.add(listItem
);
336 _addAmqListener: function(uuid
){
337 this._amqClient
.addListener("slcExec", "topic://agent."+uuid
+".newExecution", function(response
){
338 var message
= org
.argeo
.ria
.util
.Element
.selectSingleNode(response
, "slc:slc-execution");
339 var slcExec
= new org
.argeo
.slc
.ria
.SlcExecutionMessage(message
.getAttribute("uuid"));
340 slcExec
.fromXml(message
);
341 this.logModel
.addRows([
342 [new Date().toString(), slcExec
.getHost()+' ('+slcExec
.getUuid()+')', slcExec
.getStatus()]
347 _removeAmqListener : function(uuid
){
348 this._amqClient
.removeListener("slcExec", "topic://agent."+uuid
+".newExecution");
351 _prepareSlcExecutionMessage : function(crtPartId
, slcExec
, fields
, hiddenFields
, freeFields
){
352 if(crtPartId
== "standard"){
353 slcExec
.setStatus(fields
.status
.getValue());
354 slcExec
.setHost(fields
.host
.getValue());
355 slcExec
.setUser(fields
.user
.getValue());
357 slcExec
.addAttribute("ant.file", fields
["ant.file"].getValue());
359 for(var i
=0;i
<freeFields
.length
;i
++){
360 var fF
= freeFields
[i
];
361 if(fF
.labelEl
.getValue() != "" && fF
.valueEl
.getValue() != ""){
362 slcExec
.addAttribute(fF
.labelEl
.getValue(), fF
.valueEl
.getValue());
367 submitForm : function(){
368 var currentUuid
= this.agentSelector
.getValue();
369 if(!currentUuid
) return;
370 var slcExec
= new org
.argeo
.slc
.ria
.SlcExecutionMessage();
373 var hiddenFields
= {};
377 if(this.partChooser
){
378 crtPartId
= this.partChooser
.getValue();
380 crtPartId
= qx
.lang
.Object
.getKeys(this.parts
)[0];
382 var crtPart
= this.parts
[crtPartId
];
383 fields
= crtPart
.fields
;
384 hiddenFields
= crtPart
.hiddenFields
;
385 freeFields
= crtPart
.freeFields
;
388 this._prepareSlcExecutionMessage(crtPartId
, slcExec
, fields
, hiddenFields
, freeFields
);
390 var destination
= "topic://agent."+currentUuid
+".newExecution";
391 this._amqClient
.sendMessage(destination
, slcExec
.toXml());
392 // Force logs refresh right now!
393 qx
.event
.Timer
.once(function(){
394 var command
= org
.argeo
.ria
.event
.CommandsManager
.getInstance().getCommandById("reloadlogs");