private List <WeightedInheritanceResultItemWithStorageInfo <InlineTrigger> > GetSystemEventsRawList(KindOfSystemEventOfInlineTrigger kindOfSystemEvent, StrongIdentifierValue holder, List <StorageUsingOptions> storagesList, IList <WeightedInheritanceItem> weightedInheritanceItems) { #if DEBUG //Log($"kindOfSystemEvent = {kindOfSystemEvent}"); //Log($"holder = {holder}"); #endif if (!storagesList.Any()) { return(new List <WeightedInheritanceResultItemWithStorageInfo <InlineTrigger> >()); } var result = new List <WeightedInheritanceResultItemWithStorageInfo <InlineTrigger> >(); foreach (var storageItem in storagesList) { var itemsList = storageItem.Storage.TriggersStorage.GetSystemEventsTriggersDirectly(kindOfSystemEvent, weightedInheritanceItems); if (!itemsList.Any()) { continue; } var distance = storageItem.Priority; var storage = storageItem.Storage; foreach (var item in itemsList) { result.Add(new WeightedInheritanceResultItemWithStorageInfo <InlineTrigger>(item, distance, storage)); } } return(result); }
public List <WeightedInheritanceResultItemWithStorageInfo <InlineTrigger> > ResolveSystemEventsTriggersList(KindOfSystemEventOfInlineTrigger kindOfSystemEvent, StrongIdentifierValue holder, LocalCodeExecutionContext localCodeExecutionContext, ResolverOptions options) { #if DEBUG //Log($"kindOfSystemEvent = {kindOfSystemEvent}"); //Log($"holder = {holder}"); #endif var storage = localCodeExecutionContext.Storage; var storagesList = GetStoragesList(storage); #if DEBUG //Log($"storagesList.Count = {storagesList.Count}"); //foreach (var tmpStorage in storagesList) //{ // Log($"tmpStorage.Key = {tmpStorage.Key}; tmpStorage.Value.Kind = '{tmpStorage.Value.Kind}'"); //} #endif var inheritanceResolver = _context.DataResolversFactory.GetInheritanceResolver(); var optionsForInheritanceResolver = options.Clone(); optionsForInheritanceResolver.AddSelf = true; var weightedInheritanceItems = inheritanceResolver.GetWeightedInheritanceItems(holder, localCodeExecutionContext, optionsForInheritanceResolver); #if DEBUG //Log($"weightedInheritanceItems = {weightedInheritanceItems.WriteListToString()}"); #endif var rawList = GetSystemEventsRawList(kindOfSystemEvent, holder, storagesList, weightedInheritanceItems); #if DEBUG //Log($"rawList = {rawList.WriteListToString()}"); #endif return(OrderAndDistinct(rawList, localCodeExecutionContext, options)); }
/// <inheritdoc/> public IList <WeightedInheritanceResultItem <InlineTrigger> > GetSystemEventsTriggersDirectly(KindOfSystemEventOfInlineTrigger kindOfSystemEvent, IList <WeightedInheritanceItem> weightedInheritanceItems) { #if DEBUG //Log($"kindOfSystemEvent = {kindOfSystemEvent}"); #endif lock (_lockObj) { if (_nonIndexedSystemEventsInfo.ContainsKey(kindOfSystemEvent)) { var dict = _nonIndexedSystemEventsInfo[kindOfSystemEvent]; var result = new List <WeightedInheritanceResultItem <InlineTrigger> >(); foreach (var weightedInheritanceItem in weightedInheritanceItems) { var targetHolder = weightedInheritanceItem.SuperName; if (dict.ContainsKey(targetHolder)) { var targetList = dict[targetHolder]; foreach (var targetVal in targetList) { result.Add(new WeightedInheritanceResultItem <InlineTrigger>(targetVal, weightedInheritanceItem)); } } } return(result); } return(new List <WeightedInheritanceResultItem <InlineTrigger> >()); } }