Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// <summary>
- /// Creates a new criteria from the original which contains unresolved dependencies.
- /// Note: The extended definition references a criteria which may reference additional definitions as well.
- /// This method is able to resolve these dependencies, then create one that holds only atomic values.
- /// </summary>
- /// <param name="rootCriteria"></param>
- /// <returns></returns>
- private Criteria TraverseCriteria(Criteria rootCriteria)
- {
- // New criteria
- Criteria resultCriteria = new Criteria
- {
- ApplicabilityCheck = rootCriteria.ApplicabilityCheck,
- Comment = rootCriteria.Comment,
- Negate = rootCriteria.Negate,
- Operator = rootCriteria.Operator,
- Criterions = new List<Criterion>(),
- Criterias = new List<Criteria>()
- };
- // Add criterion items
- if (rootCriteria.Criterions != null && rootCriteria.Criterions.Count != 0)
- {
- resultCriteria.Criterions.AddRange(rootCriteria.Criterions);
- }
- // Traverse criterias
- if (rootCriteria.Criterias != null && rootCriteria.Criterias.Count != 0)
- {
- foreach (Criteria item in rootCriteria.Criterias)
- {
- Criteria criteria = TraverseCriteria(item);
- resultCriteria.Criterias.Add(criteria);
- }
- }
- // Handle extended definitions
- if (rootCriteria.ExtendDefinitions != null && rootCriteria.ExtendDefinitions.Count != 0)
- {
- foreach (ExtendDefinition definition in rootCriteria.ExtendDefinitions)
- {
- Definition definitionRef = RawDefinitions.FirstOrDefault(c => c.ID == definition.DefinitionRef);
- Criteria criteria = TraverseCriteria(definitionRef.Criteria);
- resultCriteria.Criterias.Add(criteria);
- }
- }
- return resultCriteria;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement