diff --git a/.gitignore b/.gitignore index cc5d6d4..c1a1b8f 100644 --- a/.gitignore +++ b/.gitignore @@ -345,3 +345,5 @@ ASALocalRun/ Adaptation/.kanbn Adaptation/FileHandlers/json/StaticSite/json/work-items.json Adaptation/FileHandlers/json/StaticSite/igniteui/**/* +Adaptation/FileHandlers/json/StaticSite/json/**/* +Adaptation/FileHandlers/json/StaticSite/markdown/**/* diff --git a/Adaptation/FileHandlers/Kanban/ProcessData.cs b/Adaptation/FileHandlers/Kanban/ProcessData.cs index 9ff85b0..9658dd2 100644 --- a/Adaptation/FileHandlers/Kanban/ProcessData.cs +++ b/Adaptation/FileHandlers/Kanban/ProcessData.cs @@ -70,7 +70,7 @@ public class ProcessData : IProcessData ReadOnlyDictionary keyValuePairs = GetWorkItems(workItems); WriteFileStructure(destinationDirectory, keyValuePairs); WriteFiles(fileRead, destinationDirectory, fileInfoCollection, fileNameWithoutExtension, keyValuePairs); - WriteKanbanFiles(fileRead, destinationDirectory, cssLines, frontMatterLines, fileInfoCollection, keyValuePairs); + WriteKanbanFiles(fileRead, url, cssLines, frontMatterLines, fileInfoCollection, destinationDirectory, keyValuePairs); } private static ReadOnlyDictionary GetWorkItems(WorkItem[] workItems) @@ -95,7 +95,7 @@ public class ProcessData : IProcessData } } - private void WriteFiles(IFileRead fileRead, string destinationDirectory, List fileInfoCollection, string fileNameWithoutExtension, ReadOnlyDictionary keyValuePairs) + private static void WriteFiles(IFileRead fileRead, string destinationDirectory, List fileInfoCollection, string fileNameWithoutExtension, ReadOnlyDictionary keyValuePairs) { string old; string json; @@ -127,32 +127,34 @@ public class ProcessData : IProcessData } - private void WriteKanbanFiles(IFileRead fileRead, string destinationDirectory, ReadOnlyCollection cssLines, ReadOnlyCollection frontMatterLines, List fileInfoCollection, ReadOnlyDictionary keyValuePairs) + private static void WriteKanbanFiles(IFileRead fileRead, string url, ReadOnlyCollection cssLines, ReadOnlyCollection frontMatterLines, List fileInfoCollection, string destinationDirectory, ReadOnlyDictionary keyValuePairs) { string old; string json; Record record; + string markdown; string checkFile; + string jsonDirectory; string tasksDirectory; string kanbanDirectory; string vscodeDirectory; string[] iterationPaths; string singletonDirectory; - List indexLines = new(); + string iterationPathDirectory; JsonSerializerOptions jsonSerializerOptions = new() { WriteIndented = true }; foreach (KeyValuePair keyValuePair in keyValuePairs) { record = keyValuePair.Value; - singletonDirectory = destinationDirectory; + iterationPathDirectory = destinationDirectory; iterationPaths = record.WorkItem.IterationPath.Split('\\'); json = JsonSerializer.Serialize(record, jsonSerializerOptions); foreach (string iterationPath in iterationPaths) { if (iterationPath.Contains("Sprint")) continue; - singletonDirectory = Path.Combine(singletonDirectory, iterationPath); + iterationPathDirectory = Path.Combine(iterationPathDirectory, iterationPath); } - singletonDirectory = Path.Combine(singletonDirectory, record.WorkItem.WorkItemType.Replace(" ", "-"), $"{record.WorkItem.Id}-{record.WorkItem.WorkItemType.Replace(" ", "-")}"); + singletonDirectory = Path.Combine(iterationPathDirectory, record.WorkItem.WorkItemType.Replace(" ", "-"), $"{record.WorkItem.Id}-{record.WorkItem.WorkItemType.Replace(" ", "-")}"); kanbanDirectory = Path.Combine(singletonDirectory, ".kanbn"); if (!Directory.Exists(kanbanDirectory)) _ = Directory.CreateDirectory(kanbanDirectory); @@ -162,35 +164,28 @@ public class ProcessData : IProcessData vscodeDirectory = Path.Combine(singletonDirectory, ".vscode"); if (!Directory.Exists(vscodeDirectory)) _ = Directory.CreateDirectory(vscodeDirectory); + jsonDirectory = Path.Combine(singletonDirectory, record.WorkItem.Id.ToString()); + if (!Directory.Exists(jsonDirectory)) + _ = Directory.CreateDirectory(jsonDirectory); checkFile = Path.Combine(vscodeDirectory, "settings.json"); if (!File.Exists(checkFile)) File.WriteAllText(checkFile, "{ \"[markdown]\": { \"editor.wordWrap\": \"off\" }, \"cSpell.words\": [ \"kanbn\" ] }"); - indexLines.Clear(); - indexLines.AddRange(frontMatterLines); - indexLines.Add(string.Empty); - indexLines.Add($"# {record.WorkItem.Id}"); - indexLines.Add(string.Empty); - indexLines.Add("## Backlog"); - indexLines.Add(string.Empty); - indexLines.Add("## Todo"); - indexLines.Add(string.Empty); - indexLines.Add("## In Progress"); - indexLines.Add(string.Empty); - indexLines.Add("## Done"); + markdown = GetIndexLines(frontMatterLines, record); checkFile = Path.Combine(kanbanDirectory, "board.css"); if (!File.Exists(checkFile)) File.WriteAllLines(checkFile, cssLines); checkFile = Path.Combine(kanbanDirectory, "index.md"); if (!File.Exists(checkFile)) - File.WriteAllLines(checkFile, indexLines); - checkFile = Path.Combine(kanbanDirectory, ".json"); - if (File.Exists(checkFile)) - { - old = File.ReadAllText(checkFile); - if (old == json) - continue; - } - File.WriteAllText(checkFile, json); + File.WriteAllText(checkFile, markdown); + checkFile = Path.Combine(jsonDirectory, ".json"); + old = File.Exists(checkFile) ? File.ReadAllText(checkFile) : string.Empty; + if (old != json) + File.WriteAllText(checkFile, json); + markdown = GetMarkdownLines(url, record, jsonDirectory, iterationPathDirectory); + checkFile = Path.Combine(vscodeDirectory, "markdown.md"); + old = File.Exists(checkFile) ? File.ReadAllText(checkFile) : string.Empty; + if (old != markdown) + File.WriteAllText(checkFile, markdown); if (!fileRead.IsEAFHosted) fileInfoCollection.Add(new(checkFile)); } @@ -213,11 +208,11 @@ public class ProcessData : IProcessData try { records = GetKeyValuePairs(keyValuePairs, keyValuePair.Value, nests); - record = new(keyValuePair.Value, parentWorkItem, records, null); + record = new(keyValuePair.Value, parentWorkItem, records); } catch (Exception) { - record = new(keyValuePair.Value, parentWorkItem, new(Array.Empty()), null); + record = new(keyValuePair.Value, parentWorkItem, new(Array.Empty())); } results.Add(keyValuePair.Key, record); } @@ -251,6 +246,49 @@ public class ProcessData : IProcessData return new(results.Distinct().ToArray()); } + private static string GetIndexLines(ReadOnlyCollection frontMatterLines, Record record) + { + List results = new(); + results.Clear(); + results.AddRange(frontMatterLines); + results.Add(string.Empty); + results.Add($"# {record.WorkItem.Id}"); + results.Add(string.Empty); + results.Add("## Backlog"); + results.Add(string.Empty); + results.Add("## Todo"); + results.Add(string.Empty); + results.Add("## In Progress"); + results.Add(string.Empty); + results.Add("## Done"); + results.Add(string.Empty); + return string.Join(Environment.NewLine, results); + } + + private static string GetMarkdownLines(string url, Record record, string jsonDirectory, string iterationPathDirectory) + { + List results = new(); + string link; + string target; + results.Add($"# {record.WorkItem.Id}"); + results.Add(string.Empty); + results.Add($"## {record.WorkItem.Title}"); + results.Add(string.Empty); + foreach (Record r in record.Children) + results.Add($"- [{r.WorkItem.Id}]({url}{r.WorkItem.Id})"); + results.Add(string.Empty); + results.Add("```bash"); + foreach (Record r in record.Children) + { + link = Path.Combine(jsonDirectory, $"{r.WorkItem.Id}-{r.WorkItem.WorkItemType}"); + target = Path.Combine(iterationPathDirectory, r.WorkItem.WorkItemType, $"{r.WorkItem.Id}-{r.WorkItem.WorkItemType}", r.WorkItem.Id.ToString()); + results.Add($"mklink /J \"{link}\" \"{target}\""); + } + results.Add("```"); + results.Add(string.Empty); + return string.Join(Environment.NewLine, results); + } + private static ReadOnlyCollection GetKeyValuePairs(ReadOnlyDictionary keyValuePairs, WorkItem workItem, List nests) { List results = new(); @@ -283,7 +321,7 @@ public class ProcessData : IProcessData else _ = keyValuePairs.TryGetValue(w.Parent.Value, out parentWorkItem); records = GetKeyValuePairs(keyValuePairs, w, nests); - record = new(w, parentWorkItem, records, null); + record = new(w, parentWorkItem, records); results.Add(record); } } diff --git a/Adaptation/FileHandlers/Markdown/ProcessData.cs b/Adaptation/FileHandlers/Markdown/ProcessData.cs index c4aeacc..1ed9e44 100644 --- a/Adaptation/FileHandlers/Markdown/ProcessData.cs +++ b/Adaptation/FileHandlers/Markdown/ProcessData.cs @@ -256,11 +256,11 @@ public class ProcessData : IProcessData try { records = GetKeyValuePairs(keyValuePairs, keyValuePair.Value, nests); - record = new(keyValuePair.Value, parentWorkItem, records, null); + record = new(keyValuePair.Value, parentWorkItem, records); } catch (Exception) { - record = new(keyValuePair.Value, parentWorkItem, new(Array.Empty()), null); + record = new(keyValuePair.Value, parentWorkItem, new(Array.Empty())); } results.Add(keyValuePair.Key, record); } @@ -309,7 +309,7 @@ public class ProcessData : IProcessData else _ = keyValuePairs.TryGetValue(w.Parent.Value, out parentWorkItem); records = GetKeyValuePairs(keyValuePairs, w, nests); - record = new(w, parentWorkItem, records, null); + record = new(w, parentWorkItem, records); results.Add(record); } } diff --git a/Adaptation/FileHandlers/json/StaticSite/html/122508.html b/Adaptation/FileHandlers/json/StaticSite/html/122508.html new file mode 100644 index 0000000..c787ec2 --- /dev/null +++ b/Adaptation/FileHandlers/json/StaticSite/html/122508.html @@ -0,0 +1,65 @@ + + + + + + + Infineon - 122508 - Feature iteration should be set to max of children + + + + + + + + + + + + + + +
+ +
+
+
+ +
  + +
