public ConversionResult ConvertFromTxtFile(string filePath)
        {
            var fileArray = UtilityHelper.ReadFromFile(filePath);

            var result = ConvertToRules(fileArray);

            return(result);
        }
        public List <Glossary> ConvertFromTxtFile(string filePath)
        {
            var fileArray = UtilityHelper.ReadFromFile(filePath);

            var result = ConvertToGlossary(fileArray);

            return(result);
        }
        public List <Discipline> ReadCsvDisciplines(string disciplineName = "AllDisciplines")
        {
            var rootPath = AppDomain.CurrentDomain.BaseDirectory;
            var csvPath  = $"{rootPath}/csv";
            var csvFile  = $"{disciplineName}{_fileExtension}";

            var file = UtilityHelper.ReadFromFile($"{csvPath}/{csvFile}");

            var disciplines = new List <Discipline>();
            var chapters    = new List <Chapter>();
            var sections    = new List <Section>();
            var rules       = new List <Rule>();
            var subRules    = new List <SubRule>();

            // Get object classes
            foreach (var line in file)
            {
                var lineSegment = line.Split(_separator);

                switch (lineSegment[0])
                {
                case "DISCIPLINE":
                {
                    var discipline = new Discipline
                    {
                        DisciplineId = new Guid(lineSegment[1]),
                        Name         = lineSegment[2]
                    };


                    disciplines.Add(discipline);

                    break;
                }

                case "CHAPTER":
                {
                    var chapter = new Chapter
                    {
                        ChapterId    = new Guid(lineSegment[1]),
                        Name         = CleanFriendlyString(lineSegment[2]),
                        Numeric      = lineSegment[3],
                        Description  = CleanFriendlyString(lineSegment[4]),
                        DisciplineId = new Guid(lineSegment[5])
                    };


                    chapters.Add(chapter);

                    break;
                }

                case "SECTION":
                {
                    var section = new Section
                    {
                        SectionId    = new Guid(lineSegment[1]),
                        Name         = CleanFriendlyString(lineSegment[2]),
                        Numeric      = lineSegment[3],
                        Description  = CleanFriendlyString(lineSegment[4]),
                        ChapterId    = new Guid(lineSegment[5]),
                        DisciplineId = new Guid(lineSegment[6])
                    };


                    sections.Add(section);

                    break;
                }

                case "RULE":
                {
                    var rule = new Rule()
                    {
                        RuleId       = new Guid(lineSegment[1]),
                        Name         = CleanFriendlyString(lineSegment[2]),
                        Numeric      = lineSegment[3],
                        Description  = CleanFriendlyString(lineSegment[4]),
                        SectionId    = new Guid(lineSegment[5]),
                        DisciplineId = new Guid(lineSegment[6])
                    };

                    rules.Add(rule);

                    break;
                }

                case "SUBRULE":
                {
                    var subRule = new SubRule()
                    {
                        SubRuleId    = new Guid(lineSegment[1]),
                        Name         = CleanFriendlyString(lineSegment[2]),
                        Numeric      = lineSegment[3],
                        Description  = CleanFriendlyString(lineSegment[4]),
                        RuleId       = new Guid(lineSegment[5]),
                        DisciplineId = new Guid(lineSegment[6])
                    };

                    subRules.Add(subRule);

                    break;
                }
                }
            }

            // Sort object classes
            foreach (var discipline in disciplines)
            {
                var subRulesLookup = subRules.Where(o => o.DisciplineId == discipline.DisciplineId)
                                     .ToLookup(o => o.RuleId, o => o);

                foreach (var subRulesGroup in subRulesLookup)
                {
                    var rule = rules.First(o => o.RuleId == subRulesGroup.Key);
                    rule.SubRules = subRulesGroup.ToList();
                }

                var rulesLookup = rules.Where(o => o.DisciplineId == discipline.DisciplineId)
                                  .ToLookup(o => o.SectionId, o => o);

                foreach (var rulesGroup in rulesLookup)
                {
                    var section = sections.First(o => o.SectionId == rulesGroup.Key);
                    section.Rules = rulesGroup.ToList();
                }

                var sectionLookup = sections.Where(o => o.DisciplineId == discipline.DisciplineId)
                                    .ToLookup(o => o.ChapterId, o => o);

                foreach (var sectionsGroup in sectionLookup)
                {
                    var chapter = chapters.First(o => o.ChapterId == sectionsGroup.Key);
                    chapter.Sections = sectionsGroup.ToList();
                }

                discipline.Chapters = chapters.Where(o => o.DisciplineId == discipline.DisciplineId).ToList();
            }


            return(disciplines);
        }