Пример #1
0
 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;
 }
Пример #2
0
        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());
        }