/// <summary>
        /// Check to see if two sets of configuration are the same.
        /// </summary>
        /// <param name="obj">The other configuration set to check.</param>
        /// <returns>True if they are both the same, false otherwise.</returns>
        /// <remarks>
        /// This is part of the fix for CCNET-1179.
        /// </remarks>
        public override bool Equals(object obj)
        {
            CCTrayProject objToCompare = obj as CCTrayProject;

            if (objToCompare != null)
            {
                bool isSame = string.Equals(projectName, objToCompare.projectName);

                if (isSame)
                {
                    if ((buildServer != null) && (objToCompare.buildServer != null))
                    {
                        // If both instances have a build server then compare the build server settings
                        isSame = string.Equals(buildServer.Url, objToCompare.buildServer.Url);
                    }
                    else if ((buildServer != null) && (objToCompare.buildServer != null))
                    {
                        // If neither instance has a build server then they are the same
                        isSame = true;
                    }
                    else
                    {
                        // Otherwise we know we have a difference
                        isSame = false;
                    }
                }
                return(isSame);
            }
            else
            {
                return(false);
            }
        }
		public ProjectConfigurationListViewItemAdaptor(CCTrayProject project)
		{
			this.project = project;
			item = new ListViewItem(new string[] {project.BuildServer.DisplayName, project.BuildServer.Transport.ToString(), project.ProjectName});
			item.Checked = project.ShowProject;
			item.Tag = this;
		}
 private static ISingleServerMonitor GetServerMonitorForProject(CCTrayProject project, IEnumerable <ISingleServerMonitor> serverMonitors)
 {
     foreach (ISingleServerMonitor serverMonitor in serverMonitors)
     {
         if (serverMonitor.ServerUrl == project.ServerUrl)
         {
             return(serverMonitor);
         }
     }
     throw new ApplicationException("Server monitor not found for project: " + project.ProjectName);
 }
 private static ISingleServerMonitor GetServerMonitorForProject(CCTrayProject project, IEnumerable<ISingleServerMonitor> serverMonitors)
 {
     foreach (ISingleServerMonitor serverMonitor in serverMonitors)
     {
         if (serverMonitor.ServerUrl == project.ServerUrl)
         {
             return serverMonitor;
         }
     }
     throw new ApplicationException("Server monitor not found for project: " + project.ProjectName);
 }
        /// <summary>
        /// Gets the list of projects.
        /// </summary>
        /// <returns>The available projects on the server.</returns>
        public CCTrayProject[] GetProjectList()
        {
            ProjectStatus[] statuses = manager.GetProjectStatus();
            CCTrayProject[] projects = new CCTrayProject[statuses.Length];

            for (int i = 0; i < statuses.Length; i++)
            {
                ProjectStatus status = statuses[i];
                projects[i] = new CCTrayProject(this.configuration, status.Name);
            }

            return projects;
        }
		public AddProjects(ICruiseProjectManagerFactory cruiseProjectManagerFactory,
            ICruiseServerManagerFactory cruiseServerManagerFactory,
            CCTrayProject[] currentProjectList)
		{
			this.cruiseProjectManagerFactory = cruiseProjectManagerFactory;
            this.cruiseServerManagerFactory = cruiseServerManagerFactory;
			this.currentProjectList = currentProjectList;

			InitializeComponent();

            List<BuildServer> serverList = new List<BuildServer>();
			foreach (CCTrayProject project in currentProjectList)
			{
                if (!serverList.Contains(project.BuildServer)) serverList.Add(project.BuildServer);
		}

            foreach (BuildServer server in serverList)
		{
                AddServer(server);
			}
		}
 public ICruiseProjectManager Create(CCTrayProject project, IDictionary<BuildServer, ICruiseServerManager> serverManagers)
 {
     BuildServer server = project.BuildServer;
     switch (server.Transport)
     {
         case BuildServerTransport.Remoting:
             {
                 var client = GenerateRemotingClient(server);
                 return new RemotingCruiseProjectManager(client, project.ProjectName);
             }
         case BuildServerTransport.Extension:
             ITransportExtension extensionInstance = ExtensionHelpers.RetrieveExtension(server.ExtensionName);
             extensionInstance.Settings = server.ExtensionSettings;
             extensionInstance.Configuration = server;
             return extensionInstance.RetrieveProjectManager(project.ProjectName);
         default:
             {
                 var client = GenerateHttpClient(server);
                 return new HttpCruiseProjectManager(client, project.ProjectName, serverManagers[server]);
             }
     }
 }
        /// <summary>
        /// Update the projects configuration.
        /// </summary>
        public void UpdateProjectList()
        {
            mainForm.ReloadConfiguration(() =>
            {
                var form = new DisplayChangedProjects(changeList);
                form.UpdateConfiguration += (servers) =>
                {
                    // Update each server
                    var projects = new List<CCTrayProject>(configuration.Projects);
                    foreach (var server in servers)
                    {
                        // Generate each project and add it to the configuration
                        foreach (var newProject in server.AddedProjects)
                        {
                            var projectConfig = new CCTrayProject
                            {
                                BuildServer = server.Configuration,
                                ProjectName = newProject,
                                ShowProject = true

                            };
                            projects.Add(projectConfig);
                        }

                        // Remove the old projects
                        foreach (var oldProject in server.DeletedProjects)
                        {
                            // Try to find the project
                            CCTrayProject actualProject = null;
                            foreach (var project in projects)
                            {
                                if (project.BuildServer.Equals(server.Configuration) &&
                                    project.ProjectName.Equals(oldProject))
                                {
                                    actualProject = project;
                                    break;
                                }
                            }

                            // If the project is found, it can be removed
                            if (actualProject != null) projects.Remove(actualProject);
                        }
                    }
                    var newConfig = configuration.Clone();
                    newConfig.Projects = projects.ToArray();

                    // Save the configuration and reload
                    newConfig.Persist();
                    mainForm.CloseUpdatePanel();
                };

                var result = form.ShowDialog(mainForm);
                return (result == DialogResult.OK);
            });
        }
 public void SetExtensionNameBlank()
 {
     CCTrayProject newValue = new CCTrayProject();
     newValue.ExtensionName = string.Empty;
     Assert.AreEqual(string.Empty, newValue.ExtensionName);
     Assert.AreEqual(BuildServerTransport.HTTP, newValue.BuildServer.Transport);
 }
 public void SetExtensionNameNonBlank()
 {
     CCTrayProject newValue = new CCTrayProject();
     newValue.ExtensionName = "An extension";
     Assert.AreEqual("An extension", newValue.ExtensionName);
     Assert.AreEqual(BuildServerTransport.Extension, newValue.BuildServer.Transport);
 }
 public void SetExtensionSettings()
 {
     CCTrayProject newValue = new CCTrayProject();
     newValue.ExtensionSettings = "Some settings";
     Assert.AreEqual("Some settings", newValue.ExtensionSettings);
 }
		private CCTrayProject[] BuildProjectListFromListView()
		{
			CCTrayProject[] newProjectList = new CCTrayProject[lvProjects.Items.Count];

			for (int i = 0; i < lvProjects.Items.Count; i++)
			{
				ProjectConfigurationListViewItemAdaptor adaptor = (ProjectConfigurationListViewItemAdaptor)lvProjects.Items[i].Tag;
				newProjectList[i] = adaptor.Project;
			}
			return newProjectList;
		}
        public CCTrayProject[] GetProjectList()
        {
            IBuildDefinitionSpec defSpec = TfsBuildServer.CreateBuildDefinitionSpec(Settings.TeamProject);
            IBuildDefinitionQueryResult query = TfsBuildServer.QueryBuildDefinitions(defSpec);

            if (query != null)
            {
                CCTrayProject[] projects = new CCTrayProject[query.Definitions.Length];

                for (int i = 0; i < query.Definitions.Length; i++)
                {
                    projects[i] = new CCTrayProject()
                    {
                        BuildServer = Configuration,
                        ExtensionName = Configuration.ExtensionName,
                        ExtensionSettings = Configuration.ExtensionSettings,
                        ProjectName = query.Definitions[i].Name,
                        SecuritySettings = Configuration.SecuritySettings,
                        SecurityType = Configuration.SecurityType,
                        ServerUrl = Configuration.Url,
                        ShowProject = query.Definitions[i].Enabled
                    };
                }

                return projects;
            }

            return null;
        }
		private bool IsProjectAlreadyAdded(CCTrayProject project)
		{
			foreach (CCTrayProject currentProject in currentProjectList)
			{
				if (project.ServerUrl == currentProject.ServerUrl && project.ProjectName == currentProject.ProjectName)
					return true;
			}
			return false;
		}