Esempio n. 1
0
        private void DrawRules(NodeConnection connection, TransitionRule rule)
        {
            Rect rect = EditorGUILayout.BeginHorizontal();

            var variableNames        = graph.variables.Select(x => x.name).ToArray();
            var currentVariableIndex = Array.IndexOf(variableNames, rule.Variable.name);
            var variableIndex        = EditorGUILayout.Popup(currentVariableIndex, variableNames);

            if (variableIndex != currentVariableIndex)
            {
                rule.Variable = graph.variables[variableIndex];
                // rule.VariableName = rule.Variable.name;
            }
            switch (rule.Variable.VariableType)
            {
            case VariableType.Trigger:
                rule.Qualifier       = Qualifier.Equal;
                rule.QualifierIntVal = 1;
                break;

            case VariableType.Boolean:
                rule.QualifierBoolEnum = (TrueFalse)EditorGUILayout.EnumPopup(rule.QualifierBoolEnum);
                rule.QualifierIntVal   = (int)rule.QualifierBoolEnum;
                rule.Qualifier         = Qualifier.Equal;
                break;

            case VariableType.Float:
                rule.Qualifier         = (Qualifier)EditorGUILayout.EnumPopup(rule.Qualifier);
                rule.QualifierFloatVal = EditorGUILayout.FloatField(rule.QualifierFloatVal);
                break;

            case VariableType.Integer:
                rule.Qualifier       = (Qualifier)EditorGUILayout.EnumPopup(rule.Qualifier);
                rule.QualifierIntVal = EditorGUILayout.IntField(rule.QualifierIntVal);
                break;
            }

            if (GUILayout.Button("x", EditorStyles.miniButton, GUILayout.Width(23)) && ConfirmRemoveRule())
            {
                connection.RemoveRule(rule);
                return;
            }

            EditorGUILayout.EndHorizontal();
        }
        public async Task <IActionResult> CreateTree(RequestViewModel model)
        {
            if (model is null)
            {
                return(Json("Lỗi: sai cấu hình dữ liệu"));
            }
            Process new_process = new Process
            {
                Name       = "test",
                Actions    = new List <Models.Action>(),
                Nodes      = new List <Node>(),
                Activities = new List <Activity>(),
                Roles      = new List <Role>(),
                Rules      = new List <TransitionRule>()
            };

            if (model.Process.Nodes is null)
            {
                return(Json("Lỗi: sai cấu trúc dữ liệu"));
            }
            foreach (var node in model.Process.Nodes)
            {
                Node new_node = new Node
                {
                    Name        = node.Name,
                    Activities  = new List <Activity>(),
                    Description = node.Description,
                    Level       = node.Level,
                    Roles       = new List <Role>(),
                    Actions     = node.Actions,
                    Childs      = new List <Node>()
                };
                if (node.Activities != null)
                {
                    foreach (var activity in node.Activities)
                    {
                        Activity new_activity = new Activity
                        {
                            ActivityType        = activity.ActivityType,
                            Name                = activity.Name,
                            Description         = activity.Description,
                            Roles               = new List <Role>(),
                            IsRequired          = true,
                            Duration            = activity.Duration,
                            Data                = new List <Data>(),
                            AbsentName          = activity.AbsentName,
                            ApproverName        = activity.ApproverName,
                            DayOff              = activity.DayOff,
                            IsReallyNotApproved = activity.IsReallyNotApproved,
                            Reason              = activity.Reason,
                            CampaignName        = activity.CampaignName,
                            IsRunning           = activity.IsRunning
                        };
                        if (activity.Roles != null)
                        {
                            foreach (var role in activity.Roles)
                            {
                                Role temp = new Role {
                                    Name = role.Name
                                };
                                new_activity.Roles.Add(temp);
                                new_process.Roles.Add(temp);
                            }
                            new_node.Activities.Add(new_activity);
                        }
                        new_process.Activities.Add(new_activity);
                    }
                    new_process.Nodes.Add(new_node);
                }
            }
            if (model.Process.Rules is null)
            {
                return(Json("Lỗi: sai cấu trúc dữ liệu"));
            }
            foreach (var action in model.Process.Actions)
            {
                var new_action = new Models.Action
                {
                    Name        = action.Name,
                    Description = action.Description
                };
                new_process.Actions.Add(new_action);
            }
            foreach (var rule in model.Process.Rules)
            {
                var new_rule = new TransitionRule
                {
                    Action      = new_process.Actions.FirstOrDefault(a => a.Name == rule.Action),
                    CurrentNode = new_process.Nodes.FirstOrDefault(s => s.Name == rule.CurrentNode),
                    NextNode    = new_process.Nodes.FirstOrDefault(s => s.Name == rule.NextNode)
                };
                new_process.Rules.Add(new_rule);
            }
            Models.Request new_request = new Request
            {
                CurrentNode = new_process.Nodes.FirstOrDefault(n => n.Level == 0),
                Data        = null,
                Histories   = null,
                Process     = new_process,
                Tasks       = null,
                Title       = model.Title,
                UserName    = "******"
            };
            var client  = new HttpClient();
            var content = new StringContent(JsonConvert.SerializeObject(new_request), Encoding.UTF8, "application/json");
            var result  = await client.PostAsync("http://" + Configuration["url"] + ":88/api/v1/requests/tree/", content);

            if (!result.IsSuccessStatusCode)
            {
                return(Json("Lỗi: không tìm thấy máy chủ"));
            }
            return(Json(new_request));
        }
