async Task <IInstanceNode> BuildNode(ScriptLanguage?language, NodeData node, Guid?nodeid = null) { nodeid ??= Guid.NewGuid(); IInstanceNode instance; switch (node.Type) { case NodeType.Start: instance = new StartNode(nodeid.Value, node.Name, node.Parameters.Deserialize <StartParameters>(), compiler); break; case NodeType.Expression: ExecuteExpressionParameters parameters = node.Parameters.Deserialize <ExecuteExpressionParameters>(); instance = new ExpressionNode(nodeid.Value, node.Name, await compiler.CompileCodeAsync(parameters.Code, parameters.Language)); break; case NodeType.Script: instance = new ScriptNode(nodeid.Value, node.Name, node.Parameters.Deserialize <CallWorkableParameters>(), compiler, language); break; case NodeType.Workflow: instance = new WorkflowInstanceNode(nodeid.Value, node.Name, node.Parameters.Deserialize <CallWorkableParameters>(), compiler, language); break; case NodeType.BinaryOperation: BinaryOpParameters binparameters = node.Parameters.Deserialize <BinaryOpParameters>(); instance = new BinaryNode(nodeid.Value, node.Name, binparameters, compiler); break; case NodeType.Value: ValueParameters valueparameters = node.Parameters.Deserialize <ValueParameters>(); instance = new ValueNode(nodeid.Value, node.Name, valueparameters.Value, compiler); break; case NodeType.Suspend: instance = new SuspendNode(nodeid.Value, node.Name, node.Parameters.Deserialize <SuspendParameters>()); break; case NodeType.Call: instance = new CallNode(nodeid.Value, node.Name, node.Parameters.Deserialize <CallParameters>(), compiler); break; case NodeType.Iterator: instance = new IteratorNode(nodeid.Value, node.Name, node.Parameters.Deserialize <IteratorParameters>(), compiler); break; case NodeType.Log: instance = new LogNode(nodeid.Value, node.Name, compiler, node.Parameters.Deserialize <LogParameters>()); break; default: instance = new InstanceNode(nodeid.Value, node.Name); break; } if (!string.IsNullOrEmpty(node.Variable)) { instance = new AssignStateNode(instance, node.Variable, node.VariableOperation, compiler); } return(instance); }
/// <summary> /// creates a new <see cref="BinaryNode"/> /// </summary> /// <param name="nodeid">id of workflow node</param> /// <param name="name">name of node</param> /// <param name="parameters">parameters for operation</param> /// <param name="compiler">access to code compiler</param> public BinaryNode(Guid nodeid, string name, BinaryOpParameters parameters, IScriptCompiler compiler) : base(nodeid, name, compiler) { Parameters = parameters; }