Exemple #1
0
        public override string CreateNode(string desingComponentJson)
        {
            if (string.IsNullOrEmpty(desingComponentJson))
            {
                throw new Exception("Missing desing component json");
            }

            FlowDesignComponent nodeConfig = JsonConvert.DeserializeObject <FlowDesignComponent>(desingComponentJson, FlowDesignConverter.Settings);


            var types = GetHyperWorkflowNodeDataTypes();
            var type  = types.FirstOrDefault(it => it.FullName == nodeConfig.Type);

            var node = new NodeConfiguration(type)
            {
                AllowMultiOutputPortConnections = true
            };

            nodeConfig.Id = node.Id;

            var nodeName = nodeConfig.State?.Text;

            if (nodeName != null)
            {
                node.Name = nodeName;
            }

            var nodeColor = nodeConfig.State?.Color;

            if (!string.IsNullOrEmpty(nodeColor))
            {
                var colorR = UniColorFromHex(nodeColor);
                node.Color = colorR;
            }

            var nodeGroup = nodeConfig.Group;

            if (nodeGroup != null)
            {
                node.Group = nodeGroup;
            }

            node.GUIPosition = new UniPoint2f(nodeConfig.X, nodeConfig.Y);

            Source.AddNode(node);

            var nodeConfigJson = JsonConvert.SerializeObject(nodeConfig, FlowDesignConverter.Settings);

            return(nodeConfigJson);
        }
        public override string DuplicateNode(string originalNodeConfigId, string desingComponentJson)
        {
            if (string.IsNullOrEmpty(originalNodeConfigId))
            {
                throw new Exception("Missing component id");
            }

            FlowDesignComponent nodeConfig = JsonConvert.DeserializeObject <FlowDesignComponent>(desingComponentJson, FlowDesignConverter.Settings);

            //TODO

            var nodeConfigJson = JsonConvert.SerializeObject(nodeConfig, FlowDesignConverter.Settings);

            return(nodeConfigJson);
        }
        private void PopulateDesignerData()
        {
            DesignData = new FlowDesignData();

            if (_rootTagonomy == null)
            {
                throw new Exception("Missing source!");
            }

            DesignData.FlowName = _rootTagonomy.Name;
            DesignData.FlowId   = _rootTagonomy.Id;

            _x = _Xoffset;
            _y = _Yoffset;

            //  menu componnets
            foreach (var tagItem in _allTagonomies)
            {
                var designNodeConfiguration = new FlowDesignNodeConfiguration()
                {
                    Id       = tagItem.Name,
                    TypeFull = tagItem.Id,
                    Title    = tagItem.Name,
                    Input    = 1,
                    Output   = 1,
                    Group    = "Tagonomies",
                    Color    = "#5D9CEC",
                    Icon     = "fa fa-map-marker",
                    //Html = nodeGroupType.Html
                };

                DesignData.NodeConfigurations.Add(designNodeConfiguration);
            }

            if (!Links.Any())
            {
                var component = new FlowDesignComponent()
                {
                    X     = Convert.ToInt64(_x),
                    Y     = Convert.ToInt64(_y),                // TODO fix me!
                    Name  = _rootTagonomy.Name,
                    Id    = _rootTagonomy.Id,
                    Type  = _rootTagonomy.Name,                    //_rootTagonomy.GetType().ToString(),
                    State = new FlowState()
                    {
                        Text  = _rootTagonomy.Name,
                        Color = "#FC6E51"
                    },
                    Group = "Tagonomies"
                };

                DesignData.Components.Add(component);

                return;
            }

            //add node

            var sources = Links.GroupBy(x => x.SourceTagonomy).ToArray();

            sources = sources.OrderBy(x => Links.Count(l => l.TargetTagonomy.Id == x.Key.Id)).ToArray();


            foreach (var sourceLinks in sources)
            {
                var source = sourceLinks.Key;

                var component = DesignData.Components.FirstOrDefault(it => it.Id == source.Id);
                if (component == null)
                {
                    component = new FlowDesignComponent()
                    {
                        X     = Convert.ToInt64(_x),
                        Y     = Convert.ToInt64(_y),                    // TODO fix me!
                        Name  = source.Name,
                        Id    = source.Id,
                        Type  = source.Name,                        //_rootTagonomy.GetType().ToString(),
                        State = new FlowState()
                        {
                            Text  = sourceLinks.Key.Name,
                            Color = "#FC6E51"
                        },
                        Group = "Tagonomies"
                    };

                    DesignData.Components.Add(component);

                    _x += _Xoffset;
                }

                var targetsCount = sourceLinks.Count();

                //connections
                foreach (var link in sourceLinks)
                {
                    var targetLink        = link.TargetTagonomy;
                    var sourceLink        = link.SourceTagonomy;
                    var isForwardLiniking = link.IsForwardLink;

                    var targetComponent = DesignData.Components.FirstOrDefault(it => it.Id == targetLink.Id);
                    if (targetComponent == null)
                    {
                        targetComponent = new FlowDesignComponent()
                        {
                            X     = Convert.ToInt64(_x),
                            Y     = Convert.ToInt64(_y),                        // TODO fix me!
                            Name  = targetLink.Name,
                            Id    = targetLink.Id,
                            Type  = targetLink.Id,                            //_rootTagonomy.GetType().ToString(),
                            State = new FlowState()
                            {
                                Text  = targetLink.Name,
                                Color = "#FC6E51"
                            },
                            Group = "Tagonomies"
                        };

                        DesignData.Components.Add(targetComponent);

                        _y += _Yoffset;
                    }

                    if (!isForwardLiniking)
                    {
                        targetComponent.Connections.Add(new FlowConnection()
                        {
                            Id    = sourceLink.Id,
                            Index = "0"
                        });
                    }
                    else
                    {
                        component.Connections.Add(new FlowConnection()
                        {
                            Id    = targetLink.Id,
                            Index = "0"
                        });
                    }
                }
            }
        }
