コード例 #1
0
        public void Initialize()
        {
            var flowRuleRepo = new SqlFlowRuleRepo();
            var provRuleRepo = new SqlProvRuleRepo();

            _provRules = provRuleRepo.GetAllRules();

            var scriptBuilder = new StringBuilder();

            foreach (ProvisionRule provRule in _provRules.Where(rule => rule.RuleType == RuleType.Python))
            {
                string pyFunc = FuncCreator.GenerateFunction(provRule.Name, "entry", provRule.Condition);
                scriptBuilder.Append(pyFunc);
                scriptBuilder.Append(Environment.NewLine);
            }

            Core.RegisterProvisionScript(scriptBuilder.ToString());


            var flowRules   = flowRuleRepo.GetAllRules();
            var flowBuilder = new StringBuilder();

            foreach (FlowRule flowRule in flowRules.Where(rule => rule.RuleType == ExpressionType.Python))
            {
                string pyFunc = FuncCreator.GenerateFunction(flowRule.Name, "source, target", flowRule.Expression);
                flowBuilder.Append(pyFunc);
                flowBuilder.Append(Environment.NewLine);
            }

            Core.RegisterFlowScript(flowBuilder.ToString());
        }
コード例 #2
0
        public object Test(ProvRuleTest test)
        {
            test.ProvisionRule.Condition = test.ProvisionRule.Condition;
            string dummyId = "testId" + Guid.NewGuid().ToString().Replace("-", "");
            var    func    = FuncCreator.GenerateFunction(dummyId, "entry", test.ProvisionRule.Condition);

            Core.RegisterFlowScript(func);


            var pyFunc = Core.GetFlowFunction(dummyId);

            return(pyFunc(test.MVEntry));
        }
コード例 #3
0
        public object Test(RuleTest test)
        {
            test.FlowRule.Expression = test.FlowRule.Expression.TrimEnd('"').TrimStart('"');
            string dummyId = "testId" + Guid.NewGuid().ToString().Replace("-", "");
            var    func    = FuncCreator.GenerateFunction(dummyId, "source, target", test.FlowRule.Expression);

            Core.RegisterFlowScript(func);

            var pyFunc = Core.GetFlowFunction(dummyId);

            pyFunc(test.Source, test.Target);
            return(test.Target);
        }
コード例 #4
0
        public void Register_and_get_function()
        {
            string funcScript = FuncCreator.GenerateFunction(testFuncName, testVariables, testExpression);

            Core.RegisterFlowScript(funcScript);

            var func = Core.GetFlowFunction(testFuncName);

            Assert.IsNotNull(func);

            int result = func(4);

            Assert.AreEqual(6, result);
        }
コード例 #5
0
        public void Dictionary_variable_works_in_function()
        {
            const string expression = "dic['givenName'] + ' lund'";
            var          dic        = new Dictionary <string, string>();

            dic.Add("givenName", "per");

            string script = FuncCreator.GenerateFunction("dicTest", "dic", expression);

            Core.RegisterFlowScript(script);

            var    func = Core.GetFlowFunction("dicTest");
            string name = func(dic);

            Assert.AreEqual("per lund", name);
        }
コード例 #6
0
        public void MIM_attribs_work_in_function()
        {
            MVEntry entry = new MockMventry();

            entry["firstName"].Value = "espen";
            entry["lastName"].Value  = "askeladd";

            const string expression = "entry['firstName'].Value + ' ' + entry['lastName'].Value";
            string       script     = FuncCreator.GenerateFunction("entryTest", "entry", expression);

            Core.RegisterFlowScript(script);

            var    func = Core.GetFlowFunction("entryTest");
            string name = func(entry);

            Assert.AreEqual("espen askeladd", name);
        }
