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}