Exemplo n.º 1
0
 public CourseLoader(TemplateLoader templateLoader, XElement courseElements)
 {
     try
     {
         _school = Parse(templateLoader, courseElements);
     }
     catch (XmlException ex)
     {
         throw new ConfigLoadException(ex.Message, ex);
     }
 }
Exemplo n.º 2
0
 public CourseLoader(TemplateLoader templateLoader, XElement courseElements)
 {
     try
     {
         _school = Parse(templateLoader, courseElements);
     }
     catch (XmlException ex)
     {
         throw new ConfigLoadException(ex.Message, ex);
     }
 }
Exemplo n.º 3
0
 private static DynamicCourse LoadMultiCourseNoLink(TemplateLoader templateLoader, XElement courseElement)
 {
     string courseName = XmlHelper.GetAttributeValue(courseElement, "name");
     string scoreTemplate = XmlHelper.GetAttributeValue(courseElement, "scores");
     string courseTemplatesStr = XmlHelper.GetAttributeValue(courseElement, "levels");
     string creditsStr = XmlHelper.GetAttributeValue(courseElement, "credits");
     StaticCourse[] subCourses = courseElement
         .Elements("course")
         .Select(subCourseElement => 
             LoadCourse(templateLoader, courseElement, scoreTemplate, courseTemplatesStr, creditsStr))
         .ToArray();
     return new DynamicCourse(courseName, subCourses);
 }
Exemplo n.º 4
0
 private static DynamicCourse LoadMultiCourse(List<Course> courses, TemplateLoader templateLoader, 
     XElement courseElement)
 {
     string linkName = XmlHelper.GetAttributeValueOrDefault(courseElement, "link");
     
     if (linkName == null)
         return LoadMultiCourseNoLink(templateLoader, courseElement);
     
     DynamicCourse linkedCourse = courses.FirstOrDefault(c => c.Name == linkName) as DynamicCourse;
     if (linkedCourse == null)
         throw XmlHelper.CreateException(courseElement, "Invalid course link: " + linkName);
     return LoadMultiCourseWithLink(linkedCourse, courseElement);
 }
Exemplo n.º 5
0
        private static DynamicCourse LoadMultiCourseNoLink(TemplateLoader templateLoader, XElement courseElement)
        {
            string courseName         = XmlHelper.GetAttributeValue(courseElement, "name");
            string scoreTemplate      = XmlHelper.GetAttributeValue(courseElement, "scores");
            string courseTemplatesStr = XmlHelper.GetAttributeValue(courseElement, "levels");
            string creditsStr         = XmlHelper.GetAttributeValue(courseElement, "credits");

            StaticCourse[] subCourses = courseElement
                                        .Elements("course")
                                        .Select(subCourseElement =>
                                                LoadCourse(templateLoader, courseElement, scoreTemplate, courseTemplatesStr, creditsStr))
                                        .ToArray();
            return(new DynamicCourse(courseName, subCourses));
        }
Exemplo n.º 6
0
 private static School Parse(TemplateLoader templateLoader, XElement courseElements)
 {
     List<Grade> grades = new List<Grade>();
     foreach (XElement gradeElement in courseElements.Elements("grade"))
     {
         string gradeIdStr = XmlHelper.GetAttributeValue(gradeElement, "id");
         string gradeName = XmlHelper.GetAttributeValue(gradeElement, "name");
         Debug.WriteLine(string.Format("Loading grade {0} ({1})", gradeName, gradeIdStr));
         Guid gradeId;
         if (!StringParser.TryParseGuid(gradeIdStr, out gradeId))
             throw XmlHelper.CreateException(gradeElement, "Invalid grade ID: " + gradeIdStr);
         grades.Add(new Grade(gradeId, gradeName, LoadCourses(templateLoader, gradeElement)));
     }
     return new School(grades.ToArray());
 }
Exemplo n.º 7
0
 private static Course[] LoadCourses(TemplateLoader templateLoader, XElement gradeElement)
 {
     List<Course> courses = new List<Course>();
     foreach (XElement courseElement in gradeElement.Elements())
     {
         switch (gradeElement.Name.ToString())
         {
             case "course":
                 courses.Add(LoadSingleCourse(templateLoader, courseElement));
                 break;
             case "multicourse":
                 courses.Add(LoadMultiCourse(courses, templateLoader, courseElement));
                 break;
         }
     }
     return courses.ToArray();
 }
Exemplo n.º 8
0
        private static DynamicCourse LoadMultiCourse(List <Course> courses, TemplateLoader templateLoader,
                                                     XElement courseElement)
        {
            string linkName = XmlHelper.GetAttributeValueOrDefault(courseElement, "link");

            if (linkName == null)
            {
                return(LoadMultiCourseNoLink(templateLoader, courseElement));
            }

            DynamicCourse linkedCourse = courses.FirstOrDefault(c => c.Name == linkName) as DynamicCourse;

            if (linkedCourse == null)
            {
                throw XmlHelper.CreateException(courseElement, "Invalid course link: " + linkName);
            }
            return(LoadMultiCourseWithLink(linkedCourse, courseElement));
        }
