void BuildValueSet(VSInfo vi) { vi.ClassCode.Blocks.Find("Fields") .DefineBlock(out CodeBlockNested fieldsBlock) ; vi.ClassCode.Blocks.Find("Methods") .DefineBlock(out CodeBlockNested methodBlock) ; if (vi.ValueSet.Compose.Exclude.Count > 0) { throw new NotImplementedException("Have not implemented ValueSet.Compose.Exclude"); } methodBlock .AppendCode($"public static IEnumerable<TCoding> Codes()") .OpenBrace() ; foreach (ValueSet.ConceptSetComponent component in vi.ValueSet.Compose.Include) { if (component.Filter.Count > 0) { throw new NotImplementedException("Have not implemented ValueSet.Compose.Include.Filter"); } foreach (ValueSet.ConceptReferenceComponent concept in component.Concept) { if (this.CodeSystems.TryGetValue(component.System, out CSInfo ci) == false) { throw new Exception($"CodeSystem {component.System} not found"); } String codeName = CSMisc.CodeName(concept.Code); String codingReference = $"{CSMisc.CodeSystemName(ci)}.{codeName}"; fieldsBlock .AppendCode($"public static TCoding {codeName} = new TCoding({codingReference});") ; methodBlock .AppendCode($"yield return {codeName};") ; } } methodBlock .CloseBrace() ; }
void BuildCodeSystem(CSInfo ci) { CodeBlockNested csFields = ci.ClassCode.Blocks.Find("Fields"); csFields .AppendCode($"const string System = \"{ci.CodeSystem.Url}\";"); ; if (ci.CodeSystem.Filter.Count > 0) { throw new NotImplementedException("Have not implemented CodeSystem.Filter"); } foreach (CodeSystem.ConceptDefinitionComponent component in ci.CodeSystem.Concept) { String display = component.Display?.Replace("\"", "'"); String code = component.Code; csFields .BlankLine() .AppendLine("/// <summary>") ; if (component.Definition != null) { foreach (String line in component.Definition.Split('\n')) { String s = line .Trim() .Replace("\r", "") .Replace("%", "\\%") ; s = WebUtility.HtmlEncode(s); csFields.AppendLine($"/// {s}"); } } csFields .AppendLine("/// </summary>") .AppendCode($"public static Coding {CSMisc.CodeName(component.Code)} = new Coding(System, \"{code}\", \"{display}\");") ; } }