+
+
+
+ + + + + \ No newline at end of file diff --git a/Adaptation/FileHandlers/json/StaticSite/html/122514.html b/Adaptation/FileHandlers/json/StaticSite/html/122514.html new file mode 100644 index 0000000..6d771a6 --- /dev/null +++ b/Adaptation/FileHandlers/json/StaticSite/html/122514.html @@ -0,0 +1,65 @@ + + + + + + + Infineon - 122514 - Features and children must have a Tag + + + + + + + + + + + + + + +
+ +
+
+
+ +
  + +
+
+
+
+ + + + + \ No newline at end of file diff --git a/Adaptation/FileHandlers/json/StaticSite/html/123066.html b/Adaptation/FileHandlers/json/StaticSite/html/123066.html new file mode 100644 index 0000000..8bd992d --- /dev/null +++ b/Adaptation/FileHandlers/json/StaticSite/html/123066.html @@ -0,0 +1,65 @@ + + + + + + + Infineon - 123066 - When children of a Feature are not New Feature must also not be New + + + + + + + + + + + + + + +
+ +
+
+
+ +
  + +
+
+
+
+ + + + + \ No newline at end of file diff --git a/Adaptation/FileHandlers/json/StaticSite/leo.html b/Adaptation/FileHandlers/json/StaticSite/html/123067.html similarity index 80% rename from Adaptation/FileHandlers/json/StaticSite/leo.html rename to Adaptation/FileHandlers/json/StaticSite/html/123067.html index c13b486..d187545 100644 --- a/Adaptation/FileHandlers/json/StaticSite/leo.html +++ b/Adaptation/FileHandlers/json/StaticSite/html/123067.html @@ -4,14 +4,14 @@ - FI Backlog HiRel (Leominster) + Infineon - 123067 - WIP - + - + @@ -27,12 +27,12 @@