コード例 #7
0
        public void Initialize()
        {
            //var ruleLoader = new FileFlowRuleRepo(@"C:\Config\flowRules.json");
            //_flows = ruleLoader.GetAllRules();
            _flows = new SqlFlowRuleRepo().GetAllRules();


            var scriptBuilder = new StringBuilder();

            foreach (FlowRule flowRule in _flows.Where(rule => rule.RuleType == ExpressionType.Python))
            {
                string pyFunc = FuncCreator.GenerateFunction(flowRule.Name, "source, target", flowRule.Expression);
                scriptBuilder.Append(pyFunc);
                scriptBuilder.Append(Environment.NewLine);
            }

            Core.RegisterFlowScript(scriptBuilder.ToString());
        }
コード例 #8
0
        public static T Create <T>(Type type, IDefaultData defaultValue, ObjectCreationStrategy objectCreationStrategy)
        {
            if (type == null)
            {
                throw new ArgumentNullException(nameof(type));
            }

            var genericTypeParam = type.GetGenericArguments().FirstOrDefault();

            if (genericTypeParam != null)
            {
                var returnValue = FuncCreator.Create <T>(genericTypeParam, defaultValue, objectCreationStrategy);
                var result      = typeof(TaskCreator).InvokeGenericMethod(nameof(FromResult), new[] { genericTypeParam }, returnValue);
                return((T)result);
            }

            return((T)(object)Task.FromResult(0));
        }
コード例 #9
0
        public void ProvRules_python_rules_generate_condition_funcs()
        {
            var provRule = new SimpleMIM.ProvisionExt.ProvisionRule()
            {
                Name         = "nana",
                RuleType     = RuleType.Python,
                Agent        = "TestAgent",
                Condition    = "entry['FirstName'].Value == per",
                SourceObject = "person",
                TargetObject = "HRMUser"
            };

            string script = FuncCreator.GenerateFunction(provRule.Name, "entry", provRule.Condition);

            Core.RegisterProvisionScript(script);
            var func = Core.GetProvisionFunction(provRule.Name);

            Assert.IsNotNull(func);
        }
コード例 #10
0
        public void ProvRules_handles_condition()
        {
            var provRule = new SimpleMIM.ProvisionExt.ProvisionRule()
            {
                Name         = "nunu",
                RuleType     = RuleType.Python,
                Agent        = "TestAgent",
                Condition    = "entry['FirstName'].Value == 'per'",
                SourceObject = "person",
                TargetObject = "HRMUser",
                InitialFlows = new[] { new FlowRule()
                                       {
                                           Name = "UpperCaser"
                                       } }
            };

            var flowRules = new FileFlowRuleRepo("Samples\\pyFlowRules.json").GetAllRules();

            RuleFactory.SetRules(new List <ProvisionRule>()
            {
                provRule
            }, flowRules);

            string script = FuncCreator.GenerateFunction(provRule.Name, "entry", provRule.Condition);

            Core.RegisterProvisionScript(script);
            var func = Core.GetProvisionFunction(provRule.Name);

            Assert.IsNotNull(func);

            var mventry = new MockMventry("person");

            mventry["FirstName"].Value = "per";

            Assert.IsTrue(ProvisionEval.PassesCondition(provRule, mventry));

            var mventryInvalid = new MockMventry("person");

            mventryInvalid["FirstName"].Value = "sitrus";

            Assert.IsFalse(ProvisionEval.PassesCondition(provRule, mventryInvalid));
        }
コード例 #11
0
        public static T Create <T>(IDefaultData defaultData, ObjectCreationStrategy objectCreationStrategy)
        {
            var type         = typeof(T);
            var defaultValue = type.GetDefaultValue(defaultData);

            if (defaultValue != null)
            {
                return((T)defaultValue);
            }

            if (type.IsInterface)
            {
                return(InterfaceCreator.Create <T>(type, defaultData, objectCreationStrategy));
            }

            if (type.IsAbstract)
            {
                return(AbstractClassCreator.Create <T>(type, defaultData, objectCreationStrategy));
            }

            if (type.IsArray)
            {
                return(ArrayCreator.Create <T>(type, defaultData, objectCreationStrategy));
            }

            if (type.IsAction())
            {
                return(ActionCreator.Create <T>(type));
            }

            if (type.IsFunc())
            {
                return(FuncCreator.Create <T>(type, defaultData, objectCreationStrategy));
            }

            if (type.IsTask())
            {
                return(TaskCreator.Create <T>(type, defaultData, objectCreationStrategy));
            }

            return(UnknownTypeCreator.CreateDynamicFrom <T>(type, defaultData, objectCreationStrategy));
        }