Exemple #4
0
        private void PopulateDesignerData()
        {
            var design = new FlowDesignData();

            if (Source == null)
            {
                throw new Exception("Missing source!");
            }

            design.IsReadOnly = string.IsNullOrWhiteSpace(WorkflowInstanceId) ? 1 : 0;

            var nodeDataGroupTypes = GroupingNodeDataTypes();

            nodeDataGroupTypes = MappingMenuColorAndIcons(nodeDataGroupTypes);

            foreach (var nodeGroupType in nodeDataGroupTypes)
            {
                var nodeType = nodeGroupType.Type;


                var nodeName     = nodeGroupType.Name;
                var nodeConfigId = nodeType.Name;

                var nodeNameFull = nodeType.FullName;

                var node        = new NodeConfiguration(nodeType);
                var inputCount  = node.InputCount;
                var outputCount = node.OutputCount;
                var color       = UniColorToHex(node.Color);

                var designNodeConfiguration = new FlowDesignNodeConfiguration()
                {
                    Id       = nodeConfigId.ToLower(),
                    TypeFull = nodeNameFull,
                    Title    = nodeName,
                    Input    = inputCount,
                    Output   = outputCount,
                    Group    = nodeGroupType.Group,
                    Color    = nodeGroupType.Color,
                    Icon     = nodeGroupType.Icon,
                    Html     = nodeGroupType.Html
                };

                design.NodeConfigurations.Add(designNodeConfiguration);
            }

            design.FlowName = Source.Name;
            design.FlowId   = Source.Id;

            foreach (NodeConfiguration nodeConfig in Source.Nodes)
            {
                //add node
                var x = nodeConfig.GUIPosition.X;
                var y = nodeConfig.GUIPosition.Y;

                var color = UniColorToHex(nodeConfig.Color);
                var group = nodeConfig.Group;

                var component = new FlowDesignComponent()
                {
                    X     = Convert.ToInt64(x),
                    Y     = Convert.ToInt64(y),
                    Name  = nodeConfig.NodeType.Name.ToLower(),
                    Id    = nodeConfig.Id,
                    Type  = nodeConfig.NodeType.AsType().FullName,
                    State = new FlowState()
                    {
                        Text  = string.IsNullOrWhiteSpace(nodeConfig.Name) ? nodeConfig.NodeType.Name : nodeConfig.Name,
                        Color = color
                    },
                    Group = group
                };

                if (!string.IsNullOrEmpty(color))
                {
                    component.State.Color = color;
                }
                if (!string.IsNullOrEmpty(group))
                {
                    component.Group = group;
                }

                //connections
                foreach (var connection in nodeConfig.OutputConnections.Where(it => it != null))
                {
                    var source = Source.GetNodeConfiguration(connection.SourceId);
                    var target = Source.GetNodeConfiguration(connection.TargetId);

                    var sourceConnectionId = connection.SourceId;
                    var targetConnectionId = connection.TargetId;

                    var con = new FlowConnection()
                    {
                        Id    = targetConnectionId,
                        Index = "0"
                    };

                    component.Connections.Add(con);
                }

                design.Components.Add(component);
            }

            DesignData = design;
        }
Exemple #5
0
        public override string DuplicateNode(string originalNodeConfigId, string desingComponentJson)
        {
            if (string.IsNullOrEmpty(originalNodeConfigId))
            {
                throw new Exception("Missing node component id");
            }

            var oldNodeConfiguration = Source.Nodes?.FirstOrDefault(it => it.Id == originalNodeConfigId);

            if (oldNodeConfiguration == null)
            {
                throw new Exception("Missing node configuration");
            }

            var hyperWorkflowHyperNodeData = (HyperWorkflowNodeData)oldNodeConfiguration.CreateNodeInstance(true);

            FlowDesignComponent nodeConfig = JsonConvert.DeserializeObject <FlowDesignComponent>(desingComponentJson, FlowDesignConverter.Settings);

            var types = GetHyperWorkflowNodeDataTypes();
            var type  = types.FirstOrDefault(it => it.FullName == nodeConfig.Type);

            if (type == null)
            {
                throw new ApplicationException("Missing node type");
            }

            var node = new NodeConfiguration(type)
            {
                AllowMultiOutputPortConnections = true
            };

            node.CopySettingsFromNode(hyperWorkflowHyperNodeData);

            nodeConfig.Id = node.Id;

            var nodeName = nodeConfig.State.Text;

            if (nodeName != null)
            {
                node.Name = nodeName;
            }

            var nodeColor = nodeConfig.State.Color;

            if (!string.IsNullOrEmpty(nodeColor))
            {
                var colorR = UniColorFromHex(nodeColor);
                node.Color = colorR;
            }

            var nodeGroup = nodeConfig.Group;

            if (nodeGroup != null)
            {
                node.Group = nodeGroup;
            }

            node.GUIPosition = new UniPoint2f(nodeConfig.X, nodeConfig.Y);

            Source.AddNode(node);

            var nodeConfigJson = JsonConvert.SerializeObject(nodeConfig, FlowDesignConverter.Settings);

            return(nodeConfigJson);
        }