/// <summary> /// Create slices on indicated node. /// </summary> /// <param name="elementNode">Element node containing discriminator</param> /// <returns></returns> public bool CreateSlice() { const String fcn = nameof(CreateSlice); baseTypeName = elementNode.FhirType.FriendlyName(); baseItemTypeName = elementNode.FhirItemType.FriendlyName(); ElementDefinition.SlicingComponent sliceComponent = elementNode.Element.Slicing; if (sliceComponent.Ordered == true) { this.gen.ConversionError(this.GetType().Name, fcn, $"TODO: Slicing.Ordered == true not currently implemented. '{elementNode.FullPath()}'"); return(false); } if (sliceComponent.Rules != ElementDefinition.SlicingRules.Open) { this.gen.ConversionError(this.GetType().Name, fcn, $"TODO: Slicing.Rules != Open not currently implemented. '{elementNode.FullPath()}'"); return(false); } discriminators = sliceComponent.Discriminator.ToArray(); accessorType = elementNode.FhirItemType.FriendlyName(); foreach (ElementDefinitionNode sliceNode in elementNode.Slices) { CreateSliceAccessorClass(sliceNode, out String sliceClassName, out String sliceInterfaceName); CreateSliceAccessor(sliceNode, sliceClassName, sliceInterfaceName); } return(retVal); }
public ElementTreeNode SliceValueXByType(ElementTreeSlice slice, String[] types) { ElementDefinition valueX = new ElementDefinition { Path = $"{slice.ElementDefinition.Path}.value[x]", ElementId = $"{slice.ElementDefinition.ElementId}.value[x]", Min = 1, Max = "1" }; valueX .Types(types) ; ElementDefinition.SlicingComponent slicingComponent = new ElementDefinition.SlicingComponent { Rules = ElementDefinition.SlicingRules.Closed }; slicingComponent.Discriminator.Add(new ElementDefinition.DiscriminatorComponent { Type = ElementDefinition.DiscriminatorType.Type, Path = "$this" }); valueX.ApplySlicing(slicingComponent, false); return(slice.CreateNode(valueX)); }
public static ElementDefinition ApplySlicing(this ElementDefinition e, ElementDefinition.SlicingComponent slicingComponent, bool overrideExistingSliceDiscriminator) { bool NonCompatible() { if (e.Slicing == null) { return(false); } if (e.Slicing.Ordered != slicingComponent.Ordered) { return(true); } if (e.Slicing.Rules != slicingComponent.Rules) { return(true); } if (e.Slicing.Discriminator.Count != slicingComponent.Discriminator.Count) { return(true); } for (Int32 i = 0; i < slicingComponent.Discriminator.Count; i++) { if (slicingComponent.Discriminator[i].Type != e.Slicing.Discriminator[i].Type) { return(true); } if (slicingComponent.Discriminator[i].Path != e.Slicing.Discriminator[i].Path) { return(true); } } return(false); } if (overrideExistingSliceDiscriminator) { e.Slicing = null; } if (e.Slicing != null) { if (NonCompatible() == true) { throw new Exception($"Slicing already defined in a noncompatible manner"); } } else { e.Slicing = slicingComponent; } return(e); }
internal SliceGroupBucket(ElementDefinition.SlicingComponent slicing, IBucket main, List <IBucket> subs) { if (slicing == null) { throw Error.ArgumentNull(nameof(slicing)); } Entry = main; ChildSlices = subs; Ordered = slicing.Ordered ?? false; Rules = slicing.Rules ?? ElementDefinition.SlicingRules.Open; }
public void StartComponentSliceing() { ElementTreeNode componentNode = this.Get("component"); ElementDefinition.SlicingComponent slicingComponent = new ElementDefinition.SlicingComponent { Rules = ElementDefinition.SlicingRules.Open }; slicingComponent.Discriminator.Add(new ElementDefinition.DiscriminatorComponent { Type = ElementDefinition.DiscriminatorType.Pattern, Path = "code" }); componentNode.ApplySlicing(slicingComponent, false); }
public ElementTreeNode ApplySliceSelf(String path) { ElementDefinition.SlicingComponent slicing = new ElementDefinition.SlicingComponent { Rules = ElementDefinition.SlicingRules.Open }; slicing.Discriminator.Add(new ElementDefinition.DiscriminatorComponent { Type = ElementDefinition.DiscriminatorType.Type, Path = "$this" }); ElementTreeNode elementDef = this.Get(path); elementDef.ApplySlicing(slicing, false); return(elementDef); }
// Start Section Sliceing ElementTreeNode StartSectionSlicing(SDefEditor e) { ElementTreeNode sectionNode = e.Get("section"); ElementDefinition.SlicingComponent slicingComponent = new ElementDefinition.SlicingComponent { Rules = ElementDefinition.SlicingRules.Open }; slicingComponent.Discriminator.Add(new ElementDefinition.DiscriminatorComponent { Type = ElementDefinition.DiscriminatorType.Pattern, Path = "code" }); sectionNode.ApplySlicing(slicingComponent, false); return(sectionNode); }
public ElementTreeNode ConfigureSliceByUrlDiscriminator(ElementTreeNode extDef, bool overrideExistingSliceDiscriminator) { ElementDefinition.SlicingComponent slicingComponent = new ElementDefinition.SlicingComponent { Ordered = true, Rules = ElementDefinition.SlicingRules.OpenAtEnd }; slicingComponent.Discriminator.Add(new ElementDefinition.DiscriminatorComponent { Type = ElementDefinition.DiscriminatorType.Value, Path = "url" }); extDef.ApplySlicing(slicingComponent, overrideExistingSliceDiscriminator); return(extDef); }
public void ApplySlicing(ElementDefinition.SlicingComponent slicingComponent, bool overrideExistingSliceDiscriminator) { this.ElementDefinition.ApplySlicing(slicingComponent, overrideExistingSliceDiscriminator); }