Search in sources :

Example 1 with QuestionnaireMode

use of org.hl7.fhir.validation.cli.utils.QuestionnaireMode in project org.hl7.fhir.core by hapifhir.

the class QuestionnaireValidator method validateQuestionannaireResponse.

public void validateQuestionannaireResponse(ValidatorHostContext hostContext, List<ValidationMessage> errors, Element element, NodeStack stack) throws FHIRException {
    if (questionnaireMode == QuestionnaireMode.NONE) {
        return;
    }
    Element q = element.getNamedChild("questionnaire");
    String questionnaire = null;
    if (q != null) {
        /*
       * q.getValue() is correct for R4 content, but we'll also accept the second
       * option just in case we're validating raw STU3 content. Being lenient here
       * isn't the end of the world since if someone is actually doing the reference
       * wrong in R4 content it'll get flagged elsewhere by the validator too
       */
        if (isNotBlank(q.getValue())) {
            questionnaire = q.getValue();
        } else if (isNotBlank(q.getChildValue("reference"))) {
            questionnaire = q.getChildValue("reference");
        }
    }
    boolean ok = questionnaireMode == QuestionnaireMode.REQUIRED ? rule(errors, IssueType.REQUIRED, element.line(), element.col(), stack.getLiteralPath(), questionnaire != null, I18nConstants.QUESTIONNAIRE_QR_Q_NONE) : hint(errors, IssueType.REQUIRED, element.line(), element.col(), stack.getLiteralPath(), questionnaire != null, I18nConstants.QUESTIONNAIRE_QR_Q_NONE);
    if (ok) {
        QuestionnaireWithContext qsrc = null;
        if (questionnaire.startsWith("#")) {
            qsrc = QuestionnaireWithContext.fromContainedResource(stack.getLiteralPath(), element, (Questionnaire) loadContainedResource(errors, stack.getLiteralPath(), element, questionnaire.substring(1), Questionnaire.class));
        } else {
            qsrc = QuestionnaireWithContext.fromQuestionnaire(context.fetchResource(Questionnaire.class, questionnaire));
        }
        if (questionnaireMode == QuestionnaireMode.REQUIRED) {
            ok = rule(errors, IssueType.REQUIRED, q.line(), q.col(), stack.getLiteralPath(), qsrc != null, I18nConstants.QUESTIONNAIRE_QR_Q_NOTFOUND, questionnaire);
        } else if (questionnaire.startsWith("http://example.org")) {
            ok = hint(errors, IssueType.REQUIRED, q.line(), q.col(), stack.getLiteralPath(), qsrc != null, I18nConstants.QUESTIONNAIRE_QR_Q_NOTFOUND, questionnaire);
        } else {
            ok = warning(errors, IssueType.REQUIRED, q.line(), q.col(), stack.getLiteralPath(), qsrc != null, I18nConstants.QUESTIONNAIRE_QR_Q_NOTFOUND, questionnaire);
        }
        if (ok) {
            boolean inProgress = "in-progress".equals(element.getNamedChildValue("status"));
            validateQuestionannaireResponseItems(hostContext, qsrc, qsrc.q().getItem(), errors, element, stack, inProgress, element, new QStack(qsrc, element));
        }
    }
}
Also used : Questionnaire(org.hl7.fhir.r5.model.Questionnaire) QuestionnaireWithContext(org.hl7.fhir.validation.instance.type.QuestionnaireValidator.QuestionnaireWithContext) Element(org.hl7.fhir.r5.elementmodel.Element) QStack(org.hl7.fhir.validation.instance.EnableWhenEvaluator.QStack)

Example 2 with QuestionnaireMode

use of org.hl7.fhir.validation.cli.utils.QuestionnaireMode in project org.hl7.fhir.core by hapifhir.

the class ValidationEngine method getValidator.

public InstanceValidator getValidator(FhirFormat format) throws FHIRException, IOException {
    InstanceValidator validator = new InstanceValidator(context, null, null);
    validator.setHintAboutNonMustSupport(hintAboutNonMustSupport);
    validator.setAnyExtensionsAllowed(anyExtensionsAllowed);
    validator.getExtensionDomains().clear();
    validator.getExtensionDomains().addAll(extensionDomains);
    validator.setNoInvariantChecks(isNoInvariantChecks());
    validator.setWantInvariantInMessage(isWantInvariantInMessage());
    validator.setValidationLanguage(language);
    if (language != null) {
        validator.getContext().setValidationMessageLanguage(Locale.forLanguageTag(language));
    }
    validator.setAssumeValidRestReferences(assumeValidRestReferences);
    validator.setNoExtensibleWarnings(noExtensibleBindingMessages);
    validator.setSecurityChecks(securityChecks);
    validator.setCrumbTrails(crumbTrails);
    validator.setAllowExamples(allowExampleUrls);
    validator.setShowMessagesFromReferences(showMessagesFromReferences);
    validator.getContext().setLocale(locale);
    validator.setFetcher(this);
    validator.getImplementationGuides().addAll(igs);
    validator.getBundleValidationRules().addAll(bundleValidationRules);
    validator.getValidationControl().putAll(validationControl);
    validator.setQuestionnaireMode(questionnaireMode);
    validator.setLevel(level);
    validator.setNoUnicodeBiDiControlChars(noUnicodeBiDiControlChars);
    if (format == FhirFormat.SHC) {
        igLoader.loadIg(getIgs(), getBinaries(), SHCParser.CURRENT_PACKAGE, true);
    }
    return validator;
}
Also used : InstanceValidator(org.hl7.fhir.validation.instance.InstanceValidator)

Aggregations

Element (org.hl7.fhir.r5.elementmodel.Element)1 Questionnaire (org.hl7.fhir.r5.model.Questionnaire)1 QStack (org.hl7.fhir.validation.instance.EnableWhenEvaluator.QStack)1 InstanceValidator (org.hl7.fhir.validation.instance.InstanceValidator)1 QuestionnaireWithContext (org.hl7.fhir.validation.instance.type.QuestionnaireValidator.QuestionnaireWithContext)1