-
Notifications
You must be signed in to change notification settings - Fork 21
/
workflowInstance.go
125 lines (98 loc) · 3.2 KB
/
workflowInstance.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
117
118
119
120
121
122
123
124
125
package core
import (
"fmt"
"reflect"
"github.com/MG-RAST/AWE/lib/core/cwl"
"github.com/davecgh/go-spew/spew"
)
type WorkflowInstance struct {
Id string `bson:"id" json:"id" mapstructure:"id"`
Inputs cwl.Job_document `bson:"inputs" json:"inputs" mapstructure:"inputs"`
Outputs cwl.Job_document `bson:"outputs" json:"outputs" mapstructure:"outputs"`
RemainTasks int `bson:"remaintasks" json:"remaintasks" mapstructure:"remaintasks"`
}
func NewWorkflowInstance(id string, inputs cwl.Job_document, remain_tasks int) *WorkflowInstance {
return &WorkflowInstance{Id: id, Inputs: inputs, RemainTasks: remain_tasks}
}
func NewWorkflowInstanceFromInterface(original interface{}, context *cwl.WorkflowContext) (wi WorkflowInstance, err error) {
original, err = cwl.MakeStringMap(original, context)
if err != nil {
return
}
switch original.(type) {
case map[string]interface{}:
original_map, ok := original.(map[string]interface{})
if !ok {
err = fmt.Errorf("(NewWorkflowInstanceFromInterface) not a map: %s", spew.Sdump(original))
return
}
wi = WorkflowInstance{}
remaintasks_if, has_remaintasks := original_map["remaintasks"]
if !has_remaintasks {
err = fmt.Errorf("(NewWorkflowInstanceFromInterface) remaintasks is missing")
return
}
var remaintasks_int int
remaintasks_int, ok = remaintasks_if.(int)
if !ok {
var remaintasks_float64 float64
remaintasks_float64, ok = remaintasks_if.(float64)
if ok {
remaintasks_int = int(remaintasks_float64)
} else {
err = fmt.Errorf("(NewWorkflowInstanceFromInterface) remaintasks is not int (%s)", reflect.TypeOf(remaintasks_if))
return
}
}
wi.RemainTasks = remaintasks_int
id_if, has_id := original_map["id"]
if !has_id {
err = fmt.Errorf("(NewWorkflowInstanceFromInterface) id is missing")
return
}
var id_str string
id_str, ok = id_if.(string)
if !ok {
err = fmt.Errorf("(NewWorkflowInstanceFromInterface) id is not string")
return
}
if id_str == "" {
err = fmt.Errorf("(NewWorkflowInstanceFromInterface) id string is empty")
return
}
wi.Id = id_str
inputs_if, has_inputs := original_map["inputs"]
if !has_inputs {
err = fmt.Errorf("(NewWorkflowInstanceFromInterface) inputs missing")
return
}
var inputs *cwl.Job_document
inputs, err = cwl.NewJob_documentFromNamedTypes(inputs_if, context)
if err != nil {
err = fmt.Errorf("(NewWorkflowInstanceFromInterface) (for inputs) NewJob_document returned: %s", err.Error())
return
}
wi.Inputs = *inputs
outputs_if, has_outputs := original_map["outputs"]
if has_outputs {
var outputs *cwl.Job_document
outputs, err = cwl.NewJob_documentFromNamedTypes(outputs_if, context)
if err != nil {
err = fmt.Errorf("(NewWorkflowInstanceFromInterface) (for outputs) NewJob_document returned: %s", err.Error())
return
}
wi.Outputs = *outputs
}
case *WorkflowInstance:
wi_ptr, ok := original.(*WorkflowInstance)
if !ok {
err = fmt.Errorf("(NewWorkflowInstanceFromInterface) type assertion problem")
return
}
wi = *wi_ptr
default:
err = fmt.Errorf("(NewWorkflowInstanceFromInterface) type unknown, %s", reflect.TypeOf(original))
return
}
return
}