public CCTrayProject[] GetProjectList(BuildServer server, bool newServer)
        {
            if (newServer)
            {
                // Clear the cache when adding a new server
                clientFactory.ResetCache(server.Url);
            }

            ICruiseServerManager manager;

            switch (server.Transport)
            {
            case BuildServerTransport.Remoting:
            {
                var client = GenerateRemotingClient(server);
                manager = new RemotingCruiseServerManager(client, server);
                break;
            }

            case BuildServerTransport.Extension:
                return(new ExtensionTransportProjectListRetriever(server.ExtensionName).GetProjectList(server));

            default:
            {
                var client = GenerateHttpClient(server);
                manager = new HttpCruiseServerManager(client, server);
                break;
            }
            }

            if (!string.IsNullOrEmpty(server.SecurityType))
            {
                manager.Login();
            }

            return(manager.GetProjectList());
        }