Exemple #1
0
        /// <summary>Hit when the test for connection is finished.</summary>
        /// <param name="sender">SoapServiceClient</param>
        /// <param name="e">Connection_Authenticate2CompletedEventArgs</param>
        private void client2_Connection_Authenticate2Completed(object sender, Connection_Authenticate2CompletedEventArgs e)
        {
            const string METHOD = CLASS_NAME + "client2_Connection_Authenticate2Completed()";

            if (e.Error == null && e.Result)
            {
                Logger.LogTrace(METHOD, "Screen #3: Moved to screen #4.");

                //Advance the page.
                this.grdContent.Children.Clear();
                this.grdContent.Children.Add(this._page4);
                this._page4.txtProjectName.Text = this._page2.SelectedProject.Name;
                this._pageNo = 4;

                this.grdForm.IsEnabled = true;
                this.Cursor            = Cursors.Arrow;
                this.btnBack.IsEnabled = true;
            }
            else
            {
                if (e.Error != null)
                {
                    if (e.Error.InnerException != null && e.Error.InnerException.GetType() == typeof(System.Net.WebException))
                    {
                        if (e.Error.InnerException.Message.Contains("could not be resolved"))
                        {
                            MessageBox.Show("The server could not be found. IP Address or DNS name unreachable.", "Server Error", MessageBoxButton.OK, MessageBoxImage.Error);
                        }
                        else if (e.Error.InnerException.Message.Contains("returned an error"))
                        {
                            MessageBox.Show("The API could not be reached at that address. Please check the entered URL. Spira version 4.0 or newer is required.", "Server Error", MessageBoxButton.OK, MessageBoxImage.Error);
                        }
                        else
                        {
                            MessageBox.Show("There was an error connecting to the server:" + Environment.NewLine + e.Error.InnerException.Message, "Server Error", MessageBoxButton.OK, MessageBoxImage.Error);
                        }
                    }
                    else
                    {
                        MessageBox.Show("There was an error connecting to the server:" + Environment.NewLine + e.Error.Message, "Server Error", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                    Logger.LogError(METHOD, e.Error, "While connecting to server:");
                }
                else
                {
                    MessageBox.Show("Invalid password for the Administrator account!", "Incorrect Login", MessageBoxButton.OK, MessageBoxImage.Error);
                    Logger.LogError(METHOD, null, "While connecting to server:" + Environment.NewLine + "Invalid password given for user.");
                }

                //Reset form.
                this.grdForm.IsEnabled = true;
                this.Cursor            = Cursors.Arrow;
                this.btnNext.IsEnabled = true;
            }
        }
Exemple #2
0
        /// <summary>Hit when we're authenticated to the server.</summary>
        /// <param name="sender">ImportExportClient</param>
        /// <param name="e">Connection_Authenticate2CompletedEventArgs</param>
        private void clientSave_Connection_Authenticate2Completed(object sender, Connection_Authenticate2CompletedEventArgs e)
        {
            const string METHOD = CLASS + "clientSave_Connection_Authenticate2Completed()";

            Logger.LogTrace_EnterMethod(METHOD + "  " + this._clientNumSaving.ToString() + " clients running.");

            try
            {
                ImportExportClient client = (sender as ImportExportClient);
                this._clientNumSaving--;
                this.barSavingReq.Value++;

                if (!e.Cancelled)
                {
                    if (e.Error == null)
                    {
                        if (e.Result)
                        {
                            //Connect to the progect ID.
                            this._clientNumSaving++;
                            client.Connection_ConnectToProjectAsync(((SpiraProject)this._ArtifactDetails.ArtifactParentProject.ArtifactTag).ProjectID, this._clientNum++);
                        }
                        else
                        {
                            //TODO: Show Error.
                            //Cancel calls.
                            this._clientNumSaving++;
                            client.Connection_DisconnectAsync(this._clientNum++);
                        }
                    }
                    else
                    {
                        //TODO: Show Error.
                        //Cancel calls.
                        this._clientNumSaving++;
                        client.Connection_DisconnectAsync(this._clientNum++);
                    }
                }

                //See if it's okay to reload.
                this.save_CheckIfOkayToLoad();
            }
            catch (Exception ex)
            {
                Logger.LogMessage(ex, METHOD);
                MessageBox.Show(StaticFuncs.getCultureResource.GetString("app_General_UnexpectedError"), StaticFuncs.getCultureResource.GetString("app_General_ApplicationShortName"), MessageBoxButton.OK, MessageBoxImage.Error);
            }
            Logger.LogTrace_ExitMethod(METHOD + "  " + this._clientNumSaving.ToString() + " clients left.");
        }
Exemple #3
0
        /// <summary>Hit when the test for connection is finished.</summary>
        /// <param name="sender">SoapServiceClient</param>
        /// <param name="e">Connection_Authenticate2CompletedEventArgs</param>
        private void client1_Connection_Authenticate2Completed(object sender, Connection_Authenticate2CompletedEventArgs e)
        {
            const string METHOD = CLASS_NAME + "client1_Connection_Authenticate2Completed()";

            if (e.Error == null && e.Result)
            {
                Logger.LogTrace(METHOD, "Screen #1: Logged in to server, getting project list.");

                //Load the projects..
                ((SoapServiceClient)sender).Project_RetrieveCompleted += new EventHandler <Project_RetrieveCompletedEventArgs>(client1_Project_RetrieveCompleted);
                ((SoapServiceClient)sender).Project_RetrieveAsync();
            }
            else
            {
                if (e.Error != null)
                {
                    if (e.Error.InnerException != null && e.Error.InnerException.GetType() == typeof(System.Net.WebException))
                    {
                        if (e.Error.InnerException.Message.Contains("could not be resolved"))
                        {
                            MessageBox.Show("The server could not be found. IP Address or DNS name unreachable.", "Server Error", MessageBoxButton.OK, MessageBoxImage.Error);
                        }
                        else if (e.Error.InnerException.Message.Contains("returned an error"))
                        {
                            MessageBox.Show("The API could not be reached at that address. Please check the entered URL. Spira version 4.0 or newer is required.", "Server Error", MessageBoxButton.OK, MessageBoxImage.Error);
                        }
                        else
                        {
                            MessageBox.Show("There was an error connecting to the server:" + Environment.NewLine + e.Error.InnerException.Message, "Server Error", MessageBoxButton.OK, MessageBoxImage.Error);
                        }
                    }
                    else
                    {
                        MessageBox.Show("There was an error connecting to the server:" + Environment.NewLine + e.Error.Message, "Server Error", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                    Logger.LogError(METHOD, e.Error, "While connecting to server:");
                }
                else
                {
                    MessageBox.Show("Invalid password for the Administrator account!", "Incorrect Login", MessageBoxButton.OK, MessageBoxImage.Error);
                    Logger.LogError(METHOD, null, "While connecting to server:" + Environment.NewLine + "Invalid password given for user.");
                }

                //Reset form.
                this.grdForm.IsEnabled = true;
                this.Cursor            = Cursors.Arrow;
                this.btnNext.IsEnabled = true;
            }
        }
        /// <summary>Hit when the testing client connects to the server..</summary>
        /// <param name="sender">SoapServiceClient</param>
        /// <param name="e">Connection_Authenticate2CompletedEventArgs</param>
        private void client_Connection_Authenticate2Completed(object sender, Connection_Authenticate2CompletedEventArgs e)
        {
            this.txtTesting.Text += ".";

            if (e.Error == null)
            {
                //Get a list of projects..
                ((SoapServiceClient)e.UserState).Project_RetrieveAsync(e.UserState);
            }
            else
            {
                //We didn't connect. This should never happen.
                Logger.LogError("", e.Error, "Testing new user password. Trying to connect to system.");
                MessageBox.Show("Could not connect to the server. This could mean all licenses are in use.", "Error Testing", MessageBoxButton.OK, MessageBoxImage.Warning);
                this.divTesting.Visibility = System.Windows.Visibility.Collapsed;
            }
        }
        /// <summary>Hit when we've successfully connected to the server.</summary>
        /// <param name="sender">ImportExporClient</param>
        /// <param name="e">Connection_Authenticate2CompletedEventArgs</param>
        private void wkfClient_Connection_Authenticate2Completed(object sender, Connection_Authenticate2CompletedEventArgs e)
        {
            try
            {
                const string METHOD = CLASS + "wkfClient_Connection_Authenticate2Completed()";
                Logger.LogTrace(METHOD + " ENTER.");

                this._clientNumRunning--;
                this.barLoadingIncident.Value++;

                if (sender is ImportExportClient)
                {
                    ImportExportClient client = sender as ImportExportClient;

                    if (!e.Cancelled)
                    {
                        if (e.Error == null && e.Result)
                        {
                            //Connect to our project.
                            this._clientNumRunning++;
                            client.Connection_ConnectToProjectAsync(((SpiraProject)this._ArtifactDetails.ArtifactParentProject.ArtifactTag).ProjectID, this._clientNum++);
                        }
                        else
                        {
                            if (e.Error != null)
                            {
                                Logger.LogMessage(e.Error);
                            }
                            else
                            {
                                Logger.LogMessage(METHOD, "Could not log in.", System.Diagnostics.EventLogEntryType.Error);
                            }
                        }
                    }
                }

                Logger.LogTrace_ExitMethod(METHOD + "  Clients - Running: " + this._clientNumRunning.ToString() + ", Total: " + this._clientNum.ToString());
            }
            catch (Exception ex)
            {
                Logger.LogMessage(ex, "wkfClient_Connection_Authenticate2Completed()");
                MessageBox.Show(StaticFuncs.getCultureResource.GetString("app_General_UnexpectedError"), StaticFuncs.getCultureResource.GetString("app_General_ApplicationShortName"), MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
        /// <summary>Hit when the client is finished connecting and logging in.</summary>
        /// <param name="sender">The client that called it.</param>
        /// <param name="e">Event Args.</param>
        private void client_FinishConnecting(object sender, EventArgs e)
        {
            try
            {
                ImportExport client = (ImportExport)sender;
                string       eType  = e.GetType().ToString();
                eType = eType.Substring(eType.LastIndexOf('.') + 1);

                switch (eType)
                {
                case "Connection_Authenticate2CompletedEventArgs":
                {
                    //Connect finished.
                    Connection_Authenticate2CompletedEventArgs evt = (Connection_Authenticate2CompletedEventArgs)e;
                    ObjectState evtObj = (ObjectState)evt.UserState;
                    if (evt.Error == null)
                    {
                        client.System_GetProductVersionAsync(evtObj);
                    }
                    else
                    {
                        //Set error to node.
                        TreeViewItem oldNode = (TreeViewItem)this.trvProject.Items[evtObj.NodeNumber];
                        this.trvProject.Items.RemoveAt(evtObj.NodeNumber);
                        this.trvProject.Items.Insert(evtObj.NodeNumber, this.changeNodeImage(oldNode, "imgError"));
                        ((TreeViewItem)this.trvProject.Items[evtObj.NodeNumber]).ToolTip = new TextBlock()
                        {
                            Text = evt.Error.Message
                        };
                        ((TreeViewItem)this.trvProject.Items[evtObj.NodeNumber]).Items.Clear();
                        //Error, clean up.
                        removeClient(client);
                    }
                }
                break;

                case "System_GetProductVersionCompletedEventArgs":
                {
                    //Connect finished.
                    System_GetProductVersionCompletedEventArgs evt = (System_GetProductVersionCompletedEventArgs)e;
                    ObjectState evtObj = (ObjectState)evt.UserState;
                    if (evt.Error == null)
                    {
                        evtObj.ClientVersion = evt.Result;
                        client.Connection_ConnectToProjectAsync(evtObj.Project.ProjectID, evtObj);
                    }
                    else
                    {
                        //Set error to node.
                        TreeViewItem oldNode = (TreeViewItem)this.trvProject.Items[evtObj.NodeNumber];
                        this.trvProject.Items.RemoveAt(evtObj.NodeNumber);
                        this.trvProject.Items.Insert(evtObj.NodeNumber, this.changeNodeImage(oldNode, "imgError"));
                        ((TreeViewItem)this.trvProject.Items[evtObj.NodeNumber]).ToolTip = new TextBlock()
                        {
                            Text = evt.Error.Message
                        };
                        ((TreeViewItem)this.trvProject.Items[evtObj.NodeNumber]).Items.Clear();
                        //Error, clean up.
                        removeClient(client);
                    }
                }
                break;

                case "Connection_ConnectToProjectCompletedEventArgs":
                {
                    //Connect finished.
                    Connection_ConnectToProjectCompletedEventArgs evt = (Connection_ConnectToProjectCompletedEventArgs)e;
                    ObjectState evtObj = (ObjectState)evt.UserState;
                    if (evt.Error == null)
                    {
                        evtObj.curSearchIsMine = true;
                        RemoteFilter[] filters = GenerateFilter(evtObj.Project.UserID, this.btnShowClosed.IsChecked.Value, "IN");
                        RemoteSort     sort    = GenerateSort();
                        client.Incident_RetrieveAsync(filters, sort, 1, 9999999, evtObj);
                    }
                    else
                    {
                        //Set error to node.
                        TreeViewItem oldNode = (TreeViewItem)this.trvProject.Items[evtObj.NodeNumber];
                        this.trvProject.Items.RemoveAt(evtObj.NodeNumber);
                        this.trvProject.Items.Insert(evtObj.NodeNumber, this.changeNodeImage(oldNode, "imgError"));
                        ((TreeViewItem)this.trvProject.Items[evtObj.NodeNumber]).ToolTip = new TextBlock()
                        {
                            Text = evt.Error.Message
                        };
                        ((TreeViewItem)this.trvProject.Items[evtObj.NodeNumber]).Items.Clear();
                        //Error, clean up.
                        removeClient(client);
                    }
                }
                break;
                }
            }
            catch (Exception ex)
            {
                Connect.logEventMessage("wpfProjectTree::client_FinishConnecting", ex, System.Diagnostics.EventLogEntryType.Error);
            }
        }
        /// <summary>Hit when communication is finished with the server.</summary>
        /// <param name="sender">SoapServiceClient</param>
        /// <param name="e">EventArgs</param>
        private void _client_CommunicationFinished(object sender, AsyncCompletedEventArgs e)
        {
            try
            {
                if (e.Error == null)
                {
                    try
                    {
                        if (e.GetType() == typeof(Connection_Authenticate2CompletedEventArgs))
                        {
                            Connection_Authenticate2CompletedEventArgs evt = e as Connection_Authenticate2CompletedEventArgs;
                            if (evt.Result)
                            {
                                this.txtStatus.Text = "Getting user information...";
                                this._client.User_RetrieveByUserNameAsync(this.txbUserID.Text, false);
                            }
                            else
                            {
                                //Failed login.
                                this.btnConnect_Click(null, null);
                                //Just act like they canceled the service, then set error flag.
                                this.barProg.Foreground = (Brush) new System.Windows.Media.BrushConverter().ConvertFrom(StaticFuncs.getCultureResource.GetString("app_Colors_StyledBarError"));
                                this.barProg.Value      = 1;
                                this.txtStatus.Text     = "Invalid username or password.";
                            }
                        }
                        else if (e.GetType() == typeof(User_RetrieveByUserNameCompletedEventArgs))
                        {
                            User_RetrieveByUserNameCompletedEventArgs evt = e as User_RetrieveByUserNameCompletedEventArgs;
                            if (evt != null)
                            {
                                this.txtStatus.Text  = "Getting Projects...";
                                this.txbUserNum.Text = evt.Result.UserId.ToString();
                                this._client.Project_RetrieveAsync();
                            }
                            else
                            {
                                throw new Exception("Results are null.");
                            }
                        }
                        else if (e.GetType() == typeof(Project_RetrieveCompletedEventArgs))
                        {
                            this.cmbProjectList.Items.Clear();

                            Project_RetrieveCompletedEventArgs evt = e as Project_RetrieveCompletedEventArgs;

                            //Load projects here.
                            if (evt != null && evt.Result.Count > 0)
                            {
                                SpiraProject matchingProject = null;
                                foreach (RemoteProject RemoteProj in evt.Result)
                                {
                                    Business.SpiraProject Project = new Business.SpiraProject();
                                    Project.ProjectId = RemoteProj.ProjectId.Value;
                                    Project.ServerURL = new Uri(this.txbServer.Text);
                                    Project.UserName  = this.txbUserID.Text;
                                    Project.UserPass  = this.txbUserPass.Password;
                                    Project.UserID    = int.Parse(this.txbUserNum.Text);

                                    this.cmbProjectList.Items.Add(Project);

                                    if (SpiraContext.ProjectId == Project.ProjectId)
                                    {
                                        matchingProject = Project;
                                    }
                                }

                                //Select one if necessary
                                if (matchingProject != null)
                                {
                                    this.cmbProjectList.SelectedItem = matchingProject;
                                }
                                else
                                {
                                    this.cmbProjectList.SelectedIndex = 0;
                                }
                                this.grdAvailProjs.IsEnabled = true;
                            }
                            else
                            {
                                int num = this.cmbProjectList.Items.Add("-- No Projects Available --");
                                this.cmbProjectList.SelectedIndex = num;
                            }

                            //Reset form.
                            this.btnConnect_Click(null, null);
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.LogMessage(ex);
                        //Reset form.
                        this.btnConnect_Click(null, null);
                        //Just act like they canceled the service, then set error flag.
                        this.barProg.Foreground = (Brush) new System.Windows.Media.BrushConverter().ConvertFrom(StaticFuncs.getCultureResource.GetString("app_Colors_StyledBarError"));
                        this.barProg.Value      = 1;
                        this.txtStatus.Text     = "Error connecting.";
                        this.txtStatus.ToolTip  = ex.Message;
                    }
                }
                else
                {
                    Logger.LogMessage(e.Error);
                    //Reset form.
                    this.btnConnect_Click(null, null);
                    //Just act like they canceled the service, then set error flag.
                    this.barProg.Foreground = (Brush) new System.Windows.Media.BrushConverter().ConvertFrom(StaticFuncs.getCultureResource.GetString("app_Colors_StyledBarError"));
                    this.barProg.Value      = 1;
                    this.txtStatus.Text     = "Could not connect!";
                    this.txtStatus.ToolTip  = e.Error.Message;
                }
            }
            catch (Exception ex)
            {
                Logger.LogMessage(ex, "_client_CommunicationFinished()");
                MessageBox.Show(StaticFuncs.getCultureResource.GetString("app_General_UnexpectedError"), StaticFuncs.getCultureResource.GetString("app_General_ApplicationShortName"), MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
        /// <summary>Called when the client finished a piece of work.</summary>
        /// <param name="sender">The client.</param>
        /// <param name="e">EventArgs</param>
        void client_ActionCompleted(object sender, EventArgs e)
        {
            try
            {
                if (e.GetType() == typeof(Connection_Authenticate2CompletedEventArgs))
                {
                    Connection_Authenticate2CompletedEventArgs evt = (Connection_Authenticate2CompletedEventArgs)e;
                    if (evt.Error == null)
                    {
                        this.txtStatus.Text = "Getting user information...";
                        this._client.User_RetrieveByUserNameAsync(this.txbUserID.Text);
                    }
                    else
                    {
                        this.btnConnect_Click(null, null);
                        //Just act like they canceled the service, then set error flag.
                        this.barProg.Foreground = System.Windows.Media.Brushes.Red;
                        this.barProg.Value      = 1;
                        this.txtStatus.Text     = "Could not connect!";
                        this.txtStatus.ToolTip  = evt.Error.Message;
                    }
                }
                else if (e.GetType() == typeof(User_RetrieveByUserNameCompletedEventArgs))
                {
                    User_RetrieveByUserNameCompletedEventArgs evt = (User_RetrieveByUserNameCompletedEventArgs)e;
                    if (evt.Error == null)
                    {
                        this.txtStatus.Text  = "Getting Projects...";
                        this.txbUserNum.Text = evt.Result.UserId.ToString();
                        this._client.Project_RetrieveAsync();
                    }
                    else
                    {
                        this.btnConnect_Click(null, null);
                        //Just act like they canceled the service, then set error flag.
                        this.barProg.Foreground = System.Windows.Media.Brushes.Red;
                        this.barProg.Value      = 1;
                        this.txtStatus.Text     = "Could not get user info.";
                        this.txtStatus.ToolTip  = evt.Error.Message;
                    }
                }
                else if (e.GetType() == typeof(Spira_ImportExport.Project_RetrieveCompletedEventArgs))
                {
                    Project_RetrieveCompletedEventArgs evt = (Project_RetrieveCompletedEventArgs)e;
                    if (evt.Error == null)
                    {
                        this.cmbProjectList.Items.Clear();
                        //Load projects here.
                        if (evt.Result.Length > 0)
                        {
                            foreach (RemoteProject RemoteProj in evt.Result)
                            {
                                Connect.SpiraProject Project = new Connect.SpiraProject();
                                Project.ProjectID = RemoteProj.ProjectId.Value;
                                Project.ServerURL = new Uri(this.txbServer.Text);
                                Project.UserName  = this.txbUserID.Text;
                                Project.UserPass  = this.txbUserPass.Password;
                                Project.UserID    = int.Parse(this.txbUserNum.Text);

                                this.cmbProjectList.Items.Add(Project);
                            }
                            this.cmbProjectList.SelectedIndex = 0;
                            this.grdAvailProjs.IsEnabled      = true;
                            this.grdEntry.IsEnabled           = true;
                            this.barProg.IsIndeterminate      = false;
                            this.barProg.Value      = 0;
                            this.btnConnect.Content = "_Get Projects";
                            this.btnConnect.Tag     = false;
                            this.txtStatus.Text     = "";
                            this.txtStatus.ToolTip  = null;
                        }
                        else
                        {
                            int num = this.cmbProjectList.Items.Add("-- No Projects Available --");
                            this.cmbProjectList.SelectedIndex = num;
                            //Reset form.
                            this.grdEntry.IsEnabled      = true;
                            this.barProg.IsIndeterminate = false;
                            this.btnConnect.Content      = "_Get Projects";
                            this.btnConnect.Tag          = false;
                        }
                    }
                    else
                    {
                        this.btnConnect_Click(null, null);
                        //Just act like they canceled the service, then set error flag.
                        this.barProg.Foreground = System.Windows.Media.Brushes.Red;
                        this.barProg.Value      = 1;
                        this.txtStatus.Text     = "Could not get projects.";
                        this.txtStatus.ToolTip  = evt.Error.Message;
                    }
                }
            }
            catch (Exception ex)
            {
                Connect.logEventMessage("wpfNewSpiraProject::client_ActionCompleted", ex, System.Diagnostics.EventLogEntryType.Error);
            }
        }
        private void _client_CommunicationFinished(object sender, AsyncCompletedEventArgs e)
        {
            try
            {
                if (e.Error == null)
                {
                    try
                    {
                        if (e.GetType() == typeof(Connection_Authenticate2CompletedEventArgs))
                        {
                            Connection_Authenticate2CompletedEventArgs evt = e as Connection_Authenticate2CompletedEventArgs;
                            if (evt.Result)
                            {
                                this._client.User_RetrieveByUserNameAsync(this.id, false);
                            }
                        }
                        else if (e.GetType() == typeof(User_RetrieveByUserNameCompletedEventArgs))
                        {
                            User_RetrieveByUserNameCompletedEventArgs evt = e as User_RetrieveByUserNameCompletedEventArgs;
                            if (evt != null)
                            {
                                this._client.Project_RetrieveAsync();
                            }
                            else
                            {
                                throw new Exception("Results are null.");
                            }
                        }
                        else if (e.GetType() == typeof(Project_RetrieveCompletedEventArgs))
                        {
                            _Projects.Clear();

                            Project_RetrieveCompletedEventArgs evt = e as Project_RetrieveCompletedEventArgs;

                            //Load projects here.
                            if (evt != null && evt.Result.Count > 0)
                            {
                                SpiraProject matchingProject = null;
                                foreach (RemoteProject RemoteProj in evt.Result)
                                {
                                    Business.SpiraProject Project = new Business.SpiraProject();
                                    Project.ProjectId = RemoteProj.ProjectId.Value;
                                    Project.ServerURL = new Uri(this.address);
                                    Project.UserName  = this.id;
                                    Project.UserPass  = this.password;
                                    Project.UserID    = int.Parse(this.id);

                                    TreeViewArtifact nProject = new TreeViewArtifact(spiraExplorer.refresh);
                                    nProject.ArtifactTag      = Project;
                                    nProject.ArtifactId       = ((Business.SpiraProject)nProject.ArtifactTag).ProjectId;
                                    nProject.ArtifactName     = ((Business.SpiraProject)nProject.ArtifactTag).ProjectName;
                                    nProject.ArtifactType     = TreeViewArtifact.ArtifactTypeEnum.Project;
                                    nProject.ArtifactIsFolder = true;
                                    nProject.Parent           = null;

                                    _Projects.Add(nProject);

                                    if (SpiraContext.ProjectId == Project.ProjectId)
                                    {
                                        matchingProject = Project;
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.LogMessage(ex);
                    }
                }
                else
                {
                    Logger.LogMessage(e.Error);
                }
            }
            catch (Exception ex)
            {
                Logger.LogMessage(ex, "_client_CommunicationFinished()");
                MessageBox.Show(StaticFuncs.getCultureResource.GetString("app_General_UnexpectedError"), StaticFuncs.getCultureResource.GetString("app_General_ApplicationShortName"), MessageBoxButton.OK, MessageBoxImage.Error);
            }
            //Access the SLN/SUO file to get the associated Spira URL, credentials and project
            if (SpiraContext.HasSolutionProps)
            {
                spiraExplorer.loadProject(SpiraContext.ProjectId);
            }
        }