Пример #1
0
        /// <inheritdoc/>
        public override void DiscoverAllAnnotations(IList <RuleInstance> result)
        {
            base.DiscoverAllAnnotations(result);

            PrimaryPart?.DiscoverAllAnnotations(result);

            if (!SecondaryParts.IsNullOrEmpty())
            {
                foreach (var item in SecondaryParts)
                {
                    item.DiscoverAllAnnotations(result);
                }
            }
        }
Пример #2
0
        /// <inheritdoc/>
        protected override ulong CalculateLongHashCode()
        {
            PrepareDirty();

            var result = base.CalculateLongHashCode() ^ PrimaryPart.GetLongHashCode();

            if (!SecondaryParts.IsNullOrEmpty())
            {
                foreach (var secondaryPart in SecondaryParts)
                {
                    result ^= secondaryPart.GetLongHashCode();
                }
            }

            return(result);
        }
Пример #3
0
        public void CalculateUsedKeys()
        {
            var usedKeysList = new List <StrongIdentifierValue>();

            PrimaryPart.CalculateUsedKeys(usedKeysList);

            if (!SecondaryParts.IsNullOrEmpty())
            {
                foreach (var secondaryPart in SecondaryParts)
                {
                    secondaryPart.CalculateUsedKeys(usedKeysList);
                }
            }

            UsedKeysList = usedKeysList.Distinct().ToList();
        }
Пример #4
0
        private void PrepareDirty()
        {
            if (Name == null || Name.IsEmpty)
            {
                Name = NameHelper.CreateRuleOrFactName();
            }

            if (Kind == KindOfRuleInstance.Undefined)
            {
                if (SecondaryParts.IsNullOrEmpty())
                {
                    Kind = KindOfRuleInstance.Fact;
                }
                else
                {
                    Kind = KindOfRuleInstance.Rule;
                }
            }

            if (IsSource)
            {
                Normalized = ConvertorToNormalized.Convert(this);
                Normalized.PrepareDirty();

#if DEBUG
                //_gbcLogger.Info($"Normalized = {DebugHelperForRuleInstance.ToString(Normalized)}");
#endif
            }
            else
            {
                CalculateUsedKeys();
                PrimaryPart?.PrepareDirty(this);

                if (!SecondaryParts.IsNullOrEmpty())
                {
                    foreach (var item in SecondaryParts)
                    {
                        item.PrepareDirty(this);
                    }
                }

                Normalized = this;
            }

            _commonPersistIndexedLogicalData.NSetIndexedRuleInstanceToIndexData(Normalized);
        }
Пример #5
0
        /// <summary>
        /// Clones the instance using special context and returns cloned instance.
        /// </summary>
        /// <param name="context">Special context for providing references continuity.</param>
        /// <returns>Cloned instance.</returns>
        public RuleInstance Clone(Dictionary <object, object> context)
        {
            if (context.ContainsKey(this))
            {
                return((RuleInstance)context[this]);
            }

            var result = new RuleInstance();

            context[this] = result;

            result.IsSource       = IsSource;
            result.Name           = Name.Clone(context);
            result.Kind           = Kind;
            result.PrimaryPart    = PrimaryPart.Clone(context);
            result.SecondaryParts = SecondaryParts?.Select(p => p.Clone(context)).ToList();
            UsedKeysList          = UsedKeysList.ToList();

            result.AppendAnnotations(this, context);

            return(result);
        }