/// <summary>
        /// Creates a new Session Command.
        /// </summary>
        /// <param name="safeSession"> The safe session object.</param>
        /// <param name="unitTestSession"> The session that contains the unit tests.</param>
        public SessionCommand(Session safeSession, Session unitTestSession)
            : this()
        {
            this.SafeSession = safeSession;
            this.TestSession = unitTestSession;

            updateElementNames.Add("__VIEWSTATE");
            updateElementNames.Add("__EVENTTARGET");
        }
        /// <summary>
        /// Loads an exising Session type.
        /// </summary>
        /// <param name="session"> Loads a session type in the ScriptingDataDesigner.</param>
        public void LoadSession(Session session)
        {
            ScriptingApplication sd = new ScriptingApplication();

            foreach (SessionRequest req in session.SessionRequests )
            {
                if ( req.RequestType == HttpRequestType.GET )
                {
                    GetWebRequest getRequest = new GetWebRequest((GetSessionRequest)req);
                    sd.AddWebRequest(getRequest);
                }
                else if ( req.RequestType == HttpRequestType.POST )
                {
                    PostWebRequest postRequest = new PostWebRequest((PostSessionRequest)req);
                    sd.AddWebRequest(postRequest);
                }
            }

            _scriptingData = sd;
        }
        /// <summary>
        /// Opens a template for the url spider.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        //        private void btnOpenTemplate_Click(object sender, System.EventArgs e)
        //        {
        //            // send this to disk
        //            System.IO.Stream stream = null;
        //
        //            dlgOpenFile.CheckFileExists = true;
        //            dlgOpenFile.InitialDirectory = Application.UserAppDataPath;
        //            dlgOpenFile.RestoreDirectory = true;
        //            dlgOpenFile.Filter = "Web Unit Test Template Files (*.gbtt)|*.gbtt";
        //            dlgOpenFile.Title = "Open Web Unit Test Template";
        //
        //            if ( dlgOpenFile.ShowDialog() == DialogResult.OK )
        //            {
        //                Application.DoEvents();
        //                tempCursor = Cursor.Current;
        //                Cursor.Current = Cursors.WaitCursor;
        //
        //                // file
        //                stream = dlgOpenFile.OpenFile();
        //                if ( stream != null )
        //                {
        //                    try
        //                    {
        //                        // Load template
        //                        UnitTestTemplateManager testManager = new UnitTestTemplateManager();
        //                        _testTemplate = testManager.OpenTemplate(stream);
        //
        //                        // Enabled run tests
        //                        btnRunUrlSpider.Enabled = true;
        //
        //                        FileInfo file = new FileInfo(dlgOpenFile.FileName);
        //                        
        //                        // Set template name.
        //                        ShowMessage("Template '" + file.Name + "' loaded.\r\n");
        //                    }
        //                    catch ( Exception ex )
        //                    {
        //                        MessageBox.Show(ex.Message,AppLocation.ApplicationName,MessageBoxButtons.OK, MessageBoxIcon.Error);
        //                    }
        //                }
        //            }
        //
        //            if (stream != null)
        //            {
        //                Cursor.Current = tempCursor;
        //                stream.Close();
        //            }
        //        }
        /// <summary>
        /// Runs the url spider tests.
        /// </summary>
        private void RunUrlSpider()
        {
            Application.DoEvents();
            tempCursor = Cursor.Current;
            Cursor.Current = Cursors.WaitCursor;

            foreach ( DictionaryEntry de in _testTemplate )
            {
                Test test = (Test)de.Value;
                test.UnitTestDataType = UnitTestDataContainer.NoPostData;
            }

            foreach ( SessionRequest sr in urlSpiderControl.UrlRequests )
            {
                sr.WebUnitTest.Tests = _testTemplate;
            }

            //EnabledUnitTestView(true);

            // Create new session
            Session safeSession =  new Session();
            safeSession.IsCookieUpdatable = false;
            safeSession.SessionDate = DateTime.Now;
            safeSession.AllowSafeRequestBacktracking = false;
            safeSession.SessionRequests = urlSpiderControl.UrlRequests;

            // Run Session Command
            sessionCommand = new SessionCommand(safeSession, safeSession.CloneSession());
            sessionCommand.ProtocolProperties = this.ClientProperties;
            sessionCommand.Proxy = this.ProxySettings;

            // this event is for aborting
            sessionCommand.SessionAbortedEvent += new SessionAbortEventHandler(unitTestCommand_SessionAbortedEvent);
            // this event displays a report
            sessionCommand.CreateReportEvent += new UnitTestSessionReportEventHandler(UrlSpider_CreateReportEvent);
            // this event displays the progress
            sessionCommand.DisplaySessionProcessEvent += new SessionCommandProcessEventHandler(unitTestCommand_DisplaySessionProcessEvent);
            // start progress bar
            StartProgressBarEvent(this,new ProgressBarControlEventArgs("Running Url Spider..."));
            // process unit tests
            sessionCommand.Run();

            Cursor.Current = tempCursor;
        }
        /// <summary>
        /// Raises when a Record Session button is toggle.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void RecordSessionChanged(object sender, EventArgs e)
        {
            ChangeStatusBarEventArgs statusBarArgs =new ChangeStatusBarEventArgs();

            if ( !IsRecording )
            {
                statusBarArgs.Index = 2;
                statusBarArgs.Text = "Recording";
                this.ChangeStatusBarPanelEvent(this, statusBarArgs);

                this.CurrentSessionRecording = new Session();
                IsRecording = true;

            }
            else
            {

                statusBarArgs.Index = 2;
                statusBarArgs.Text = "";
                this.ChangeStatusBarPanelEvent(this, statusBarArgs);

                IsRecording = false;

                if ( this.CurrentSessionRecording.SessionRequests.Count > 0 )
                {
                    _scriptingDataDesigner = new ScriptingDataDesigner();
                    _scriptingDataDesigner.PluginMenus = this.mnSessionMenus;
                    // _scriptingDataDesigner.ApplyMenuSettingsEvent += new ApplyMenuSettingsEventHandler(SessionDesigner_ApplyMenuSettingsEvent);
                    // _scriptingDataDesigner.ApplyToolbarSettingsEvent += new ApplyToolbarSettingsEventHandler(sessionDesigner_ApplyToolbarSettingsEvent);

                    // Loads the sesion into the ui.
                    //UpdateReportDialogTestMenu(false);
                    _scriptingDataDesigner.LoadSession(this.CurrentSessionRecording);
                    _scriptingDataDesigner.DisplayTreeView();

                    // Remove any existing document and add new document.
                    this.RemoveAndAddDocument(_scriptingDataDesigner, "Scripting Application Designer", true);
                }
            }
        }
 /// <summary>
 /// Creates a new SessionDocument.
 /// </summary>
 /// <param name="safeSession"> The safe session object.</param>
 /// <param name="testSession"> The test session object.</param>
 public SessionDocument(Session safeSession, Session testSession )
 {
     this._safeSession = safeSession;
     this._testSession = testSession;
 }