]>
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);
212 // Call service to load execution message
213 var req
= org
.argeo
.slc
.ria
.SlcApi
.getSlcExecutionService(uuid
);
214 req
.addListener("completed", function(response
){
215 var xmlDoc
= response
.getContent();
217 var parser
= org
.argeo
.ria
.util
.Element
;
218 var slcSteps
= parser
.selectNodes(xmlDoc
, "slc:slc-execution/slc:steps/slc:slc-execution-step");
219 for(var i
=0;i
<slcSteps
.length
;i
++){
220 var step
= slcSteps
[i
];
221 var date
= parser
.getSingleNodeText(step
, "slc:begin");
222 var type
= parser
.getSingleNodeText(step
, "slc:type");
223 var logLines
= parser
.selectNodes(step
, "slc:log-lines/slc:log-line");
224 if(logLines
.length
> 0){
225 tableLines
.push([date
, type
, parser
.getSingleNodeText(logLines
[0], ".")]);
226 if(logLines
.length
>1){
227 for(var j
=1;j
<logLines
.length
;j
++){
228 tableLines
.push(["", "", parser
.getSingleNodeText(logLines
[j
], ".")]);
232 tableLines
.push([date
, type
, ""]);
235 tableModel
.setData(tableLines
);
242 * Creates the applet layout
244 _createLayout : function(){
245 this.logModel
= new qx
.ui
.table
.model
.Simple();
246 this.logModel
.setColumns(["Date", "Host", "Id", "Status"]);
247 this.logPane
= new qx
.ui
.table
.Table(this.logModel
, {
248 tableColumnModel: function(obj
){
249 return new qx
.ui
.table
.columnmodel
.Resize(obj
)
252 this.logPane
.addListener("cellDblclick", function(e
){
253 this.getCommands()["opendetail"].command
.execute();
256 var selectionModel
= this.logPane
.getSelectionModel();
257 selectionModel
.addListener("changeSelection", function(e
){
258 var viewSelection
= this.getViewSelection();
259 viewSelection
.setViewId("logger");
260 viewSelection
.clear();
261 selectionModel
.iterateSelection(function(index
){
262 viewSelection
.addNode(this.logModel
.getRowData(index
));
268 statusBarVisible
: false,
269 showCellFocusIndicator
:false
271 var columnModel
= this.logPane
.getTableColumnModel();
272 columnModel
.getBehavior().setWidth(0, "30%");
273 columnModel
.getBehavior().setWidth(1, "15%");
274 columnModel
.getBehavior().setWidth(3, "12%");
276 this.add(this.logPane
, {edge
:'center'});
280 * Refresh the data model.
282 _reloadLogger : function(){
283 var request
= org
.argeo
.slc
.ria
.SlcApi
.getListSlcExecutionsService();
284 request
.addListener("completed", function(response
){
285 var messages
= org
.argeo
.ria
.util
.Element
.selectNodes(response
.getContent(), "//slc:slc-execution");
286 this.logModel
.setData([]);
287 for(var i
=0;i
<messages
.length
;i
++){
288 var message
= messages
[i
];
289 var slcExec
= new org
.argeo
.slc
.ria
.SlcExecutionMessage(message
.getAttribute("uuid"));
290 slcExec
.fromXml(message
);
291 this.logModel
.addRows([
292 [slcExec
.getDate(), slcExec
.getHost(), slcExec
.getUuid(), slcExec
.getStatus()]
295 this.logModel
.sortByColumn(0, false);