From 79757f0079815c2ceb3b4d064783af0dcb4c4b10 Mon Sep 17 00:00:00 2001 From: Franziska Date: Mon, 31 Jul 2023 11:30:57 +0200 Subject: [PATCH] enable template helper to read formatversion G1.0a etc. --- EDILibrary/TemplateHelper.cs | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/EDILibrary/TemplateHelper.cs b/EDILibrary/TemplateHelper.cs index 3929d29..aa04168 100644 --- a/EDILibrary/TemplateHelper.cs +++ b/EDILibrary/TemplateHelper.cs @@ -2,8 +2,8 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Text.RegularExpressions; using System.Xml.Linq; - using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -11,8 +11,10 @@ namespace EDILibrary { public class TemplateHelper { - // Todo @JoschaMetze: Add a docstring - protected static void ParseAPERAKString(string aperak, out string dataType, out int length, + + private const string FormatVersionPattern = "^(?[A-Z]{6,7})(?[A-Z]?\\d+\\.\\d+[a-z]?)$"; + + private static void ParseAPERAKString(string aperak, out string dataType, out int length, out List list) { dataType = null; @@ -44,8 +46,8 @@ protected static void ParseAPERAKString(string aperak, out string dataType, out } } - // Todo @JoschaMetze: Add a docstring - protected static void Recurse(XElement cur, JArray refObj, TreeElement tree) + + private static void Recurse(XElement cur, JArray refObj, TreeElement tree) { var i = cur.Descendants("field").Count(d => d.Parent == cur); var hasClass = cur.Descendants("class").Any(d => d.Parent == cur); @@ -442,17 +444,30 @@ public string ConvertFilesToJSON(string inputFileName, string outputFileName, st { tree = new GenericEDILoader().LoadTree(File.ReadAllText(treeFileName)); } - var tmp = new JArray(); Recurse(srcXml, tmp, tree); - //retriev version information from inputFileName - var part = inputFileName.Split(new[] { ".template" }, StringSplitOptions.None)[0].Split(System.IO.Path.DirectorySeparatorChar).Last(); - var version = part.Substring(part.IndexOf('.') - 1); + string version = RetrieveFormatVersionFromInputFileName(inputFileName); ((tmp[0] as JObject)["_meta"] as JObject).Add("version", version); File.WriteAllText(outputFileName, JsonConvert.SerializeObject(tmp)); return JsonConvert.SerializeObject(tmp); } + + private static string RetrieveFormatVersionFromInputFileName(string inputFileName) + { + var formatVersionRegex = new Regex(FormatVersionPattern); + var part = inputFileName.Split(new[] { ".template" }, StringSplitOptions.None)[0].Split(System.IO.Path.DirectorySeparatorChar).Last(); + var match = formatVersionRegex.Match(part); + if (match.Success) + { + return match.Groups["version"].Value; + } + else + { + throw new ArgumentException($"Format version could not be determined: {part}", nameof(inputFileName)); + } + } + // the format version will be written to the json template file, thus needs to be passed public string ConvertToJSON(string xmlTemplate, string treeTemplate, string formatVersion) {