예제 #1
0
        public void Variables_Test()
        {
            DateTime date = new DateTime(2017, 11, 09);
            string   xml  = TestDataXmlReader.GetXmlString("VariablesTest.xml");

            var handler = new CollectorRuleHandler <IHavingVariables>()
            {
                Settings = RuleHandlerSettingsTestFactory.Create(1, date, xml)
            };

            var ruleContainer = TestRuleSerializer.Deserialize <RootContainer>(xml);

            ruleContainer.Interpret(handler);

            var result = handler.GetResult();

            var variables = new List <string>();

            foreach (var r in result)
            {
                variables.AddRange(r.GetVariableNames().Select(c => c.Item1));
            }

            variables = variables.Distinct().ToList();

            Assert.AreEqual(2, variables.Count);
        }
예제 #2
0
        /// <summary>
        /// Возвращает все дочерние элементы согласно введенного generic типа
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="date"></param>
        /// <param name="handler"></param>
        /// <returns></returns>
        protected ExecContainer GetChildElements <T>(IRuleHandler handler) //where T : RuleExecutable, ICustomInterpreted
        {
            //используем специальный обработчик
            //чтобы создать список источников канонов на обработку
            var childrenHandler = new CollectorRuleHandler <T>()
            {
                Settings = handler.Settings
            };

            foreach (RuleElement elem in ChildElements)
            {
                elem.Interpret(childrenHandler);
            }

            return(childrenHandler.GetResult());
        }
예제 #3
0
        /// <summary>
        /// Возвращает все дочерние элементы согласно введенного generic типа
        /// </summary>
        /// <typeparam name="T">Тип элемента правил для поиска</typeparam>
        /// <param name="predicate">Дополнительные условия для поиска</param>
        /// <returns></returns>
        public IReadOnlyList <T> GetChildElements <T>(RuleHandlerSettings settings, Func <T, bool> predicate = null) //where T : RuleExecutable, ICustomInterpreted
        {
            //используем специальный обработчик
            //чтобы найти все дочерние элементы по искомым признакам
            var childrenHandler = new CollectorRuleHandler <T>()
            {
                Settings = settings
            };

            //Interpret(childrenHandler);

            foreach (RuleElementBase elem in ChildElements)
            {
                elem.Interpret(childrenHandler);
            }

            var result = childrenHandler.GetResult();

            return((predicate != null) ? result.Where(predicate).ToList() : result);
        }
예제 #4
0
        /// <summary>
        /// Возвращает коллекцию элементов для замены, отвечающих условиям
        /// </summary>
        /// <param name="settings"></param>
        /// <param name="element"></param>
        /// <param name="predicate"></param>
        /// <returns></returns>
        public IReadOnlyList <IAsAdditionElement> GetAsAdditionChildElements(IRuleHandler handler, RuleHandlerSettings settings, IAsAdditionElement element, Func <IAsAdditionElement, bool> predicate = null)
        {
            #region old version
            ////используем специальный обработчик
            ////чтобы найти все дочерние элементы по искомым признакам
            //var childrenHandler = new AsAdditionElementHandler(element, predicate) { Settings = settings };

            ////Interpret(childrenHandler);

            //foreach (RuleElementBase elem in ChildElements)
            //{
            //    elem.Interpret(childrenHandler);
            //}

            //return childrenHandler.GetResult();
            #endregion

            var elements = _addElementsDict.GetValueOrDefault(GetKey(handler, settings));

            //Проверяем, существует ли коллекция
            if (elements == null)
            {
                //создаем ее
                var childrenHandler = new CollectorRuleHandler <IAsAdditionElement>();

                Interpret(childrenHandler);

                elements = new List <IAsAdditionElement>(childrenHandler.GetResult());

                _addElementsDict.Add(GetKey(handler, settings), elements);
            }

            return(elements.Where(c => c.AsAdditionName == element.AsAdditionName)
                   .Where(predicate)
                   .ToList());
        }