|
@@ -3,6 +3,7 @@ package main
|
|
|
import (
|
|
|
"encoding/json"
|
|
|
"flow"
|
|
|
+ "flowserver"
|
|
|
"log"
|
|
|
|
|
|
"github.com/gohxs/prettylog"
|
|
@@ -59,39 +60,20 @@ const jsonRaw = `
|
|
|
]
|
|
|
}`
|
|
|
|
|
|
-// Node that will contain registry src
|
|
|
-type Node struct {
|
|
|
- ID string `json:"id"`
|
|
|
- Src string `json:"src"`
|
|
|
-}
|
|
|
-
|
|
|
-// Link that joins two nodes
|
|
|
-type Link struct {
|
|
|
- From string `json:"from"`
|
|
|
- To string `json:"to"`
|
|
|
- In int `json:"in"`
|
|
|
-}
|
|
|
-
|
|
|
-type FlowDocument struct {
|
|
|
- Nodes []Node `json:"nodes"`
|
|
|
- Links []Link `json:"links"`
|
|
|
-}
|
|
|
-
|
|
|
func main() {
|
|
|
prettylog.Global()
|
|
|
- doc := FlowDocument{[]Node{}, []Link{}}
|
|
|
+ doc := flowserver.FlowDocument{[]flowserver.Node{}, []flowserver.Link{}}
|
|
|
json.Unmarshal([]byte(jsonRaw), &doc)
|
|
|
-
|
|
|
- log.Println("Doc is:", doc)
|
|
|
// Handling flow
|
|
|
//
|
|
|
reg := flow.NewRegistry()
|
|
|
reg.Register("StrCat", StrCat)
|
|
|
reg.Register("StrReverse", StrReverse)
|
|
|
+
|
|
|
f := flow.New()
|
|
|
f.SetRegistry(reg)
|
|
|
|
|
|
- nodeMap := map[string]Node{}
|
|
|
+ nodeMap := map[string]flowserver.Node{}
|
|
|
for _, n := range doc.Nodes {
|
|
|
nodeMap[n.ID] = n
|
|
|
}
|
|
@@ -99,7 +81,6 @@ func main() {
|
|
|
|
|
|
ninput := 0
|
|
|
for _, n := range doc.Nodes {
|
|
|
- log.Println("Processing node:", n.ID)
|
|
|
// Find link refered as To
|
|
|
param := make([]interface{}, 10) // 10 is temporary to test out operations
|
|
|
lastParamID := -1
|
|
@@ -110,12 +91,10 @@ func main() {
|
|
|
if l.In > lastParamID {
|
|
|
lastParamID = l.In
|
|
|
}
|
|
|
- log.Println("Attaching input:", l.In)
|
|
|
// Define operators here
|
|
|
from := nodeMap[l.From]
|
|
|
switch from.Src {
|
|
|
case "Input":
|
|
|
- log.Println("Input is external Input")
|
|
|
inOp, ok := inputMap[n.ID]
|
|
|
if !ok {
|
|
|
inOp = f.In(ninput)
|
|
@@ -124,26 +103,16 @@ func main() {
|
|
|
}
|
|
|
param[l.In] = inOp // By id perhaps
|
|
|
case "Variable":
|
|
|
- log.Println("Input is a variable")
|
|
|
param[l.In] = f.Var(from.ID, "Temporary")
|
|
|
default:
|
|
|
- log.Println("Input is another node")
|
|
|
param[l.In] = f.Res(from.ID)
|
|
|
}
|
|
|
}
|
|
|
- log.Println("Params")
|
|
|
param = param[:lastParamID+1]
|
|
|
- log.Println("Defining operation", n.ID, n.Src)
|
|
|
if n.Src == "Input" || n.Src == "Variable" {
|
|
|
- log.Println("Not a func, moving")
|
|
|
continue
|
|
|
}
|
|
|
- if len(param) > 0 {
|
|
|
- f.DefOp(n.ID, n.Src, param...)
|
|
|
- } else {
|
|
|
- f.DefOp(n.ID, n.Src)
|
|
|
- }
|
|
|
- log.Println("Operation using", n.Src, "Has", len(param), "Parameters")
|
|
|
+ f.DefOp(n.ID, n.Src, param...)
|
|
|
}
|
|
|
|
|
|
log.Println("Flow:\n", f)
|