Пример #1
0
        public static Pad CreateInstance(PadContract contract, ExecutionMode mode, IInstance instance)
        {
            Pad pad = new Pad(mode);

            var nodes = new List <Nodes.NodeBase>();

            foreach (var nodecontract in contract.Nodes)
            {
                nodes.Add(NodeFactory.CreateNode(nodecontract, instance.GetMappings()));
            }
            pad.Nodes = nodes;

            // fill the in and out nodes

            foreach (var nodecontract in contract.Nodes)
            {
                Nodes.NodeBase node = (from o in nodes where o.Id == nodecontract.NodeId select o).FirstOrDefault();
                if (node != null)
                {
                    if (nodecontract.InNodes != null)
                    {
                        node.InPorts = (from o in nodes where nodecontract.InNodes.Contains(o.Id) select o)?.ToList <NodeBase>();
                    }
                    if (nodecontract.OutNodes != null)
                    {
                        node.OutPorts = (from o in nodes where nodecontract.OutNodes.Contains(o.Id) select o)?.ToList <NodeBase>();
                    }
                }
            }

            return(pad);
        }
Пример #2
0
        public static Pad ToModel(this PadContract pad)
        {
            var model = new Pad();

            model.Id                   = pad.Id;
            model.Description          = pad.Description;
            model.Name                 = pad.Name;
            model.Identifier           = pad.Identifier;
            model.TriggerData          = pad.TriggerData;
            model.Nodes                = pad.Nodes?.Select(n => n.ToModel()).ToList();
            model.CurrentMaxSequenceId = pad.CurrentMaxSequenceId;
            return(model);
        }
Пример #3
0
        public static PadContract ToContract(this Pad pad)
        {
            var contract = new PadContract()
            {
                Id          = pad.Id,
                Identifier  = pad.Identifier,
                Name        = pad.Name,
                Description = pad.Description,
                TriggerData = pad.TriggerData,
            };
            var nodes = new List <NodeBaseContract>();

            if (pad.Nodes != null)
            {
                foreach (var node in pad.Nodes)
                {
                    nodes.Add(node.ToContract());
                }
            }
            contract.Nodes = nodes;
            return(contract);
        }
Пример #4
0
 public ExecutionCommand(PadContract contract, Instances instances, Guid userId)
 {
     this.UserId    = userId;
     this.Pad       = contract;
     this.Instances = instances;
 }
Пример #5
0
        public async void AddNodeConstantNumberTest()
        {
            var padContract = new PadContract()
            {
                Id   = 1,
                Name = "test"
            };

            var constant1 = new NodeBaseContract()
            {
                Id       = 1,
                NodeId   = 1,
                OutNodes = new List <long>()
                {
                    3
                },
                Type     = NodeType.Input,
                MetaData = new NodeMetaData()
                {
                    NodeData = new NodeMetaDataAttribute()
                    {
                        NodeClass = typeof(ConstantNode)
                    },
                    FieldsMetaData = new List <FieldMetaDataAttribute>()
                    {
                        new FieldMetaDataAttribute()
                        {
                            Name      = "Value",
                            ValueType = typeof(int)
                        },
                        new FieldMetaDataAttribute()
                        {
                            Name      = "ConstantType",
                            ValueType = typeof(ConstantType)
                        }
                    }
                }
            };

            var constant2 = new NodeBaseContract()
            {
                Id       = 2,
                NodeId   = 2,
                OutNodes = new List <long>()
                {
                    3
                },
                Type     = NodeType.Input,
                MetaData = new NodeMetaData()
                {
                    NodeData = new Engine.NodeMetaDataAttribute()
                    {
                        NodeClass = typeof(ConstantNode)
                    },
                    FieldsMetaData = new List <FieldMetaDataAttribute>()
                    {
                        new FieldMetaDataAttribute()
                        {
                            Name      = "Value",
                            ValueType = typeof(int)
                        },
                        new FieldMetaDataAttribute()
                        {
                            Name      = "ConstantType",
                            ValueType = typeof(ConstantType)
                        }
                    }
                }
            };

            var add = new NodeBaseContract()
            {
                Id      = 3,
                NodeId  = 3,
                InNodes = new List <long>()
                {
                    1, 2
                },
                Type     = NodeType.Output,
                MetaData = new NodeMetaData()
                {
                    NodeData = new Engine.NodeMetaDataAttribute()
                    {
                        NodeClass = typeof(AddNode)
                    },
                    FieldsMetaData = new List <FieldMetaDataAttribute>()
                    {
                        new FieldMetaDataAttribute()
                        {
                            Name            = "Left",
                            Direction       = FieldDirection.Input,
                            MappedNodeId    = 1,
                            MappedFieldName = "Value"
                        },
                        new FieldMetaDataAttribute()
                        {
                            Name         = "Right",
                            MappedNodeId = 2,
                            Direction    = FieldDirection.Input,
                        }
                    }
                }
            };

            padContract.Nodes = new List <NodeBaseContract>()
            {
                constant1, constant2, add
            };

            List <InstanceMapping> mappings = new List <InstanceMapping>()
            {
                new InstanceMapping()
                {
                    NodeId        = 1,
                    FieldMappings = new List <FieldMapping>()
                    {
                        new FieldMapping()
                        {
                            FieldName = "Value", Value = "1"
                        },
                        new FieldMapping()
                        {
                            FieldName = "ConstantType", Value = "Int"
                        },
                    }
                },
                new InstanceMapping()
                {
                    NodeId        = 2,
                    FieldMappings = new List <FieldMapping>()
                    {
                        new FieldMapping()
                        {
                            FieldName = "Value", Value = "1"
                        },
                        new FieldMapping()
                        {
                            FieldName = "ConstantType", Value = "Int"
                        },
                    }
                }
            };
            var instance = new Instances(mappings);

            var json = JsonConvert.SerializeObject(instance);

            var pad = PadFactory.CreateInstance(padContract, ExecutionMode.Normal, instance);
            await pad.Init();

            await pad.Execute(pad.Context, instance);

            Assert.Equal(ExecutionStatus.Success, pad.Context.Status);
            Assert.Equal(2.0, pad.Context.Result);
        }