private void GroupOpenSliceElements(SDTreeNode node) { if (node.IsSetupSlice && (!node.IsSetupSliceForExtension)) { List <SDTreeNode> nodesToGroup = new List <SDTreeNode>(); foreach (SDTreeNode childNode in node.Children) { if (!childNode.IsSlice) { nodesToGroup.Add(childNode); } } if (node.Element.slicing.rules.value == SlicingRuleslist.open) { ElementDefinition openSliceElement = new ElementDefinition(); openSliceElement.path = new @string(); openSliceElement.path.value = node.Element.path.value + "#n"; openSliceElement.name = new @string(); // openSliceElement.name.value = "open"; // also fix cardinalities openSliceElement.type = node.GetElementDefinitionType(); SDTreeNode openSlice = new SDTreeNode(openSliceElement); openSlice.AddChildren(nodesToGroup.ToArray()); node.AddChild(openSlice); } else if (node.Element.slicing.rules.value == SlicingRuleslist.openAtEnd) { ElementDefinition openAtEndSliceElement = new ElementDefinition(); openAtEndSliceElement.path = new @string(); openAtEndSliceElement.path.value = node.Element.path.value + "#n"; openAtEndSliceElement.name = new @string(); // openAtEndSliceElement.name.value = "openAtEnd"; // also fix cardinalities openAtEndSliceElement.type = node.GetElementDefinitionType(); SDTreeNode openAtEndSlice = new SDTreeNode(openAtEndSliceElement); openAtEndSlice.AddChildren(nodesToGroup.ToArray()); node.AddChild(openAtEndSlice); } else { foreach (SDTreeNode childNodeToRemove in nodesToGroup) { node.RemoveChild(childNodeToRemove); } } } }
private static void GroupSlices(SDTreeNode node) { SDTreeNode[] childSetupSlices = node.Children.Where(t => t.IsSetupSlice && (!t.IsSetupSliceForExtension)).ToArray(); if (childSetupSlices.Any()) { foreach (SDTreeNode childSetupSlice in childSetupSlices) { SDTreeNode[] childSlices = node.Children.Where(t => t.Path.StartsWith(childSetupSlice.Path + "#")).ToArray(); foreach (SDTreeNode childSlice in childSlices) { childSlice.IsSlice = true; node.RemoveChild(childSlice); childSetupSlice.AddChild(childSlice); } } } }