private void PopulateProjectList(ServerSnapshotChangedEventArgs args, IList<string> projects, ListView listView, string imageKey)
 {
     if (projects.Count > 0)
     {
         var group = new ListViewGroup(args.Server);
         group.Tag = args.Configuration;
         listView.Groups.Add(group);
         foreach (var project in projects)
         {
             var item = new ListViewItem(project, group);
             item.Checked = true;
             item.ImageKey = imageKey;
             listView.Items.Add(item);
         }
     }
 }
        private void updateButton_Click(object sender, EventArgs e)
        {
            if (UpdateConfiguration != null)
            {
                var serverList = new Dictionary<string, BuildServer>();

                // Add all the new projects to be added
                var serversWithNewProjects = new Dictionary<string, List<string>>();
                foreach (ListViewGroup group in addedProjectsList.Groups)
                {
                    var list = new List<string>();
                    serversWithNewProjects.Add(group.Header, list);
                    serverList.Add(group.Header, group.Tag as BuildServer);
                    foreach (ListViewItem item in group.Items)
                    {
                        if (item.Checked) list.Add(item.Text);
                    }
                }

                // Add all the new projects to be removed
                var serversWithOldProjects = new Dictionary<string, List<string>>();
                foreach (ListViewGroup group in deletedProjectsList.Groups)
                {
                    var list = new List<string>();
                    serversWithOldProjects.Add(group.Header, list);
                    if (!serverList.ContainsKey(group.Header))
                    {
                        serverList.Add(group.Header, group.Tag as BuildServer);
                    }
                    foreach (ListViewItem item in group.Items)
                    {
                        if (item.Checked) list.Add(item.Text);
                    }
                }

                // Merge the two lists
                var args = new List<ServerSnapshotChangedEventArgs>();
                foreach (var server in serverList)
                {
                    var addedProjects = serversWithNewProjects.ContainsKey(server.Key) ? serversWithNewProjects[server.Key] : new List<string>();
                    var deletedProjects = serversWithOldProjects.ContainsKey(server.Key) ? serversWithOldProjects[server.Key] : new List<string>();
                    var serverArgs = new ServerSnapshotChangedEventArgs(server.Key, server.Value, addedProjects, deletedProjects);
                    args.Add(serverArgs);
                }
                UpdateConfiguration(args);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Checks for any changes to the list of projects on the server.
        /// </summary>
        /// <param name="cruiseServerSnapshot"></param>
        private void DetectAnyChanges(CruiseServerSnapshot cruiseServerSnapshot)
        {
            if ((cruiseServerSnapshot != null) && (ServerSnapshotChanged != null))
            {
                // Match all the current projects and find any new projects
                var newProjects = new List <string>();
                var oldProjects = new List <string>(currentProjects);
                foreach (var project in cruiseServerSnapshot.ProjectStatuses)
                {
                    if (!oldProjects.Contains(project.Name))
                    {
                        newProjects.Add(project.Name);
                    }
                    else
                    {
                        oldProjects.Remove(project.Name);
                    }
                }

                if (areCurrentProjectsLoaded &&
                    ((newProjects.Count > 0) || (oldProjects.Count > 0)))
                {
                    // Fire the event
                    var args = new ServerSnapshotChangedEventArgs(cruiseServerManager.DisplayName,
                                                                  cruiseServerManager.Configuration,
                                                                  newProjects,
                                                                  oldProjects);
                    ServerSnapshotChanged(this, args);
                }

                if ((newProjects.Count > 0) || (oldProjects.Count > 0))
                {
                    // Update the current list
                    foreach (var oldProject in oldProjects)
                    {
                        currentProjects.Remove(oldProject);
                    }
                    currentProjects.AddRange(newProjects);
                }
                areCurrentProjectsLoaded = true;
            }
        }
        /// <summary>
        /// Display the list of changed and deleted projects.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        private void HandleServerSnapshotChange(object sender, ServerSnapshotChangedEventArgs args)
        {
            if (configuration.ReportProjectChanges)
            {
                if (mainForm.InvokeRequired)
                {
                    mainForm.Invoke(
                        new ServerSnapshotChangedEventHandler(HandleServerSnapshotChange),
                        sender,
                        args);
                }
                else
                {
                    // Update the cached changes
                    if (changeList.ContainsKey(args.Server))
                    {
                        // Work out which projects have been added or deleted
                        var newList = new List<string>(changeList[args.Server].AddedProjects);
                        var oldList = new List<string>(changeList[args.Server].DeletedProjects);
                        foreach (var project in args.AddedProjects)
                        {
                            if (oldList.Contains(project))
                            {
                                oldList.Remove(project);
                            }
                            else if (!newList.Contains(project))
                            {
                                newList.Add(project);
                            }
                        }
                        foreach (var project in args.DeletedProjects)
                        {
                            if (newList.Contains(project))
                            {
                                newList.Remove(project);
                            }
                            else if (!oldList.Contains(project))
                            {
                                // See if the project is being monitored
                                foreach (var projectConfig in configuration.Projects)
                                {
                                    if (projectConfig.BuildServer.Equals(args.Configuration) &&
                                        projectConfig.ProjectName.Equals(project))
                                    {
                                        oldList.Add(project);
                                        break;
                                    }
                                }
                            }
                        }

                        // Add/remove the server entry
                        if ((newList.Count > 0) || (oldList.Count > 0))
                        {
                            changeList[args.Server] = new ServerSnapshotChangedEventArgs(args.Server, args.Configuration, newList, oldList);
                        }
                        else
                        {
                            changeList.Remove(args.Server);
                        }
                    }
                    else
                    {
                        var deletedProjects = new List<string>();
                        foreach (var project in args.DeletedProjects)
                        {
                            // See if the project is being monitored
                            foreach (var projectConfig in configuration.Projects)
                            {
                                if (projectConfig.BuildServer.Equals(args.Configuration) &&
                                    projectConfig.ProjectName.Equals(project))
                                {
                                    deletedProjects.Add(project);
                                    break;
                                }
                            }
                        }

                        // Only add the args if there are new projects, or monitored projects are deleted
                        if ((args.AddedProjects.Count > 0) || (deletedProjects.Count > 0))
                        {
                            changeList.Add(args.Server,
                                new ServerSnapshotChangedEventArgs(args.Server,
                                    args.Configuration,
                                    args.AddedProjects,
                                    deletedProjects.ToArray()));
                        }
                    }

                    // Update the form
                    if (changeList.Count > 0)
                    {
                        mainForm.ShowChangedProjects(changeList);
                    }
                    else
                    {
                        mainForm.CloseUpdatePanel();
                    }
                }
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Checks for any changes to the list of projects on the server.
        /// </summary>
        /// <param name="cruiseServerSnapshot"></param>
        private void DetectAnyChanges(CruiseServerSnapshot cruiseServerSnapshot)
        {
            if ((cruiseServerSnapshot != null) && (ServerSnapshotChanged != null))
            {
                // Match all the current projects and find any new projects
                var newProjects = new List<string>();
                var oldProjects = new List<string>(currentProjects);
                foreach (var project in cruiseServerSnapshot.ProjectStatuses)
                {
                    if (!oldProjects.Contains(project.Name))
                    {
                        newProjects.Add(project.Name);
                    }
                    else
                    {
                        oldProjects.Remove(project.Name);
                    }
                }

                if (areCurrentProjectsLoaded && 
                    ((newProjects.Count > 0) || (oldProjects.Count > 0)))
                {
                    // Fire the event
                    var args = new ServerSnapshotChangedEventArgs(cruiseServerManager.DisplayName,
                        cruiseServerManager.Configuration,
                        newProjects,
                        oldProjects);
                    ServerSnapshotChanged(this, args);
                }

                if ((newProjects.Count > 0) || (oldProjects.Count > 0))
                {
                    // Update the current list
                    foreach (var oldProject in oldProjects)
                    {
                        currentProjects.Remove(oldProject);
                    }
                    currentProjects.AddRange(newProjects);
                }
                areCurrentProjectsLoaded = true;
            }
        }