Exemplo n.º 1
0
        public async Task RunTask()
        {
            Console.WriteLine(Environment.NewLine);
            Console.WriteLine(this.Name);
            Console.WriteLine(Environment.NewLine);

            Console.WriteLine("Input solution path.");
            Console.WriteLine(Environment.NewLine);
            string solutionPath = Console.ReadLine();

            if (!File.Exists(solutionPath))
            {
                Console.WriteLine("File does not exists!");
                return;
            }

            using MSBuildWorkspace workspace = await new MSBuildWorkspaceFactory().GetWorkspace();
            Solution solution = await workspace.OpenSolutionAsync(solutionPath);

            await foreach (CreateProjectGroup? result in TaskExecutable.RunTaskAsyncEnumerable(this.SelectProjectTask, solution))
            {
                if (result == null || result.Project == null)
                {
                    continue;
                }

                workspace.TryApplyChanges(result.Project.Solution);
            }

            workspace.CloseSolution();
        }
        private async Task <(TaskReturnKind, Document?)> SelectProjectTask(Solution solution)
        {
            Console.WriteLine(Environment.NewLine);
            Console.WriteLine("Select project:");
            Project?project = await TaskExecutable.RunTask(CommonTaskFunctions.GetProjectTask, solution);

            if (project == null)
            {
                return(TaskReturnKind.Continue, default);
        private async Task <(TaskReturnKind, TagDocumentGroup)> ReplaceTextTags(TagDocumentGroup documentGroup)
        {
            Console.WriteLine(Environment.NewLine);
            Console.WriteLine($"Replace text tags: {documentGroup.Text}");
            Console.WriteLine(Environment.NewLine);

            foreach (var tag in documentGroup.TextTags)
            {
                string?replacedText = await TaskExecutable.RunTask(this.ReplaceTagTask, tag.Tag, documentGroup.Text);

                documentGroup = new TagDocumentGroup(documentGroup.Folder, documentGroup.Name, replacedText, documentGroup.FolderTags, documentGroup.NameTags, documentGroup.TextTags);
            }

            return(TaskReturnKind.Exit, documentGroup);
        }
Exemplo n.º 4
0
        private async Task <(TaskReturnKind, CreateProjectGroup?)> SelectProjectTask(Solution solution)
        {
            Console.WriteLine(Environment.NewLine);
            Console.WriteLine("Select project:");
            Project?project = await TaskExecutable.RunTask(CommonTaskFunctions.GetProjectTask, solution);

            if (project == null)
            {
                return(TaskReturnKind.Continue, null);
            }

            await foreach (TagProjectGroup? projectGroup in TaskExecutable.RunTaskAsyncEnumerable(this.SelectTemplateFileTask, project))
            {
                if (projectGroup == null)
                {
                    continue;
                }

                Console.WriteLine(Environment.NewLine);
                TagOption?tagOption = await TaskExecutable.RunTask(this.SelectTagOption);

                if (!tagOption.HasValue)
                {
                    return(TaskReturnKind.Exit, null);
                }

                IEnumerable <DocumentGroup> createDocuments = await this.GetDocumentsToCreate(tagOption.Value, projectGroup.Tags);

                List <Document> documents = new List <Document>();
                foreach (DocumentGroup createDocument in createDocuments)
                {
                    foreach (TagDocumentGroup documentGroup in projectGroup.Documents)
                    {
                        TagDocumentGroup newDocumentGroup = CommonTaskFunctions.ReplaceDocumentTags(documentGroup, createDocument.ReplacedTags);
                        Document?        newDocument      = CommonTaskFunctions.AppendDocumentToProject(project, newDocumentGroup);
                        if (newDocument != null)
                        {
                            project = newDocument.Project;
                            documents.Add(newDocument);
                        }
                    }
                }

                return(TaskReturnKind.Continue, new CreateProjectGroup(project, documents));
            }

            return(TaskReturnKind.Exit, null);
        }
Exemplo n.º 5
0
        private async Task <(TaskReturnKind, TagDocumentGroup?)> GetDocumentTask(Project project)
        {
            Console.WriteLine(Environment.NewLine);
            Console.WriteLine(Environment.NewLine);
            Console.WriteLine("Select document:");
            Dictionary <string, Document> documents = new Dictionary <string, Document>();
            int index = 1;

            foreach (Document document in project.Documents)
            {
                Console.WriteLine($"{index}: {(document.Folders.Any() ? string.Join(@"\", document.Folders) + @"\" : string.Empty)}{document.Name}");

                documents[index.ToString()] = document;
                index++;
            }

            string documentIndex = Console.ReadLine();

            if (!documents.ContainsKey(documentIndex))
            {
                Console.WriteLine("Wrong input try again!");
                return(TaskReturnKind.Continue, (TagDocumentGroup?)null);
            }
            Document   selecteDocument = documents[documentIndex];
            SourceText text            = await selecteDocument.GetTextAsync();

            string           folder        = string.Join("/", selecteDocument.Folders);
            TagDocumentGroup documentGroup = new TagDocumentGroup(folder, selecteDocument.Name, text.ToString());

            if (!string.IsNullOrWhiteSpace(documentGroup.Folder))
            {
                documentGroup = await TaskExecutable.RunTask <TagDocumentGroup>(TagFolder, documentGroup);
            }
            else
            {
                documentGroup = await TaskExecutable.RunTask <TagDocumentGroup>(TagEmptyFolder, documentGroup);
            }

            documentGroup = await TaskExecutable.RunTask <TagDocumentGroup>(TagName, documentGroup);

            documentGroup = await TaskExecutable.RunTask <TagDocumentGroup>(TagDocument, documentGroup);

            return(TaskReturnKind.Exit, documentGroup);
        }
Exemplo n.º 6
0
        public async Task RunTask()
        {
            Console.WriteLine(Environment.NewLine);
            Console.WriteLine(this.Name);
            Console.WriteLine(Environment.NewLine);

            Console.WriteLine("Input solution path.");
            Console.WriteLine(Environment.NewLine);
            string solutionPath = Console.ReadLine();

            if (!File.Exists(solutionPath))
            {
                Console.WriteLine("File does not exists!");
                return;
            }

            using var workspace = await new MSBuildWorkspaceFactory().GetWorkspace();
            Solution solution = await workspace.OpenSolutionAsync(solutionPath);

            Console.WriteLine("Select project:");
            Project?project = await TaskExecutable.RunTask(CommonTaskFunctions.GetProjectTask, solution);

            if (project == null)
            {
                return;
            }

            List <TagDocumentGroup> documentGroups = new List <TagDocumentGroup>();

            await foreach (TagDocumentGroup? documentGroup in TaskExecutable.RunTaskAsyncEnumerable(GetDocumentTask, project))
            {
                if (documentGroup != null)
                {
                    documentGroups.Add(documentGroup);
                }
            }

            var projectGroup = new TagProjectGroup(documentGroups);
            await TaskExecutable.RunTask(CommonTaskFunctions.SaveDocumentsTask, projectGroup);

            workspace.CloseSolution();
        }
Exemplo n.º 7
0
        private async Task <IEnumerable <DocumentGroup> > GetDocumentsToCreate(TagOption option, IEnumerable <TagElement> tags)
        {
            switch (option)
            {
            case TagOption.ReplaceTags:
                return(this.ReplaceTags(tags));

            case TagOption.LoadReplacedTags:
                IEnumerable <DocumentGroup>?loadedTags = await TaskExecutable.RunTask(this.LoadReplacedTags);

                if (loadedTags == null)
                {
                    return(Enumerable.Empty <DocumentGroup>());
                }

                return(loadedTags);
            }

            return(Enumerable.Empty <DocumentGroup>());
        }
        private async Task <(TaskReturnKind, TagDocumentGroup)> ReplaceDocumentTagsTask(TagDocumentGroup documentGroup)
        {
            Console.WriteLine(Environment.NewLine);
            Console.WriteLine($"Implement tags for file {documentGroup.Name}");
            Console.WriteLine(Environment.NewLine);

            if (documentGroup.FolderTags.Any())
            {
                documentGroup = await TaskExecutable.RunTask <TagDocumentGroup>(this.ReplaceFolderTags, documentGroup);
            }

            if (documentGroup.NameTags.Any())
            {
                documentGroup = await TaskExecutable.RunTask <TagDocumentGroup>(this.ReplaceNameTags, documentGroup);
            }

            if (documentGroup.TextTags.Any())
            {
                documentGroup = await TaskExecutable.RunTask <TagDocumentGroup>(this.ReplaceTextTags, documentGroup);
            }

            return(TaskReturnKind.Exit, documentGroup);
        }
        public async Task RunTask()
        {
            Console.WriteLine(Environment.NewLine);
            Console.WriteLine(this.Name);
            Console.WriteLine(Environment.NewLine);

            TagTemplateGroup?template = await TaskExecutable.RunTask(this.LoadTemplate);

            if (template == null)
            {
                return;
            }

            Console.WriteLine("Input solution path.");
            Console.WriteLine(Environment.NewLine);
            string solutionPath = Console.ReadLine();

            if (!File.Exists(solutionPath))
            {
                Console.WriteLine("File does not exists!");
                return;
            }

            using MSBuildWorkspace workspace = await new MSBuildWorkspaceFactory().GetWorkspace();
            Solution solution = await workspace.OpenSolutionAsync(solutionPath);

            Console.WriteLine(Environment.NewLine);
            Console.WriteLine("Select project:");
            Project?project = await TaskExecutable.RunTask(CommonTaskFunctions.GetProjectTask, solution);

            if (project == null)
            {
                return;
            }

            var selectedDocuments = new List <Document>();

            await foreach (Document? document in TaskExecutable.RunTaskAsyncEnumerable(CommonTaskFunctions.SelectDocuments, project.Documents.Where(whereDocument => !selectedDocuments.Contains(whereDocument))))
            {
                if (document != null)
                {
                    selectedDocuments.Add(document);
                }
            }

            TagProjectGroup projectGroup = await CommonTaskFunctions.ImplementsTags(selectedDocuments, template.TagElements);

            List <Document> documents = new List <Document>();

            foreach (DocumentGroup createDocument in template.Documents)
            {
                foreach (TagDocumentGroup documentGroup in projectGroup.Documents)
                {
                    TagDocumentGroup newDocumentGroup = CommonTaskFunctions.ReplaceDocumentTags(documentGroup, createDocument.ReplacedTags);
                    Document?        newDocument      = CommonTaskFunctions.AppendDocumentToProject(project, newDocumentGroup);
                    if (newDocument != null)
                    {
                        project = newDocument.Project;
                        documents.Add(newDocument);
                    }
                }
            }

            workspace.TryApplyChanges(project.Solution);
            workspace.CloseSolution();
        }