func (f *FlowTraversalStep) Nodes(s ...interface{}) *traversal.GraphTraversalV { var nodes []*graph.Node if f.Error() != nil { return traversal.NewGraphTraversalV(f.GraphTraversal, nodes, f.Error()) } m, err := traversal.SliceToMetadata(s...) if err != nil { logging.GetLogger().Critical(err) return traversal.NewGraphTraversalV(f.GraphTraversal, nodes, err) } for _, flow := range f.flowset.Flows { if flow.NodeUUID != "" && flow.NodeUUID != "*" { if node := f.GraphTraversal.Graph.GetNode(graph.Identifier(flow.NodeUUID)); node != nil && node.MatchMetadata(m) { nodes = append(nodes, node) } } if flow.ANodeUUID != "" && flow.ANodeUUID != "*" { if node := f.GraphTraversal.Graph.GetNode(graph.Identifier(flow.ANodeUUID)); node != nil && node.MatchMetadata(m) { nodes = append(nodes, node) } } if flow.BNodeUUID != "" && flow.BNodeUUID != "*" { if node := f.GraphTraversal.Graph.GetNode(graph.Identifier(flow.BNodeUUID)); node != nil && node.MatchMetadata(m) { nodes = append(nodes, node) } } } return traversal.NewGraphTraversalV(f.GraphTraversal, nodes) }
func (f *FlowTraversalStep) Nodes(s ...interface{}) *traversal.GraphTraversalV { var nodes []*graph.Node if f.error != nil { return traversal.NewGraphTraversalV(f.GraphTraversal, nodes, f.error) } m, err := traversal.SliceToMetadata(s...) if err != nil { return traversal.NewGraphTraversalV(f.GraphTraversal, nodes, err) } for _, flow := range f.flowset.Flows { if flow.NodeTID != "" && flow.NodeTID != "*" { m["TID"] = flow.NodeTID if node := f.GraphTraversal.Graph.LookupFirstNode(m); node != nil { nodes = append(nodes, node) } } if flow.ANodeTID != "" && flow.ANodeTID != "*" { m["TID"] = flow.ANodeTID if node := f.GraphTraversal.Graph.LookupFirstNode(m); node != nil { nodes = append(nodes, node) } } if flow.BNodeTID != "" && flow.BNodeTID != "*" { m["TID"] = flow.BNodeTID if node := f.GraphTraversal.Graph.LookupFirstNode(m); node != nil { nodes = append(nodes, node) } } } return traversal.NewGraphTraversalV(f.GraphTraversal, nodes) }
func (s *HopsGremlinTraversalStep) Exec(last traversal.GraphTraversalStep) (traversal.GraphTraversalStep, error) { var nodes []*graph.Node switch last.(type) { case *FlowTraversalStep: fs := last.(*FlowTraversalStep) graphTraversal := fs.GraphTraversal m, err := traversal.SliceToMetadata(s.context.Params...) if err != nil { return nil, traversal.ExecutionError } for _, f := range fs.flowset.Flows { if node := graphTraversal.Graph.GetNode(graph.Identifier(f.NodeUUID)); node != nil && node.MatchMetadata(m) { nodes = append(nodes, node) } } graphTraversalV := traversal.NewGraphTraversalV(graphTraversal, nodes) return graphTraversalV, nil } return nil, traversal.ExecutionError }