예제 #1
0
        /// <summary>
        /// Parses the html and puts the new courses into the database
        /// </summary>
        /// <param name="courseCode">The course code</param>
        /// <param name="title">The title of the course</param>
        /// <param name="desc">The description of the course</param>
        /// <param name="campus">The campus</param>
        private void CreateCourseSchedule(string courseCode, string title, string desc, string campus)
        {
            TimetablePage.ClearFilters();
            TimetablePage.EnterCourseCode(courseCode);
            TimetablePage.SearchForCourses();
            TimetablePage.WaitForContentToLoad();

            // Get course info for both the fall and winter term
            List <Course> coursesInfo = new List <Course>();

            // If there are no courses available then output it
            if (Browser.FindElement("id", "courseSearchResultNum").Text == "0 courses found.")
            {
                Console.WriteLine(courseCode + " has no courses!!!");
            }

            else
            {
                var courseTables = Browser.FindElements("xpath", "//table[@class='perCourse']");
                foreach (var courseTable in courseTables)
                {
                    //Course newCourse = GetCourses(courseTable, title, desc, campus);
                    Course newCourse = null;
                    if (newCourse != null)
                    {
                        coursesInfo.Add(newCourse);
                    }
                }
            }
            db.Courses.InsertAllOnSubmit(coursesInfo);
            db.SubmitChanges();
        }
        /// <summary>
        /// Adds the distance for two buildings in the database
        /// </summary>
        /// <param name="db">The database context</param>
        /// <param name="building1">The first building</param>
        /// <param name="building2">The second building</param>
        private void AddBuildingDistances(UofTDataContext db, Building building1, Building building2)
        {
            Console.WriteLine("Getting data " + building1.Address + " -> " + building2.Address);

            // Getting distance info (like walk durations, etc)
            BuildingDistanceCalculator calculator = new BuildingDistanceCalculator();

            DataModels.BuildingDistance buildingDistance = calculator.GetInfoBetweenBuildings("walking", building1.Address, building2.Address);

            BuildingDistance newBuildingDistance = new BuildingDistance()
            {
                Building        = building1,
                Building1       = building2,
                WalkingDistance = buildingDistance.WalkingDistance,
                WalkingDuration = buildingDistance.WalkDuration,
                CyclingDistance = buildingDistance.CyclingDistance,
                CyclingDuration = buildingDistance.CyclingDuration,
                TransitDistance = buildingDistance.PublicTransitDistance,
                TransitDuration = buildingDistance.PublicTransitDuration,
                DrivingDistance = buildingDistance.DrivingDistance,
                DrivingDuration = buildingDistance.DrivingDuration
            };

            Console.WriteLine("Inserting new data " + building1.BuildingCode + " -> " + building2.BuildingCode);
            db.BuildingDistances.InsertOnSubmit(newBuildingDistance);
            db.SubmitChanges();
        }
        /// <summary>
        /// Updates the distances between any two buildings in the database
        /// </summary>
        /// <param name="db">The database context</param>
        /// <param name="existingDistances">The existing distances</param>
        private void UpdateBuildingDistances(UofTDataContext db, BuildingDistance existingDistances)
        {
            Building building1 = existingDistances.Building;
            Building building2 = existingDistances.Building1;

            Console.WriteLine("Attempting to update data " + building1.BuildingCode + " -> " + building2.BuildingCode);

            // Getting distance info (like walk durations, etc)
            BuildingDistanceCalculator calculator = new BuildingDistanceCalculator();

            DataModels.BuildingDistance buildingDistance = calculator.GetInfoBetweenBuildings("walking", building1.Address, building2.Address);

            // Making changes to the data
            existingDistances.WalkingDistance = buildingDistance.WalkingDistance;
            existingDistances.WalkingDuration = buildingDistance.WalkDuration;
            existingDistances.CyclingDistance = buildingDistance.CyclingDistance;
            existingDistances.CyclingDuration = buildingDistance.CyclingDuration;
            existingDistances.TransitDistance = buildingDistance.PublicTransitDistance;
            existingDistances.TransitDuration = buildingDistance.PublicTransitDuration;
            existingDistances.DrivingDistance = buildingDistance.DrivingDistance;
            existingDistances.DrivingDuration = buildingDistance.DrivingDuration;

            db.SubmitChanges();
            Console.WriteLine("Successful! Has updated data for " + building1.BuildingCode + " -> " + building2.BuildingCode);
        }
        /// <summary>
        /// Deletes all building records in the database and repopulates it with new data
        /// </summary>
        public void RedoBuildingList()
        {
            db.ExecuteCommand("DELETE FROM BuildingDistances");
            db.ExecuteCommand("DELETE FROM Building");

            Browser.Initialize();
            Browser.WebInstance.Url = "http://map.utoronto.ca/c/buildings";

            using (UofTDataContext db = new UofTDataContext())
            {
                IWebElement buildingsList = Browser.WebInstance.FindElement(By.ClassName("buildinglist"));
                IReadOnlyList <IWebElement> buildingElements = buildingsList.FindElements(By.TagName("li"));

                foreach (IWebElement building in buildingElements)
                {
                    string[] description  = building.FindElement(By.XPath("./dl/dt")).Text.Split('|');
                    string   address      = building.FindElement(By.XPath("./dl/dd[1]")).Text.Trim();
                    string   buildingName = description[0].Trim();
                    string   buildingCode = description[1].Trim();

                    Building newBuilding = new Building
                    {
                        Address      = address + " Toronto, Canada",
                        BuildingCode = buildingCode,
                        BuildingName = buildingName,
                        Latitude     = null,
                        Longitude    = null
                    };

                    db.Buildings.InsertOnSubmit(newBuilding);
                }
                db.SubmitChanges();
            }

            Browser.Close();
        }