1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
/**
* Copyright (c) 2017 ZTE Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and the Apache License 2.0 which both accompany this distribution,
* and are available at http://www.eclipse.org/legal/epl-v10.html
* and http://www.apache.org/licenses/LICENSE-2.0
*
* Contributors:
* ZTE - initial API and implementation and/or initial documentation
*/
import {Component, EventEmitter, Input, Output, ViewChild} from "@angular/core";
import {TranslateService} from "@ngx-translate/core";
import {isArray, isObject} from "util";
import {ModelService} from "../../services/model.service";
import {NoticeService} from "../../services/notice.service";
import {NodeType} from "../../model/workflow/node-type.enum";
import {ValueSource} from "../../model/value-source.enum";
import {JsPlumbService} from "../../services/jsplumb.service";
import {WorkflowNode} from "../../model/workflow/workflow-node";
/**
* node or workflow-line name
*/
@Component({
selector: 'wfm-editable-property',
templateUrl: 'editable-property.component.html',
styleUrls: ['./editable-property.component.css']
})
export class EditablePropertyComponent {
@Input() public value: string;
@Output() public valueChange = new EventEmitter<string>();
@ViewChild('editInput') private editInput: any;
public editValue = '';
public editable = false;
public preEdit(): void {
if (!this.editable) {
this.editable = true;
this.editValue = this.value;
}
}
public afterEdit(): void {
if (this.editable) {
this.editable = false;
if (this.value === this.editValue) {
return;
}
if (this.editInput.wfInput.valid) {
this.value = this.editValue;
this.valueChange.emit(this.value);
} else {
this.editValue = this.value;
}
}
}
/*private validate(): boolean {
const nodes = this.modelService.getNodes();
const existNode = nodes.find(node => node.id === this.editValue);
if (existNode) {
this.translate.get('WORKFLOW.MSG.NODE_ID_SAME', {value: existNode.id}).subscribe((res: string) => {
this.notice.error(res, 10000);
});
return false;
}
return true;
}
private changeReferencedValue(): void {
const newNodeConnections = [];
const nodes = this.modelService.getNodes();
nodes.forEach((node: any) => {
this.changeConnectionReferencedValue(node, this.value, this.editValue);
if (node.type === NodeType[NodeType.restTask]) {
const parameters = node.parameters || [];
parameters.forEach(param => {
this.changeRestTaskReferencedValue(param, this.value, this.editValue);
});
}
});
}
private changeConnectionReferencedValue(node: WorkflowNode, oldValue: string, newValue: string): void {
node.connection.forEach(connection => {
if (connection.sourceRef === oldValue) {
connection.sourceRef = newValue;
} else if (connection.targetRef === oldValue) {
connection.targetRef = newValue;
}
});
}
// 当restTask类型的节点的属性中valueSource是Plan时,value的值为引用其他节点id
// value格式为[restTask_2].[responseBody].[name],可能有更多层,当时第一个[]里面的值为被引用节点的id
private changeRestTaskReferencedValue(param: any, oldValue: string, newValue: string): void {
if (param.valueSource === ValueSource[ValueSource.Plan]) {
const value = param.value || '';
const index = value.indexOf('].[');
if (index > -1) {
const nodeId = value.substring(1, index);
if (nodeId === oldValue) {
param.value = '[' + newValue + value.substring(index);
}
}
} else if (param.valueSource === ValueSource[ValueSource.Definition]) {
const value = param.value;
if (isArray(value)) {
value.forEach(subValue => {
this.changeRestTaskReferencedValue(subValue, oldValue, newValue);
});
} else if (isObject(value)) {
this.changeRestTaskReferencedValue(value, oldValue, newValue);
}
}
}*/
}
|