Exemplo n.º 9
0
        private static School Parse(TemplateLoader templateLoader, XElement courseElements)
        {
            List <Grade> grades = new List <Grade>();

            foreach (XElement gradeElement in courseElements.Elements("grade"))
            {
                string gradeIdStr = XmlHelper.GetAttributeValue(gradeElement, "id");
                string gradeName  = XmlHelper.GetAttributeValue(gradeElement, "name");
                Debug.WriteLine(string.Format("Loading grade {0} ({1})", gradeName, gradeIdStr));
                Guid gradeId;
                if (!StringParser.TryParseGuid(gradeIdStr, out gradeId))
                {
                    throw XmlHelper.CreateException(gradeElement, "Invalid grade ID: " + gradeIdStr);
                }
                grades.Add(new Grade(gradeId, gradeName, LoadCourses(templateLoader, gradeElement)));
            }
            return(new School(grades.ToArray()));
        }
Exemplo n.º 10
0
        private static Course[] LoadCourses(TemplateLoader templateLoader, XElement gradeElement)
        {
            List <Course> courses = new List <Course>();

            foreach (XElement courseElement in gradeElement.Elements())
            {
                switch (gradeElement.Name.ToString())
                {
                case "course":
                    courses.Add(LoadSingleCourse(templateLoader, courseElement));
                    break;

                case "multicourse":
                    courses.Add(LoadMultiCourse(courses, templateLoader, courseElement));
                    break;
                }
            }
            return(courses.ToArray());
        }
Exemplo n.º 11
0
        private static StaticCourse LoadCourse(TemplateLoader templateLoader, XElement courseElement,
                                               string parentScoreTemplate, string parentLevelTemplates, string parentCreditsStr)
        {
            string courseName = XmlHelper.GetAttributeValue(courseElement, "name");

            string scoreTemplate = XmlHelper.GetAttributeValue(courseElement, "scores") ?? parentScoreTemplate;

            if (scoreTemplate == null)
            {
                throw XmlHelper.CreateException(courseElement, "Unspecified score template");
            }

            string courseTemplates = XmlHelper.GetAttributeValue(courseElement, "levels") ?? parentLevelTemplates;

            if (courseTemplates == null)
            {
                throw XmlHelper.CreateException(courseElement, "Unspecified level template");
            }

            string creditsStr = XmlHelper.GetAttributeValue(courseElement, "credits") ?? parentCreditsStr;

            if (creditsStr == null)
            {
                throw XmlHelper.CreateException(courseElement, "Unspecified credits value");
            }

            double credits;

            if (!StringParser.TryParseDoubleStrict(creditsStr, out credits) || credits < 0)
            {
                throw XmlHelper.CreateException(courseElement, "Invalid credits value: " + creditsStr);
            }

            LevelGroup[] groups     = templateLoader.BuildLevels(courseTemplates);
            ScoreTable   scoreTable = templateLoader.BuildScoreTable(scoreTemplate);

            return(new StaticCourse(courseName, credits, groups, scoreTable));
        }
Exemplo n.º 12
0
        private static StaticCourse LoadCourse(TemplateLoader templateLoader, XElement courseElement,
            string parentScoreTemplate, string parentLevelTemplates, string parentCreditsStr)
        {
            string courseName = XmlHelper.GetAttributeValue(courseElement, "name");

            string scoreTemplate = XmlHelper.GetAttributeValue(courseElement, "scores") ?? parentScoreTemplate;
            if (scoreTemplate == null)
                throw XmlHelper.CreateException(courseElement, "Unspecified score template");

            string courseTemplates = XmlHelper.GetAttributeValue(courseElement, "levels") ?? parentLevelTemplates;
            if (courseTemplates == null)
                throw XmlHelper.CreateException(courseElement, "Unspecified level template");

            string creditsStr = XmlHelper.GetAttributeValue(courseElement, "credits") ?? parentCreditsStr;
            if (creditsStr == null)
                throw XmlHelper.CreateException(courseElement, "Unspecified credits value");

            double credits;
            if (!StringParser.TryParseDoubleStrict(creditsStr, out credits) || credits < 0)
                throw XmlHelper.CreateException(courseElement, "Invalid credits value: " + creditsStr);

            LevelGroup[] groups = templateLoader.BuildLevels(courseTemplates);
            ScoreTable scoreTable = templateLoader.BuildScoreTable(scoreTemplate);
            return new StaticCourse(courseName, credits, groups, scoreTable);
        }
Exemplo n.º 13
0
 private static StaticCourse LoadSingleCourse(TemplateLoader templateLoader, XElement courseElement)
 {
     return LoadCourse(templateLoader, courseElement, null, null, null);
 }
Exemplo n.º 14
0
 private static StaticCourse LoadSingleCourse(TemplateLoader templateLoader, XElement courseElement)
 {
     return(LoadCourse(templateLoader, courseElement, null, null, null));
 }