public List <Task> Parse(List <Models.Docker> dockers)
        {
            var tasks = new List <TaskGenerator.Models.Task>();

            foreach (Models.Docker docker in dockers)
            {
                TaskGenerator.Models.Task task = new TaskGenerator.Models.Task()
                {
                    Namespace       = "FlubuCore.Tasks.Docker",
                    ProjectName     = "FlubuCore",
                    Methods         = new List <Method>(),
                    TaskResult      = "int",
                    TaskDescription = docker.Short
                };

                task.Constructor = new Constructor
                {
                    Arguments = new List <ConstructorArgument>(),
                };

                var splitedCommands = docker.Command.Split(' ', '-');
                if (splitedCommands.Contains("cp"))
                {
                    continue;
                }

                string path = string.Empty;
                if (splitedCommands.Length > 2)
                {
                    path           = $"\\{splitedCommands[1].FirstCharToUpper()}";
                    task.Namespace = $"{task.Namespace}.{splitedCommands[1].FirstCharToUpper()}";
                    task.Parent    = splitedCommands[1].FirstCharToUpper();
                }

                task.ExecutablePath = splitedCommands[0];
                var splitedName = splitedCommands.Select(x => x.FirstCharToUpper()).ToList();
                task.Constructor.Arguments.Add(new ConstructorArgument
                {
                    ArgumentKey = docker.Command.Substring(6).TrimStart(),
                });

                task.TaskName = $"{string.Join(string.Empty, splitedName)}Task";
                task.FileName = $"Tasks{path}\\{task.TaskName}.cs";
                if (docker.Options == null)
                {
                    continue;
                }

                ParseCommandsAndAddCommands(docker, task);
                ParseOptions(docker, task);

                tasks.Add(task);
            }

            return(tasks);
        }
 private void AddArgumentToConstructor(TaskGenerator.Models.Task task, FlubuCore.Azure.Models.Parameter parameter)
 {
     task.Constructor.Arguments.Add(new Argument
     {
         ArgumentKey      = parameter.Name.Split(' ')[0],
         HasArgumentValue = true,
         Parameter        = new TaskGenerator.Models.Parameter
         {
             ParameterType = "string",
             ParameterName = ParseParameterName(parameter.Name),
         },
     });
 }
        private void AddNewMethod(TaskGenerator.Models.Task task, FlubuCore.Azure.Models.Parameter parameter)
        {
            if (parameter.IsRequired.HasValue && parameter.IsRequired.Value)
            {
                return;
            }

            var item = new Method();

            item.MethodName    = ParseMethodName(parameter.Name);
            item.MethodSummary = parameter.Summary;
            item.Argument      = new Argument
            {
                ArgumentKey      = parameter.Name.Split(' ')[0],
                HasArgumentValue = true,
                Parameter        = new TaskGenerator.Models.Parameter
                {
                    ParameterType = "string",
                    ParameterName = ParseParameterName(parameter.Name),
                },
            };
            task.Methods.Add(item);
        }
        public List <Task> Parse(List <Models.Azure> azures)
        {
            var tasks = new List <TaskGenerator.Models.Task>();

            foreach (Models.Azure azure in azures)
            {
                foreach (var item in azure.Items)
                {
                    var splitedName = item.Name.Split(' ', '-').ToList();
                    if (splitedName.Count == 1 || splitedName.Contains("List"))
                    {
                        continue;
                    }

                    splitedName.RemoveAt(0);

                    splitedName = splitedName.Select(x => x.FirstCharToUpper()).ToList();

                    TaskGenerator.Models.Task task = new TaskGenerator.Models.Task()
                    {
                        Namespace   = "FlubuCore.Azure.Tasks",
                        ProjectName = "FlubuCore.Azure",
                        Methods     = new List <Method>(),
                    };

                    task.TaskName = $"Azure{string.Join(string.Empty, splitedName)}Task";

                    string fileName;
                    if (splitedName.Count > 1)
                    {
                        task.Namespace = $"{task.Namespace}.{splitedName[0]}";
                        fileName       = $"Tasks\\{splitedName[0]}\\{task.TaskName}.cs";
                        task.Parent    = splitedName[0];
                    }
                    else
                    {
                        fileName = $"Tasks\\{task.TaskName}.cs";
                    }

                    task.FileName = fileName;

                    task.Constructor = new Constructor
                    {
                        Summary   = item.Summary,
                        Arguments = new List <Argument>(),
                    };

                    task.Constructor.Arguments.Add(new Argument
                    {
                        ArgumentKey = item.Name,
                    });

                    if (item.Parameters != null)
                    {
                        foreach (var parameter in item.Parameters)
                        {
                            if (parameter.Name.Equals("--description", StringComparison.OrdinalIgnoreCase) || parameter.Name.Equals("--404-description", StringComparison.OrdinalIgnoreCase))
                            {
                                continue;
                            }

                            if (parameter.IsRequired.HasValue && parameter.IsRequired.Value)
                            {
                                AddArgumentToConstructor(task, parameter);
                            }

                            if (!parameter.Name.StartsWith("<"))
                            {
                                AddNewMethod(task, parameter);
                            }
                        }
                    }

                    tasks.Add(task);
                }
            }

            tasks.RemoveAll(x => x.TaskName.Contains("List") || x.TaskName.Contains("Show"));
            tasks = tasks.DistinctBy(x => x.TaskName).ToList();
            return(tasks);
        }