public Timetable BuildTimetable(ITransportInterface data) { DateTime startLoad = DateTime.Now; Timetable timetable = new Timetable(); int totalTrainsPerWeek = 0; List<string> timetableSources = data.TimetableUrls; // download all the webpages concurrently WebDownloader downloader = new WebDownloader(); Dictionary<string, string> downloadedPages = downloader.downloadWebpagesConcurrently(timetableSources); foreach (string s in timetableSources) { string webPage = downloadedPages[s]; ITimetableExtractor timetableExtractor = data.TimetableExtractor; Service service = timetableExtractor.ExtractTimetable(webPage); timetable.AddService(service); totalTrainsPerWeek += service.NumberRoutes; } DateTime finishLoad = DateTime.Now; TimeSpan diff = finishLoad - startLoad; Console.WriteLine("Timetable data downloaded in {0}s{1}ms", (int)diff.TotalSeconds, diff.Milliseconds); return timetable; }
public static bool LoadTimetable(FileInfo sqlDB, Timetable timetable) { DateTime startLoad = DateTime.Now; // LOAD THE NETWORK Dictionary<string, int> aliases = getNetworkAliases(sqlDB); using (SQLiteConnection sql_connection = SQLiteDatabase.GetConnection(sqlDB)) { sql_connection.Open(); using (SQLiteTransaction sql_Transaction = sql_connection.BeginTransaction()) { Dictionary<string, string> dic; // insert the timetable dic = new Dictionary<string, string>(); dic.Add(SQLFieldNames.TIMETABLE_NAME, "NULL"); int timetable_id = SQLiteDatabase.Insert(sql_connection, SQLFieldNames.TIMETABLES, dic); timetable.ID = timetable_id; // insert the services foreach (Service s in timetable.services) { // get the date for this int startdate = 0; if (!s.StartDate.Equals(DateTime.MinValue)) startdate = GetSQLDate(s.StartDate); int enddate = 0; if (!s.EndDate.Equals(DateTime.MaxValue)) enddate = GetSQLDate(s.EndDate); dic = new Dictionary<string, string>(); dic.Add(SQLFieldNames.SERVICES_NAME, s.Name); dic.Add(SQLFieldNames.SERVICES_SUMMARY, s.Summary); dic.Add(SQLFieldNames.SERVICES_TIMETABLE_ID, timetable_id.ToString()); dic.Add(SQLFieldNames.SERVICES_DIRECTION, s.Direction); dic.Add(SQLFieldNames.SERVICES_ENDDATE, enddate.ToString()); dic.Add(SQLFieldNames.SERVICES_STARTDATE, startdate.ToString()); dic.Add(SQLFieldNames.SERVICES_TYPE, s.Type.ToString()); int service_id = SQLiteDatabase.Insert(sql_connection, SQLFieldNames.SERVICES, dic); s.ID = service_id; // add the routes foreach (Route route in s.routes) { int start_date = 0; if (!route.StartDate.Equals(DateTime.MinValue)) start_date = GetSQLDate(route.StartDate); int end_date = 0; if (!route.EndDate.Equals(DateTime.MaxValue)) end_date = GetSQLDate(route.EndDate); dic = new Dictionary<string, string>(); dic.Add(SQLFieldNames.ROUTES_SERVICE_ID, service_id.ToString()); dic.Add(SQLFieldNames.ROUTES_START_DATE, start_date.ToString()); dic.Add(SQLFieldNames.ROUTES_END_DATE, end_date.ToString()); dic.Add(SQLFieldNames.ROUTES_START_TIME, route.StartTime); dic.Add(SQLFieldNames.ROUTES_END_TIME, route.EndTime); dic.Add(SQLFieldNames.ROUTES_MON, BoolToInt(route.isRunning(DayOfWeek.Monday)).ToString()); dic.Add(SQLFieldNames.ROUTES_TUE, BoolToInt(route.isRunning(DayOfWeek.Tuesday)).ToString()); dic.Add(SQLFieldNames.ROUTES_WED, BoolToInt(route.isRunning(DayOfWeek.Wednesday)).ToString()); dic.Add(SQLFieldNames.ROUTES_THU, BoolToInt(route.isRunning(DayOfWeek.Thursday)).ToString()); dic.Add(SQLFieldNames.ROUTES_FRI, BoolToInt(route.isRunning(DayOfWeek.Friday)).ToString()); dic.Add(SQLFieldNames.ROUTES_SAT, BoolToInt(route.isRunning(DayOfWeek.Saturday)).ToString()); dic.Add(SQLFieldNames.ROUTES_SUN, BoolToInt(route.isRunning(DayOfWeek.Sunday)).ToString()); int route_id = SQLiteDatabase.Insert(sql_connection, SQLFieldNames.ROUTES, dic); // add the stops foreach (Stop stop in route.stops) { int location_id = aliases[stop.Name]; dic = new Dictionary<string, string>(); dic.Add(SQLFieldNames.STOPS_ROUTE_ID, route_id.ToString()); dic.Add(SQLFieldNames.STOPS_LOCATION_ID, location_id.ToString()); dic.Add(SQLFieldNames.STOPS_TIME, stop.TimeValue.ToString()); dic.Add(SQLFieldNames.STOPS_DROPOFF, BoolToInt(stop.DropOff).ToString()); dic.Add(SQLFieldNames.STOPS_PICKUP, BoolToInt(stop.PickUp).ToString()); int stop_id = SQLiteDatabase.Insert(sql_connection, SQLFieldNames.STOPS, dic); stop.ID = stop_id; } } } sql_Transaction.Commit(); } } DateTime finishLoad = DateTime.Now; TimeSpan diff = finishLoad - startLoad; Console.WriteLine("Timetable Data Entered in {0}s{1}ms", (int)diff.TotalSeconds, diff.Milliseconds); return true; }