예제 #1
0
        /// <summary>
        /// Parse Range
        /// </summary>
        public static Hl7.Fhir.Model.Range ParseRange(IFhirReader reader, ErrorList errors, Hl7.Fhir.Model.Range existingInstance = null)
        {
            Hl7.Fhir.Model.Range result = existingInstance != null ? existingInstance : new Hl7.Fhir.Model.Range();
            string currentElementName   = reader.CurrentElementName;

            reader.EnterElement();

            while (reader.HasMoreElements())
            {
                var atName = reader.CurrentElementName;
                // Parse element extension
                if (atName == "extension")
                {
                    result.Extension = new List <Hl7.Fhir.Model.Extension>();
                    reader.EnterArray();

                    while (ParserUtils.IsAtArrayElement(reader, "extension"))
                    {
                        result.Extension.Add(ExtensionParser.ParseExtension(reader, errors));
                    }

                    reader.LeaveArray();
                }

                // Parse element _id
                else if (atName == "_id")
                {
                    result.LocalIdElement = Id.Parse(reader.ReadPrimitiveContents(typeof(Id)));
                }

                // Parse element low
                else if (atName == "low")
                {
                    result.Low = QuantityParser.ParseQuantity(reader, errors);
                }

                // Parse element high
                else if (atName == "high")
                {
                    result.High = QuantityParser.ParseQuantity(reader, errors);
                }

                else
                {
                    errors.Add(String.Format("Encountered unknown element {0} while parsing {1}", reader.CurrentElementName, currentElementName), reader);
                    reader.SkipSubElementsFor(currentElementName);
                    result = null;
                }
            }

            reader.LeaveElement();
            return(result);
        }
예제 #2
0
        public void SliceSize(ElementTreeSlice slice,
                              ValueSet units)
        {
            // Fix component code
            ElementTreeNode valueXNode = this.SliceValueXByType(slice,
                                                                new string[] { "Quantity", "Range" });
            {
                Hl7.Fhir.Model.Quantity q = new Hl7.Fhir.Model.Quantity
                {
                    System = units.Url
                };

                ElementDefinition valueX = new ElementDefinition
                {
                    Path      = $"{slice.ElementDefinition.Path}.value[x]",
                    ElementId = $"{slice.ElementDefinition.ElementId}.value[x]:valueQuantity",
                    SliceName = $"valueQuantity",
                    Min       = 0,
                    Max       = "1"
                }
                .Pattern(q)
                .Type("Quantity")
                ;
                valueXNode.CreateSlice($"valueQuantity", valueX);
            }

            {
                Hl7.Fhir.Model.Range r = new Hl7.Fhir.Model.Range
                {
                    Low = new SimpleQuantity
                    {
                        System = units.Url,
                    },
                    High = new SimpleQuantity
                    {
                        System = units.Url,
                    }
                };
                ElementDefinition valueX = new ElementDefinition
                {
                    Path      = $"{slice.ElementDefinition.Path}.value[x]",
                    ElementId = $"{slice.ElementDefinition.ElementId}.value[x]:valueRange",
                    SliceName = $"valueRange",
                    Min       = 0,
                    Max       = "1"
                }
                .Pattern(r)
                .Type("Range")
                ;
                valueXNode.CreateSlice($"valueRange", valueX);
            }
        }
예제 #3
0
        public static void SerializeRange(Hl7.Fhir.Model.Range value, IFhirWriter writer, bool summary)
        {
            writer.WriteStartComplexContent();

            // Serialize element _id
            if (value.LocalIdElement != null)
            {
                writer.WritePrimitiveContents("_id", value.LocalIdElement, XmlSerializationHint.Attribute);
            }

            // Serialize element extension
            if (value.Extension != null && !summary && value.Extension.Count > 0)
            {
                writer.WriteStartArrayElement("extension");
                foreach (var item in value.Extension)
                {
                    writer.WriteStartArrayMember("extension");
                    ExtensionSerializer.SerializeExtension(item, writer, summary);
                    writer.WriteEndArrayMember();
                }
                writer.WriteEndArrayElement();
            }

            // Serialize element low
            if (value.Low != null)
            {
                writer.WriteStartElement("low");
                QuantitySerializer.SerializeQuantity(value.Low, writer, summary);
                writer.WriteEndElement();
            }

            // Serialize element high
            if (value.High != null)
            {
                writer.WriteStartElement("high");
                QuantitySerializer.SerializeQuantity(value.High, writer, summary);
                writer.WriteEndElement();
            }


            writer.WriteEndComplexContent();
        }
예제 #4
0
        public void Can_ConvertElement_R3_Range_To_R4_Range()
        {
            var r3TypeInstance = new Hl7.Fhir.Model.Range
            {
                Low = new Quantity
                {
                    Value = 1.6m,
                    Unit  = "m"
                },
                High = new Quantity
                {
                    Value = 1.9m,
                    Unit  = "m"
                }
            };
            var r4TypeInstance = new FhirConverter(FhirVersion.R4, FhirVersion.R3)
                                 .Convert <Hl7.Fhir.Model.Range, Hl7.Fhir.Model.Range>(r3TypeInstance);

            Assert.NotNull(r4TypeInstance);
            Assert.Equal(r3TypeInstance.Low.Value, r4TypeInstance.Low.Value);
            Assert.Equal(r3TypeInstance.Low.Unit, r4TypeInstance.Low.Unit);
            Assert.Equal(r3TypeInstance.High.Value, r4TypeInstance.High.Value);
            Assert.Equal(r3TypeInstance.High.Unit, r4TypeInstance.High.Unit);
        }
예제 #5
0
 public static Model.Range setHigh(this Model.Range me, Model.SimpleQuantity value)
 {
     me.High = value;
     return(me);
 }
예제 #6
0
 public static Model.Range setLow(this Model.Range me, Model.SimpleQuantity value)
 {
     me.Low = value;
     return(me);
 }
예제 #7
0
        public void RenderRange()
        {
            var n = new Quantity() { Value = 5.0m, Units = "cm" };
            var r = new Range { Low = n };

            Assert.AreEqual("[5.0cm,∞]", r.ForDisplay());
        }