Esempio n. 3
0
        static void Main(string[] args)
        {
            var niceAcceptor = new FiniteStateMachine <string, char>(
                "",
                new List <string>
            {
                "",
                "n",
                "ni",
                "nic",
                "nice",
                "rejected"
            },
                new TransitionRuleset <string, char>(
                    (("", 'n'), "n"),
                    (("n", 'i'), "ni"),
                    (("ni", 'c'), "nic"),
                    (("nic", 'e'), "nice"),
                    "rejected"//last resort, default rule if nothing else applies transition to 5 (reject state)
                    ),
                new List <string> {
                "nice"
            }
                );

            var endsWithZeroAcceptor = new FiniteStateMachine <int, int>(
                0,
                new List <int>
            {
                0,    // doesn't end with zero
                1,    // ends with zero
            },
                new TransitionRuleset <int, int>(
                    TransitionRule <int, int> .StateAgnostic(0, 1), // zero takes you to the accept state
                    TransitionRule <int, int> .StateAgnostic(1, 0)  // one takes you to the reject state
                    ),
                new List <int> {
                1
            }
                );

            var evenNumberOfZerosAcceptor = new FiniteStateMachine <int, int>(
                0,
                new List <int>
            {
                0,    // is even
                1,    // is odd
            },
                new TransitionRuleset <int, int>(
                    TransitionRule <int, int> .Regular(0, 0, 1), // Adding a zero while the number of zeros is even makes the number of zeros odd
                    TransitionRule <int, int> .Regular(1, 0, 0)  // Adding a zero while the number of zeros is odd makes the number of zeros even
                    ),
                new List <int> {
                0
            }
                );

            var oddNumberOfOnesAcceptor = new FiniteStateMachine <int, int>(
                0,
                new List <int>
            {
                0,    // is even
                1,    // is odd
            },
                new TransitionRuleset <int, int>(
                    TransitionRule <int, int> .Regular(0, 1, 1),// Same as above
                    TransitionRule <int, int> .Regular(1, 1, 0)
                    ),
                new List <int> {
                1
            }
                );

            string input;

            try
            {
                while (true)
                {
                    Console.Clear();
                    Console.WriteLine("Which task would you like to execute? Use a finite state machine to");
                    Console.WriteLine("    0: test if an input is the string 'nice'.");
                    Console.WriteLine("    1: test if a binary input ends with 0.");
                    Console.WriteLine("    2: test if a binary input has an even number of 0s.");
                    Console.WriteLine("    3: test if a binary input has an odd number of 1s.");

                    switch (int.Parse(Console.ReadLine()))
                    {
                    case 0:
                        Console.Clear();
                        Console.Write("Type a string of letters: ");
                        input = Console.ReadLine();
                        Console.WriteLine("The string you typed is" + (niceAcceptor.Accepts(input) ? "" : "n't") + " the word 'nice'. (press any key to continue...)");
                        Console.ReadKey();
                        break;

                    case 1:
                        Console.Clear();
                        Console.Write("Type a string of 0s and 1s: ");
                        input = Console.ReadLine();
                        Console.WriteLine("The string you typed " + (endsWithZeroAcceptor.Accepts(input.ToCharArray().Select(x => x - '0')) ? "ends" : "doesn't end") + " with a 0. (press any key to continue...)");
                        Console.ReadKey();
                        break;

                    case 2:
                        Console.Clear();
                        Console.Write("Type a string of 0s and 1s: ");
                        input = Console.ReadLine();
                        Console.WriteLine("The string you typed has an " + (evenNumberOfZerosAcceptor.Accepts(input.ToCharArray().Select(x => x - '0')) ? "even" : "odd") + " number of 0s. (press any key to continue...)");
                        Console.ReadKey();
                        break;

                    case 3:
                        Console.Clear();
                        Console.Write("Type a string of 0s and 1s: ");
                        input = Console.ReadLine();
                        Console.WriteLine("The string you typed has an " + (oddNumberOfOnesAcceptor.Accepts(input.ToCharArray().Select(x => x - '0')) ? "odd" : "even") + " number of 1s. (press any key to continue...)");
                        Console.ReadKey();
                        break;

                    default:
                        Console.WriteLine("Unrecognized input. (press any key to continue...)");
                        Console.ReadKey();
                        break;
                    }
                }
            }
            catch
            {
                Console.WriteLine("Invalid input.");
            }
        }
        public async Task <IActionResult> Create(RequestViewModel model)
        {
            if (model is null)
            {
                return(Json("Lỗi: sai cấu hình dữ liệu"));
            }
            Process new_process = new Process
            {
                Name       = "test",
                Actions    = new List <Models.Action>(),
                States     = new List <State>(),
                Activities = new List <Activity>(),
                Roles      = new List <Role>(),
                Rules      = new List <TransitionRule>()
            };

            if (model.Process.States is null)
            {
                return(Json("Lỗi: sai cấu trúc dữ liệu"));
            }
            foreach (var state in model.Process.States)
            {
                State new_state = new State
                {
                    Name        = state.Name,
                    Activities  = new List <Activity>(),
                    Description = "",
                    StateType   = state.StateType,
                    Roles       = new List <Role>(),
                    ETA         = state.ETA
                };
                if (state.Activities != null)
                {
                    foreach (var activity in state.Activities)
                    {
                        Activity new_activity = new Activity
                        {
                            ActivityType        = activity.ActivityType,
                            Name                = activity.Name,
                            Description         = activity.Description,
                            Roles               = new List <Role>(),
                            IsRequired          = true,
                            Duration            = activity.Duration,
                            Data                = new List <Data>(),
                            AbsentName          = activity.AbsentName,
                            ApproverName        = activity.ApproverName,
                            DayOff              = activity.DayOff,
                            IsReallyNotApproved = activity.IsReallyNotApproved,
                            Reason              = activity.Reason,
                            CampaignName        = activity.CampaignName,
                            IsRunning           = activity.IsRunning
                        };
                        if (activity.Roles != null)
                        {
                            foreach (var role in activity.Roles)
                            {
                                Role temp = new Role {
                                    Name = role.Name
                                };
                                new_activity.Roles.Add(temp);
                                new_process.Roles.Add(temp);
                            }
                            new_state.Activities.Add(new_activity);
                        }
                        new_process.Activities.Add(new_activity);
                    }
                    new_process.States.Add(new_state);
                }
            }
            if (model.Process.Rules is null)
            {
                return(Json("Lỗi: sai cấu trúc dữ liệu"));
            }
            foreach (var action in model.Process.Actions)
            {
                var new_action = new Models.Action
                {
                    Name        = action.Name,
                    Description = action.Description
                };
                new_process.Actions.Add(new_action);
            }
            var trigger = new Trigger {
                Consequence = new Consequence {
                    Method = "AddContact",
                    Name   = "Campaign"
                },
                Events = new List <Event> {
                    new Event {
                        Conditions = new List <Condition> {
                            new Condition {
                                Operator  = "GreaterOrEqual",
                                Param     = "Age",
                                Threshold = "18",
                                Type      = "Integer"
                            }
                        },
                        Name = "Must be 18 or above to enter this campaign"
                    }
                }
            };

            foreach (var rule in model.Process.Rules)
            {
                var new_rule = new TransitionRule
                {
                    Action       = new_process.Actions.FirstOrDefault(a => a.Name == rule.Action),
                    CurrentState = new_process.States.FirstOrDefault(s => s.Name == rule.CurrentState),
                    NextState    = new_process.States.FirstOrDefault(s => s.Name == rule.NextState)
                };
                if (new_rule.CurrentState.Activities[0].ActivityType == ActivityType.Campaign)
                {
                    new_rule.Trigger = trigger;
                }
                new_process.Rules.Add(new_rule);
            }
            Models.Request new_request = new Request
            {
                CurrentState = new_process.States.First(),
                Data         = null,
                Histories    = null,
                Process      = new_process,
                Tasks        = null,
                Title        = model.Title,
                UserName     = "******"
            };
            var client  = new HttpClient();
            var content = new StringContent(JsonConvert.SerializeObject(new_request), Encoding.UTF8, "application/json");
            var result  = await client.PostAsync("http://" + Configuration["url"] + ":88/api/v1/requests/", content);

            if (!result.IsSuccessStatusCode)
            {
                return(Json("Lỗi: không tìm thấy máy chủ"));
            }
            return(Json(new_request));
        }
