Beispiel #1
0
        /// <summary>Resolve a <see cref="StructureDefinition"/> from a TypeRef.Code element, handle unknown/custom core types.</summary>
        /// <param name="resolver">An <see cref="IArtifactSource"/> reference.</param>
        /// <param name="typeCodeElement">A <see cref="ElementDefinition.TypeRefComponent.CodeElement"/> reference.</param>
        /// <returns>A <see cref="StructureDefinition"/> instance, or <c>null</c>.</returns>
        internal static StructureDefinition GetStructureDefinitionForTypeCode(this IResourceResolver resolver, Code <FHIRDefinedType> typeCodeElement)
        {
            StructureDefinition sd = null;
            var typeCode           = typeCodeElement.Value;

            if (typeCode.HasValue)
            {
                sd = resolver.FindStructureDefinitionForCoreType(typeCode.Value);
            }
            else
            {
                // Unknown/custom core type; try to resolve from raw object value
                var typeName = typeCodeElement.ObjectValue as string;
                if (!string.IsNullOrEmpty(typeName))
                {
                    sd = resolver.FindStructureDefinitionForCoreType(typeName);
                }
            }
            return(sd);
        }
Beispiel #2
0
        public void InitializationAndResolution()
        {
            var sd = _resolver.FindStructureDefinitionForCoreType(FHIRDefinedType.ValueSet);

            var assertion = new ProfileAssertion("Patient.name[0]", resolve);

            assertion.SetInstanceType(FHIRDefinedType.ValueSet);
            assertion.SetDeclaredType(FHIRDefinedType.ValueSet);
            assertion.AddStatedProfile("http://hl7.org/fhir/StructureDefinition/shareablevalueset");

            Assert.Equal(2, assertion.AllProfiles.Count());
            Assert.Equal(2, assertion.AllProfiles.Count(p => p.Status == null));    // status == null is only true for unresolved resources

            assertion.AddStatedProfile(sd);

            Assert.Equal(2, assertion.AllProfiles.Count());                      // Adding a ValueSet SD that was already there does not increase the profile count
            Assert.Equal(1, assertion.AllProfiles.Count(p => p.Status == null)); // but now there's 1 unresolved profile less
            Assert.True(assertion.AllProfiles.Contains(sd));                     // the other being the Sd we just added

            Assert.Equal(sd, assertion.InstanceType);
            Assert.Equal(sd, assertion.DeclaredType);

            var outcome = assertion.Resolve();

            Assert.True(outcome.Success);
            Assert.Equal(2, assertion.AllProfiles.Count());                      // We should still have 2 distinct SDs
            Assert.Equal(0, assertion.AllProfiles.Count(p => p.Status == null)); // none remain unresolved
            Assert.True(assertion.AllProfiles.Contains(sd));                     // one still being the Sd we manually added

            assertion.AddStatedProfile("http://hl7.org/fhir/StructureDefinition/unresolvable");

            outcome = assertion.Resolve();
            Assert.False(outcome.Success);
            Assert.Equal(3, assertion.AllProfiles.Count());                      // We should still have 3 distinct SDs
            Assert.Equal(1, assertion.AllProfiles.Count(p => p.Status == null)); // one remains unresolved
            Assert.True(assertion.AllProfiles.Contains(sd));                     // one still being the Sd we manually added
        }
Beispiel #3
0
 public static StructureDefinition FindStructureDefinitionForCoreType(this IResourceResolver resolver, FHIRDefinedType type)
 {
     return(resolver.FindStructureDefinitionForCoreType(ModelInfo.FhirTypeToFhirTypeName(type)));
 }