]>
git.argeo.org Git - gpl/argeo-slc.git/blob - server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/SlcExecLoggerApplet.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.SlcExecLoggerApplet",
7 extend
: qx
.ui
.container
.Composite
,
8 implement
: [org
.argeo
.ria
.components
.IView
],
10 construct : function(){
12 this.setLayout(new qx
.ui
.layout
.Dock());
18 * The viewPane inside which this applet is added.
25 check
:"org.argeo.ria.components.ViewSelection"
27 instanceId
: {init
:""},
28 instanceLabel
: {init
:""},
30 * Commands definition, see {@link org.argeo.ria.event.CommandsManager#definitions}
35 label
: "Reload Logs",
36 icon
: "org.argeo.slc.ria/view-refresh.png",
37 shortcut
: "Control+r",
41 callback : function(e
){
47 label
: "Logs Detail",
48 icon
: "org.argeo.slc.ria/mime-xls.png",
53 callback : function(e
){
54 var selection
= this.getViewSelection();
55 var rowData
= selection
.getNodes()[0];
56 this.openDetail(rowData
);
58 selectionChange : function(viewId
, selection
){
59 if(viewId
!= "logger") return;
60 this.setEnabled((selection
!=null && selection
.length
==1));
66 icon
: "org.argeo.slc.ria/document-open.png",
67 shortcut
: "Control+o",
71 callback : function(e
){
72 var selection
= this.getViewSelection();
73 var rowData
= selection
.getNodes()[0];
74 this.openRealized(rowData
);
76 selectionChange : function(viewId
, selection
){
77 if(viewId
!= "logger") return;
78 this.setEnabled((selection
!=null && selection
.length
==1));
89 * Called at applet creation. Just registers viewPane.
90 * @param viewPane {org.argeo.ria.components.ViewPane} The viewPane.
92 init : function(viewPane
){
93 this.setView(viewPane
);
94 this.setViewSelection(new org
.argeo
.ria
.components
.ViewSelection(viewPane
.getViewId()));
96 this.UIBus
= org
.argeo
.ria
.event
.UIBus
.getInstance();
103 this._reloadLogger();
104 this.UIBus
.addListener("newSlcExecution", this._reloadLogger
, this);
105 this.UIBus
.addListener("updateSlcExecutionStatus", this._reloadLogger
, this);
108 addScroll : function(){
113 this.UIBus
.removeListener("newSlcExecution", this._reloadLogger
, this);
114 this.UIBus
.removeListener("updateSlcExecutionStatus", this._reloadLogger
, this);
117 openRealized : function(logData
){
120 var CHECK_HOST
= false;
122 var uuid
= logData
[2];
123 var host
= logData
[1];
126 // 1. Check that both associated views are here
130 batchView
= org
.argeo
.ria
.components
.ViewsManager
.getInstance().getViewPaneById("batch").getContent();
131 flowsView
= org
.argeo
.ria
.components
.ViewsManager
.getInstance().getViewPaneById("selector").getContent();
133 this.debug("Cannot find either bath or flows IView!");
135 if(!batchView
|| !flowsView
) return;
137 // 2. Check that at least a host with the same name exists.
138 var agentsMap
= flowsView
.getAgentsMap();
139 var currentBatchId
= batchView
.getBatchAgentId();
140 if(currentBatchId
!= null){
141 var currentHost
= agentsMap
[currentBatchId
];
142 if(currentHost
!= host
){
143 this.error("Cannot re-open these flows on a different host. Please clear the batch first.");
147 if(!qx
.lang
.Object
.contains(agentsMap
, host
)){
148 this.error("Cannot find any agent running on '"+host
+"'! Please start an agent on this host.");
151 //console.log(currentBatchId);
152 if(currentBatchId
== null){
153 var defaultId
= qx
.lang
.Object
.getKeyFromValue(agentsMap
, host
);
154 batchView
.setBatchAgentId(defaultId
);
157 // 3. Call service to load execution message
158 var req
= org
.argeo
.slc
.ria
.SlcApi
.getSlcExecutionService(uuid
);
159 var handler = function(xmlDoc
){
160 var realizedFlows
= org
.argeo
.ria
.util
.Element
.selectNodes(xmlDoc
, "slc:slc-execution/slc:realized-flows/slc:realized-flow");
161 for(var i
=0;i
<realizedFlows
.length
;i
++){
162 var newEntrySpec
= new org
.argeo
.slc
.ria
.execution
.BatchEntrySpec(null, null, realizedFlows
[i
]);
163 batchView
.appendBatchEntrySpec(newEntrySpec
);
166 req
.addListener("completed", function(response
){
167 handler(response
.getContent());
170 req
.addListener("failed", function(){
171 if(!window
.xmlExecStub
|| !window
.xmlExecStub
[uuid
]){
174 var xmlDoc
= window
.xmlExecStub
[uuid
];
180 openDetail : function(logData
){
182 var uuid
= logData
[2];
183 var window
= new qx
.ui
.window
.Window("Logs Detail", "org.argeo.slc.ria/mime-xls.png");
184 window
.setLayout(new qx
.ui
.layout
.VBox(0));
185 window
.setContentPadding(0);
187 org
.argeo
.ria
.components
.ViewsManager
.getInstance().getApplicationRoot().add(window
, {
194 var tBar
= new qx
.ui
.toolbar
.ToolBar();
196 var menuButton
= new qx
.ui
.toolbar
.Button("Close", "org.argeo.slc.ria/window-close.png");
197 tBar
.add(menuButton
);
198 menuButton
.addListener("execute", function(e
){
202 var tableModel
= new qx
.ui
.table
.model
.Simple();
203 var table
= new org
.argeo
.ria
.components
.ui
.Table(tableModel
, {
204 "date":{NAME
: "Date", WIDTH
:180},
205 "type":{NAME
: "Type", WIDTH
:90, ALIGN
:"CENTER"},
208 table
.setStatusBarVisible(true);
209 window
.add(table
, {flex
:1});
210 window
.setAllowMinimize(false);
211 window
.setResizable(true, true, true, true);
213 tableModel
.addListener("dataChanged", function(event
){
214 if(!event
.getData()) return;
215 var dataMap
= event
.getData();
216 table
.scrollCellVisible(0, dataMap
.lastRow
);
220 var tA
= new qx
.ui
.container
.Composite(new qx
.ui
.layout
.Canvas());
223 var textArea
= new qx
.ui
.form
.TextArea();
224 tA
.add(textArea
, {left
:0,top
:0, right
:0,bottom
:0});
226 var okButton
= new qx
.ui
.form
.Button("Done");
227 okButton
.setZIndex(2000);
228 tA
.add(okButton
, {bottom
:20,right
:20});
229 okButton
.addListener("execute", function(){
230 tA
.setVisibility("excluded");
233 textArea
.setNativeContextMenu(true);
235 var cpButton
= new qx
.ui
.toolbar
.Button("Copy As Text", "org.argeo.slc.ria/edit-copy.png");
237 cpButton
.addListener("execute", function(e
){
238 var all
= tableModel
.getData();
240 for(var i
=0;i
<all
.length
;i
++){
241 for(var j
=0;j
<all
[i
].length
;j
++){
242 string
+= all
[i
][j
] + "\t";
246 tA
.setVisibility("visible");
247 textArea
.setValue(string
);
248 new qx
.util
.DeferredCall(function(){
249 textArea
.setSelection(0, string
.length
);
252 tA
.setVisibility("excluded");
256 // Call service to load execution message
257 this._loadSlcExecution(uuid
, tableModel
);
259 var poller
= new qx
.event
.Timer(3000);
260 poller
.addListener("interval", function(e
){
261 this._loadSlcExecution(uuid
, tableModel
);
264 window
.addListener("close", function(){
270 _loadSlcExecution : function(uuid
, tableModel
){
271 var req
= org
.argeo
.slc
.ria
.SlcApi
.getSlcExecutionService(uuid
);
272 req
.addListener("completed", function(response
){
273 var xmlDoc
= response
.getContent();
275 var parser
= org
.argeo
.ria
.util
.Element
;
276 var slcSteps
= parser
.selectNodes(xmlDoc
, "slc:slc-execution/slc:steps/slc:slc-execution-step");
277 for(var i
=0;i
<slcSteps
.length
;i
++){
278 var step
= slcSteps
[i
];
279 var date
= parser
.getSingleNodeText(step
, "slc:begin");
280 var type
= parser
.getSingleNodeText(step
, "slc:type");
281 var logLines
= parser
.selectNodes(step
, "slc:log-lines/slc:log-line");
282 if(logLines
.length
> 0){
283 tableLines
.push([date
, type
, parser
.getSingleNodeText(logLines
[0], ".")]);
284 if(logLines
.length
>1){
285 for(var j
=1;j
<logLines
.length
;j
++){
286 tableLines
.push(["", "", parser
.getSingleNodeText(logLines
[j
], ".")]);
290 tableLines
.push([date
, type
, ""]);
293 tableModel
.setData(tableLines
);
300 * Creates the applet layout
302 _createLayout : function(){
303 this.logModel
= new qx
.ui
.table
.model
.Simple();
304 this.logModel
.setColumns(["Date", "Host", "Id", "Status"]);
305 this.logPane
= new qx
.ui
.table
.Table(this.logModel
, {
306 tableColumnModel: function(obj
){
307 return new qx
.ui
.table
.columnmodel
.Resize(obj
)
310 this.logPane
.addListener("cellDblclick", function(e
){
311 this.getCommands()["opendetail"].command
.execute();
314 var selectionModel
= this.logPane
.getSelectionModel();
315 selectionModel
.addListener("changeSelection", function(e
){
316 var viewSelection
= this.getViewSelection();
317 viewSelection
.setViewId("logger");
318 viewSelection
.clear();
319 selectionModel
.iterateSelection(function(index
){
320 viewSelection
.addNode(this.logModel
.getRowData(index
));
326 statusBarVisible
: false,
327 showCellFocusIndicator
:false
329 var columnModel
= this.logPane
.getTableColumnModel();
330 columnModel
.getBehavior().setWidth(0, "30%");
331 columnModel
.getBehavior().setWidth(1, "15%");
332 columnModel
.getBehavior().setWidth(3, "12%");
334 this.add(this.logPane
, {edge
:'center'});
338 * Refresh the data model.
340 _reloadLogger : function(){
341 var request
= org
.argeo
.slc
.ria
.SlcApi
.getListSlcExecutionsService();
342 request
.addListener("completed", function(response
){
343 var messages
= org
.argeo
.ria
.util
.Element
.selectNodes(response
.getContent(), "//slc:slc-execution");
344 this.logModel
.setData([]);
345 for(var i
=0;i
<messages
.length
;i
++){
346 var message
= messages
[i
];
347 var slcExec
= new org
.argeo
.slc
.ria
.SlcExecutionMessage(message
.getAttribute("uuid"));
348 slcExec
.fromXml(message
);
349 this.logModel
.addRows([
350 [slcExec
.getDate(), slcExec
.getHost(), slcExec
.getUuid(), slcExec
.getStatus()]
353 this.logModel
.sortByColumn(0, false);