/// <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(); }