public SDTreeNode(ElementDefinition element) { Element = element; Path = element.path.WhenNotNull(t => t.value); _lastPathElement = element.GetLastPathValue(); _name = element.name.WhenNotNull(t => t.value); IsSlice = false; }
private ElementDefinition[] CreateSnapshot(StructureDefinition structure) { ElementDefinition[] elements = structure.differential.WhenNotNull(t => t.element); if (elements == null) { throw new Exception("No differential in definition"); } StructureDefinition baseStructure = _sdHierarchy.ImmediateAncestor; ElementDefinition[] baseSnapshotElements = baseStructure.differential.WhenNotNull(t => t.element); if (baseSnapshotElements == null) { throw new Exception("No snapshot in base definition"); } List <ElementDefinition> result = new List <ElementDefinition>(); foreach (ElementDefinition baseElement in baseSnapshotElements) { ElementDefinition element = _sdHierarchy.GetCurrentElementDefinition(baseElement.path.WhenNotNull(t => t.value)); if (element != null) { result.Add(element); } else { result.Add(baseElement); } } List <ElementDefinition> elementsToAddToBeginning = new List <ElementDefinition>(); string[] baseBaseElementNames = new string[] { "id", "meta", "implicitRules", "language", "text", "contained" }; foreach (ElementDefinition element in elements) { if (!result.Any(t => t == element)) { if (baseBaseElementNames.Contains(element.GetLastPathValue())) { elementsToAddToBeginning.Add(element); } else { result.Add(element); } } } result.InsertRange(0, elementsToAddToBeginning); return(result.ToArray()); }