}//FindRecoveryStartDateTime()

        #endregion

        #region FormEventTrigers
        /// <summary>
        /// The user clicks this button to load drop file.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonLoadDropFile_Click(object sender, EventArgs e)
        {
            if (sender == this.buttonLoadDropFile)
            {
                // Load Drop File.
                Log.NewEntry(LogLevel.Minor, "The button of load drop file is clicked by user.");
                DateTime minDateTime = new DateTime(2000, 1, 1);
                if (m_UserSelectedRecoveryDropFileDateTime > minDateTime)
                {
                    Log.NewEntry(LogLevel.Minor, "The user has chosen a drop file recovery date time of {0}.", m_UserSelectedRecoveryDropFileDateTime);

                    // Check if the user name or fill hub name is empty or null.
                    if (string.IsNullOrEmpty(m_UserName) || string.IsNullOrEmpty(m_FillHubOrFillManagerName))
                    {
                        Log.NewEntry(LogLevel.Major, "There are no user name or fill hub name.");
                        return;
                    }

                    // Clear the previous audit trail fill hub.
                    if (m_AuditTrailFillHub != null)
                    {
                        m_AuditTrailFillHub.RequestStop();
                    }

                    if (m_DropFilePlayer.TryPlayDropFileForOneFillHub(m_UserName, m_FillHubOrFillManagerName, m_UserSelectedRecoveryDropFileDateTime, out m_AuditTrailFillHub))
                    {
                        // Create the books on the fill hub page and start.
                        m_UserSelectedRecoveryDropFileDateTime = m_DropFilePlayer.SelectedDropDateTime;
                        DropFileStartDateTime.Value            = m_UserSelectedRecoveryDropFileDateTime;
                        Log.NewEntry(LogLevel.Minor, "Successful in reading the drop file.");
                        m_AuditTrailFillHub.Start();

                        // Try to get the final state of the fill hub.
                        if (m_FillHubPage != null)
                        {
                            m_FillHubPage.Shutdown();
                        }
                        m_FillHubPage = new FillHubPage();
                        m_FillHubPage.AddHub(m_AuditTrailFillHub);

                        // Display the fill hub page onto the GUI.
                        tabControlFillPageViewer.TabPages.Clear();
                        tabControlFillPageViewer.TabPages.Add(m_FillHubPage);
                        m_AuditTrailFillHub.CreateBooksStatic(m_MarketTTAPIService);
                    }
                    else
                    {
                        Log.NewEntry(LogLevel.Major, "Failed to read the drop file.");
                        return;
                    }
                }
            }
        }//buttonLoadDropFile_Click()
        }//TTAPIService_ServiceStateChanged()

        /// <summary>
        /// Start all the processes automatically to recover the positions for user.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonRecover_Click(object sender, EventArgs e)
        {
            if (sender == buttonRecover)
            {
                Log.NewEntry(LogLevel.Minor, "The button of recovering positions is clicked by user.");
                DateTime minDateTime = new DateTime(2000, 1, 1);
                if (m_UserSelectedRecoveryDropFileDateTime <= minDateTime)
                {
                    Log.NewEntry(LogLevel.Major, "The user does not give a start recovery date time. The date time in the code is now {0}.", m_UserSelectedRecoveryDropFileDateTime);
                    return;
                }
                else
                {
                    Log.NewEntry(LogLevel.Minor, "The user has chosen a drop file recovery date time of {0}.", m_UserSelectedRecoveryDropFileDateTime);

                    // Check if the user name or fill hub name is empty or null.
                    m_UserName = textBoxUserName.Text;
                    m_FillHubOrFillManagerName = textBoxFillHubName.Text;
                    if (string.IsNullOrEmpty(m_UserName) || string.IsNullOrEmpty(m_FillHubOrFillManagerName))
                    {
                        Log.NewEntry(LogLevel.Major, "There are no user name or fill hub name.");
                        return;
                    }

                    // Clear the previous audit trail fill hub.
                    if (m_AuditTrailFillHub != null)
                    {
                        m_AuditTrailFillHub.RequestStop();
                    }

                    if (m_DropFilePlayer.TryPlayDropFileForOneFillHub(m_UserName, m_FillHubOrFillManagerName, m_UserSelectedRecoveryDropFileDateTime, out m_AuditTrailFillHub))
                    {
                        // Create the books on the fill hub page and start.
                        m_UserSelectedRecoveryDropFileDateTime = m_DropFilePlayer.SelectedDropDateTime;
                        DropFileStartDateTime.Value            = m_UserSelectedRecoveryDropFileDateTime;
                        m_AuditTrailFillHub.Start();

                        // Try to get the final state of the fill hub.
                        if (m_FillHubPage != null)
                        {
                            m_FillHubPage.Shutdown();
                        }
                        m_FillHubPage = new FillHubPage();
                        m_FillHubPage.AddHub(m_AuditTrailFillHub);

                        // Display the fill hub page onto the GUI.
                        tabControlFillPageViewer.TabPages.Clear();
                        tabControlFillPageViewer.TabPages.Add(m_FillHubPage);
                        m_AuditTrailFillHub.CreateBooksStatic(m_MarketTTAPIService);
                        Log.NewEntry(LogLevel.Minor, "Successful in reading the drop file.");
                    }
                    else
                    {
                        Log.NewEntry(LogLevel.Major, "Failed to read the drop file.");
                        return;
                    }

                    //// Load fills from the audit trail and prepare books.
                    // Check whether the end date time is larger than the start date time.
                    if (m_UserSelectedPlayerEndDateTime < m_UserSelectedRecoveryDropFileDateTime)
                    {
                        Log.NewEntry(LogLevel.Major, "The end player date time is smaller than the start recovery date time.");
                        return;
                    }

                    // Start the listener in this fill hub.
                    m_AuditTrailPlayer = new AuditTrailPlayer(m_AuditTrailFilePath, m_UserName, m_FillHubOrFillManagerName, Log);
                    AuditTrailEventArgs fillHubRequestLoad = new AuditTrailEventArgs();
                    fillHubRequestLoad.auditTrailEventType = AuditTrailEventType.LoadAuditTrailFills;
                    fillHubRequestLoad.Data           = new object[5];
                    fillHubRequestLoad.Data[0]        = m_AuditTrailPlayer;
                    fillHubRequestLoad.Data[1]        = m_AuditTrailFillHub;
                    fillHubRequestLoad.Data[2]        = m_UserSelectedRecoveryDropFileDateTime;
                    fillHubRequestLoad.Data[3]        = m_UserSelectedPlayerEndDateTime;
                    fillHubRequestLoad.Data[4]        = Log;
                    m_AuditTrailFillHub.BooksCreated += new EventHandler(WaitBooksCreated);
                    m_AuditTrailFillHub.HubEventEnqueue(fillHubRequestLoad);
                } //DateTime_Check()
            }
        }         //buttonRecover_Click()