Bari.Core.Commands.Helper.CommandTargetParser.ParseTarget C# (CSharp) Method

ParseTarget() public method

public ParseTarget ( string target ) : CommandTarget
target string
return CommandTarget
        public CommandTarget ParseTarget(string target)
        {
            if (string.IsNullOrEmpty(target))
                return new FullSuiteTarget(suite);
            else
            {
                if (suite.HasProduct(target))
                {
                    var product = suite.GetProduct(target);
                    return new ProductTarget(product);
                }
                if (suite.HasModule(target))
                {
                    var module = suite.GetModule(target);
                    return new ModuleTarget(module);
                }
                else
                {
                    var matches = new HashSet<Project>();

                    // Looking for modulename.projectname matches
                    foreach (var module in suite.Modules)
                    {
                        if (target.StartsWith(module.Name + '.', StringComparison.InvariantCultureIgnoreCase))
                        {
                            string projectName = target.Substring(module.Name.Length + 1);
                            if (module.HasProject(projectName))
                                matches.Add(module.GetProject(projectName));
                            else if (module.HasTestProject(projectName))
                                matches.Add(module.GetTestProject(projectName));
                        }
                    }

                    // If there is only one match
                    if (matches.Count == 1)
                    {
                        var project = matches.First();

                        return new ProjectTarget(project);
                    }
                    else
                    {
                        if (matches.Count > 1)
                            throw new ArgumentException(
                                "The given module and project name identifies more than one projects", "target");
                        else
                            throw new ArgumentException("The given project does not exist", "target");
                    }
                }
            }
        }