1 import * as _ from "lodash";
2 import {Component} from '@angular/core';
4 import {Subscription} from "rxjs/Subscription";
6 import {TranslateService} from "app/ng2/shared/translator/translate.service";
7 import {WorkflowServiceNg2} from 'app/ng2/services/workflow.service';
8 import {InputModel, OperationModel, OperationParameter} from 'app/models';
10 import {DropdownValue} from "app/ng2/components/ui/form-components/dropdown/ui-element-dropdown.component";
13 selector: 'operation-creator',
14 templateUrl: './operation-creator.component.html',
15 styleUrls:['./operation-creator.component.less'],
16 providers: [TranslateService]
19 export class OperationCreatorComponent {
22 operation: OperationModel;
24 workflows: Array<DropdownValue> = [];
25 workflowVersions: Array<DropdownValue> = [];
26 inputProperties: Array<DropdownValue> = [];
27 inputPropertyTypes: {};
29 inputParameters: Array<OperationParameter> = [];
30 noAssignInputParameters: Array<OperationParameter> = [];
31 assignInputParameters: { [key: string]: { [key: string]: Array<OperationParameter>; }; } = {};
33 isAssociateWorkflow: boolean = false;
34 isEditMode: boolean = false;
35 isLoading: boolean = false;
37 propertyTooltipText: String;
39 constructor(private workflowServiceNg2: WorkflowServiceNg2, private translateService: TranslateService) {
40 this.translateService.languageChangedObservable.subscribe(lang => {
41 this.propertyTooltipText = this.translateService.translate("OPERATION_PROPERTY_TOOLTIP_TEXT");
47 this.inputProperties = _.map(this.input.inputProperties,
48 (input: InputModel) => new DropdownValue(input.uniqueId, input.name)
51 this.inputPropertyTypes = {};
52 _.forEach(this.input.inputProperties, (input: InputModel) => {
53 this.inputPropertyTypes[input.uniqueId] = input.type;
56 const inputOperation = <OperationModel>this.input.operation;
57 this.operation = new OperationModel(inputOperation || {});
59 const buildInputParams = () => {
60 if (inputOperation.inputParams) {
61 this.inputParameters = [];
62 _.forEach(inputOperation.inputParams.listToscaDataDefinition, (input: OperationParameter) => {
68 this.isLoading = true;
69 this.workflowServiceNg2.getWorkflows().subscribe(workflows => {
70 this.isLoading = false;
72 this.workflows = _.map(workflows, (workflow: any) => {
73 return new DropdownValue(workflow.id, workflow.name);
77 if (inputOperation.workflowVersionId) {
78 this.isAssociateWorkflow = true;
79 this.onSelectWorkflow(inputOperation.workflowVersionId).add(buildInputParams);
81 this.inputParameters = this.noAssignInputParameters;
82 this.isAssociateWorkflow = false;
86 if (inputOperation.uniqueId) {
87 this.isEditMode = true;
95 onSelectWorkflow(selectedVersionId?: string): Subscription {
97 this.operation.workflowVersionId = selectedVersionId || null;
98 if (!this.assignInputParameters[this.operation.workflowId]) {
99 this.assignInputParameters[this.operation.workflowId] = {};
102 this.isLoading = true;
103 return this.workflowServiceNg2.getWorkflowVersions(this.operation.workflowId).subscribe((versions: Array<any>) => {
104 this.isLoading = false;
106 this.workflowVersions = _.map(
107 _.filter(versions, version => version.state === this.workflowServiceNg2.VERSION_STATE_CERTIFIED),
109 if (!this.assignInputParameters[this.operation.workflowId][version.id]) {
110 this.assignInputParameters[this.operation.workflowId][version.id] = _.map(version.inputs, (input: any) => {
111 return new OperationParameter({
113 type: input.type && input.type.toLowerCase(),
115 mandatory: input.mandatory,
119 return new DropdownValue(version.id, `v. ${version.name}`);
123 if (!selectedVersionId && versions.length) {
124 this.operation.workflowVersionId = _.last(versions.sort()).id;
126 this.changeWorkflowVersion();
131 changeWorkflowVersion() {
132 this.inputParameters = this.assignInputParameters[this.operation.workflowId][this.operation.workflowVersionId];
135 toggleAssociateWorkflow() {
137 if (!this.isAssociateWorkflow) {
138 this.inputParameters = this.noAssignInputParameters;
140 if (!this.operation.workflowId || !this.operation.workflowVersionId) {
141 this.inputParameters = [];
143 this.inputParameters = this.assignInputParameters[this.operation.workflowId][this.operation.workflowVersionId];
149 addParam(param?: OperationParameter): void {
150 this.inputParameters.push(new OperationParameter(param));
153 isParamsValid(): boolean {
155 for (let ctr=0; ctr<this.inputParameters.length; ctr++) {
156 if (!this.inputParameters[ctr].name || !this.inputParameters[ctr].property) {
164 onRemoveParam = (param: OperationParameter): void => {
165 let index = _.indexOf(this.inputParameters, param);
166 this.inputParameters.splice(index, 1);
169 createInputParamList(): void {
170 this.operation.createInputParamsList(this.inputParameters);
173 checkFormValidForSubmit(): boolean {
174 return this.operation.operationType &&
175 (!this.isAssociateWorkflow || this.operation.workflowVersionId) &&
176 this.isParamsValid();