
001package org.hl7.fhir.common.hapi.validation.validator; 002 003import org.hl7.fhir.r5.elementmodel.Element; 004import org.hl7.fhir.r5.model.ElementDefinition; 005import org.hl7.fhir.r5.model.StructureDefinition; 006import org.hl7.fhir.r5.model.ValueSet; 007import org.hl7.fhir.r5.utils.validation.IMessagingServices; 008import org.hl7.fhir.r5.utils.validation.IResourceValidator; 009import org.hl7.fhir.r5.utils.validation.IValidationPolicyAdvisor; 010import org.hl7.fhir.r5.utils.validation.constants.BindingKind; 011import org.hl7.fhir.r5.utils.validation.constants.ContainedReferenceValidationPolicy; 012import org.hl7.fhir.r5.utils.validation.constants.ReferenceValidationPolicy; 013import org.hl7.fhir.utilities.validation.ValidationMessage; 014import org.hl7.fhir.validation.instance.advisor.BasePolicyAdvisorForFullValidation; 015 016import java.util.Collections; 017import java.util.EnumSet; 018import java.util.List; 019 020/** 021 * Implementation of the base {@link IValidationPolicyAdvisor}. This is used as the default for all validation operations 022 * done within the core libraries, as without a default, it will ignore some validation operations. 023 */ 024public class FhirDefaultPolicyAdvisor implements IValidationPolicyAdvisor { 025 026 @Override 027 public EnumSet<ResourceValidationAction> policyForResource( 028 IResourceValidator validator, Object appContext, StructureDefinition type, String path) { 029 return EnumSet.allOf(ResourceValidationAction.class); 030 } 031 032 @Override 033 public EnumSet<ElementValidationAction> policyForElement( 034 IResourceValidator validator, 035 Object appContext, 036 StructureDefinition structure, 037 ElementDefinition element, 038 String path) { 039 return EnumSet.allOf(ElementValidationAction.class); 040 } 041 042 @Override 043 public ContainedReferenceValidationPolicy policyForContained( 044 IResourceValidator validator, 045 Object appContext, 046 StructureDefinition structure, 047 ElementDefinition element, 048 String containerType, 049 String containerId, 050 Element.SpecialElement containingResourceType, 051 String path, 052 String url) { 053 return ContainedReferenceValidationPolicy.CHECK_VALID; 054 } 055 056 @Override 057 public EnumSet<CodedContentValidationAction> policyForCodedContent( 058 IResourceValidator validator, 059 Object appContext, 060 String stackPath, 061 ElementDefinition definition, 062 StructureDefinition structure, 063 BindingKind kind, 064 AdditionalBindingPurpose purpose, 065 ValueSet valueSet, 066 List<String> systems) { 067 return EnumSet.allOf(CodedContentValidationAction.class); 068 } 069 070 @Override 071 public SpecialValidationAction policyForSpecialValidation( 072 IResourceValidator iResourceValidator, 073 Object o, 074 SpecialValidationRule specialValidationRule, 075 String s, 076 Element element, 077 Element element1) { 078 return null; 079 } 080 081 @Override 082 public List<StructureDefinition> getImpliedProfilesForResource( 083 IResourceValidator validator, 084 Object appContext, 085 String stackPath, 086 ElementDefinition definition, 087 StructureDefinition structure, 088 Element resource, 089 boolean valid, 090 IMessagingServices msgServices, 091 List<ValidationMessage> messages) { 092 return Collections.emptyList(); 093 } 094 095 @Override 096 public boolean isSuppressMessageId(String path, String messageId) { 097 return false; 098 } 099 100 @Override 101 public ReferenceValidationPolicy policyForReference( 102 IResourceValidator iResourceValidator, 103 Object o, 104 String s, 105 String s1, 106 ReferenceDestinationType referenceDestinationType) { 107 return ReferenceValidationPolicy.IGNORE; 108 } 109 110 @Override 111 public IValidationPolicyAdvisor getPolicyAdvisor() { 112 return new BasePolicyAdvisorForFullValidation(getReferencePolicy()); 113 } 114 115 @Override 116 public IValidationPolicyAdvisor setPolicyAdvisor(IValidationPolicyAdvisor iValidationPolicyAdvisor) { 117 return this; 118 } 119 120 @Override 121 public ReferenceValidationPolicy getReferencePolicy() { 122 return ReferenceValidationPolicy.IGNORE; 123 } 124}