/
workflow_data.go
116 lines (107 loc) · 2.01 KB
/
workflow_data.go
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
package sdk
type WorkflowData struct {
Node Node `json:"node" db:"-" cli:"-"`
Joins []Node `json:"joins" db:"-" cli:"-"`
}
func (w *WorkflowData) AncestorsNames(n Node) []string {
res, ok := w.Node.ancestorNames(n.Name)
if ok {
return res
}
for _, j := range w.Joins {
resAncestor, found := (&j).ancestorNames(n.Name)
if found {
return resAncestor
}
}
return nil
}
// GetHooks returns the list of all hooks in the workflow tree
func (w *WorkflowData) GetHooks() map[string]*NodeHook {
if w == nil {
return nil
}
res := map[string]*NodeHook{}
for _, n := range w.Array() {
for i := range n.Hooks {
h := &n.Hooks[i]
res[h.UUID] = h
}
}
return res
}
// GetHooksMapRef returns the list of all hooks in the workflow tree
func (w *WorkflowData) GetHooksMapRef() map[string]NodeHook {
if w == nil {
return nil
}
res := make(map[string]NodeHook)
for _, n := range w.Array() {
for _, h := range n.Hooks {
res[h.Ref()] = h
}
}
return res
}
func (w *WorkflowData) Array() []*Node {
if w == nil {
return nil
}
nodes := make([]*Node, 0)
nodes = w.Node.array(nodes)
for i := range w.Joins {
nodes = w.Joins[i].array(nodes)
}
return nodes
}
func (w *WorkflowData) Maps() map[int64]*Node {
nodes := make(map[int64]*Node, 0)
if w == nil {
return nodes
}
nodes = w.Node.maps(nodes)
for i := range w.Joins {
nodes = w.Joins[i].maps(nodes)
}
return nodes
}
func (w *WorkflowData) NodeByRef(ref string) *Node {
if w == nil {
return nil
}
n := (&w.Node).nodeByRef(ref)
if n != nil {
return n
}
for i := range w.Joins {
n = (&w.Joins[i]).nodeByRef(ref)
if n != nil {
return n
}
}
return nil
}
func (w *WorkflowData) NodeByID(ID int64) *Node {
if w == nil {
return nil
}
n := (&w.Node).nodeByID(ID)
if n != nil {
return n
}
for i := range w.Joins {
n = (&w.Joins[i]).nodeByID(ID)
if n != nil {
return n
}
}
return nil
}
func (w *WorkflowData) NodeByName(s string) *Node {
for _, n := range w.Array() {
if n.Name == s {
return n
}
}
return nil
}