Class ValidationSupportChain

java.lang.Object
org.hl7.fhir.common.hapi.validation.support.ValidationSupportChain
All Implemented Interfaces:
ca.uhn.fhir.context.support.IValidationSupport

public class ValidationSupportChain extends Object implements ca.uhn.fhir.context.support.IValidationSupport
This validation support module has two primary purposes: It can be used to chain multiple backing modules together, and it can optionally cache the results.

The following chaining logic is used:

The following caching logic is used if caching is enabled using ValidationSupportChain.CacheConfiguration. You can use ValidationSupportChain.CacheConfiguration.disabled() if you want to disable caching.

Note that caching functionality used to be provided by a separate provider called CachingValidationSupport but that functionality has been moved into this class as of HAPI FHIR 8.0.0, because it is possible to provide a more efficient chain when these functions are combined.

  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static class 
     

    Nested classes/interfaces inherited from interface ca.uhn.fhir.context.support.IValidationSupport

    ca.uhn.fhir.context.support.IValidationSupport.BaseConceptProperty, ca.uhn.fhir.context.support.IValidationSupport.CodeValidationIssue, ca.uhn.fhir.context.support.IValidationSupport.CodeValidationIssueCode, ca.uhn.fhir.context.support.IValidationSupport.CodeValidationIssueCoding, ca.uhn.fhir.context.support.IValidationSupport.CodeValidationIssueDetails, ca.uhn.fhir.context.support.IValidationSupport.CodeValidationResult, ca.uhn.fhir.context.support.IValidationSupport.CodingConceptProperty, ca.uhn.fhir.context.support.IValidationSupport.ConceptDesignation, ca.uhn.fhir.context.support.IValidationSupport.GroupConceptProperty, ca.uhn.fhir.context.support.IValidationSupport.IssueSeverity, ca.uhn.fhir.context.support.IValidationSupport.LookupCodeResult, ca.uhn.fhir.context.support.IValidationSupport.StringConceptProperty, ca.uhn.fhir.context.support.IValidationSupport.TranslateCodeRequest, ca.uhn.fhir.context.support.IValidationSupport.ValueSetExpansionOutcome
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final ca.uhn.fhir.context.support.ValueSetExpansionOptions
     

    Fields inherited from interface ca.uhn.fhir.context.support.IValidationSupport

    TYPE_CODING, TYPE_GROUP, TYPE_STRING, URL_PREFIX_VALUE_SET
  • Constructor Summary

    Constructors
    Constructor
    Description
    Constructor which initializes the chain with no modules (modules must subsequently be registered using addValidationSupport(IValidationSupport)).
    ValidationSupportChain(ca.uhn.fhir.context.support.IValidationSupport... theValidationSupportModules)
    Constructor which initializes the chain with the given modules.
    ValidationSupportChain(List<ca.uhn.fhir.context.support.IValidationSupport> theValidationSupportModules)
    Constructor which initializes the chain with the given modules.
    ValidationSupportChain(ValidationSupportChain.CacheConfiguration theCacheConfiguration, ca.uhn.fhir.context.support.IValidationSupport... theValidationSupportModules)
    Constructor
    ValidationSupportChain(ValidationSupportChain.CacheConfiguration theCacheConfiguration, List<ca.uhn.fhir.context.support.IValidationSupport> theValidationSupportModules)
    Constructor
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    addValidationSupport(int theIndex, ca.uhn.fhir.context.support.IValidationSupport theValidationSupport)
    Add a validation support module to the chain at the given index.
    void
    addValidationSupport(ca.uhn.fhir.context.support.IValidationSupport theValidationSupport)
    Add a validation support module to the chain.
    ca.uhn.fhir.context.support.IValidationSupport.ValueSetExpansionOutcome
    expandValueSet(ca.uhn.fhir.context.support.ValidationSupportContext theValidationSupportContext, ca.uhn.fhir.context.support.ValueSetExpansionOptions theExpansionOptions, String theValueSetUrlToExpand)
     
    ca.uhn.fhir.context.support.IValidationSupport.ValueSetExpansionOutcome
    expandValueSet(ca.uhn.fhir.context.support.ValidationSupportContext theValidationSupportContext, ca.uhn.fhir.context.support.ValueSetExpansionOptions theExpansionOptions, org.hl7.fhir.instance.model.api.IBaseResource theValueSetToExpand)
     
    List<org.hl7.fhir.instance.model.api.IBaseResource>
     
    List<org.hl7.fhir.instance.model.api.IBaseResource>
     
    <T extends org.hl7.fhir.instance.model.api.IBaseResource>
    List<T>
     
    List<org.hl7.fhir.instance.model.api.IBaseResource>
     
    byte[]
     
    org.hl7.fhir.instance.model.api.IBaseResource
     
    <T extends org.hl7.fhir.instance.model.api.IBaseResource>
    T
    fetchResource(Class<T> theClass, String theUri)
     
    org.hl7.fhir.instance.model.api.IBaseResource
     
    org.hl7.fhir.instance.model.api.IBaseResource
     
    org.hl7.fhir.instance.model.api.IBaseResource
    generateSnapshot(ca.uhn.fhir.context.support.ValidationSupportContext theValidationSupportContext, org.hl7.fhir.instance.model.api.IBaseResource theInput, String theUrl, String theWebUrl, String theProfileName)
     
    ca.uhn.fhir.context.FhirContext
     
     
    List<ca.uhn.fhir.context.support.IValidationSupport>
    Returns a view of the IValidationSupport modules within this chain.
    void
     
    void
    Invalidate the expiring cache, but not the permanent StructureDefinition cache
    boolean
     
    boolean
    isCodeSystemSupported(ca.uhn.fhir.context.support.ValidationSupportContext theValidationSupportContext, String theSystem)
     
    boolean
     
    boolean
    isValueSetSupported(ca.uhn.fhir.context.support.ValidationSupportContext theValidationSupportContext, String theValueSetUrl)
     
    void
     
    ca.uhn.fhir.context.support.IValidationSupport.LookupCodeResult
    lookupCode(ca.uhn.fhir.context.support.ValidationSupportContext theValidationSupportContext, ca.uhn.fhir.context.support.LookupCodeRequest theLookupCodeRequest)
     
    void
    removeValidationSupport(ca.uhn.fhir.context.support.IValidationSupport theValidationSupport)
    Removes an item from the chain.
    setCodeableConceptValidationSuccessfulIfNotAllCodingsAreValid(boolean theEnabledValidationForCodingsLogicalAnd)
    When validating a CodeableConcept containing multiple codings, this method can be used to control whether the validator requires all codings in the CodeableConcept to be valid in order to consider the CodeableConcept valid.
    void
    setName(String theName)
    Sets a name for this chain.
    void
     
    void
     
    ca.uhn.fhir.context.support.TranslateConceptResults
    translateConcept(ca.uhn.fhir.context.support.IValidationSupport.TranslateCodeRequest theRequest)
     
    ca.uhn.fhir.context.support.IValidationSupport.CodeValidationResult
    validateCode(ca.uhn.fhir.context.support.ValidationSupportContext theValidationSupportContext, ca.uhn.fhir.context.support.ConceptValidationOptions theOptions, String theCodeSystem, String theCode, String theDisplay, String theValueSetUrl)
     
    ca.uhn.fhir.context.support.IValidationSupport.CodeValidationResult
    validateCodeInValueSet(ca.uhn.fhir.context.support.ValidationSupportContext theValidationSupportContext, ca.uhn.fhir.context.support.ConceptValidationOptions theOptions, String theCodeSystem, String theCode, String theDisplay, org.hl7.fhir.instance.model.api.IBaseResource theValueSet)
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface ca.uhn.fhir.context.support.IValidationSupport

    lookupCode, lookupCode
  • Field Details

    • EMPTY_EXPANSION_OPTIONS

      public static final ca.uhn.fhir.context.support.ValueSetExpansionOptions EMPTY_EXPANSION_OPTIONS
  • Constructor Details

  • Method Details

    • getName

      public String getName()
      Specified by:
      getName in interface ca.uhn.fhir.context.support.IValidationSupport
    • setName

      public void setName(String theName)
      Sets a name for this chain. This name will be returned by getName() and used by OpenTelemetry.
    • start

      @PostConstruct public void start()
    • stop

      @PreDestroy public void stop()
    • isCodeableConceptValidationSuccessfulIfNotAllCodingsAreValid

      Specified by:
      isCodeableConceptValidationSuccessfulIfNotAllCodingsAreValid in interface ca.uhn.fhir.context.support.IValidationSupport
    • setCodeableConceptValidationSuccessfulIfNotAllCodingsAreValid

      public ValidationSupportChain setCodeableConceptValidationSuccessfulIfNotAllCodingsAreValid(boolean theEnabledValidationForCodingsLogicalAnd)
      When validating a CodeableConcept containing multiple codings, this method can be used to control whether the validator requires all codings in the CodeableConcept to be valid in order to consider the CodeableConcept valid.

      See VersionSpecificWorkerContextWrapper#validateCode in hapi-fhir-validation, and the refer to the values below for the behaviour associated with each value.

      • If false (default setting) the validation for codings will return a positive result only if ALL codings are valid.
      • If true the validation for codings will return a positive result if ANY codings are valid.

      Returns:
      true or false depending on the desired coding validation behaviour.
    • translateConcept

      public ca.uhn.fhir.context.support.TranslateConceptResults translateConcept(ca.uhn.fhir.context.support.IValidationSupport.TranslateCodeRequest theRequest)
      Specified by:
      translateConcept in interface ca.uhn.fhir.context.support.IValidationSupport
    • invalidateCaches

      public void invalidateCaches()
      Specified by:
      invalidateCaches in interface ca.uhn.fhir.context.support.IValidationSupport
    • invalidateExpiringCaches

      public void invalidateExpiringCaches()
      Invalidate the expiring cache, but not the permanent StructureDefinition cache
      Since:
      8.0.0
    • isValueSetSupported

      public boolean isValueSetSupported(ca.uhn.fhir.context.support.ValidationSupportContext theValidationSupportContext, String theValueSetUrl)
      Specified by:
      isValueSetSupported in interface ca.uhn.fhir.context.support.IValidationSupport
    • generateSnapshot

      public org.hl7.fhir.instance.model.api.IBaseResource generateSnapshot(ca.uhn.fhir.context.support.ValidationSupportContext theValidationSupportContext, org.hl7.fhir.instance.model.api.IBaseResource theInput, String theUrl, String theWebUrl, String theProfileName)
      Specified by:
      generateSnapshot in interface ca.uhn.fhir.context.support.IValidationSupport
    • getFhirContext

      public ca.uhn.fhir.context.FhirContext getFhirContext()
      Specified by:
      getFhirContext in interface ca.uhn.fhir.context.support.IValidationSupport
    • addValidationSupport

      public void addValidationSupport(ca.uhn.fhir.context.support.IValidationSupport theValidationSupport)
      Add a validation support module to the chain.

      Note that this method is not thread-safe. All validation support modules should be added prior to use.

      Parameters:
      theValidationSupport - The validation support. Must not be null, and must have a FhirContext that is configured for the same FHIR version as other entries in the chain.
    • addValidationSupport

      public void addValidationSupport(int theIndex, ca.uhn.fhir.context.support.IValidationSupport theValidationSupport)
      Add a validation support module to the chain at the given index.

      Note that this method is not thread-safe. All validation support modules should be added prior to use.

      Parameters:
      theIndex - The index to add to
      theValidationSupport - The validation support. Must not be null, and must have a FhirContext that is configured for the same FHIR version as other entries in the chain.
    • removeValidationSupport

      public void removeValidationSupport(ca.uhn.fhir.context.support.IValidationSupport theValidationSupport)
      Removes an item from the chain. Note that this method is mostly intended for testing. Removing items from the chain while validation is actually occurring is not an expected use case for this class.
    • expandValueSet

      @Nullable public ca.uhn.fhir.context.support.IValidationSupport.ValueSetExpansionOutcome expandValueSet(ca.uhn.fhir.context.support.ValidationSupportContext theValidationSupportContext, @Nullable ca.uhn.fhir.context.support.ValueSetExpansionOptions theExpansionOptions, @Nonnull String theValueSetUrlToExpand) throws ca.uhn.fhir.rest.server.exceptions.ResourceNotFoundException
      Specified by:
      expandValueSet in interface ca.uhn.fhir.context.support.IValidationSupport
      Throws:
      ca.uhn.fhir.rest.server.exceptions.ResourceNotFoundException
    • expandValueSet

      public ca.uhn.fhir.context.support.IValidationSupport.ValueSetExpansionOutcome expandValueSet(ca.uhn.fhir.context.support.ValidationSupportContext theValidationSupportContext, ca.uhn.fhir.context.support.ValueSetExpansionOptions theExpansionOptions, @Nonnull org.hl7.fhir.instance.model.api.IBaseResource theValueSetToExpand)
      Specified by:
      expandValueSet in interface ca.uhn.fhir.context.support.IValidationSupport
    • isRemoteTerminologyServiceConfigured

      Specified by:
      isRemoteTerminologyServiceConfigured in interface ca.uhn.fhir.context.support.IValidationSupport
    • fetchAllConformanceResources

      public List<org.hl7.fhir.instance.model.api.IBaseResource> fetchAllConformanceResources()
      Specified by:
      fetchAllConformanceResources in interface ca.uhn.fhir.context.support.IValidationSupport
    • fetchAllStructureDefinitions

      @Nonnull public List<org.hl7.fhir.instance.model.api.IBaseResource> fetchAllStructureDefinitions()
      Specified by:
      fetchAllStructureDefinitions in interface ca.uhn.fhir.context.support.IValidationSupport
    • fetchAllNonBaseStructureDefinitions

      public List<org.hl7.fhir.instance.model.api.IBaseResource> fetchAllNonBaseStructureDefinitions()
      Specified by:
      fetchAllNonBaseStructureDefinitions in interface ca.uhn.fhir.context.support.IValidationSupport
    • fetchAllSearchParameters

      @Nullable public <T extends org.hl7.fhir.instance.model.api.IBaseResource> List<T> fetchAllSearchParameters()
      Specified by:
      fetchAllSearchParameters in interface ca.uhn.fhir.context.support.IValidationSupport
    • fetchCodeSystem

      public org.hl7.fhir.instance.model.api.IBaseResource fetchCodeSystem(String theSystem)
      Specified by:
      fetchCodeSystem in interface ca.uhn.fhir.context.support.IValidationSupport
    • fetchValueSet

      public org.hl7.fhir.instance.model.api.IBaseResource fetchValueSet(String theUrl)
      Specified by:
      fetchValueSet in interface ca.uhn.fhir.context.support.IValidationSupport
    • fetchResource

      public <T extends org.hl7.fhir.instance.model.api.IBaseResource> T fetchResource(Class<T> theClass, String theUri)
      Specified by:
      fetchResource in interface ca.uhn.fhir.context.support.IValidationSupport
    • fetchBinary

      public byte[] fetchBinary(String theKey)
      Specified by:
      fetchBinary in interface ca.uhn.fhir.context.support.IValidationSupport
    • fetchStructureDefinition

      public org.hl7.fhir.instance.model.api.IBaseResource fetchStructureDefinition(String theUrl)
      Specified by:
      fetchStructureDefinition in interface ca.uhn.fhir.context.support.IValidationSupport
    • isCodeSystemSupported

      public boolean isCodeSystemSupported(ca.uhn.fhir.context.support.ValidationSupportContext theValidationSupportContext, String theSystem)
      Specified by:
      isCodeSystemSupported in interface ca.uhn.fhir.context.support.IValidationSupport
    • validateCode

      public ca.uhn.fhir.context.support.IValidationSupport.CodeValidationResult validateCode(@Nonnull ca.uhn.fhir.context.support.ValidationSupportContext theValidationSupportContext, @Nonnull ca.uhn.fhir.context.support.ConceptValidationOptions theOptions, String theCodeSystem, String theCode, String theDisplay, String theValueSetUrl)
      Specified by:
      validateCode in interface ca.uhn.fhir.context.support.IValidationSupport
    • validateCodeInValueSet

      public ca.uhn.fhir.context.support.IValidationSupport.CodeValidationResult validateCodeInValueSet(ca.uhn.fhir.context.support.ValidationSupportContext theValidationSupportContext, ca.uhn.fhir.context.support.ConceptValidationOptions theOptions, String theCodeSystem, String theCode, String theDisplay, @Nonnull org.hl7.fhir.instance.model.api.IBaseResource theValueSet)
      Specified by:
      validateCodeInValueSet in interface ca.uhn.fhir.context.support.IValidationSupport
    • lookupCode

      public ca.uhn.fhir.context.support.IValidationSupport.LookupCodeResult lookupCode(ca.uhn.fhir.context.support.ValidationSupportContext theValidationSupportContext, @Nonnull ca.uhn.fhir.context.support.LookupCodeRequest theLookupCodeRequest)
      Specified by:
      lookupCode in interface ca.uhn.fhir.context.support.IValidationSupport
    • getValidationSupports

      public List<ca.uhn.fhir.context.support.IValidationSupport> getValidationSupports()
      Returns a view of the IValidationSupport modules within this chain. The returned collection is unmodifiable and will reflect changes to the underlying list.
      Since:
      8.0.0
    • logCacheSizes

      public void logCacheSizes()