Example #1
0
        protected override void ProcessRecord()
        {
            var baseResourceList = new List <ProjectResource>();

            switch (ParameterSetName)
            {
            case All:
                baseResourceList = _connection.Repository.Projects.FindAll();
                break;

            case ByName:
                var projectNameList = ProjectName?.ToList().ConvertAll(s => s.ToLower());
                //Multiple values but one of them is wildcarded, which is not an accepted scenario (I.e -MachineName WebServer*, Database1)
                if (projectNameList.Any(item => WildcardPattern.ContainsWildcardCharacters(item) && projectNameList.Count > 1))
                {
                    throw OctoposhExceptions.ParameterCollectionHasRegularAndWildcardItem("ProjectName");
                }
                //Only 1 wildcarded value (ie -MachineName WebServer*)
                else if (projectNameList.Any(item => WildcardPattern.ContainsWildcardCharacters(item) && projectNameList.Count == 1))
                {
                    var pattern = new WildcardPattern(projectNameList.First());
                    baseResourceList = _connection.Repository.Projects.FindMany(x => pattern.IsMatch(x.Name.ToLower()));
                }
                //multiple non-wildcared values (i.e. -MachineName WebServer1,Database1)
                else if (!projectNameList.Any(item => WildcardPattern.ContainsWildcardCharacters(item)))
                {
                    foreach (var name in projectNameList)
                    {
                        baseResourceList.Add(_connection.Repository.Projects.FindByName(name));
                    }
                }
                break;

            case ByProjectGroup:
                var projectGroupNameList = ProjectGroupName?.ToList().ConvertAll(s => s.ToLower());
                //Multiple values but one of them is wildcarded, which is not an accepted scenario (I.e -MachineName WebServer*, Database1)
                if (projectGroupNameList.Any(item => WildcardPattern.ContainsWildcardCharacters(item) && projectGroupNameList.Count > 1))
                {
                    throw OctoposhExceptions.ParameterCollectionHasRegularAndWildcardItem("ProjectGroupName");
                }
                //Only 1 wildcarded value (ie -MachineName WebServer*)
                else if (projectGroupNameList.Any(item => WildcardPattern.ContainsWildcardCharacters(item) && projectGroupNameList.Count == 1))
                {
                    var pattern       = new WildcardPattern(projectGroupNameList.First());
                    var projectGroups = _connection.Repository.ProjectGroups.FindMany(x => pattern.IsMatch(x.Name.ToLower()));

                    if (projectGroups.Count != 0)
                    {
                        foreach (var projectGroup in projectGroups)
                        {
                            baseResourceList.AddRange(_connection.Repository.ProjectGroups.GetProjects(projectGroup));
                        }
                    }
                }
                //multiple non-wildcared values (i.e. -MachineName WebServer1,Database1)
                else if (!projectGroupNameList.Any(item => WildcardPattern.ContainsWildcardCharacters(item)))
                {
                    var projectGroups = _connection.Repository.ProjectGroups.FindMany(x => projectGroupNameList.Contains(x.Name.ToLower()));

                    if (projectGroups.Count != 0)
                    {
                        foreach (var projectGroup in projectGroups)
                        {
                            baseResourceList.AddRange(_connection.Repository.ProjectGroups.GetProjects(projectGroup));
                        }
                    }
                }
                break;
            }

            if (ResourceOnly)
            {
                if (baseResourceList.Count == 1)
                {
                    WriteObject(baseResourceList.FirstOrDefault(), true);
                }
                else
                {
                    WriteObject(baseResourceList, true);
                }
            }

            else
            {
                var converter  = new OutputConverter();
                var outputList = converter.GetOctopusProject(baseResourceList);

                if (outputList.Count == 1)
                {
                    WriteObject(outputList.FirstOrDefault(), true);
                }
                else
                {
                    WriteObject(outputList, true);
                }
            }
        }