]>
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.
28 * Commands definition, see {@link org.argeo.ria.event.CommandsManager#definitions}
34 icon
: "resource/slc/media-playback-start.png",
35 shortcut
: "Control+e",
39 callback : function(e
){
45 label
: "Reload Agents",
46 icon
: "resource/slc/view-refresh.png",
47 shortcut
: "Control+r",
51 callback : function(e
){
52 var req
= org
.argeo
.slc
.ria
.SlcApi
.getListAgentsService("agents");
62 event
: "changeRegisteredTopics"
69 * Called at applet creation. Just registers viewPane.
70 * @param viewPane {org.argeo.ria.components.ViewPane} The viewPane.
72 init : function(viewPane
){
73 this.setView(viewPane
);
76 this._amqClient
= org
.argeo
.ria
.remote
.JmsClient
.getInstance();
77 this._amqClient
.startPolling();
84 this.getView().setViewTitle("Execution Launcher");
85 this.addListener("changeRegisteredTopics", function(event
){
86 this._refreshTopicsSubscriptions(event
);
87 this._feedSelector(event
);
89 var reloadHandler = function(message
){
90 // Delay reload to be sure the jms was first integrated by the db, then ask the db.
91 qx
.event
.Timer
.once(function(){
92 org
.argeo
.ria
.event
.CommandsManager
.getInstance().getCommandById("reloadagents").execute();
95 this._amqClient
.addListener("agentregister", "topic://agent.register", reloadHandler
, this);
96 this._amqClient
.addListener("agentunregister", "topic://agent.unregister", reloadHandler
, this);
100 addScroll : function(){
105 this._amqClient
.removeListener("agentregister", "topic://agent.register");
106 this._amqClient
.removeListener("agentunregister", "topic://agent.unregister");
108 this.setRegisteredTopics({});
109 this._amqClient
.stopPolling();
112 _createLayout : function(){
113 this.formPane
= new qx
.ui
.container
.Composite(new qx
.ui
.layout
.VBox(5));
114 this.scroll
= new qx
.ui
.container
.Scroll(this.formPane
);
115 this.formPane
.setPadding(10);
116 this.add(this.scroll
, {edge
:'center'});
120 _createForm : function(){
122 this.hiddenFields
= {};
123 this.freeFields
= [];
125 var execButtonPane
= new qx
.ui
.container
.Composite(new qx
.ui
.layout
.Dock());
126 var execButton
= new qx
.ui
.form
.Button(
128 "resource/slc/media-playback-start-32.png"
130 execButton
.addListener("click", function(){
133 execButtonPane
.setPadding(10, 80);
134 execButtonPane
.add(execButton
, {edge
:"center"});
135 this.formPane
.add(execButtonPane
);
137 this.agentSelector
= new qx
.ui
.form
.SelectBox();
138 var serviceManager
= org
.argeo
.ria
.remote
.RequestManager
.getInstance();
139 serviceManager
.addListener("reload", function(reloadEvent
){
140 if(reloadEvent
.getDataType()!= "agents") return ;
141 var xmlDoc
= reloadEvent
.getContent();
142 var nodes
= org
.argeo
.ria
.util
.Element
.selectNodes(xmlDoc
, "//slc:slc-agent-descriptor");
144 for(var i
=0;i
<nodes
.length
;i
++){
145 var uuid
= org
.argeo
.ria
.util
.Element
.getSingleNodeText(nodes
[i
], "@uuid");
146 var host
= org
.argeo
.ria
.util
.Element
.getSingleNodeText(nodes
[i
], "slc:host");
147 newTopics
[uuid
] = host
+" ("+uuid
+")";
149 this.setRegisteredTopics(newTopics
);
152 var commonForm
= {pane
:this.formPane
};
153 this._addFormHeader(commonForm
, this.COMMON_FORM_HEADER_LABEL
);
154 this._addFormEntry(commonForm
, new qx
.ui
.basic
.Label(this.CHOOSE_AGENT_LABEL
), this.agentSelector
);
155 this._createFormVariableParts();
156 if(!this.parts
) return;
157 if(qx
.lang
.Object
.getLength(this.parts
) > 1){
159 this.partChooser
= new qx
.ui
.form
.SelectBox();
160 for(var key
in this.parts
){
161 this.partChooser
.add(new qx
.ui
.form
.ListItem(this.parts
[key
].label
, null, key
));
163 this._addFormEntry(commonForm
, new qx
.ui
.basic
.Label(this.CHOOSE_FORM_PART_LABEL
), this.partChooser
);
164 this.partChooser
.addListener("changeValue", function(ev
){
165 this._showSelectedPart(ev
.getData());
168 this._showSelectedPart(qx
.lang
.Object
.getKeys(this.parts
)[0]);
171 _showSelectedPart : function(partId
){
172 if(!this.parts
) return;
173 if(!this.partsContainer
){
174 this.partsContainer
= new qx
.ui
.container
.Composite(new qx
.ui
.layout
.Canvas());
175 this.formPane
.add(this.partsContainer
);
177 for(var i
in this.parts
){
178 var formObject
= this.parts
[i
];
179 if(!formObject
.added
){
180 this.partsContainer
.add(formObject
.pane
, {top
:0, left
:0});
181 formObject
.added
= true;
183 formObject
.pane
.hide();
185 if(this.parts
[partId
]){
186 this.parts
[partId
].pane
.show();
190 _initFormPart : function(formId
, label
){
191 if(!this.parts
) this.parts
= {};
193 formObject
.hiddenFields
= {};
194 formObject
.freeFields
= [];
195 formObject
.fields
= {};
196 formObject
.id
= formId
;
197 formObject
.label
= label
;
198 this.parts
[formId
] = formObject
;
199 formObject
.pane
= new qx
.ui
.container
.Composite(new qx
.ui
.layout
.VBox(5));
203 _createFormVariableParts : function(){
204 var standard
= this._initFormPart("standard", "Canonical");
205 this._createStandardForm(standard
);
206 var simple
= this._initFormPart("simple", "SLC Sample");
207 this._createSimpleForm(simple
);
210 _createSimpleForm : function(formObject
){
212 this._addFormInputText(formObject
, "ant.file", "File", "Category1/SubCategory2/build.xml");
213 var moreButton
= new qx
.ui
.basic
.Image("resource/slc/list-add.png");
214 moreButton
.setToolTip(new qx
.ui
.tooltip
.ToolTip("Add a parameter"));
215 moreButton
.setCursor("pointer");
216 moreButton
.addListener("click", function(){
217 this._addFormInputText();
219 this._addFormHeader(formObject
, "Add optionnal parameters", moreButton
);
220 this._addFormInputText(formObject
);
221 this._addFormInputText(formObject
);
225 _createStandardForm : function(formObject
){
227 this._addFormHeader(formObject
, "Set Execution Parameters");
228 this._addFormInputText(formObject
, "status", "Status", "STARTED");
229 this._addFormInputText(formObject
, "host", "Host", "localhost");
230 this._addFormInputText(formObject
, "user", "User", "user");
232 var moreButton
= new qx
.ui
.basic
.Image("resource/slc/list-add.png");
233 moreButton
.setToolTip(new qx
.ui
.tooltip
.ToolTip("Add a parameter"));
234 moreButton
.setCursor("pointer");
235 moreButton
.addListener("click", function(){
236 this._addFormInputText();
238 this._addFormHeader(formObject
, "Add optionnal parameters", moreButton
);
239 this._addFormInputText(formObject
);
240 this._addFormInputText(formObject
);
243 _addFormHiddenField : function(formObject
, fieldName
, fieldValue
){
244 formObject
.hiddenFields
[fieldName
] = fieldValue
;
247 _addFormInputText : function(formObject
, fieldName
, fieldLabel
, defaultValue
, choiceValues
){
250 var fieldElement
= new qx
.ui
.form
.SelectBox();
251 for(var key
in choiceValues
){
252 fieldElement
.add(new qx
.ui
.form
.ListItem(choiceValues
[key
], null, key
));
255 var fieldElement
= new qx
.ui
.form
.TextField();
258 fieldElement
.setValue(defaultValue
);
260 if(fieldName
&& fieldLabel
){
261 labelElement
= new qx
.ui
.basic
.Label(fieldLabel
);
262 formObject
.fields
[fieldName
] = fieldElement
;
264 labelElement
= new qx
.ui
.form
.TextField();
265 formObject
.freeFields
.push({
266 labelEl
:labelElement
,
270 this._addFormEntry(formObject
, labelElement
, fieldElement
);
273 _addFormHeader : function(formObject
, content
, additionnalButton
){
274 var header
= new qx
.ui
.basic
.Label('<b>'+content
+'</b>');
275 header
.setRich(true);
276 if(!additionnalButton
){
277 header
.setPaddingTop(10);
278 formObject
.pane
.add(header
);
280 var pane
= new qx
.ui
.container
.Composite(new qx
.ui
.layout
.Dock());
281 pane
.setPaddingTop(10);
282 pane
.setPaddingRight(10);
283 pane
.add(header
, {edge
:'center'});
284 pane
.add(additionnalButton
, {edge
:'east'});
285 formObject
.pane
.add(pane
);
289 _addFormEntry : function(formObject
, labelElement
, fieldElement
){
290 var entryPane
= new qx
.ui
.container
.Composite(new qx
.ui
.layout
.HBox(5));
291 labelElement
.setWidth(100);
292 labelElement
.setTextAlign("right");
293 entryPane
.add(labelElement
);
294 entryPane
.add(new qx
.ui
.basic
.Label(':'));
295 fieldElement
.setWidth(150);
296 entryPane
.add(fieldElement
);
297 formObject
.pane
.add(entryPane
);
300 _refreshTopicsSubscriptions : function(changeTopicsEvent
){
301 var oldTopics
= changeTopicsEvent
.getOldData() || {};
302 var newTopics
= changeTopicsEvent
.getData();
305 for(var key
in oldTopics
){
306 if(!newTopics
[key
]) {
307 //this._removeAmqListener(key);
310 for(var key
in newTopics
){
311 if(!oldTopics
[key
]) {
312 //this._addAmqListener(key);
317 _feedSelector : function(changeTopicsEvent
){
318 var topics
= changeTopicsEvent
.getData();
319 this.agentSelector
.removeAll();
320 var emptyItem
= new qx
.ui
.form
.ListItem("", null, "");
321 this.agentSelector
.add(emptyItem
);
322 this.agentSelector
.setSelected(emptyItem
);
323 for(var key
in topics
){
324 var listItem
= new qx
.ui
.form
.ListItem(topics
[key
], null, key
);
325 this.agentSelector
.add(listItem
);
329 _addAmqListener: function(uuid
){
330 this._amqClient
.addListener("slcExec", "topic://agent."+uuid
+".newExecution", function(response
){
331 var message
= org
.argeo
.ria
.util
.Element
.selectSingleNode(response
, "slc:slc-execution");
332 var slcExec
= new org
.argeo
.slc
.ria
.SlcExecutionMessage(message
.getAttribute("uuid"));
333 slcExec
.fromXml(message
);
334 this.logModel
.addRows([
335 [new Date().toString(), slcExec
.getHost()+' ('+slcExec
.getUuid()+')', slcExec
.getStatus()]
340 _removeAmqListener : function(uuid
){
341 this._amqClient
.removeListener("slcExec", "topic://agent."+uuid
+".newExecution");
344 _prepareSlcExecutionMessage : function(crtPartId
, slcExec
, fields
, hiddenFields
, freeFields
){
345 if(crtPartId
== "standard"){
346 slcExec
.setStatus(fields
.status
.getValue());
347 slcExec
.setHost(fields
.host
.getValue());
348 slcExec
.setUser(fields
.user
.getValue());
350 slcExec
.addAttribute("ant.file", fields
["ant.file"].getValue());
352 for(var i
=0;i
<freeFields
.length
;i
++){
353 var fF
= freeFields
[i
];
354 if(fF
.labelEl
.getValue() != "" && fF
.valueEl
.getValue() != ""){
355 slcExec
.addAttribute(fF
.labelEl
.getValue(), fF
.valueEl
.getValue());
360 submitForm : function(){
361 var currentUuid
= this.agentSelector
.getValue();
362 if(!currentUuid
) return;
363 var slcExec
= new org
.argeo
.slc
.ria
.SlcExecutionMessage(currentUuid
);
366 var hiddenFields
= {};
370 if(this.partChooser
){
371 crtPartId
= this.partChooser
.getValue();
373 crtPartId
= qx
.lang
.Object
.getKeys(this.parts
)[0];
375 var crtPart
= this.parts
[crtPartId
];
376 fields
= crtPart
.fields
;
377 hiddenFields
= crtPart
.hiddenFields
;
378 freeFields
= crtPart
.freeFields
;
381 this._prepareSlcExecutionMessage(crtPartId
, slcExec
, fields
, hiddenFields
, freeFields
);
383 var destination
= "topic://agent."+currentUuid
+".newExecution";
384 this._amqClient
.sendMessage(destination
, slcExec
.toXml());
385 // Force logs refresh right now!
386 qx
.event
.Timer
.once(function(){
387 var command
= org
.argeo
.ria
.event
.CommandsManager
.getInstance().getCommandById("reloadlogs");