public void Verify_default_name_if_Work_item_type_does_not_esixts()
        {
            WordTemplateFolderManager sut = CreateSutForTemplate_1_A();
            var expected = Path.Combine(GetTemplate1AFolder(), "WorkItem.docx");

            Assert.That(sut.GetTemplateFor("This type does not exists"), Is.EqualTo(expected));
        }
Example #2
0
        private static void PerformTemplateExport(ConnectionManager connection)
        {
            var wordFolderManager = new WordTemplateFolderManager(options.TemplateFolder);
            var executor          = new TemplateExecutor(wordFolderManager);

            //now we need to ask user parameter value
            Dictionary <string, Object> parameters = new Dictionary <string, object>();

            foreach (var commandLineParam in options.Parameters)
            {
                var splitted = commandLineParam.Split('=');
                if (splitted.Length == 2)
                {
                    Log.Debug("Found parameter {paramName} in command line with value {value}", splitted[0], splitted[1]);
                    parameters[splitted[0]] = splitted[1];
                }
                else
                {
                    Log.Error("Command line parameter {param} is not in the form name=value", commandLineParam);
                }
            }
            foreach (var parameterName in wordFolderManager.TemplateDefinition.ParameterSection.Parameters.Keys)
            {
                if (!parameters.ContainsKey(parameterName))
                {
                    Console.Write($"Parameter {parameterName}:");
                    parameters[parameterName] = Console.ReadLine();
                }
            }

            var tempFileName  = Path.GetTempPath() + Guid.NewGuid().ToString();
            var generatedName = executor.GenerateFile(tempFileName, connection, options.TeamProject, parameters);

            System.Diagnostics.Process.Start(generatedName);
        }
        public override void Dump(
            StringBuilder stringBuilder,
            Dictionary <string, object> parameters,
            ConnectionManager connectionManager,
            WordTemplateFolderManager wordTemplateFolderManager,
            string teamProjectName)
        {
            WorkItemManger workItemManger = PrepareWorkItemManager(connectionManager, teamProjectName);

            parameters = parameters.ToDictionary(k => k.Key, v => v.Value); //clone
            //If we do not have query parameters we have a single query or we can have parametrized query with iterationPath
            var queries = PrepareQueries(parameters);

            foreach (var query in queries)
            {
                var workItems = workItemManger.ExecuteQuery(query).Take(Limit);
                foreach (var workItem in workItems.Where(ShouldExport))
                {
                    var values = workItem.CreateDictionaryFromWorkItem();
                    foreach (var value in values)
                    {
                        stringBuilder.AppendLine($"{value.Key.PadRight(50, ' ')}={value.Value}");
                    }
                }
            }
        }
        private static WordTemplateFolderManager CreateSutForTemplate_1_A()
        {
            var templateA = GetTemplate1AFolder();
            var sut       = new WordTemplateFolderManager(templateA);

            return(sut);
        }
        public void Verify_grab_docx_name_is_not_case_sensitive()
        {
            WordTemplateFolderManager sut = CreateSutForTemplate_1_A();
            var expected = Path.Combine(GetTemplate1AFolder(), "Product Backlog Item.docx");

            Assert.That(sut.GetTemplateFor("Product BACKLOG Item"), Is.EqualTo(expected));
        }
Example #6
0
 /// <summary>
 /// <para>Each section should be able to generate a part of the word file.</para>
 /// <para>
 /// Not all sections are used to manipulate word file, for those sections
 /// this function could be not overriden
 /// </para>
 /// </summary>
 /// <param name="manipulator"></param>
 /// <param name="parameters"></param>
 /// <param name="connectionManager"></param>
 /// <param name="teamProjectName"></param>
 public virtual void AssembleExcel(
     ExcelManipulator manipulator,
     Dictionary <string, Object> parameters,
     ConnectionManager connectionManager,
     WordTemplateFolderManager wordTemplateFolderManager,
     string teamProjectName)
 {
 }
Example #7
0
 /// <summary>
 /// <para>Can simply dump information for work items, field etc. implementing
 /// this method is completely optional</para>
 /// </summary>
 /// <param name="stringBuilder">A string builder to accumulate all the
 /// data for dumping information</param>
 /// <param name="parameters"></param>
 /// <param name="connectionManager"></param>
 /// <param name="teamProjectName"></param>
 public virtual void Dump(
     StringBuilder stringBuilder,
     Dictionary <string, Object> parameters,
     ConnectionManager connectionManager,
     WordTemplateFolderManager wordTemplateFolderManager,
     string teamProjectName)
 {
     //Do nothing.
 }
Example #8
0
 public TemplateInfo(String templateName, WordTemplateFolderManager wordTemplateFolderManager)
 {
     IsScriptTemplate          = wordTemplateFolderManager.HasTemplateDefinition;
     TemplateName              = templateName;
     WordTemplateFolderManager = wordTemplateFolderManager;
     if (IsScriptTemplate)
     {
         //copy list of parameters
         Parameters = wordTemplateFolderManager.TemplateDefinition.Parameters.ParameterNames.ToList();
     }
 }
