Exemplo n.º 1
0
        private IEnumerable <UserNeed> ParseBlocks(IEnumerable <IReadOnlyList <string> > _textBlocks)
        {
            List <UserNeed> userNeeds = new List <UserNeed>();
            List <(Requirement Requirement, string ParentLabel)>     requirementsDetails   = new List <(Requirement, string)>();
            List <(Specification Specification, string ParentLabel)> specificationsDetails = new List <(Specification, string)>();

            foreach (IReadOnlyList <string> textBlock in _textBlocks)
            {
                const string parentPrefix = "#### ";
                if (TryGetItemDetails(textBlock, $@"^### {"UN"}-[0-9]+$", parentPrefix, out (int Id, string Description, string ParentLabel)userNeedDetails))
                {
                    UserNeed userNeed = new UserNeed(userNeedDetails.Id, userNeedDetails.Description);
                    userNeeds.Add(userNeed);
                }
                else if (TryGetItemDetails(textBlock, $@"^### {"REQ"}-[0-9]+$", parentPrefix, out (int Id, string Description, string ParentLabel)requirementDetails))
                {
                    Requirement requirement = new Requirement(requirementDetails.Id, requirementDetails.Description);
                    requirementsDetails.Add((requirement, requirementDetails.ParentLabel));
                }
                else if (TryGetItemDetails(textBlock, $@"^### {"SPEC"}-[0-9]+$", parentPrefix, out (int Id, string Description, string ParentLabel)specificationDetails))
                {
                    Specification specification = new Specification(specificationDetails.Id, specificationDetails.Description);
                    specificationsDetails.Add((specification, specificationDetails.ParentLabel));
                }
                else
                {
                    ThrowError(-1, $"Failed to parse text block!");
                }
            }

            //associate items
            Requirement[] requirements = requirementsDetails.Select(_requirement => _requirement.Requirement).ToArray();

            foreach ((Specification specification, string parentLabel) in specificationsDetails)
            {
                Requirement requirement = requirements.FirstOrDefault(_requirement => _requirement.Label == parentLabel);
                requirement?.AddSpecification(specification);
            }

            foreach ((Requirement requirement, string parentLabel) in requirementsDetails)
            {
                UserNeed userNeed = userNeeds.FirstOrDefault(_userNeed => _userNeed.Label == parentLabel);
                userNeed?.AddRequirement(requirement);
            }

            return(userNeeds);
        }
Exemplo n.º 2
0
 private bool Equals(UserNeed _other)
 {
     return(base.Equals(_other) && m_requirements.SequenceEqual(_other.m_requirements));
 }