コード例 #12
0
        public void ProvRules_initialflows_are_set()
        {
            var provRule = new SimpleMIM.ProvisionExt.ProvisionRule()
            {
                Name         = "nunu",
                RuleType     = RuleType.Python,
                Agent        = "TestAgent",
                Condition    = "entry['FirstName'].Value == per",
                SourceObject = "person",
                TargetObject = "HRMUser",
                InitialFlows = new [] { new FlowRule()
                                        {
                                            Name = "UpperCaser"
                                        } }
            };

            var flowRules = new FileFlowRuleRepo("Samples\\pyFlowRules.json").GetAllRules();

            RuleFactory.SetRules(new List <ProvisionRule>()
            {
                provRule
            }, flowRules);

            string script = FuncCreator.GenerateFunction(provRule.Name, "entry", provRule.Condition);

            Core.RegisterProvisionScript(script);
            var func = Core.GetProvisionFunction(provRule.Name);

            Assert.IsNotNull(func);

            var mventry = new MockMventry();

            mventry["FirstName"].Value = "Espen";
            mventry["LastName"].Value  = "Askeladd";

            var csentry = new MockCsentry();

            ProvisionEval.ApplyInitialFlows(provRule, csentry, mventry);

            Assert.AreEqual("ESPEN ASKELADD", csentry["DisplayName"].Value);
        }
コード例 #13
0
        public List <ProvisionRule> GetAllRules()
        {
            var flowRules = new List <ProvisionRule>();

            string rulesText = File.ReadAllText(_filename);
            List <ProvisionRule> flowRulesFromFile = JsonConvert.DeserializeObject <List <ProvisionRule> >(rulesText);

            flowRules.AddRange(flowRulesFromFile);

            var scriptBuilder = new StringBuilder();

            foreach (ProvisionRule flowRule in flowRules.Where(rule => rule.RuleType == RuleType.Python))
            {
                string pyFunc = FuncCreator.GenerateFunction(flowRule.Name, "entry", flowRule.Condition);
                scriptBuilder.Append(pyFunc);
                scriptBuilder.Append(Environment.NewLine);
            }

            Core.RegisterProvisionScript(scriptBuilder.ToString());

            return(flowRules);
        }
コード例 #14
0
        public List <FlowRule> GetAllRules()
        {
            var flowRules = new List <FlowRule>();

            for (int i = 0; i < _fileNames.Count; i++)
            {
                string          rulesText         = File.ReadAllText(_fileNames[i]);
                List <FlowRule> flowRulesFromFile = JsonConvert.DeserializeObject <List <FlowRule> >(rulesText);
                flowRules.AddRange(flowRulesFromFile);
            }

            var scriptBuilder = new StringBuilder();

            foreach (FlowRule flowRule in flowRules.Where(rule => rule.RuleType == ExpressionType.Python))
            {
                string pyFunc = FuncCreator.GenerateFunction(flowRule.Name, "entry", flowRule.Expression);
                scriptBuilder.Append(pyFunc);
                scriptBuilder.Append(Environment.NewLine);
            }

            Core.RegisterFlowScript(scriptBuilder.ToString());
            return(flowRules);
        }
コード例 #15
0
        public void Generate_function_string()
        {
            string func = FuncCreator.GenerateFunction(testFuncName, testVariables, testExpression);

            Assert.IsTrue(func.Contains(testFuncName) && func.Contains("return " + testExpression));
        }
コード例 #16
0
        public void Compile(PythonCompilation compilation)
        {
            string func = FuncCreator.GenerateFunction(compilation.Name, "entry", compilation.Script);

            Core.RegisterFlowScript(func);
        }