Esempio n. 5
0
        public static Model.Request NodeCreateFlow(RequestCreateModel model1, Process process)
        {
            if (model1 is null)
            {
                return(null);
            }
            if (model1.Process is null)
            {
                return(null);
            }

            process.Actions    = new List <Models.Action>();
            process.States     = new List <State>();
            process.Rules      = new List <TransitionRule>();
            process.Roles      = new List <Role>();
            process.Activities = new List <Activity>();
            process.Nodes      = new List <Node>();

            foreach (var node in model1.Process.Nodes)
            {
                Node new_node = new Node
                {
                    Level       = node.Level,
                    Name        = node.Name,
                    Description = node.Description,
                    Activities  = new List <Activity>(),
                    Iscompleted = node.Iscompleted,
                    Roles       = new List <Role>(),
                    Actions     = new List <Models.Action>(),
                    Childs      = new List <Node>()
                };
                if (node.Actions != null)
                {
                    foreach (var action in node.Actions)
                    {
                        var new_action = new Models.Action {
                            Name        = action.Name,
                            Description = action.Description
                        };
                        new_node.Actions.Add(new_action);
                        process.Actions.Add(new_action);
                    }
                }
                foreach (var activity in node.Activities)
                {
                    if (activity.ActivityType == ActivityType.Email)
                    {
                        Activity new_activity = new EmailActivityOperator
                        {
                            ActivityType  = activity.ActivityType,
                            Name          = activity.Name,
                            Description   = activity.Description,
                            Duration      = activity.Duration,
                            IsRequired    = activity.IsRequired,
                            Discriminator = "EMAIL",
                            Roles         = new List <Role>(),
                            Data          = new List <Data>()
                        };
                        if (activity.Roles != null)
                        {
                            foreach (var role in activity.Roles)
                            {
                                Role new_role = new Role
                                {
                                    Name = role.Name
                                };
                                process.Roles.Add(new_role);
                                new_activity.Roles.Add(new_role);
                                new_node.Roles.Add(new_role);
                            }
                            process.Activities.Add(new_activity);
                            new_node.Activities.Add(new_activity);
                        }
                    }
                    else if (activity.ActivityType == ActivityType.Absent)
                    {
                        Activity new_activity = new TLActivityOperator
                        {
                            ActivityType        = activity.ActivityType,
                            Name                = activity.Name,
                            Description         = activity.Description,
                            Duration            = activity.Duration,
                            IsRequired          = activity.IsRequired,
                            Discriminator       = "TALENT-LEAVE",
                            Roles               = new List <Role>(),
                            Data                = new List <Data>(),
                            AbsentName          = activity.AbsentName,
                            ApproverName        = activity.ApproverName,
                            DayOff              = activity.DayOff,
                            IsReallyNotApproved = activity.IsReallyNotApproved,
                            Reason              = activity.Reason
                        };
                        if (activity.Roles != null)
                        {
                            foreach (var role in activity.Roles)
                            {
                                Role new_role = new Role
                                {
                                    Name = role.Name
                                };
                                process.Roles.Add(new_role);
                                new_activity.Roles.Add(new_role);
                                new_node.Roles.Add(new_role);
                            }
                            process.Activities.Add(new_activity);
                            new_node.Activities.Add(new_activity);
                        }
                    }
                    else if (activity.ActivityType == ActivityType.Generic)
                    {
                        Activity new_activity = new GenericActivityOperator
                        {
                            ActivityType = activity.ActivityType,
                            Name         = activity.Name,
                            Description  = activity.Description,
                            Duration     = activity.Duration,
                            IsRequired   = activity.IsRequired,
                            Roles        = new List <Role>(),
                            Data         = new List <Data>(),
                        };
                        if (activity.Roles != null)
                        {
                            foreach (var role in activity.Roles)
                            {
                                Role new_role = new Role
                                {
                                    Name = role.Name
                                };
                                process.Roles.Add(new_role);
                                new_activity.Roles.Add(new_role);
                                new_node.Roles.Add(new_role);
                            }
                            process.Activities.Add(new_activity);
                            new_node.Activities.Add(new_activity);
                        }
                    }
                    else if (activity.ActivityType == ActivityType.Campaign)
                    {
                        Activity new_activity = new CampaignActivityOperator
                        {
                            ActivityType  = activity.ActivityType,
                            Name          = activity.Name,
                            Description   = activity.Description,
                            Duration      = activity.Duration,
                            IsRequired    = activity.IsRequired,
                            CampaignName  = activity.CampaignName,
                            Subscribers   = new List <Contact>(),
                            IsRunning     = activity.IsRunning,
                            Roles         = new List <Role>(),
                            Data          = new List <Data>(),
                            Discriminator = "CAMPAIGN"
                        };
                        // if (activity.Subscribers != null)
                        // {
                        //     foreach (var item in activity.Subscribers)
                        //     {
                        //         ((CampaignActivityOperator)new_activity).Subscribers.Add(new Contact {
                        //             FullName = item.FullName,
                        //             Email = item.Email,
                        //             PhoneNumber = item.PhoneNumber,
                        //             Age = item.Age,
                        //             DataType = DataType.Contact
                        //         })
                        //     }
                        // }
                        if (activity.Roles != null)
                        {
                            foreach (var role in activity.Roles)
                            {
                                Role new_role = new Role
                                {
                                    Name = role.Name
                                };
                                process.Roles.Add(new_role);
                                new_activity.Roles.Add(new_role);
                                new_node.Roles.Add(new_role);
                            }
                            process.Activities.Add(new_activity);
                            new_node.Activities.Add(new_activity);
                        }
                    }
                }
                process.Nodes.Add(new_node);
            }

            if (model1.Process.Rules != null)
            {
                foreach (var rule in model1.Process.Rules)
                {
                    TransitionRule new_rule = new TransitionRule
                    {
                        CurrentNode = process.Nodes.FirstOrDefault(s => s.Name == rule.CurrentNode.Name),
                        NextNode    = process.Nodes.FirstOrDefault(s => s.Name == rule.NextNode.Name),
                        Action      = process.Actions.FirstOrDefault(a => a.Name == rule.Action.Name)
                    };
                    process.Rules.Add(new_rule);
                }
            }
            var new_request = new Model.Request
            {
                Title         = model1.Title,
                UserId        = model1.UserId,
                UserName      = model1.UserName,
                CurrentNode   = process.Nodes.FirstOrDefault(s => s.Level == 0),
                DateRequested = model1.DateRequested,
                Histories     = new List <ActivityLog>(),
                Tasks         = new List <Model.Task>(),
                Data          = new List <Data>()
            };

            new_request.Process = process;
            new_request.Tasks   = new List <Model.Task>();
            foreach (var activity in process.Activities)
            {
                new_request.Tasks.Add(new Model.Task
                {
                    Activity = activity,
                    IsDone   = false
                });
            }

            return(new_request);
        }
