|
@@ -35,7 +35,7 @@ func New(r *registry.R) *FlowBuilder {
|
|
|
// Load document from json into builder
|
|
|
func (fb *FlowBuilder) Load(rawData []byte) *FlowBuilder {
|
|
|
fb.flow = flow.New()
|
|
|
- fb.flow.SetRegistry(fb.registry)
|
|
|
+ fb.flow.UseRegistry(fb.registry)
|
|
|
|
|
|
doc := &FlowDocument{[]Node{}, []Link{}, []Trigger{}}
|
|
|
log.Println("Loading document from:", string(rawData))
|
|
@@ -80,15 +80,26 @@ func (fb *FlowBuilder) Build(ID string) flow.Operation {
|
|
|
}
|
|
|
|
|
|
var op flow.Operation
|
|
|
+ var err error
|
|
|
+ var inputs []reflect.Type
|
|
|
|
|
|
switch node.Src {
|
|
|
case "Input":
|
|
|
inputID, err := strconv.Atoi(node.Prop["input"])
|
|
|
if err != nil {
|
|
|
- op = f.DefErrOp(node.ID, errors.New("Invalid inputID value, must be a number"))
|
|
|
- } else {
|
|
|
- op = f.In(inputID) // By id perhaps
|
|
|
+ return f.DefErrOp(node.ID, errors.New("Invalid inputID value, must be a number"))
|
|
|
}
|
|
|
+ return f.In(inputID) // By id perhaps
|
|
|
+ default:
|
|
|
+ log.Println("Loading entry:", node.Src)
|
|
|
+ entry, err := r.Entry(node.Src)
|
|
|
+ if err != nil {
|
|
|
+ op = f.DefErrOp(node.ID, err)
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ inputs = entry.Inputs
|
|
|
+
|
|
|
+ }
|
|
|
/*case "Variable":
|
|
|
// Input 1 is the var
|
|
|
raw := node.Prop["init"]
|
|
@@ -97,47 +108,39 @@ func (fb *FlowBuilder) Build(ID string) flow.Operation {
|
|
|
op, _ = f.DefErrOp(node.ID, err)
|
|
|
} else {
|
|
|
op = f.DefVar(node.ID, node.Label, val)
|
|
|
- }*/
|
|
|
+ }
|
|
|
case "Const":
|
|
|
raw := node.Label
|
|
|
val, err := parseValue(nil, raw)
|
|
|
if err != nil {
|
|
|
- op = f.DefErrOp(node.ID, err)
|
|
|
- } else {
|
|
|
- op = f.DefConst(node.ID, val)
|
|
|
+ return f.DefErrOp(node.ID, err)
|
|
|
}
|
|
|
- default:
|
|
|
- // Load entry
|
|
|
- entry, err := r.Entry(node.Src)
|
|
|
- if err != nil {
|
|
|
- op = f.DefErrOp(node.ID, err)
|
|
|
- return nil
|
|
|
- }
|
|
|
- //// Process inputs ////
|
|
|
- param := make([]flow.Data, len(entry.Inputs))
|
|
|
- for i := range param {
|
|
|
- l := doc.fetchLinkTo(node.ID, i)
|
|
|
- if l == nil { // No link we fetch the value inserted
|
|
|
- // Const value
|
|
|
- v, err := parseValue(entry.Inputs[i], node.DefaultInputs[i])
|
|
|
- if err != nil {
|
|
|
- param[i] = f.ErrOp(err)
|
|
|
- continue
|
|
|
- }
|
|
|
- param[i] = v
|
|
|
+ return f.DefConst(node.ID, val)*/
|
|
|
+ // Load entry
|
|
|
+
|
|
|
+ //// Build inputs ////
|
|
|
+ param := make([]flow.Data, len(inputs))
|
|
|
+ for i := range param {
|
|
|
+ l := doc.fetchLinkTo(node.ID, i)
|
|
|
+ if l == nil { // No link we fetch the value inserted
|
|
|
+ // Direct input entries
|
|
|
+ v, err := parseValue(inputs[i], node.DefaultInputs[i])
|
|
|
+ if err != nil {
|
|
|
+ param[i] = f.ErrOp(err)
|
|
|
continue
|
|
|
}
|
|
|
-
|
|
|
- param[i] = fb.Build(l.From)
|
|
|
+ param[i] = v
|
|
|
+ continue
|
|
|
}
|
|
|
+ param[i] = fb.Build(l.From)
|
|
|
+ }
|
|
|
|
|
|
- op, err = f.DefOp(node.ID, node.Src, param...)
|
|
|
- if err != nil {
|
|
|
- op := f.DefErrOp(node.ID, err)
|
|
|
- return op
|
|
|
- }
|
|
|
- fb.addTriggersTo(node)
|
|
|
+ op, err = f.DefOp(node.ID, node.Src, param...)
|
|
|
+ if err != nil {
|
|
|
+ op := f.DefErrOp(node.ID, err)
|
|
|
+ return op
|
|
|
}
|
|
|
+ fb.addTriggersTo(node)
|
|
|
|
|
|
return op
|
|
|
}
|