Example #9
0
        public override void Assemble(
            WordManipulator manipulator,
            Dictionary <string, object> parameters,
            ConnectionManager connectionManager,
            WordTemplateFolderManager wordTemplateFolderManager,
            string teamProjectName)
        {
            parameters = parameters.ToDictionary(k => k.Key, v => v.Value); //clone
            //If we do not have query parameters we have a single query or we can have parametrized query with iterationPath
            var            queries        = PrepareQueries(parameters);
            WorkItemManger workItemManger = new WorkItemManger(connectionManager);

            workItemManger.SetTeamProject(teamProjectName);

            foreach (var query in queries)
            {
                var workItems = workItemManger.ExecuteQuery(query).Take(Limit);

                if (String.IsNullOrEmpty(TableTemplate))
                {
                    foreach (var workItem in workItems)
                    {
                        if (!SpecificTemplates.TryGetValue(workItem.Type.Name, out var templateName))
                        {
                            templateName = wordTemplateFolderManager.GetTemplateFor(workItem.Type.Name);
                        }
                        else
                        {
                            templateName = wordTemplateFolderManager.GenerateFullFileName(templateName);
                        }

                        manipulator.InsertWorkItem(workItem, templateName, true, parameters);
                    }
                }
                else
                {
                    //We have a table template, we want to export work item as a list
                    var tableFile = wordTemplateFolderManager.GenerateFullFileName(TableTemplate);
                    var tempFile  = wordTemplateFolderManager.CopyFileInTempDirectory(tableFile);
                    using (var tableManipulator = new WordManipulator(tempFile, false))
                    {
                        tableManipulator.SubstituteTokens(parameters);
                        tableManipulator.FillTableWithCompositeWorkItems(true, workItems);
                    }
                    manipulator.AppendOtherWordFile(tempFile);
                }
            }

            base.Assemble(manipulator, parameters, connectionManager, wordTemplateFolderManager, teamProjectName);
        }
Example #10
0
 public TemplateInfo(String templateName, WordTemplateFolderManager wordTemplateFolderManager)
 {
     IsScriptTemplate          = wordTemplateFolderManager.HasTemplateDefinition;
     TemplateName              = templateName;
     WordTemplateFolderManager = wordTemplateFolderManager;
     if (IsScriptTemplate)
     {
         //copy list of parameters
         var tdef = wordTemplateFolderManager.TemplateDefinition;
         Parameters =
             tdef?.ParameterSection.Parameters
             .Select(e => CreateParameterViewModel(tdef, e))
             .ToList()
             ?? new List <ParameterViewModel>();
         ArrayParameters = wordTemplateFolderManager.TemplateDefinition.ArrayParameterSection?.ArrayParameters ?? new Dictionary <String, String>();
     }
 }
        private static void PerformTemplateExport(ConnectionManager connection)
        {
            var wordFolderManager = new WordTemplateFolderManager(options.TemplateFolder);
            var executor          = new TemplateExecutor(wordFolderManager);

            //now we need to ask user parameter value
            Dictionary <string, Object> parameters = new Dictionary <string, object>();

            foreach (var parameterName in wordFolderManager.TemplateDefinition.Parameters.ParameterNames)
            {
                Console.Write($"Parameter {parameterName}:");
                parameters[parameterName] = Console.ReadLine();
            }

            var tempFileName = Path.GetTempPath() + Guid.NewGuid().ToString() + ".docx";

            executor.GenerateWordFile(tempFileName, connection, options.TeamProject, parameters);
            System.Diagnostics.Process.Start(tempFileName);
        }
        public override void Assemble(
            WordManipulator manipulator,
            Dictionary <string, Object> parameters,
            ConnectionManager connectionManager,
            WordTemplateFolderManager wordTemplateFolderManager,
            string teamProjectName)
        {
            //ok we simply add a file to the manipulator, but remember we need to perform
            //substitution.
            var fileName = wordTemplateFolderManager.CopyFileInTempDirectory(FileName);

            using (WordManipulator m = new WordManipulator(fileName, false))
            {
                m.SubstituteTokens(parameters);
            }
            //Simply append other file honoring the page break.
            manipulator.AppendOtherWordFile(fileName, PageBreak);
            File.Delete(FileName);
            base.Assemble(manipulator, parameters, connectionManager, wordTemplateFolderManager, teamProjectName);
        }
        private static void AddTableContent(
            WordManipulator manipulator,
            List <WorkItem> workItems,
            WordTemplateFolderManager template)
        {
            string tableFileName = template.GetTable("A", true);

            using (var tableManipulator = new WordManipulator(tableFileName, false))
            {
                List <List <String> > table = new List <List <string> >();
                foreach (WorkItem workItem in workItems)
                {
                    List <String> row = new List <string>();
                    row.Add(workItem.Id.ToString());
                    row.Add(workItem.GetFieldValueAsString("System.AssignedTo"));
                    row.Add(workItem.AttachedFileCount.ToString());
                    table.Add(row);
                }
                tableManipulator.FillTable(true, table);
            }
            manipulator.AppendOtherWordFile(tableFileName);
            File.Delete(tableFileName);
        }
        public override void AssembleExcel(
            ExcelManipulator manipulator,
            Dictionary <string, object> parameters,
            ConnectionManager connectionManager,
            WordTemplateFolderManager wordTemplateFolderManager,
            string teamProjectName)
        {
            WorkItemManger workItemManger = PrepareWorkItemManager(connectionManager, teamProjectName);
            //If we do not have query parameters we have a single query or we can have parametrized query with iterationPath
            var queries = PrepareQueries(parameters);

            foreach (var query in queries)
            {
                if (HierarchyMode?.Length > 0)
                {
                    var hr = workItemManger.ExecuteHierarchicQuery(query, HierarchyMode);
                    manipulator.FillWorkItems(hr);
                }
                else
                {
                    throw new NotSupportedException("This version of the program only support hierarchy mode for excel");
                }
            }
        }
        public void Verify_scan_folder_grab_name()
        {
            WordTemplateFolderManager sut = CreateSutForTemplate_1_A();

            Assert.That(sut.Name, Is.EqualTo("TemplateA"));
        }