Skip to content

Commit ae822a1

Browse files
authored
✨ Start/Stop services 2 (ITISFoundation#3637)
1 parent 3701d49 commit ae822a1

File tree

8 files changed

+197
-264
lines changed

8 files changed

+197
-264
lines changed

services/static-webserver/client/source/class/osparc/component/workbench/WorkbenchUI.js

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,7 @@ qx.Class.define("osparc.component.workbench.WorkbenchUI", {
402402
},
403403

404404
__itemStartedMoving: function() {
405-
this.getSelectedNodes().forEach(selectedNodeUI => {
405+
this.__selectedNodeUIs.forEach(selectedNodeUI => {
406406
selectedNodeUI.initPos = selectedNodeUI.getNode().getPosition();
407407
});
408408
this.getSelectedAnnotations().forEach(selectedAnnotation => {
@@ -411,7 +411,7 @@ qx.Class.define("osparc.component.workbench.WorkbenchUI", {
411411
},
412412

413413
__itemMoving: function(itemId, xDiff, yDiff) {
414-
this.getSelectedNodes().forEach(selectedNodeUI => {
414+
this.__selectedNodeUIs.forEach(selectedNodeUI => {
415415
if (itemId !== selectedNodeUI.getNodeId()) {
416416
const selectedNode = selectedNodeUI.getNode();
417417
selectedNode.setPosition({
@@ -433,7 +433,7 @@ qx.Class.define("osparc.component.workbench.WorkbenchUI", {
433433
},
434434

435435
__itemStoppedMoving: function() {
436-
this.getSelectedNodes().forEach(selectedNodeUI => {
436+
this.__selectedNodeUIs.forEach(selectedNodeUI => {
437437
delete selectedNodeUI["initPos"];
438438
});
439439
this.getSelectedAnnotations().forEach(selectedAnnotation => {
@@ -498,17 +498,13 @@ qx.Class.define("osparc.component.workbench.WorkbenchUI", {
498498
return this._currentModel;
499499
},
500500

501-
getSelectedNodes: function() {
502-
return this.__selectedNodeUIs;
503-
},
504-
505501
getSelectedAnnotations: function() {
506502
return this.__selectedAnnotations;
507503
},
508504

509505
getSelectedNodeIDs: function() {
510506
const selectedNodeIDs = [];
511-
this.getSelectedNodes().forEach(nodeUI => {
507+
this.__selectedNodeUIs.forEach(nodeUI => {
512508
selectedNodeIDs.push(nodeUI.getNodeId());
513509
});
514510
return selectedNodeIDs;
@@ -521,14 +517,15 @@ qx.Class.define("osparc.component.workbench.WorkbenchUI", {
521517
},
522518

523519
__setSelectedNodes: function(selectedNodeUIs) {
524-
this.getSelectedNodes().forEach(node => {
520+
this.__selectedNodeUIs.forEach(node => {
525521
if (!selectedNodeUIs.includes(node)) {
526522
node.removeState("selected");
527523
}
528524
});
529525
selectedNodeUIs.forEach(selectedNode => selectedNode.addState("selected"));
530526
this.__selectedNodeUIs = selectedNodeUIs;
531-
qx.event.message.Bus.dispatchByName("changeWorkbenchSelection", selectedNodeUIs.map(selected => selected.getNode()));
527+
528+
qx.event.message.Bus.dispatchByName("changeNodeSelection", this.__selectedNodeUIs.map(selectedNodeUI => selectedNodeUI.getNode()));
532529
},
533530

534531
__setSelectedAnnotations: function(selectedAnnotations) {
@@ -569,19 +566,21 @@ qx.Class.define("osparc.component.workbench.WorkbenchUI", {
569566

570567
__activeNodeChanged: function(activeNodeUI, isControlPressed = false) {
571568
if (isControlPressed) {
572-
const index = this.getSelectedNodes().indexOf(activeNodeUI);
569+
const index = this.__selectedNodeUIs.indexOf(activeNodeUI);
573570
if (index > -1) {
574571
activeNodeUI.removeState("selected");
575-
this.getSelectedNodes().splice(index, 1);
572+
this.__selectedNodeUIs.splice(index, 1);
576573
} else {
577574
activeNodeUI.addState("selected");
578-
this.getSelectedNodes().push(activeNodeUI);
575+
this.__selectedNodeUIs.push(activeNodeUI);
579576
this.__selectedItemChanged(activeNodeUI.getNodeId());
580577
}
581578
} else {
582579
this.__setSelectedNodes([activeNodeUI]);
583580
this.__selectedItemChanged(activeNodeUI.getNodeId());
584581
}
582+
583+
qx.event.message.Bus.dispatchByName("changeNodeSelection", this.__selectedNodeUIs.map(selectedNodeUI => selectedNodeUI.getNode()));
585584
},
586585

587586
_createNodeUI: function(nodeId) {
@@ -1220,6 +1219,14 @@ qx.Class.define("osparc.component.workbench.WorkbenchUI", {
12201219
"text": "\uf014", // trash
12211220
"action": () => nodeUI.fireDataEvent("removeNode", nodeUI.getNodeId())
12221221
},
1222+
startDynService: {
1223+
"text": "\uf04b", // play
1224+
"action": () => nodeUI.getNode().requestStartNode()
1225+
},
1226+
stopDynService: {
1227+
"text": "\uf04d", // stop
1228+
"action": () => nodeUI.getNode().requestStopNode()
1229+
},
12231230
addRemoveMarker: {
12241231
"text": "\uf097", // marker
12251232
"action": () => nodeUI.getNode().toggleMarker()
@@ -1251,15 +1258,25 @@ qx.Class.define("osparc.component.workbench.WorkbenchUI", {
12511258
"action": () => {}
12521259
}
12531260
};
1254-
let buttons = null;
1261+
let buttons = [];
12551262
if (nodeUI) {
12561263
const node = nodeUI.getNode();
1257-
buttons = [
1258-
actions.addRemoveMarker,
1264+
if (node.isDynamic()) {
1265+
const status = node.getStatus().getInteractive();
1266+
if (["idle", "failed"].includes(status)) {
1267+
buttons.push(actions.startDynService);
1268+
} else if (["ready"].includes(status)) {
1269+
buttons.push(actions.stopDynService);
1270+
}
1271+
}
1272+
if (buttons.length === 0) {
1273+
buttons.push(actions.addRemoveMarker);
1274+
}
1275+
buttons = buttons.concat([
12591276
node.hasOutputs() ? actions.addServiceOutput : actions.noAction,
12601277
actions.removeNode,
12611278
node.hasInputs() ? actions.addServiceInput : actions.noAction
1262-
];
1279+
]);
12631280
} else {
12641281
buttons = [
12651282
actions.addService,

services/static-webserver/client/source/class/osparc/data/model/Node.js

Lines changed: 4 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -381,14 +381,6 @@ qx.Class.define("osparc.data.model.Node", {
381381
return Object.keys(this.getOutputs()).length;
382382
},
383383

384-
hasChildren: function() {
385-
const innerNodes = this.getInnerNodes();
386-
if (innerNodes) {
387-
return Object.keys(innerNodes).length > 0;
388-
}
389-
return false;
390-
},
391-
392384
getInnerNodes: function(recursive = false) {
393385
let innerNodes = Object.assign({}, this.__innerNodes);
394386
if (recursive) {
@@ -404,32 +396,6 @@ qx.Class.define("osparc.data.model.Node", {
404396
this.__innerNodes[innerNodeId] = innerNode;
405397
},
406398

407-
removeInnerNode: function(innerNodeId) {
408-
delete this.__innerNodes[innerNodeId];
409-
},
410-
411-
isInnerNode: function(inputNodeId) {
412-
return (inputNodeId in this.__innerNodes);
413-
},
414-
415-
getExposedInnerNodes: function() {
416-
const workbench = this.getWorkbench();
417-
418-
let outputNodes = [];
419-
for (let i = 0; i < this.__exposedNodes.length; i++) {
420-
const outputNode = workbench.getNode(this.__exposedNodes[i]);
421-
outputNodes.push(outputNode);
422-
}
423-
const uniqueNodes = [...new Set(outputNodes)];
424-
return uniqueNodes;
425-
},
426-
427-
getExposedNodeIDs: function() {
428-
const exposedInnerNodes = this.getExposedInnerNodes();
429-
const exposedNodeIDs = exposedInnerNodes.map(exposedInnerNode => exposedInnerNode.getNodeId());
430-
return exposedNodeIDs;
431-
},
432-
433399
populateWithMetadata: function() {
434400
const metaData = this.__metaData = osparc.utils.Services.getMetaData(this.getKey(), this.getVersion());
435401
if (metaData) {
@@ -1411,37 +1377,21 @@ qx.Class.define("osparc.data.model.Node", {
14111377
this.getStatus().bind("interactive", startButton, "enabled", {
14121378
converter: state => ["idle", "failed"].includes(state)
14131379
});
1414-
startButton.addListener("execute", () => this.requestStartNode());
1380+
const executeListenerId = startButton.addListener("execute", this.requestStartNode, this);
1381+
startButton.executeListenerId = executeListenerId;
14151382
},
14161383

14171384
attachHandlersToStopButton: function(stopButton) {
14181385
this.getStatus().bind("interactive", stopButton, "visibility", {
14191386
converter: state => (state === "ready") ? "visible" : "excluded"
14201387
});
1421-
stopButton.addListener("execute", () => this.requestStopNode());
1422-
},
1423-
1424-
__removeInnerNodes: function() {
1425-
const innerNodes = Object.values(this.getInnerNodes());
1426-
for (let i = 0; i < innerNodes.length; i++) {
1427-
innerNodes[i].removeNode();
1428-
}
1429-
},
1430-
1431-
__detachFromParent: function() {
1432-
const parentNodeId = this.getParentNodeId();
1433-
if (parentNodeId) {
1434-
const parentNode = this.getWorkbench().getNode(parentNodeId);
1435-
parentNode.removeInnerNode(this.getNodeId());
1436-
parentNode.removeOutputNode(this.getNodeId());
1437-
}
1388+
const executeListenerId = stopButton.addListener("execute", this.requestStopNode, this);
1389+
stopButton.executeListenerId = executeListenerId;
14381390
},
14391391

14401392
removeNode: function() {
14411393
this.__deleteInBackend();
14421394
this.removeIFrame();
1443-
this.__removeInnerNodes();
1444-
this.__detachFromParent();
14451395
},
14461396

14471397
stopRequestingStatus: function() {

services/static-webserver/client/source/class/osparc/data/model/Workbench.js

Lines changed: 0 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -501,21 +501,6 @@ qx.Class.define("osparc.data.model.Workbench", {
501501
this.fireEvent("pipelineChanged");
502502
},
503503

504-
moveNode: function(node, newParent, oldParent) {
505-
const nodeId = node.getNodeId();
506-
if (oldParent === null) {
507-
delete this.__rootNodes[nodeId];
508-
} else {
509-
oldParent.removeInnerNode(nodeId);
510-
}
511-
if (newParent === null) {
512-
this.__rootNodes[nodeId] = node;
513-
} else {
514-
newParent.addInnerNode(nodeId, node);
515-
}
516-
node.setParentNodeId(newParent ? newParent.getNodeId() : null);
517-
},
518-
519504
removeNode: function(nodeId) {
520505
if (!osparc.data.Permissions.getInstance().canDo("study.node.delete", true)) {
521506
return false;
@@ -752,82 +737,6 @@ qx.Class.define("osparc.data.model.Workbench", {
752737
};
753738
},
754739

755-
groupNodes: function(currentModel, selectedNodes) {
756-
const selectedNodeIds = [];
757-
selectedNodes.forEach(selectedNode => {
758-
selectedNodeIds.push(selectedNode.getNodeId());
759-
});
760-
761-
const brotherNodes = this.__getBrotherNodes(currentModel, selectedNodeIds);
762-
763-
// Create nodesGroup
764-
const nodesGroupService = osparc.utils.Services.getNodesGroup();
765-
const parentNode = currentModel.getNodeId ? currentModel : null;
766-
const nodesGroup = this.createNode(nodesGroupService.key, nodesGroupService.version, null, parentNode);
767-
if (!nodesGroup) {
768-
return;
769-
}
770-
771-
const avgPos = this.__getAveragePosition(selectedNodes);
772-
nodesGroup.setPosition(avgPos);
773-
774-
// change parents on future inner nodes
775-
selectedNodes.forEach(selectedNode => {
776-
this.moveNode(selectedNode, nodesGroup, parentNode);
777-
});
778-
779-
// find inputNodes for nodesGroup
780-
selectedNodes.forEach(selectedNode => {
781-
const selInputNodes = selectedNode.getInputNodes();
782-
selInputNodes.forEach(inputNode => {
783-
const index = selectedNodeIds.indexOf(inputNode);
784-
if (index === -1) {
785-
nodesGroup.addInputNode(inputNode);
786-
}
787-
});
788-
});
789-
790-
// change input nodes in those nodes connected to the selected ones
791-
brotherNodes.forEach(brotherNode => {
792-
selectedNodes.forEach(selectedNode => {
793-
const selectedNodeId = selectedNode.getNodeId();
794-
if (brotherNode.isInputNode(selectedNodeId)) {
795-
brotherNode.addInputNode(nodesGroup.getNodeId());
796-
brotherNode.removeInputNode(selectedNodeId);
797-
nodesGroup.addOutputNode(selectedNodeId);
798-
}
799-
});
800-
});
801-
},
802-
803-
ungroupNode: function(currentModel, nodesGroup) {
804-
let newParentNode = null;
805-
if (currentModel !== this) {
806-
newParentNode = currentModel;
807-
}
808-
809-
const brotherNodes = this.__getBrotherNodes(currentModel, [nodesGroup.getNodeId()]);
810-
811-
812-
// change parents on old inner nodes
813-
const innerNodes = nodesGroup.getInnerNodes(false);
814-
for (const innerNodeId in innerNodes) {
815-
const innerNode = innerNodes[innerNodeId];
816-
this.moveNode(innerNode, newParentNode, nodesGroup);
817-
}
818-
819-
// change input nodes in those nodes connected to the nodesGroup
820-
brotherNodes.forEach(brotherNode => {
821-
if (brotherNode.isInputNode(nodesGroup.getNodeId())) {
822-
brotherNode.removeInputNode(nodesGroup.getNodeId());
823-
brotherNode.addInputNodes(nodesGroup.getExposedNodeIDs());
824-
}
825-
});
826-
827-
// Remove nodesGroup
828-
this.removeNode(nodesGroup.getNodeId());
829-
},
830-
831740
serialize: function(clean = true) {
832741
if (this.__workbenchInitData !== null) {
833742
// workbench is not initialized

0 commit comments

Comments
 (0)