コード例 #1
0
        /// <summary>
        /// Writes the BoardGameLeage database to disk.
        /// </summary>
        /// <param name="a_BglDbInstance">BglDb instance to serialze into an XML file.</param>
        /// <param name="a_FilePathName">Path and name of the XML file to serialize.</param>
        /// <returns>True if the passed BglDb instance was saved.</returns>
        public static bool WriteDatabase(BglDb a_BglDbInstance, string a_FilePathName)
        {
            XmlSerializer v_Serializer = new XmlSerializer(typeof(BglDb));
            bool          v_IsSaved    = true;

            m_Logger.Debug(String.Format("Saving [{0}].", a_FilePathName));

            try
            {
                XmlWriterSettings v_Settings = new XmlWriterSettings();
                v_Settings.Indent = true;
                XmlWriter v_Writer = XmlWriter.Create(a_FilePathName, v_Settings);
                v_Serializer.Serialize(v_Writer, a_BglDbInstance);
                v_Writer.Close();
                m_Logger.Info(String.Format("Saved database as [{0}].", a_FilePathName));
                Instance.IsChanged = false;
            }
            catch (Exception ex)
            {
                m_Logger.Fatal(ex.Message + Environment.NewLine + ex.StackTrace);
                v_IsSaved = false;
            }

            return(v_IsSaved);
        }
コード例 #2
0
        public bool LoadDataBaseAndRepopulate(string a_FilePathName)
        {
            m_Logger.Debug("Creating new temp DB from: " + a_FilePathName);
            BglDb v_TempDatabase = LoadDatabase(a_FilePathName);

            if (v_TempDatabase == null)
            {
                return(false);
            }

            m_Logger.Debug("Clearing live database.");

            LiveBglDb.Results.Clear();
            LiveBglDb.Locations.Clear();
            LiveBglDb.GameFamilies.Clear();
            LiveBglDb.Games.Clear();
            LiveBglDb.Players.Clear();

            v_TempDatabase.Players      = new ObservableCollection <Player>(v_TempDatabase.Players.OrderBy(p => p.Name));
            v_TempDatabase.GameFamilies = new ObservableCollection <GameFamily>(v_TempDatabase.GameFamilies.OrderBy(p => p.Name));
            v_TempDatabase.Locations    = new ObservableCollection <Location>(v_TempDatabase.Locations.OrderBy(p => p.Name));
            v_TempDatabase.Games        = new ObservableCollection <Game>(v_TempDatabase.Games.OrderBy(p => p.Name));
            v_TempDatabase.Results      = new ObservableCollection <Result>(v_TempDatabase.Results.OrderByDescending(p => p.Date));

            foreach (Player i_Player in v_TempDatabase.Players)
            {
                LiveBglDb.Players.Add(i_Player);
            }

            foreach (GameFamily i_GameFamily in v_TempDatabase.GameFamilies)
            {
                LiveBglDb.GameFamilies.Add(i_GameFamily);
            }

            foreach (Game i_Game in v_TempDatabase.Games)
            {
                LiveBglDb.Games.Add(i_Game);
            }

            foreach (Location i_Location in v_TempDatabase.Locations)
            {
                LiveBglDb.Locations.Add(i_Location);
            }

            foreach (Result i_Result in v_TempDatabase.Results)
            {
                LiveBglDb.Results.Add(i_Result);
                i_Result.Init();
            }

            m_Logger.Info(String.Format("[{0}] Players loaded.", LiveBglDb.Players.Count));
            m_Logger.Info(String.Format("[{0}] Game Families loaded.", LiveBglDb.GameFamilies.Count));
            m_Logger.Info(String.Format("[{0}] Games loaded.", LiveBglDb.Games.Count));
            m_Logger.Info(String.Format("[{0}] Locationa loaded.", LiveBglDb.Locations.Count));
            m_Logger.Info(String.Format("[{0}] Games loaded.", LiveBglDb.Games.Count));
            m_Logger.Info(String.Format("[{0}] Results loaded.", LiveBglDb.Results.Count));

            IsChanged = false;

            return(true);
        }
コード例 #3
0
        /// <summary>
        /// Deserializes the BoardgameLeagueDatabase and copies a backup of the database file.
        /// </summary>
        /// <param name="a_FilePathName">Path and name of the XML file to deserialize.</param>
        /// <returns>Returns the DB as a BglDb instance. It will be null in case of errors (which is
        /// pretty unrecoverable).</returns>
        private BglDb LoadDatabase(string a_FilePathName)
        {
            m_IsStartingUp = true;
            XmlSerializer v_Serializer  = new XmlSerializer(typeof(BglDb));
            BglDb         v_BglDataBase = null;

            Custodian.Instance.Reset();

            try
            {
                m_Logger.Info(String.Format("Calling from [{0}].", Directory.GetCurrentDirectory()));
                m_Logger.Info(String.Format("Loading database [{0}].", a_FilePathName));
                XmlReader v_Reader = XmlReader.Create(a_FilePathName);
                v_BglDataBase = (BglDb)v_Serializer.Deserialize(v_Reader);
                v_Reader.Close();
                v_BglDataBase.Init();

                // Get the file name so that we can add a timestamp between name and file extension.
                int    v_LastDotPosition = a_FilePathName.LastIndexOf('.');
                String v_BackupFileName  = "_" + DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss");

                if (v_LastDotPosition != -1)
                {
                    String v_FileNameStart = a_FilePathName.Substring(0, v_LastDotPosition);
                    String v_FileNameEnd   = a_FilePathName.Substring(v_LastDotPosition);
                    v_BackupFileName = v_FileNameStart + v_BackupFileName + v_FileNameEnd;
                }
                else
                {
                    v_BackupFileName = a_FilePathName + v_BackupFileName;
                }

                // Prepare to create a the backup directory.
                int    v_LastDirectorySeperatorPosition = v_BackupFileName.LastIndexOf(Path.DirectorySeparatorChar);
                String v_PathToBackupDirectory;
                String v_BackupFolderName = "backup";

                if (v_LastDirectorySeperatorPosition == -1)
                {
                    v_BackupFileName        = v_BackupFolderName + Path.DirectorySeparatorChar + v_BackupFileName;
                    v_PathToBackupDirectory = v_BackupFolderName;
                }
                else
                {
                    v_PathToBackupDirectory = a_FilePathName.Substring(0, v_LastDirectorySeperatorPosition + 1) + v_BackupFolderName;
                    v_BackupFileName        = v_PathToBackupDirectory + v_BackupFileName.Substring(v_LastDirectorySeperatorPosition);
                }

                try
                {
                    Directory.CreateDirectory(v_PathToBackupDirectory);
                    File.Copy(a_FilePathName, v_BackupFileName);
                    m_Logger.Info(String.Format("Wrote backup of [{0}] as [{1}].", a_FilePathName, v_BackupFileName));
                }
                catch (Exception ex)
                {
                    m_Logger.Error(String.Format("Backing up the file [{0}] as [{1}] failed.", a_FilePathName, v_BackupFileName), ex);
                }
            }
            catch (Exception ex)
            {
                m_Logger.Fatal("Loading of database was not successful.", ex);
            }

            m_IsStartingUp = false;

            return(v_BglDataBase);
        }