]>
git.argeo.org Git - gpl/argeo-slc.git/blob - FlowsSelectorView.js
46cf61e15a0572ece1fa16a049d288791bea545e
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);
92 * Static loader for the "agent" level (first level)
95 * {org.argeo.ria.components.PersistentTreeFolder} The root Tree Folder.
97 agentLoader : function(folder
) {
99 var req
= org
.argeo
.slc
.ria
.SlcApi
.getListAgentsService("agents");
101 if(folder
.getState() == "loaded" && folder
.getUserData("agentsMap")){
102 // Diff loading, just add new nodes.
103 agents
= folder
.getUserData("agentsMap");
106 req
.addListener("completed", function(response
) {
107 var xmlDoc
= response
.getContent();
108 var nodes
= org
.argeo
.ria
.util
.Element
.selectNodes(xmlDoc
,
109 "//slc:slc-agent-descriptor");
110 var modulesLoader
= org
.argeo
.slc
.ria
.FlowsSelectorView
.modulesLoader
;
112 for (var i
= 0; i
< nodes
.length
; i
++) {
113 var uuid
= org
.argeo
.ria
.util
.Element
.getSingleNodeText(nodes
[i
], "@uuid");
114 var host
= org
.argeo
.ria
.util
.Element
.getSingleNodeText(nodes
[i
], "slc:host");
116 newAgents
[uuid
] = host
;
120 if(newAgents
) newAgents
[uuid
] = host
;
121 var agentFolder
= new org
.argeo
.ria
.components
.DynamicTreeFolder(
122 host
+ ' (' + uuid
+ ')', modulesLoader
,
123 "Loading Modules...", folder
.getDragData());
124 agentFolder
.setUserData("agentUuid", uuid
);
125 agentFolder
.setIcon("org.argeo.slc.ria/mime-xsl-22.png");
126 folder
.add(agentFolder
);
129 // Make sure some agents should not be removed
130 for(var agentKey
in agents
){
131 if(!newAgents
[agentKey
]){
132 var node
= org
.argeo
.slc
.ria
.FlowsSelectorView
.findAgentNodeById(folder
, agentKey
);
133 if(node
) folder
.remove(node
);
134 delete agents
[agentKey
];
135 var batchView
= org
.argeo
.ria
.components
.ViewsManager
.getInstance().getViewPaneById("batch").getContent();
136 if(batchView
) batchView
.clearBatchForAgentId(agentKey
);
140 folder
.setUserData("agentsMap", agents
);
141 folder
.setLoaded(true);
142 folder
.getTree().fireEvent("changeSelection");
144 req
.addListener("failed", function(response
) {
145 folder
.setLoaded(true);
152 * Loader for the "modules" level : takes any tree folder, currently the
156 * {org.argeo.ria.components.PersistentTreeFolder} The root folder
158 modulesLoader : function(folder
) {
159 var agentId
= folder
.getUserData("agentUuid");
160 var req
= org
.argeo
.slc
.ria
.SlcApi
.getListModulesService(agentId
);
161 req
.addListener("completed", function(response
) {
162 var descriptors
= org
.argeo
.ria
.util
.Element
.selectNodes(
163 response
.getContent(),
164 "slc:object-list/slc:execution-module-descriptor");
166 for (var i
= 0; i
< descriptors
.length
; i
++) {
167 var name
= org
.argeo
.ria
.util
.Element
.getSingleNodeText(
168 descriptors
[i
], "slc:name");
169 var version
= org
.argeo
.ria
.util
.Element
.getSingleNodeText(
170 descriptors
[i
], "slc:version");
173 mods
[name
].push(version
);
175 var flowLoader
= org
.argeo
.slc
.ria
.FlowsSelectorView
.flowLoader
;
176 for (var key
in mods
) {
177 for (var i
= 0; i
< mods
[key
].length
; i
++) {
178 var versionFolder
= new org
.argeo
.ria
.components
.DynamicTreeFolder(
179 key
+ ' (' + mods
[key
][i
] + ')', flowLoader
,
180 "Loading Flows", folder
.getDragData());
181 versionFolder
.setUserData("moduleData", {
183 version
: mods
[key
][i
]
185 versionFolder
.setUserData("agentUuid", agentId
);
186 // Warning, we must add it AFTER setting the user data,
187 // because of the persistent loading mechanism.
188 folder
.add(versionFolder
);
191 folder
.setLoaded(true);
192 folder
.getTree().fireEvent("changeSelection");
194 req
.addListener("failed", function(response
) {
195 folder
.setLoaded(true);
201 * Loader for the "flow" level : takes a folder containing "moduleData"
202 * and create its children.
205 * {org.argeo.ria.components.PersistentTreeFolder} A Tree folder containing in the
206 * key "moduleData" of its user data a map containing the
207 * keys {name,version}
209 flowLoader : function(folder
) {
210 var moduleData
= folder
.getUserData("moduleData");
211 var agentUuid
= folder
.getUserData("agentUuid");
213 var req
= org
.argeo
.slc
.ria
.SlcApi
214 .getLoadExecutionDescriptorService(agentUuid
,
215 moduleData
.name
, moduleData
.version
);
216 req
.addListener("completed", function(response
) {
217 var executionModule
= new org
.argeo
.slc
.ria
.execution
.Module();
219 executionModule
.setXmlNode(response
.getContent());
223 var execFlows
= executionModule
.getExecutionFlows();
224 for (var key
in execFlows
) {
225 var file
= new qx
.ui
.tree
.TreeFile(key
);
226 var path
= execFlows
[key
].getPath();
227 file
.setUserData("executionModule", executionModule
);
228 file
.setUserData("executionFlow", execFlows
[key
]);
229 file
.setUserData("agentUuid", agentUuid
);
230 org
.argeo
.slc
.ria
.FlowsSelectorView
.attachNodeByPath(folder
, path
, file
, {
231 agentUuid
: folder
.getUserData("agentUuid")
233 folder
.appendDragData(file
);
235 folder
.setLoaded(true);
236 folder
.getTree().fireEvent("changeSelection");
238 req
.addListener("failed", function(response
) {
239 folder
.setLoaded(true);
251 this._createLayout();
252 this.UIBus
.addListener("agentRegistered", this._addAgentHandler
, this);
253 this.UIBus
.addListener("agentUnregistered", this._removeAgentHandler
, this);
257 * Creates the main applet layout.
259 _createLayout : function() {
261 this.tree
= new qx
.ui
.tree
.Tree();
262 this.tree
.setDecorator(null);
263 this.tree
.setSelectionMode("multi");
265 this.rootNode
= new org
.argeo
.ria
.components
.DynamicTreeFolder(
266 "Tests", this.self(arguments
).agentLoader
,
268 this.tree
.setRoot(this.rootNode
);
269 this.rootNode
.setPersistentTreeID("org.argeo.slc.ria.monitor.FlowsSelector")
270 this.rootNode
.setOpen(true);
271 this.tree
.setContextMenu(org
.argeo
.ria
.event
.CommandsManager
272 .getInstance().createMenuFromIds(["reloadtree"]));
274 this.tree
.addListener("changeSelection", function(e
) {
275 var viewSelection
= this.getViewSelection();
276 viewSelection
.setViewId("form:tree");
277 viewSelection
.clear();
278 var sel
= this.tree
.getSortedSelection();
279 for (var i
= 0; i
< sel
.length
; i
++) {
280 viewSelection
.addNode(sel
[i
]);
283 var propViewPane
= org
.argeo
.ria
.components
.ViewsManager
.getInstance().getViewPaneById("properties");
284 propViewPane
.getContent().updateData(sel
[0]);