]> 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
Agent Launcher implementation
[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 "close" : {
54 label : "Close",
55 icon : "resource/slc/window-close.png",
56 shortcut : "Control+w",
57 enabled : true,
58 menu : "Launcher",
59 toolbar : "launcher",
60 callback : function(e){
61 // Call service to delete
62 this.getView().empty();
63 },
64 command : null
65 }
66 }
67 }
68 },
69
70 members :
71 {
72 /**
73 * Called at applet creation. Just registers viewPane.
74 * @param viewPane {org.argeo.ria.components.ViewPane} The viewPane.
75 */
76 init : function(viewPane){
77 this.setView(viewPane);
78 this._createLayout();
79 this._createForm();
80 },
81
82 /**
83 * Load a given row : the data passed must be a simple data array.
84 * @param data {Element} The text xml description.
85 */
86 load : function(){
87 this.getView().setViewTitle("Slc Execution Launcher");
88 org.argeo.ria.event.CommandsManager.getInstance().getCommandById("reloadagents").execute();
89 },
90
91 addScroll : function(){
92 return false;
93 },
94
95 _createLayout : function(){
96 this.formPane = new qx.ui.container.Composite(new qx.ui.layout.VBox(5));
97 this.scroll = new qx.ui.container.Scroll(this.formPane);
98 this.scroll.setWidth(290);
99 this.formPane.setPadding(10);
100 this.add(this.scroll, {edge:'west'});
101
102 this.logModel = new qx.ui.table.model.Simple();
103 this.logModel.setColumns(["Date", "Agent Uuid", "Status", "Type"]);
104 this.logPane = new qx.ui.table.Table(this.logModel, {
105 tableColumnModel: function(obj){
106 return new qx.ui.table.columnmodel.Resize(obj)
107 }
108 });
109 this._initLogger();
110 this.add(this.logPane, {edge:'center'});
111 },
112
113 _initLogger : function(){
114 this.logPane.set({
115 statusBarVisible: false,
116 showCellFocusIndicator:false
117 });
118 var columnModel = this.logPane.getTableColumnModel();
119 columnModel.getBehavior().setWidth(2, "12%");
120 columnModel.getBehavior().setWidth(3, "12%");
121 },
122
123 _createForm : function(){
124 this.fields = {};
125 this.freeFields = [];
126
127 var execButtonPane = new qx.ui.container.Composite(new qx.ui.layout.Dock());
128 var execButton = new qx.ui.form.Button(
129 "Execute",
130 "resource/slc/media-playback-start-32.png"
131 )
132 execButton.addListener("click", function(){
133 this.submitForm();
134 }, this);
135 execButtonPane.setPadding(10, 80);
136 execButtonPane.add(execButton, {edge:"center"});
137 this.formPane.add(execButtonPane);
138
139 this.agentSelector = new qx.ui.form.SelectBox();
140 var serviceManager = org.argeo.ria.remote.RequestManager.getInstance();
141 serviceManager.addListener("reload", function(reloadEvent){
142 if(reloadEvent.getDataType()!= "agents") return ;
143 this._xmlListToSelector(reloadEvent.getContent(), this.agentSelector);
144 }, this);
145
146 this._addFormHeader("Choose Agent Uuid");
147 this._addFormEntry(new qx.ui.basic.Label("Agent Uuid"), this.agentSelector);
148 this._addFormHeader("Set SlcExecution Parameters");
149 this._addFormInputText("status", "Status", "STARTED");
150 this._addFormInputText("type", "Type", "slcAnt");
151 this._addFormInputText("host", "Host", "localhost");
152 this._addFormInputText("user", "User", "user");
153
154 var moreButton = new qx.ui.basic.Image("resource/slc/list-add.png");
155 moreButton.setToolTip(new qx.ui.tooltip.ToolTip("Add a parameter"));
156 moreButton.setCursor("pointer");
157 moreButton.addListener("click", function(){
158 this._addFormInputText();
159 }, this);
160 this._addFormHeader("Add optionnal parameters", moreButton);
161 this._addFormInputText();
162 this._addFormInputText();
163 },
164
165 _addFormInputText : function(fieldName, fieldLabel, defaultValue){
166 var labelElement;
167 var fieldElement = new qx.ui.form.TextField();
168 if(defaultValue){
169 fieldElement.setValue(defaultValue);
170 }
171 if(fieldName && fieldLabel){
172 labelElement = new qx.ui.basic.Label(fieldLabel);
173 this.fields[fieldName] = fieldElement;
174 }else{
175 labelElement = new qx.ui.form.TextField();
176 this.freeFields.push({
177 labelEl:labelElement,
178 valueEl:fieldElement
179 });
180 }
181 this._addFormEntry(labelElement, fieldElement);
182 },
183
184 _addFormHeader : function(content, additionnalButton){
185 var header = new qx.ui.basic.Label('<b>'+content+'</b>');
186 header.setRich(true);
187 if(!additionnalButton){
188 header.setPaddingTop(10);
189 this.formPane.add(header);
190 }else{
191 var pane = new qx.ui.container.Composite(new qx.ui.layout.Dock());
192 pane.setPaddingTop(10);
193 pane.setPaddingRight(10);
194 pane.add(header, {edge:'center'});
195 pane.add(additionnalButton, {edge:'east'});
196 this.formPane.add(pane);
197 }
198 },
199
200 _addFormEntry : function(labelElement, fieldElement){
201 var entryPane = new qx.ui.container.Composite(new qx.ui.layout.HBox(5));
202 labelElement.setWidth(100);
203 labelElement.setTextAlign("right");
204 entryPane.add(labelElement);
205 entryPane.add(new qx.ui.basic.Label(':'));
206 fieldElement.setWidth(150);
207 entryPane.add(fieldElement);
208 this.formPane.add(entryPane);
209 },
210
211 _xmlListToSelector : function(xmlDoc, selector){
212 selector.removeAll();
213 var NSMap = {slc:"http://argeo.org/projects/slc/schemas"};
214 var nodes = org.argeo.ria.util.Element.selectNodes(xmlDoc, "//slc:slc-agent-descriptor", NSMap);
215 for(var i=0;i<nodes.length;i++){
216 var uuid = org.argeo.ria.util.Element.getSingleNodeText(nodes[i], "@uuid", NSMap);
217 var host = org.argeo.ria.util.Element.getSingleNodeText(nodes[i], "slc:host", NSMap);
218 var listItem = new qx.ui.form.ListItem(uuid+' ('+host+')', null, uuid);
219 selector.add(listItem);
220 }
221 },
222
223 submitForm : function(){
224 var currentUuid = this.agentSelector.getValue();
225 if(!currentUuid) return;
226 var slcExec = new org.argeo.slc.ria.SlcExecutionMessage(currentUuid);
227 slcExec.setStatus(this.fields.status.getValue());
228 slcExec.setType(this.fields.type.getValue());
229 slcExec.setHost(this.fields.host.getValue());
230 slcExec.setUser(this.fields.user.getValue());
231 for(var i=0;i<this.freeFields.length;i++){
232 var fF = this.freeFields[i];
233 if(fF.labelEl.getValue() != "" && fF.valueEl.getValue() != ""){
234 slcExec.addAttribute(fF.labelEl.getValue(), fF.valueEl.getValue());
235 }
236 }
237 var destination = "topic://agent."+currentUuid+".newExecution";
238 var req = org.argeo.slc.ria.SlcApi.getSendAmqMessageRequest(destination, slcExec);
239 req.addListener("completed", function(e){
240 this.logModel.addRows([
241 [new Date().toString(), slcExec.getUuid(), slcExec.getStatus(), slcExec.getType()]
242 ]);
243 }, this);
244 req.send();
245 }
246
247 }
248 });