Exemplo n.º 1
0
 //---------------------------------------------------------------------------------------------------
 public void Save(Course obj)
 {
     using (var transaction = SessionProvider.Instance.GetSession().BeginTransaction()) {
         SessionProvider.Instance.GetSession().SaveOrUpdate(obj);
         transaction.Commit();
     }
 }
Exemplo n.º 2
0
        //---------------------------------------------------------------------------------------------------
        public override Event Import(Repository.IImportRepository repository)
        {
            var index_page = LoadUrl(InternalEvent.Url);
            Event ev = GetEventSection(index_page);

            repository.Event(ref ev);

            var courses_node = index_page.DocumentNode.SelectSingleNode("//frame[@name=\"main\"]");
            if (courses_node == null) {
                throw new ImportFormatNotSupportedException("Could not find the event main frame");
            }

            var courses_address = courses_node.GetAttributeValue("src", String.Empty);
            if (string.IsNullOrWhiteSpace(courses_address)) {
                throw new ImportFormatNotSupportedException("Could not find the event classes address");
            }

            var top_page = LoadUrl(InternalEvent.Url, courses_address);

            // Loop over classes
            var courses_nodes = top_page.DocumentNode.SelectNodes("//a[starts-with(@href, \"default.asp?page=table\")]");
            foreach (var course_node in courses_nodes) {
                var course = new Course {
                    Event = ev,
                    Name = course_node.InnerText
                };

                repository.Course(ref course);

                // The course page address needs massaging
                var course_url = course_node.Attributes["href"].Value.Replace("default.asp?page=table&", "table.asp?");
                var course_page = LoadUrl(InternalEvent.Url, course_url);

                var result_nodes = course_page.DocumentNode.SelectNodes("//tr[starts-with(@onmouseover, \"highlight\")]");

                // Two rows per result
                for (int i = 0; i < result_nodes.Count; i += 2) {
                    var result = new Result {
                        Course = course
                    };

                    // Position can be a number or null, if null then use the string as a code
                    var position_node = result_nodes[i].SelectSingleNode("td[1]");
                    try {
                        result.Position = Convert.ToInt32(position_node.ChildNodes[0].InnerText);
                    } catch (FormatException) {
                        result.Position = null;
                    }

                    // Name
                    var results_name_node = result_nodes[i].SelectSingleNode("td[2]");
                    result.Name = results_name_node.ChildNodes[0].InnerText;

                    // Time
                    var time_node = result_nodes[i].SelectSingleNode("td[3]/a");
                    try {
                        result.Time = new TimeSpan(
                            0,
                            Convert.ToInt32(time_node.ChildNodes[0].InnerText.Split(new char[] { '.' })[0]),
                            Convert.ToInt32(time_node.ChildNodes[0].InnerText.Split(new char[] { '.' })[1])
                        );
                    } catch (FormatException) {
                        result.Time = null;
                    }

                    // Club
                    var club_name_node = result_nodes[i + 1].SelectSingleNode("td[1]");
                    result.ClubName = club_name_node.ChildNodes[0].InnerText;

                    repository.Result(ref result);
                }
            }

            return ev;
        }
Exemplo n.º 3
0
        //---------------------------------------------------------------------------------------------------
        private void ParseSinglePage(
            IImportRepository repository,
            HtmlDocument document,
            Event ev,
            string course_selector,
            string course_name_selector,
            string course_details_selector,
            string results_selector,
            string results_position_selector,
            string results_name_selector,
            string results_club_selector,
            string results_age_selector,
            string results_time_selector
        )
        {
            // Courses
            var course_nodes = document.DocumentNode.SelectNodes(course_selector);
            foreach (var course_node in course_nodes) {
                Course course = new Course();
                course.Event = ev;

                // Course name
                var name_node = course_node.SelectSingleNode(course_name_selector);
                course.Name = name_node.InnerText;

                // Course details
                var details_node = course_node.SelectSingleNode(course_details_selector);
                if (details_node != null) {
                    course.Length = Convert.ToDecimal(details_node.InnerText.Split(new char[] { ' ' })[0].TrimEnd(new char[] { 'k', 'm' }));
                    course.Climb = Convert.ToDecimal(details_node.InnerText.Split(new char[] { ' ' })[1].TrimEnd(new char[] { 'm' }));
                }

                // Commit the course
                repository.Course(ref course);

                // Results
                var results_nodes = course_node.SelectNodes(results_selector);
                foreach (var results_node in results_nodes) {
                    Result result = new Result();
                    result.Course = course;

                    // Position can be a number or null, if null then use the string as a code
                    var position_node = results_node.SelectSingleNode(results_position_selector);
                    try {
                        result.Position = Convert.ToInt32(position_node.ChildNodes[0].InnerText.TrimEnd(new char[] { 'r', 's', 't', 'n', 'd', 'h' }));
                    } catch (FormatException) {
                        result.Position = null;
                        result.Code = position_node.ChildNodes[0].InnerText;
                    }

                    // Name
                    var results_name_node = results_node.SelectSingleNode(results_name_selector);
                    result.Name = results_name_node.ChildNodes[0].InnerText;

                    // Club
                    var club_name_node = results_node.SelectSingleNode(results_club_selector);
                    result.ClubName = club_name_node.ChildNodes[0].InnerText;

                    // Age class
                    var age_class_node = results_node.SelectSingleNode(results_age_selector);
                    result.Age = age_class_node.ChildNodes[0].InnerText;

                    // Time
                    var time_node = results_node.SelectSingleNode(results_time_selector);
                    try {
                        result.Time = new TimeSpan(
                            0,
                            Convert.ToInt32(time_node.ChildNodes[0].InnerText.Split(new char[] { ':' })[0]),
                            Convert.ToInt32(time_node.ChildNodes[0].InnerText.Split(new char[] { ':' })[1])
                        );
                    } catch (FormatException) {
                        result.Time = null;
                    }

                    // Commit the result
                    repository.Result(ref result);
                }
            }
        }
Exemplo n.º 4
0
 //---------------------------------------------------------------------------------------------------
 public IList<Result> Results(Course c)
 {
     return SessionProvider.Instance.GetSession().CreateQuery("FROM Result r WHERE r.Course = :course ORDER BY r.Code ASC, r.Position ASC")
         .SetEntity("course", c)
         .List<Result>();
 }
 public void Course(ref Course c)
 {
     c.Id = m_course_id++;
     m_courses.Add(c);
 }