Skip to content

Commit

Permalink
Merge 9a8e324 into 4498335
Browse files Browse the repository at this point in the history
  • Loading branch information
jamesagnew committed Feb 5, 2019
2 parents 4498335 + 9a8e324 commit ac890c8
Show file tree
Hide file tree
Showing 13 changed files with 791 additions and 71 deletions.
18 changes: 9 additions & 9 deletions hapi-fhir-converter/pom.xml
Expand Up @@ -16,14 +16,14 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>3.7.0-SNAPSHOT</version>
<version>${project.version}</version>
</dependency>

<!-- Server -->
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-server</artifactId>
<version>3.7.0-SNAPSHOT</version>
<version>${project.version}</version>
<optional>true</optional>
</dependency>
<dependency>
Expand All @@ -35,43 +35,43 @@
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu2</artifactId>
<version>3.7.0-SNAPSHOT</version>
<version>${project.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-hl7org-dstu2</artifactId>
<version>3.7.0-SNAPSHOT</version>
<version>${project.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu2.1</artifactId>
<version>3.7.0-SNAPSHOT</version>
<version>${project.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-dstu3</artifactId>
<version>3.7.0-SNAPSHOT</version>
<version>${project.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-r4</artifactId>
<version>3.7.0-SNAPSHOT</version>
<version>${project.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-validation-resources-dstu2</artifactId>
<version>3.7.0-SNAPSHOT</version>
<version>${project.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-validation-resources-dstu3</artifactId>
<version>3.7.0-SNAPSHOT</version>
<version>${project.version}</version>
<optional>true</optional>
</dependency>

Expand Down
Expand Up @@ -32,16 +32,9 @@
import org.hl7.fhir.dstu3.model.Parameters;
import org.hl7.fhir.dstu3.model.Parameters.ParametersParameterComponent;
import org.hl7.fhir.exceptions.FHIRException;
import org.hl7.fhir.r4.model.BooleanType;
import org.hl7.fhir.r4.model.CodeableConcept;
import org.hl7.fhir.r4.model.Enumeration;
import org.hl7.fhir.r4.model.*;
import org.hl7.fhir.r4.model.Expression.ExpressionLanguage;
import org.hl7.fhir.r4.model.HealthcareService.HealthcareServiceEligibilityComponent;
import org.hl7.fhir.r4.model.Identifier;
import org.hl7.fhir.r4.model.Reference;
import org.hl7.fhir.r4.model.TerminologyCapabilities;
import org.hl7.fhir.r4.model.Type;
import org.hl7.fhir.r4.model.UriType;
import org.hl7.fhir.utilities.Utilities;


Expand Down Expand Up @@ -76,7 +69,7 @@ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWIS


public class VersionConvertor_30_40 {
private static List<String> CANONICAL_URLS = new ArrayList<String>();
private static List<String> CANONICAL_URLS = new ArrayList<>();
static {
CANONICAL_URLS.add("http://hl7.org/fhir/StructureDefinition/11179-permitted-value-conceptmap");
CANONICAL_URLS.add("http://hl7.org/fhir/StructureDefinition/11179-permitted-value-valueset");
Expand Down Expand Up @@ -16013,6 +16006,7 @@ public static org.hl7.fhir.r4.model.Questionnaire.QuestionnaireItemComponent con
tgt.setType(convertQuestionnaireItemType(src.getType()));
for (org.hl7.fhir.dstu3.model.Questionnaire.QuestionnaireItemEnableWhenComponent t : src.getEnableWhen())
tgt.addEnableWhen(convertQuestionnaireItemEnableWhenComponent(t));
tgt.setEnableBehavior(Questionnaire.EnableWhenBehavior.ANY);
if (src.hasRequired())
tgt.setRequired(src.getRequired());
if (src.hasRepeats())
Expand All @@ -16029,6 +16023,9 @@ public static org.hl7.fhir.r4.model.Questionnaire.QuestionnaireItemComponent con
tgt.addInitial().setValue(convertType(src.getInitial()));
for (org.hl7.fhir.dstu3.model.Questionnaire.QuestionnaireItemComponent t : src.getItem())
tgt.addItem(convertQuestionnaireItemComponent(t));
for (org.hl7.fhir.dstu3.model.Extension t : src.getModifierExtension()) {
tgt.addModifierExtension(convertExtension(t));
}
return tgt;
}

Expand Down Expand Up @@ -16131,8 +16128,10 @@ public static org.hl7.fhir.r4.model.Questionnaire.QuestionnaireItemEnableWhenCom
tgt.setOperator(org.hl7.fhir.r4.model.Questionnaire.QuestionnaireItemOperator.EXISTS);
tgt.setAnswer(convertType(src.getHasAnswerElement()));
}
else if (src.hasAnswer())
tgt.setAnswer(convertType(src.getAnswer()));
else if (src.hasAnswer()) {
tgt.setOperator(org.hl7.fhir.r4.model.Questionnaire.QuestionnaireItemOperator.EQUAL);
tgt.setAnswer(convertType(src.getAnswer()));
}
return tgt;
}

Expand Down
Expand Up @@ -95,7 +95,7 @@ public void testPagingPreservesElements() throws Exception {
linkSelf = bundle.getLink(Constants.LINK_SELF).getUrl();
assertThat(linkSelf, containsString("_elements=name"));
linkNext = bundle.getLink(Constants.LINK_NEXT).getUrl();
assertThat(linkNext, containsString("_elements=meta,name"));
assertThat(linkNext, containsString("_elements=name"));

ourLog.info(toJson(bundle));

Expand All @@ -104,23 +104,23 @@ public void testPagingPreservesElements() throws Exception {
bundle = executeAndReturnLinkNext(httpGet, EncodingEnum.JSON);
assertThat(toJson(bundle), not(containsString("\"active\"")));
linkNext = bundle.getLink(Constants.LINK_NEXT).getUrl();
assertThat(linkNext, containsString("_elements=meta,name"));
assertThat(linkNext, containsString("_elements=name"));
assertThat(linkNext, containsString("_elements:exclude=active,birthDate"));

// Fetch the next page
httpGet = new HttpGet(linkNext);
bundle = executeAndReturnLinkNext(httpGet, EncodingEnum.JSON);
assertThat(toJson(bundle), not(containsString("\"active\"")));
linkNext = bundle.getLink(Constants.LINK_NEXT).getUrl();
assertThat(linkNext, containsString("_elements=meta,name"));
assertThat(linkNext, containsString("_elements=name"));
assertThat(linkNext, containsString("_elements:exclude=active,birthDate"));

// Fetch the next page
httpGet = new HttpGet(linkNext);
bundle = executeAndReturnLinkNext(httpGet, EncodingEnum.JSON);
assertThat(toJson(bundle), not(containsString("\"active\"")));
linkNext = bundle.getLink(Constants.LINK_NEXT).getUrl();
assertThat(linkNext, containsString("_elements=meta,name"));
assertThat(linkNext, containsString("_elements=name"));
assertThat(linkNext, containsString("_elements:exclude=active,birthDate"));

}
Expand Down
Expand Up @@ -31,6 +31,8 @@
import org.hl7.fhir.r4.utils.IResourceValidator;
import org.hl7.fhir.r4.utils.IResourceValidator.BestPracticeWarningLevel;
import org.hl7.fhir.r4.utils.IResourceValidator.IdStatus;
import org.hl7.fhir.r4.validation.DefaultEnableWhenEvaluator;
import org.hl7.fhir.r4.validation.IEnableWhenEvaluator;
import org.hl7.fhir.r4.validation.InstanceValidator;
import org.hl7.fhir.utilities.TranslationServices;
import org.hl7.fhir.utilities.validation.ValidationMessage;
Expand All @@ -47,6 +49,7 @@
import java.net.URL;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;

@SuppressWarnings({"PackageAccessibility", "Duplicates"})
public class FhirInstanceValidator extends BaseValidatorBridge implements IValidatorModule {
Expand All @@ -60,6 +63,9 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IValid
private IValidationSupport myValidationSupport;
private boolean noTerminologyChecks = false;
private volatile WorkerContextWrapper myWrappedWorkerContext;
private Function<IWorkerContext, IEnableWhenEvaluator> enableWhenEvaluatorSupplier;

private boolean errorForUnknownProfiles;
private List<String> extensionDomains = Collections.emptyList();

/**
Expand All @@ -80,6 +86,7 @@ public FhirInstanceValidator(IValidationSupport theValidationSupport) {
myDocBuilderFactory = DocumentBuilderFactory.newInstance();
myDocBuilderFactory.setNamespaceAware(true);
myValidationSupport = theValidationSupport;
setEnableWhenEvaluatorSupplier(ctx -> new DefaultEnableWhenEvaluator());
}

/**
Expand Down Expand Up @@ -221,6 +228,14 @@ public void setValidationSupport(IValidationSupport theValidationSupport) {
public boolean isAnyExtensionsAllowed() {
return myAnyExtensionsAllowed;
}

public boolean isErrorForUnknownProfiles() {
return errorForUnknownProfiles;
}

public void setErrorForUnknownProfiles(boolean errorForUnknownProfiles) {
this.errorForUnknownProfiles = errorForUnknownProfiles;
}

/**
* If set to {@literal true} (default is true) extensions which are not known to the
Expand All @@ -237,6 +252,14 @@ public void setAnyExtensionsAllowed(boolean theAnyExtensionsAllowed) {
public boolean isNoTerminologyChecks() {
return noTerminologyChecks;
}

/**
* Sets a customized {@link IEnableWhenEvaluator} which is injected to created InstanceValidators
*/
public void setEnableWhenEvaluatorSupplier(
Function<IWorkerContext, IEnableWhenEvaluator> enableWhenEvaluatorSupplier) {
this.enableWhenEvaluatorSupplier = enableWhenEvaluatorSupplier;
}

/**
* If set to {@literal true} (default is false) the valueSet will not be validate
Expand Down Expand Up @@ -270,6 +293,8 @@ protected List<ValidationMessage> validate(final FhirContext theCtx, String theI
v.setAnyExtensionsAllowed(isAnyExtensionsAllowed());
v.setResourceIdRule(IdStatus.OPTIONAL);
v.setNoTerminologyChecks(isNoTerminologyChecks());
v.setEnableWhenEvaluator(enableWhenEvaluatorSupplier.apply(wrappedWorkerContext));
v.setErrorForUnknownProfiles(isErrorForUnknownProfiles());
v.getExtensionDomains().addAll(extensionDomains);

List<ValidationMessage> messages = new ArrayList<>();
Expand Down
Expand Up @@ -2539,6 +2539,7 @@ private void validateQuestionannaireResponseItems(Questionnaire qsrc, List<Quest
validateQuestionannaireResponseItem(qsrc, qItem, errors, mapItem, stack, inProgress);
else
rule(errors, IssueType.REQUIRED, element.line(), element.col(), stack.getLiteralPath(), !qItem.getRequired(), "No response found for required item "+qItem.getLinkId());

}
}

Expand Down
Expand Up @@ -390,3 +390,4 @@ private Set<Class<? extends Type>> determineAllowedAnswerTypes(QuestionnaireItem
return allowedAnswerTypes;
}
}

@@ -0,0 +1,48 @@
package org.hl7.fhir.instance.validation;


import org.hl7.fhir.r4.elementmodel.Element;
import org.hl7.fhir.r4.model.Questionnaire.QuestionnaireItemEnableWhenComponent;

public class EnableWhenResult {
private final boolean enabled;
private final QuestionnaireItemEnableWhenComponent enableWhenCondition;
private final Element answerItem;
private final String linkId;

/**
* Evaluation result of enableWhen condition
*
* @param enabled
* Evaluation result
* @param linkId
* LinkId of the questionnaire item
* @param enableWhenCondition
* Evaluated enableWhen condition
* @param answerItem
* item in QuestionnaireResponse
*/
public EnableWhenResult(boolean enabled, String linkId, QuestionnaireItemEnableWhenComponent enableWhenCondition,
Element answerItem) {
this.enabled = enabled;
this.linkId = linkId;
this.answerItem = answerItem;
this.enableWhenCondition = enableWhenCondition;
}

public boolean isEnabled() {
return enabled;
}

public String getLinkId() {
return linkId;
}

public Element getAnswerItem() {
return answerItem;
}

public QuestionnaireItemEnableWhenComponent getEnableWhenCondition() {
return enableWhenCondition;
}
}

0 comments on commit ac890c8

Please sign in to comment.