Advertisement
Guest User

Untitled

a guest
Feb 21st, 2020
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.14 KB | None | 0 0
  1.  /// <summary>
  2.         /// Creates a new criteria from the original which contains unresolved dependencies.
  3.         /// Note: The extended definition references a criteria which may reference additional definitions as well.
  4.         /// This method is able to resolve these dependencies, then create one that holds only atomic values.
  5.         /// </summary>
  6.         /// <param name="rootCriteria"></param>
  7.         /// <returns></returns>
  8.         private Criteria TraverseCriteria(Criteria rootCriteria)
  9.         {
  10.             // New criteria
  11.             Criteria resultCriteria = new Criteria
  12.             {
  13.                 ApplicabilityCheck = rootCriteria.ApplicabilityCheck,
  14.                 Comment = rootCriteria.Comment,
  15.                 Negate = rootCriteria.Negate,
  16.                 Operator = rootCriteria.Operator,
  17.                 Criterions = new List<Criterion>(),
  18.                 Criterias = new List<Criteria>()
  19.             };
  20.  
  21.             // Add criterion items
  22.             if (rootCriteria.Criterions != null && rootCriteria.Criterions.Count != 0)
  23.             {
  24.                 resultCriteria.Criterions.AddRange(rootCriteria.Criterions);
  25.             }
  26.  
  27.             // Traverse criterias
  28.             if (rootCriteria.Criterias != null && rootCriteria.Criterias.Count != 0)
  29.             {
  30.                 foreach (Criteria item in rootCriteria.Criterias)
  31.                 {
  32.                     Criteria criteria = TraverseCriteria(item);
  33.                     resultCriteria.Criterias.Add(criteria);
  34.                 }
  35.             }
  36.  
  37.             // Handle extended definitions
  38.             if (rootCriteria.ExtendDefinitions != null && rootCriteria.ExtendDefinitions.Count != 0)
  39.             {
  40.                 foreach (ExtendDefinition definition in rootCriteria.ExtendDefinitions)
  41.                 {
  42.                     Definition definitionRef = RawDefinitions.FirstOrDefault(c => c.ID == definition.DefinitionRef);
  43.                     Criteria criteria = TraverseCriteria(definitionRef.Criteria);
  44.                     resultCriteria.Criterias.Add(criteria);
  45.                 }
  46.             }
  47.  
  48.             return resultCriteria;
  49.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement