protected InlineTrigger CreateInlineTrigger()
        {
            var result = new InlineTrigger();

            DefaultSettingsOfCodeEntityHelper.SetUpInlineTrigger(result, CurrentDefaultSetings);
            return(result);
        }
示例#2
0
        /// <inheritdoc/>
        public void Append(InlineTrigger inlineTrigger)
        {
#if DEBUG
            //Log($"inlineTrigger = {inlineTrigger}");
#endif

            AnnotatedItemHelper.CheckAndFillUpHolder(inlineTrigger, _realStorageContext.MainStorageContext.CommonNamesStorage);

            inlineTrigger.CheckDirty();

            var kind = inlineTrigger.Kind;

            switch (kind)
            {
            case KindOfInlineTrigger.SystemEvent:
                AppendSystemEvent(inlineTrigger);
                break;

            case KindOfInlineTrigger.LogicConditional:
                AppendLogicConditional(inlineTrigger);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(kind), kind, null);
            }
        }
        public LogicConditionalTriggerInstanceInfo(InlineTrigger trigger, InstanceInfo parent, IEngineContext context, IStorage parentStorage)
            : base(context.Logger)
        {
            _context   = context;
            _parent    = parent;
            _trigger   = trigger;
            _condition = trigger.Condition;

            var dataResolversFactory = context.DataResolversFactory;

            _searcher = dataResolversFactory.GetLogicalSearchResolver();

            _localCodeExecutionContext = new LocalCodeExecutionContext();
            var localStorageSettings = RealStorageSettingsHelper.Create(context, parentStorage);

            _storage = new LocalStorage(localStorageSettings);
            _localCodeExecutionContext.Storage = _storage;

            _localCodeExecutionContext.Holder = parent.Name;

            _storage.LogicalStorage.OnChangedWithKeys += LogicalStorage_OnChangedWithKeys;

            lock (_lockObj)
            {
                DoSearch();
            }
        }
示例#4
0
        private void AppendSystemEvent(InlineTrigger inlineTrigger)
        {
            lock (_lockObj)
            {
                var kindOfSystemEvent = inlineTrigger.KindOfSystemEvent;

                if (_nonIndexedSystemEventsInfo.ContainsKey(kindOfSystemEvent))
                {
                    var dict = _nonIndexedSystemEventsInfo[kindOfSystemEvent];

                    if (dict.ContainsKey(inlineTrigger.Holder))
                    {
                        var targetList = dict[inlineTrigger.Holder];

#if DEBUG
                        //Log($"dict[superName].Count = {dict[inlineTrigger.Holder].Count}");
                        //Log($"targetList = {targetList.WriteListToString()}");
#endif
                        var targetLongConditionalHashCode = inlineTrigger.GetLongConditionalHashCode();

#if DEBUG
                        //Log($"targetLongConditionalHashCode = {targetLongConditionalHashCode}");
#endif

                        var itemsWithTheSameLongConditionalHashCodeList = targetList.Where(p => p.GetLongConditionalHashCode() == targetLongConditionalHashCode).ToList();

                        foreach (var itemWithTheSameLongConditionalHashCode in itemsWithTheSameLongConditionalHashCodeList)
                        {
                            targetList.Remove(itemWithTheSameLongConditionalHashCode);
                        }

                        targetList.Add(inlineTrigger);
                    }
                    else
                    {
                        dict[inlineTrigger.Holder] = new List <InlineTrigger>()
                        {
                            inlineTrigger
                        };
                    }
                }
                else
                {
                    _nonIndexedSystemEventsInfo[kindOfSystemEvent] = new Dictionary <StrongIdentifierValue, List <InlineTrigger> >()
                    {
                        { inlineTrigger.Holder, new List <InlineTrigger>()
                          {
                              inlineTrigger
                          } }
                    };
                }
            }
        }
        /// <inheritdoc/>
        protected override void OnEnter()
        {
            Result = CreateCodeEntityAndSetAsCurrent(KindOfCodeEntity.InlineTrigger);

            Result.Name               = NameHelper.CreateRuleOrFactName();
            _inlineTrigger            = CreateInlineTrigger();
            _inlineTrigger.CodeEntity = Result;
            Result.InlineTrigger      = _inlineTrigger;

            if (Result.ParentCodeEntity != null)
            {
                _inlineTrigger.Holder = Result.ParentCodeEntity.Name;
            }
        }
示例#6
0
        private void AppendLogicConditional(InlineTrigger inlineTrigger)
        {
            lock (_lockObj)
            {
                if (_nonIndexedLogicConditionalsInfo.ContainsKey(inlineTrigger.Holder))
                {
                    var targetList = _nonIndexedLogicConditionalsInfo[inlineTrigger.Holder];

#if DEBUG
                    //Log($"_nonIndexedLogicConditionalsInfo[superName].Count = {_nonIndexedLogicConditionalsInfo[inlineTrigger.Holder].Count}");
                    //Log($"targetList = {targetList.WriteListToString()}");
#endif
                    var targetLongConditionalHashCode = inlineTrigger.GetLongConditionalHashCode();

#if DEBUG
                    //Log($"targetLongConditionalHashCode = {targetLongConditionalHashCode}");
#endif

                    var itemsWithTheSameLongConditionalHashCodeList = targetList.Where(p => p.GetLongConditionalHashCode() == targetLongConditionalHashCode).ToList();

#if DEBUG
                    //Log($"itemsWithTheSameLongConditionalHashCodeList = {itemsWithTheSameLongConditionalHashCodeList.WriteListToString()}");
#endif

                    foreach (var itemWithTheSameLongConditionalHashCode in itemsWithTheSameLongConditionalHashCodeList)
                    {
                        targetList.Remove(itemWithTheSameLongConditionalHashCode);
                    }

                    targetList.Add(inlineTrigger);
                }
                else
                {
                    _nonIndexedLogicConditionalsInfo[inlineTrigger.Holder] = new List <InlineTrigger>()
                    {
                        inlineTrigger
                    };
                }
            }
        }
        public static void SetUpInlineTrigger(InlineTrigger inlineTrigger, DefaultSettingsOfCodeEntity defaultSettings)
        {
            var context = new Dictionary <object, object>();

            SetUpAnnotatedItem(inlineTrigger, defaultSettings, context);
        }