Esempio n. 6
0
        public static Model.Request CreateFlow(RequestCreateModel model1)
        {
            if (model1 is null)
            {
                return(null);
            }
            if (model1.Process is null)
            {
                return(null);
            }
            Process new_process = new Process
            {
                Name       = model1.Process.Name,
                Actions    = new List <Models.Action>(),
                States     = new List <State>(),
                Rules      = new List <TransitionRule>(),
                Roles      = new List <Role>(),
                Activities = new List <Activity>()
            };

            foreach (var state in model1.Process.States)
            {
                State new_state = new State
                {
                    StateType   = state.StateType,
                    Name        = state.Name,
                    Description = state.Description,
                    Activities  = new List <Activity>(),
                    Roles       = new List <Role>(),
                    ETA         = state.ETA
                };
                foreach (var activity in state.Activities)
                {
                    if (activity.ActivityType == ActivityType.Email)
                    {
                        Activity new_activity = new EmailActivityOperator
                        {
                            ActivityType  = activity.ActivityType,
                            Name          = activity.Name,
                            Description   = activity.Description,
                            Duration      = activity.Duration,
                            IsRequired    = activity.IsRequired,
                            Discriminator = "EMAIL",
                            Roles         = new List <Role>(),
                            Data          = new List <Data>()
                        };
                        if (activity.Roles != null)
                        {
                            foreach (var role in activity.Roles)
                            {
                                Role new_role = new Role
                                {
                                    Name = role.Name
                                };
                                new_process.Roles.Add(new_role);
                                new_activity.Roles.Add(new_role);
                            }
                            new_process.Activities.Add(new_activity);
                            new_state.Activities.Add(new_activity);
                        }
                    }
                    else if (activity.ActivityType == ActivityType.Absent)
                    {
                        Activity new_activity = new TLActivityOperator
                        {
                            ActivityType        = activity.ActivityType,
                            Name                = activity.Name,
                            Description         = activity.Description,
                            Duration            = activity.Duration,
                            IsRequired          = activity.IsRequired,
                            Discriminator       = "TALENT-LEAVE",
                            Roles               = new List <Role>(),
                            Data                = new List <Data>(),
                            AbsentName          = activity.AbsentName,
                            ApproverName        = activity.ApproverName,
                            DayOff              = activity.DayOff,
                            IsReallyNotApproved = activity.IsReallyNotApproved,
                            Reason              = activity.Reason
                        };
                        if (activity.Roles != null)
                        {
                            foreach (var role in activity.Roles)
                            {
                                Role new_role = new Role
                                {
                                    Name = role.Name
                                };
                                new_process.Roles.Add(new_role);
                                new_activity.Roles.Add(new_role);
                                new_state.Roles.Add(new_role);
                            }
                            new_process.Activities.Add(new_activity);
                            new_state.Activities.Add(new_activity);
                        }
                    }
                    else if (activity.ActivityType == ActivityType.Generic)
                    {
                        Activity new_activity = new GenericActivityOperator
                        {
                            ActivityType = activity.ActivityType,
                            Name         = activity.Name,
                            Description  = activity.Description,
                            Duration     = activity.Duration,
                            IsRequired   = activity.IsRequired,
                            Roles        = new List <Role>(),
                            Data         = new List <Data>(),
                        };
                        if (activity.Roles != null)
                        {
                            foreach (var role in activity.Roles)
                            {
                                Role new_role = new Role
                                {
                                    Name = role.Name
                                };
                                new_process.Roles.Add(new_role);
                                new_activity.Roles.Add(new_role);
                                new_state.Roles.Add(new_role);
                            }
                            new_process.Activities.Add(new_activity);
                            new_state.Activities.Add(new_activity);
                        }
                    }
                    else if (activity.ActivityType == ActivityType.Campaign)
                    {
                        Activity new_activity = new CampaignActivityOperator
                        {
                            ActivityType  = activity.ActivityType,
                            Name          = activity.Name,
                            Description   = activity.Description,
                            Duration      = activity.Duration,
                            IsRequired    = activity.IsRequired,
                            CampaignName  = activity.CampaignName,
                            Subscribers   = new List <Contact>(),
                            IsRunning     = activity.IsRunning,
                            Roles         = new List <Role>(),
                            Data          = new List <Data>(),
                            Discriminator = "CAMPAIGN"
                        };
                        // if (activity.Subscribers != null)
                        // {
                        //     foreach (var item in activity.Subscribers)
                        //     {
                        //         ((CampaignActivityOperator)new_activity).Subscribers.Add(new Contact {
                        //             FullName = item.FullName,
                        //             Email = item.Email,
                        //             PhoneNumber = item.PhoneNumber,
                        //             Age = item.Age,
                        //             DataType = DataType.Contact
                        //         })
                        //     }
                        // }
                        if (activity.Roles != null)
                        {
                            foreach (var role in activity.Roles)
                            {
                                Role new_role = new Role
                                {
                                    Name = role.Name
                                };
                                new_process.Roles.Add(new_role);
                                new_activity.Roles.Add(new_role);
                                new_state.Roles.Add(new_role);
                            }
                            new_process.Activities.Add(new_activity);
                            new_state.Activities.Add(new_activity);
                        }
                    }
                }
                new_process.States.Add(new_state);
            }
            if (model1.Process.Actions != null)
            {
                foreach (var action in model1.Process.Actions)
                {
                    var new_action = new Models.Action
                    {
                        Name        = action.Name,
                        Description = action.Description
                    };
                    new_process.Actions.Add(new_action);
                }
            }
            if (model1.Process.Rules != null)
            {
                foreach (var rule in model1.Process.Rules)
                {
                    TransitionRule new_rule = new TransitionRule
                    {
                        CurrentState = new_process.States.FirstOrDefault(s => s.Name == rule.CurrentState.Name),
                        NextState    = new_process.States.FirstOrDefault(s => s.Name == rule.NextState.Name),
                        Action       = new_process.Actions.FirstOrDefault(a => a.Name == rule.Action.Name)
                    };
                    // if (rule.Trigger != null) {
                    //     var new_trigger = new Trigger {
                    //             Consequence = rule.Trigger.Consequence,
                    //             Events = rule.Trigger.Events
                    //     };
                    //     new_rule.Trigger = new_trigger;
                    // }
                    new_process.Rules.Add(new_rule);
                }
            }
            var new_request = new Model.Request
            {
                Title         = model1.Title,
                UserId        = model1.UserId,
                UserName      = model1.UserName,
                CurrentState  = new_process.States.FirstOrDefault(s => s.StateType == StateType.start),
                DateRequested = model1.DateRequested,
                Histories     = new List <ActivityLog>(),
                Tasks         = new List <Model.Task>(),
                Data          = new List <Data>()
            };

            new_request.Process = new_process;
            new_request.Tasks   = new List <Model.Task>();
            foreach (var activity in new_process.Activities)
            {
                new_request.Tasks.Add(new Model.Task
                {
                    Activity = activity,
                    IsDone   = false
                });
            }

            return(new_request);
        }
