pipeline-builder-demo
Version:
Pipeline Builder
99 lines (80 loc) • 3.35 kB
text/typescript
import { Injectable } from '@angular/core';
import * as Pipeline from 'pipeline-builder';
import {IPort, IToolOptions} from './tool-option';
()
export class ToolOptionService {
private readonly IN_PROPERTY: string = 'i';
private readonly OUT_PROPERTY: string = 'o';
changeAlias(workflow: Pipeline.IWorkflow, callName: string, newAlias: string){
if(callName === newAlias) return;
workflow.children[callName].rename(newAlias);
}
updateCommand(workflow: Pipeline.IWorkflow, taskName: string, newCommandText: string) {
workflow.actions[taskName].data.command = newCommandText;
}
getPorts(workflowPortsObj: any) {
let ports: IPort[] = [];
let portNames = Object.getOwnPropertyNames(workflowPortsObj);
portNames.forEach(portName => {
ports.push({
_name: portName,
name: portName,
type: workflowPortsObj[portName].desc.type,
value: workflowPortsObj[portName].desc.default
});
});
return ports;
}
updatePorts(workflow: Pipeline.IWorkflow, selectedCall: Pipeline.IStep, opts: IToolOptions, iPortNamesToDel: string[], oPortNamesToDel: string[]){
opts.variables.forEach(portObj => {
if(portObj._name){
this._editPort(workflow, selectedCall.action.name, this.IN_PROPERTY, portObj);
} else {
this._addPort(workflow, selectedCall.action.name, this.IN_PROPERTY, portObj);
}
});
opts.outputs.forEach(portObj => {
if(portObj._name){
this._editPort(workflow, selectedCall.action.name, this.OUT_PROPERTY, portObj);
} else {
this._addPort(workflow, selectedCall.action.name, this.OUT_PROPERTY, portObj);
}
});
this._removePort(workflow, opts.name, iPortNamesToDel, oPortNamesToDel);
}
private _editPort(workflow: Pipeline.IWorkflow, taskName: string, portClass: string, portValueObj: IPort) {
let oldPort = workflow.actions[taskName][portClass][portValueObj._name];
oldPort.type = portValueObj.type || '';
if(!portValueObj.value){
delete oldPort.default;
} else {
oldPort.default = portValueObj.value;
}
if(portValueObj._name !== portValueObj.name) {
switch (portClass) {
case this.IN_PROPERTY:
workflow.actions[taskName].renameIPort(portValueObj._name, portValueObj.name);
break;
case this.OUT_PROPERTY:
workflow.actions[taskName].renameOPort(portValueObj._name, portValueObj.name);
}
}
}
private _addPort(workflow: Pipeline.IWorkflow, taskName: string, portClass: string, portValueObj: IPort) {
let portDescription = {};
portDescription[portClass] = {};
portDescription[portClass][portValueObj.name] = {
type: portValueObj.type || ''
};
if(portValueObj.value) {
portDescription[portClass][portValueObj.name].default = portValueObj.value;
}
workflow.actions[taskName].addPorts(portDescription);
}
private _removePort(workflow: Pipeline.IWorkflow, taskName: string, iPortNamesToDel: string[], oPortNamesToDel: string[]){
let portsToDel = {};
portsToDel[this.IN_PROPERTY] = iPortNamesToDel;
portsToDel[this.OUT_PROPERTY] = oPortNamesToDel;
workflow.actions[taskName].removePorts(portsToDel);
}
}