]>
git.argeo.org Git - gpl/argeo-slc.git/blob - server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/monitor/FlowsSelectorView.js
5 qx
.Class
.define("org.argeo.slc.ria.monitor.FlowsSelectorView", {
6 extend
: org
.argeo
.slc
.ria
.FlowsSelectorView
,
7 implement
: [org
.argeo
.ria
.components
.IView
],
9 construct : function() {
15 * Commands definition, see
16 * {@link org.argeo.ria.event.CommandsManager#definitions}
23 icon
: "org.argeo.slc.ria/view-refresh.png",
24 shortcut
: "Control+m",
28 callback : function(e
) {
29 if (this.tree
.isSelectionEmpty()) { return; }
30 var selected
= this.tree
.getSelection()[0];
31 if (selected
.classname
== "org.argeo.ria.components.DynamicTreeFolder") {
32 if (selected
.getUserData("moduleData")) {
33 // It's a "module" node, first trigger the
34 // reloadBundle.service
35 selected
.setUserData("dataModel", {});
36 selected
.setEnabled(false);
37 selected
.setOpen(false);
38 var moduleData
= selected
39 .getUserData("moduleData");
40 var bundleService
= org
.argeo
.slc
.ria
.SlcApi
41 .getReloadBundleService(
44 bundleService
.addListener("completed",
46 selected
.setEnabled(true);
47 selected
.setOpen(true);
50 // bundleService.send();
51 // Do not send, not implemented yet, false timer
53 qx
.event
.Timer
.once(function(response
) {
54 selected
.setEnabled(true);
55 selected
.setOpen(true);
63 selectionChange : function(viewId
, selection
) {
64 if (viewId
!= "form:tree")
68 if (selection
.length
> 1) {
69 this.setEnabled(false);
72 var item
= selection
[0];
73 if (!qx
.Class
.isSubClassOf(qx
.Class
74 .getByName(item
.classname
),
75 qx
.ui
.tree
.AbstractTreeItem
))
77 this.setEnabled(false);
78 if (qx
.Class
.isSubClassOf(qx
.Class
79 .getByName(item
.classname
),
80 org
.argeo
.ria
.components
.DynamicTreeFolder
)) {
81 this.setEnabled(true);
93 "flowSelector.monitor.preferred.hosts" : {
94 label
: "Preferred Hosts (Monitoring View)",
100 * Static loader for the "agent" level (first level)
103 * {org.argeo.ria.components.PersistentTreeFolder} The root Tree Folder.
105 agentLoader : function(folder
) {
107 var req
= org
.argeo
.slc
.ria
.SlcApi
.getListAgentsService("agents");
109 if(folder
.getState() == "loaded" && folder
.getUserData("agentsMap")){
110 // Diff loading, just add new nodes.
111 agents
= folder
.getUserData("agentsMap");
114 req
.addListener("completed", function(response
) {
115 var xmlDoc
= response
.getContent();
116 var nodes
= org
.argeo
.ria
.util
.Element
.selectNodes(xmlDoc
,
117 "//slc:slc-agent-descriptor");
118 var modulesLoader
= org
.argeo
.slc
.ria
.FlowsSelectorView
.modulesLoader
;
120 for (var i
= 0; i
< nodes
.length
; i
++) {
121 var uuid
= org
.argeo
.ria
.util
.Element
.getSingleNodeText(nodes
[i
], "@uuid");
122 var host
= org
.argeo
.ria
.util
.Element
.getSingleNodeText(nodes
[i
], "slc:host");
124 newAgents
[uuid
] = host
;
128 if(newAgents
) newAgents
[uuid
] = host
;
129 var agentFolder
= new org
.argeo
.ria
.components
.DynamicTreeFolder(
130 host
+ ' (' + uuid
+ ')', modulesLoader
,
131 "Loading Modules...", folder
.getDragData());
132 agentFolder
.setUserData("agentUuid", uuid
);
133 agentFolder
.setIcon("org.argeo.slc.ria/mime-xsl-22.png");
134 folder
.add(agentFolder
);
137 // Make sure some agents should not be removed
138 for(var agentKey
in agents
){
139 if(!newAgents
[agentKey
]){
140 var node
= org
.argeo
.slc
.ria
.FlowsSelectorView
.findAgentNodeById(folder
, agentKey
);
141 if(node
) folder
.remove(node
);
142 delete agents
[agentKey
];
143 var batchView
= org
.argeo
.ria
.components
.ViewsManager
.getInstance().getViewPaneById("batch").getContent();
144 if(batchView
) batchView
.clearBatchForAgentId(agentKey
);
148 folder
.setUserData("agentsMap", agents
);
149 folder
.setLoaded(true);
150 folder
.getTree().fireEvent("changeSelection");
152 req
.addListener("failed", function(response
) {
153 folder
.setLoaded(true);
160 * Loader for the "modules" level : takes any tree folder, currently the
164 * {org.argeo.ria.components.PersistentTreeFolder} The root folder
166 modulesLoader : function(folder
) {
167 var agentId
= folder
.getUserData("agentUuid");
168 var req
= org
.argeo
.slc
.ria
.SlcApi
.getListModulesService(agentId
);
169 req
.addListener("completed", function(response
) {
170 var descriptors
= org
.argeo
.ria
.util
.Element
.selectNodes(
171 response
.getContent(),
172 "slc:object-list/slc:execution-module-descriptor");
174 for (var i
= 0; i
< descriptors
.length
; i
++) {
175 var name
= org
.argeo
.ria
.util
.Element
.getSingleNodeText(
176 descriptors
[i
], "slc:name");
177 var version
= org
.argeo
.ria
.util
.Element
.getSingleNodeText(
178 descriptors
[i
], "slc:version");
181 mods
[name
].push(version
);
183 var flowLoader
= org
.argeo
.slc
.ria
.FlowsSelectorView
.flowLoader
;
184 for (var key
in mods
) {
185 for (var i
= 0; i
< mods
[key
].length
; i
++) {
186 var versionFolder
= new org
.argeo
.ria
.components
.DynamicTreeFolder(
187 key
+ ' (' + mods
[key
][i
] + ')', flowLoader
,
188 "Loading Flows", folder
.getDragData());
189 versionFolder
.setUserData("moduleData", {
191 version
: mods
[key
][i
]
193 versionFolder
.setUserData("agentUuid", agentId
);
194 // Warning, we must add it AFTER setting the user data,
195 // because of the persistent loading mechanism.
196 folder
.add(versionFolder
);
199 folder
.setLoaded(true);
200 folder
.getTree().fireEvent("changeSelection");
202 req
.addListener("failed", function(response
) {
203 folder
.setLoaded(true);
209 * Loader for the "flow" level : takes a folder containing "moduleData"
210 * and create its children.
213 * {org.argeo.ria.components.PersistentTreeFolder} A Tree folder containing in the
214 * key "moduleData" of its user data a map containing the
215 * keys {name,version}
217 flowLoader : function(folder
) {
218 var moduleData
= folder
.getUserData("moduleData");
219 var agentUuid
= folder
.getUserData("agentUuid");
221 var req
= org
.argeo
.slc
.ria
.SlcApi
222 .getLoadExecutionDescriptorService(agentUuid
,
223 moduleData
.name
, moduleData
.version
);
224 req
.addListener("completed", function(response
) {
225 var executionModule
= new org
.argeo
.slc
.ria
.execution
.Module();
227 executionModule
.setXmlNode(response
.getContent());
231 var execFlows
= executionModule
.getExecutionFlows();
232 for (var key
in execFlows
) {
233 var file
= new qx
.ui
.tree
.TreeFile(key
);
234 var path
= execFlows
[key
].getPath();
235 file
.setUserData("executionModule", executionModule
);
236 file
.setUserData("executionFlow", execFlows
[key
]);
237 file
.setUserData("agentUuid", agentUuid
);
238 org
.argeo
.slc
.ria
.FlowsSelectorView
.attachNodeByPath(folder
, path
, file
, {
239 agentUuid
: folder
.getUserData("agentUuid")
241 folder
.appendDragData(file
);
243 folder
.setLoaded(true);
244 folder
.getTree().fireEvent("changeSelection");
246 req
.addListener("failed", function(response
) {
247 folder
.setLoaded(true);
259 this._createLayout();
260 this.UIBus
.addListener("agentRegistered", this._addAgentHandler
, this);
261 this.UIBus
.addListener("agentUnregistered", this._removeAgentHandler
, this);
265 * Creates the main applet layout.
267 _createLayout : function() {
269 this.tree
= new qx
.ui
.tree
.Tree();
270 this.tree
.setDecorator(null);
271 this.tree
.setSelectionMode("multi");
273 this.rootNode
= new org
.argeo
.ria
.components
.DynamicTreeFolder(
274 "Tests", this.self(arguments
).agentLoader
,
276 this.tree
.setRoot(this.rootNode
);
277 this.rootNode
.setPersistentTreeID("org.argeo.slc.ria.monitor.FlowsSelector")
278 this.rootNode
.setOpen(true);
279 this.tree
.setContextMenu(org
.argeo
.ria
.event
.CommandsManager
280 .getInstance().createMenuFromIds(["reloadtree"]));
282 this.tree
.addListener("changeSelection", function(e
) {
283 var viewSelection
= this.getViewSelection();
284 viewSelection
.setViewId("form:tree");
285 viewSelection
.clear();
286 var sel
= this.tree
.getSortedSelection();
287 for (var i
= 0; i
< sel
.length
; i
++) {
288 viewSelection
.addNode(sel
[i
]);
291 var propViewPane
= org
.argeo
.ria
.components
.ViewsManager
.getInstance().getViewPaneById("properties");
292 propViewPane
.getContent().updateData(sel
[0]);