Esempio n. 7
0
 public void SetTransitionRule(TransitionRule rule)
 {
 }
Esempio n. 8
0
    void LateUpdate()
    {
        TransitionRule chosenTransition = null;

        for (int i = 0; i < GlobalState.Length; ++i)
        {
            TransitionRule tr = GlobalState [i];

            if (tr != null &&
                (chosenTransition == null || tr.Priority > chosenTransition.Priority) &&
                (tr.Cond != null && (tr.Not ^ tr.Cond.IsSatisfied(current != null ? current.State : null, tr.Next))))
            {
                chosenTransition = tr;
            }
        }

        if (current != null && current.Transitions != null)
        {
            for (int i = 0; i < current.Transitions.Length; ++i)
            {
                TransitionRule tr = current.Transitions [i];

                if (tr != null &&
                    (chosenTransition == null || tr.Priority > chosenTransition.Priority) &&
                    (tr.Cond != null && (tr.Not ^ tr.Cond.IsSatisfied(current != null ? current.State : null, tr.Next))))
                {
                    chosenTransition = tr;
                }
            }
        }

        if (chosenTransition != null)
        {
            leaveCurrentState();

            // lazy getting
            current = chosenTransition.StateEntityOfNext;
            if (current == null)
            {
                foreach (StateEntity se in States)
                {
                    if (se != null && chosenTransition.Next == se.State)
                    {
                        chosenTransition.StateEntityOfNext = se;
                        current = se;
                        break;
                    }
                }

                if (current == null)
                {
                    // We have reached a state not enlisted in FsmCore.
                    current             = new StateEntity();
                    current.State       = chosenTransition.Next;
                    current.Transitions = null;
                }
            }

            enterCurrentState();
        }
    }