Mapping noExtensibleWarnings and noBindingMsgSuppressed between FhirInstanceValidator and InstanceValidator (#2054)
Co-authored-by: ahn <anders.havn@systematic.com>
This commit is contained in:
parent
57bebe50e8
commit
99b646eed7
|
@ -35,6 +35,7 @@ import ca.uhn.fhir.rest.server.interceptor.RequestValidatingInterceptor;
|
|||
import ca.uhn.fhir.util.HapiExtensions;
|
||||
import ca.uhn.fhir.util.UrlUtil;
|
||||
import ca.uhn.fhir.validation.IValidatorModule;
|
||||
import ca.uhn.fhir.validation.ResultSeverityEnum;
|
||||
import com.google.common.base.Charsets;
|
||||
import com.google.common.collect.Lists;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
|
@ -65,6 +66,7 @@ import org.hl7.fhir.dstu3.model.Bundle.HTTPVerb;
|
|||
import org.hl7.fhir.dstu3.model.Bundle.SearchEntryMode;
|
||||
import org.hl7.fhir.dstu3.model.CodeSystem;
|
||||
import org.hl7.fhir.dstu3.model.CodeType;
|
||||
import org.hl7.fhir.dstu3.model.CodeableConcept;
|
||||
import org.hl7.fhir.dstu3.model.Coding;
|
||||
import org.hl7.fhir.dstu3.model.Condition;
|
||||
import org.hl7.fhir.dstu3.model.DateTimeType;
|
||||
|
@ -79,6 +81,7 @@ import org.hl7.fhir.dstu3.model.Enumerations;
|
|||
import org.hl7.fhir.dstu3.model.Enumerations.AdministrativeGender;
|
||||
import org.hl7.fhir.dstu3.model.Extension;
|
||||
import org.hl7.fhir.dstu3.model.IdType;
|
||||
import org.hl7.fhir.dstu3.model.Identifier;
|
||||
import org.hl7.fhir.dstu3.model.ImagingStudy;
|
||||
import org.hl7.fhir.dstu3.model.InstantType;
|
||||
import org.hl7.fhir.dstu3.model.IntegerType;
|
||||
|
@ -110,8 +113,10 @@ import org.hl7.fhir.dstu3.model.StructureDefinition;
|
|||
import org.hl7.fhir.dstu3.model.Subscription;
|
||||
import org.hl7.fhir.dstu3.model.Subscription.SubscriptionChannelType;
|
||||
import org.hl7.fhir.dstu3.model.Subscription.SubscriptionStatus;
|
||||
import org.hl7.fhir.dstu3.model.Task;
|
||||
import org.hl7.fhir.dstu3.model.UnsignedIntType;
|
||||
import org.hl7.fhir.dstu3.model.ValueSet;
|
||||
import org.hl7.fhir.dstu3.model.codesystems.DeviceStatus;
|
||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
||||
import org.hl7.fhir.instance.model.api.IIdType;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
|
@ -235,6 +240,56 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
|
|||
assertEquals(0, returnedBundle.getEntry().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSuppressNoExtensibleWarnings() {
|
||||
RequestValidatingInterceptor interceptor = new RequestValidatingInterceptor();
|
||||
interceptor.setFailOnSeverity(ResultSeverityEnum.INFORMATION);
|
||||
FhirInstanceValidator val = new FhirInstanceValidator(myValidationSupport);
|
||||
val.setNoExtensibleWarnings(true);
|
||||
interceptor.addValidatorModule(val);
|
||||
|
||||
ourRestServer.registerInterceptor(interceptor);
|
||||
try {
|
||||
CodeableConcept codeableConcept = new CodeableConcept();
|
||||
Coding codingCode = codeableConcept.addCoding();
|
||||
codingCode.setCode(DeviceStatus.ACTIVE.toCode());
|
||||
codingCode.setSystem(DeviceStatus.ACTIVE.getSystem());
|
||||
|
||||
Device device = new Device();
|
||||
Identifier identifier = device.addIdentifier();
|
||||
identifier.setType(codeableConcept); // Not valid against valueset with 'Extensible' binding strength
|
||||
ourClient.create().resource(device).execute().getId();
|
||||
} finally {
|
||||
ourRestServer.unregisterInterceptor(interceptor);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSuppressNoBindingMessage() {
|
||||
RequestValidatingInterceptor interceptor = new RequestValidatingInterceptor();
|
||||
interceptor.setFailOnSeverity(ResultSeverityEnum.INFORMATION);
|
||||
FhirInstanceValidator val = new FhirInstanceValidator(myValidationSupport);
|
||||
val.setNoBindingMsgSuppressed(true);
|
||||
interceptor.addValidatorModule(val);
|
||||
|
||||
ourRestServer.registerInterceptor(interceptor);
|
||||
try {
|
||||
CodeableConcept codeableConcept = new CodeableConcept();
|
||||
Coding codingCode = codeableConcept.addCoding();
|
||||
codingCode.setSystem(DeviceStatus.ACTIVE.toCode());
|
||||
codingCode.setSystem(DeviceStatus.ACTIVE.getSystem());
|
||||
|
||||
Task task = new Task();
|
||||
task.setStatus(Task.TaskStatus.DRAFT);
|
||||
task.setIntent(Task.TaskIntent.FILLERORDER);
|
||||
task.setCode(codeableConcept); // Task.code has no source/binding
|
||||
|
||||
ourClient.create().resource(task).execute().getId();
|
||||
} finally {
|
||||
ourRestServer.unregisterInterceptor(interceptor);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* See #872
|
||||
*/
|
||||
|
|
|
@ -29,6 +29,8 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
private BestPracticeWarningLevel myBestPracticeWarningLevel;
|
||||
private IValidationSupport myValidationSupport;
|
||||
private boolean noTerminologyChecks = false;
|
||||
private boolean noExtensibleWarnings = false;
|
||||
private boolean noBindingMsgSuppressed = false;
|
||||
private volatile VersionSpecificWorkerContextWrapper myWrappedWorkerContext;
|
||||
private boolean errorForUnknownProfiles;
|
||||
private boolean assumeValidRestReferences;
|
||||
|
@ -184,6 +186,34 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
noTerminologyChecks = theNoTerminologyChecks;
|
||||
}
|
||||
|
||||
/**
|
||||
* If set to {@literal true} (default is false) no extensible warnings suppressed
|
||||
*/
|
||||
public boolean isNoExtensibleWarnings() {
|
||||
return noExtensibleWarnings;
|
||||
}
|
||||
|
||||
/**
|
||||
* If set to {@literal true} (default is false) no extensible warnings is suppressed
|
||||
*/
|
||||
public void setNoExtensibleWarnings(final boolean theNoExtensibleWarnings) {
|
||||
noExtensibleWarnings = theNoExtensibleWarnings;
|
||||
}
|
||||
|
||||
/**
|
||||
* If set to {@literal true} (default is false) no binding message is suppressed
|
||||
*/
|
||||
public boolean isNoBindingMsgSuppressed() {
|
||||
return noBindingMsgSuppressed;
|
||||
}
|
||||
|
||||
/**
|
||||
* If set to {@literal true} (default is false) no binding message is suppressed
|
||||
*/
|
||||
public void setNoBindingMsgSuppressed(final boolean theNoBindingMsgSuppressed) {
|
||||
noBindingMsgSuppressed = theNoBindingMsgSuppressed;
|
||||
}
|
||||
|
||||
public List<String> getExtensionDomains() {
|
||||
return myExtensionDomains;
|
||||
}
|
||||
|
@ -198,6 +228,8 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
.setErrorForUnknownProfiles(isErrorForUnknownProfiles())
|
||||
.setExtensionDomains(getExtensionDomains())
|
||||
.setNoTerminologyChecks(isNoTerminologyChecks())
|
||||
.setNoExtensibleWarnings(isNoExtensibleWarnings())
|
||||
.setNoBindingMsgSuppressed(isNoBindingMsgSuppressed())
|
||||
.setValidatorResourceFetcher(getValidatorResourceFetcher())
|
||||
.setAssumeValidRestReferences(isAssumeValidRestReferences())
|
||||
.validate(wrappedWorkerContext, theValidationCtx);
|
||||
|
|
|
@ -38,6 +38,8 @@ class ValidatorWrapper {
|
|||
private boolean myErrorForUnknownProfiles;
|
||||
private boolean myNoTerminologyChecks;
|
||||
private boolean myAssumeValidRestReferences;
|
||||
private boolean myNoExtensibleWarnings;
|
||||
private boolean myNoBindingMsgSuppressed;
|
||||
private Collection<? extends String> myExtensionDomains;
|
||||
private IResourceValidator.IValidatorResourceFetcher myValidatorResourceFetcher;
|
||||
|
||||
|
@ -77,6 +79,16 @@ class ValidatorWrapper {
|
|||
return this;
|
||||
}
|
||||
|
||||
public ValidatorWrapper setNoExtensibleWarnings(boolean theNoExtensibleWarnings) {
|
||||
myNoExtensibleWarnings = theNoExtensibleWarnings;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ValidatorWrapper setNoBindingMsgSuppressed(boolean theNoBindingMsgSuppressed) {
|
||||
myNoBindingMsgSuppressed = theNoBindingMsgSuppressed;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ValidatorWrapper setExtensionDomains(Collection<? extends String> theExtensionDomains) {
|
||||
myExtensionDomains = theExtensionDomains;
|
||||
return this;
|
||||
|
@ -105,6 +117,8 @@ class ValidatorWrapper {
|
|||
v.setErrorForUnknownProfiles(myErrorForUnknownProfiles);
|
||||
v.getExtensionDomains().addAll(myExtensionDomains);
|
||||
v.setFetcher(myValidatorResourceFetcher);
|
||||
v.setNoExtensibleWarnings(myNoExtensibleWarnings);
|
||||
v.setNoBindingMsgSuppressed(myNoBindingMsgSuppressed);
|
||||
v.setAllowXsiLocation(true);
|
||||
|
||||
List<ValidationMessage> messages = new ArrayList<>();
|
||||
|
|
Loading…
Reference in New Issue