/// <summary> /// See interface docs. /// </summary> /// <param name="fileName"></param> public void CreateDatabaseIfMissing(string fileName) { if (!String.IsNullOrEmpty(fileName)) { bool fileMissing = !File.Exists(fileName); bool fileEmpty = fileMissing || new FileInfo(fileName).Length == 0; if (fileMissing || fileEmpty) { var configuration = Factory.Singleton.Resolve <IConfigurationStorage>().Singleton.Load(); var folder = Path.GetDirectoryName(fileName); if (!Directory.Exists(folder)) { Directory.CreateDirectory(folder); } if (fileMissing) { File.Create(fileName).Close(); } CloseConnection(); OpenConnection(fileName, true); try { if (_Connection != null) { var transaction = _Connection.BeginTransaction(); try { _DbHistoryTable.CreateTable(_Connection, _DatabaseLog); _DbInfoTable.CreateTable(_Connection, _DatabaseLog); _SystemEventsTable.CreateTable(_Connection, _DatabaseLog); _LocationsTable.CreateTable(_Connection, _DatabaseLog); _SessionsTable.CreateTable(_Connection, _DatabaseLog); _AircraftTable.CreateTable(_Connection, _DatabaseLog); _FlightTable.CreateTable(_Connection, _DatabaseLog); _SessionsTable.CreateTriggers(_Connection, _DatabaseLog); _AircraftTable.CreateTriggers(_Connection, _DatabaseLog); _DbHistoryTable.Insert(_Connection, null, _DatabaseLog, new BaseStationDBHistory() { Description = "Database autocreated by Virtual Radar Server", TimeStamp = SQLiteDateHelper.Truncate(Provider.UtcNow) }); _DbInfoTable.Insert(_Connection, null, _DatabaseLog, new BaseStationDBInfo() { OriginalVersion = 2, CurrentVersion = 2 }); _LocationsTable.Insert(_Connection, null, _DatabaseLog, new BaseStationLocation() { LocationName = "Home", Latitude = configuration.GoogleMapSettings.InitialMapLatitude, Longitude = configuration.GoogleMapSettings.InitialMapLongitude }); transaction.Commit(); } catch (Exception ex) { Debug.WriteLine(String.Format("Database.CreateDatabaseIfMissing caught exception {0}", ex.ToString())); transaction.Rollback(); throw; } } } finally { CloseConnection(); } } } }