Add support for assumeValidRestReferences
This commit is contained in:
parent
5d1cf89db5
commit
6e9fd79a2a
|
@ -156,6 +156,9 @@ import ca.uhn.fhir.util.ObjectUtil;
|
||||||
* Thinking of using this in a java program? Don't!
|
* Thinking of using this in a java program? Don't!
|
||||||
* You should use one of the wrappers instead. Either in HAPI, or use ValidationEngine
|
* You should use one of the wrappers instead. Either in HAPI, or use ValidationEngine
|
||||||
*
|
*
|
||||||
|
* Validation todo:
|
||||||
|
* - support @default slices
|
||||||
|
*
|
||||||
* @author Grahame Grieve
|
* @author Grahame Grieve
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -2434,6 +2437,19 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
||||||
boolean okToRef = !type.hasAggregation() || type.hasAggregation(AggregationMode.REFERENCED);
|
boolean okToRef = !type.hasAggregation() || type.hasAggregation(AggregationMode.REFERENCED);
|
||||||
rule(errors, IssueType.REQUIRED, -1, -1, path, okToRef, "Bundled or contained reference not found within the bundle/resource " + ref);
|
rule(errors, IssueType.REQUIRED, -1, -1, path, okToRef, "Bundled or contained reference not found within the bundle/resource " + ref);
|
||||||
}
|
}
|
||||||
|
if (we == null && ft != null && assumeValidRestReferences) {
|
||||||
|
// if we == null, we inferred ft from the reference. if we are told to treat this as gospel
|
||||||
|
TypeRefComponent type = getReferenceTypeRef(container.getType());
|
||||||
|
Set<String> types = new HashSet<>();
|
||||||
|
for (CanonicalType tp : type.getTargetProfile()) {
|
||||||
|
StructureDefinition sd = context.fetchResource(StructureDefinition.class, tp.getValue());
|
||||||
|
if (sd != null) {
|
||||||
|
types.add(sd.getType());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rule(errors, IssueType.STRUCTURE, element.line(), element.col(), path, types.isEmpty() || types.contains(ft), "The type '"+ft+"' implied by the reference URL "+ref+" is not a valid Target for this element (must be one of "+types+")");
|
||||||
|
|
||||||
|
}
|
||||||
if (pol == ReferenceValidationPolicy.CHECK_VALID) {
|
if (pol == ReferenceValidationPolicy.CHECK_VALID) {
|
||||||
// todo....
|
// todo....
|
||||||
}
|
}
|
||||||
|
|
|
@ -241,6 +241,7 @@ public class ValidationEngine implements IValidatorResourceFetcher {
|
||||||
private boolean debug;
|
private boolean debug;
|
||||||
private Set<String> loadedIgs = new HashSet<>();
|
private Set<String> loadedIgs = new HashSet<>();
|
||||||
private IValidatorResourceFetcher fetcher;
|
private IValidatorResourceFetcher fetcher;
|
||||||
|
private boolean assumeValidRestReferences;
|
||||||
|
|
||||||
private class AsteriskFilter implements FilenameFilter {
|
private class AsteriskFilter implements FilenameFilter {
|
||||||
String dir;
|
String dir;
|
||||||
|
@ -1270,6 +1271,7 @@ public class ValidationEngine implements IValidatorResourceFetcher {
|
||||||
validator.setAnyExtensionsAllowed(anyExtensionsAllowed);
|
validator.setAnyExtensionsAllowed(anyExtensionsAllowed);
|
||||||
validator.setNoInvariantChecks(isNoInvariantChecks());
|
validator.setNoInvariantChecks(isNoInvariantChecks());
|
||||||
validator.setValidationLanguage(language);
|
validator.setValidationLanguage(language);
|
||||||
|
validator.setAssumeValidRestReferences(assumeValidRestReferences);
|
||||||
validator.setFetcher(this);
|
validator.setFetcher(this);
|
||||||
return validator;
|
return validator;
|
||||||
}
|
}
|
||||||
|
@ -1689,6 +1691,10 @@ public class ValidationEngine implements IValidatorResourceFetcher {
|
||||||
this.fetcher = fetcher;
|
this.fetcher = fetcher;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setAssumeValidRestReferences(boolean assumeValidRestReferences) {
|
||||||
|
this.assumeValidRestReferences = assumeValidRestReferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -217,6 +217,8 @@ public class Validator {
|
||||||
System.out.println(" referenced implementation guides or profiles as errors. (Default is to only raise information messages.)");
|
System.out.println(" referenced implementation guides or profiles as errors. (Default is to only raise information messages.)");
|
||||||
System.out.println("-hintAboutNonMustSupport: If present, raise hints if the instance contains data elements that are not");
|
System.out.println("-hintAboutNonMustSupport: If present, raise hints if the instance contains data elements that are not");
|
||||||
System.out.println(" marked as mustSupport=true. Useful to identify elements included that may be ignored by recipients");
|
System.out.println(" marked as mustSupport=true. Useful to identify elements included that may be ignored by recipients");
|
||||||
|
System.out.println("-assumeValidRestReferences: If present, assume that URLs that reference resources follow the RESTful URI pattern");
|
||||||
|
System.out.println(" and it is safe to infer the type from the URL");
|
||||||
System.out.println("");
|
System.out.println("");
|
||||||
System.out.println("The validator also supports the param -proxy=[address]:[port] for if you use a proxy");
|
System.out.println("The validator also supports the param -proxy=[address]:[port] for if you use a proxy");
|
||||||
System.out.println("");
|
System.out.println("");
|
||||||
|
@ -414,6 +416,7 @@ public class Validator {
|
||||||
String fhirpath = null;
|
String fhirpath = null;
|
||||||
String snomedCT = "900000000000207008";
|
String snomedCT = "900000000000207008";
|
||||||
boolean doDebug = false;
|
boolean doDebug = false;
|
||||||
|
boolean assumeValidRestReferences = false;
|
||||||
|
|
||||||
// load the parameters - so order doesn't matter
|
// load the parameters - so order doesn't matter
|
||||||
for (int i = 0; i < args.length; i++) {
|
for (int i = 0; i < args.length; i++) {
|
||||||
|
@ -447,6 +450,8 @@ public class Validator {
|
||||||
questionnaires.add(args[++i]);
|
questionnaires.add(args[++i]);
|
||||||
} else if (args[i].equals("-native")) {
|
} else if (args[i].equals("-native")) {
|
||||||
doNative = true;
|
doNative = true;
|
||||||
|
} else if (args[i].equals("-assumeValidRestReferences")) {
|
||||||
|
assumeValidRestReferences = true;
|
||||||
} else if (args[i].equals("-debug")) {
|
} else if (args[i].equals("-debug")) {
|
||||||
doDebug = true;
|
doDebug = true;
|
||||||
} else if (args[i].equals("-sct")) {
|
} else if (args[i].equals("-sct")) {
|
||||||
|
@ -577,6 +582,7 @@ public class Validator {
|
||||||
validator.setAnyExtensionsAllowed(anyExtensionsAllowed);
|
validator.setAnyExtensionsAllowed(anyExtensionsAllowed);
|
||||||
validator.setLanguage(lang);
|
validator.setLanguage(lang);
|
||||||
validator.setSnomedExtension(snomedCT);
|
validator.setSnomedExtension(snomedCT);
|
||||||
|
validator.setAssumeValidRestReferences(assumeValidRestReferences);
|
||||||
|
|
||||||
IParser x;
|
IParser x;
|
||||||
if (output != null && output.endsWith(".json"))
|
if (output != null && output.endsWith(".json"))
|
||||||
|
|
|
@ -177,6 +177,7 @@ public class ValidationTestSuite implements IEvaluationContext, IValidatorResour
|
||||||
} else {
|
} else {
|
||||||
val.setAllowExamples(true);
|
val.setAllowExamples(true);
|
||||||
}
|
}
|
||||||
|
val.setAssumeValidRestReferences(content.has("assumeValidRestReferences") ? content.get("assumeValidRestReferences").getAsBoolean() : false);
|
||||||
if (name.endsWith(".json"))
|
if (name.endsWith(".json"))
|
||||||
val.validate(null, errors, IOUtils.toInputStream(testCaseContent, Charsets.UTF_8), FhirFormat.JSON);
|
val.validate(null, errors, IOUtils.toInputStream(testCaseContent, Charsets.UTF_8), FhirFormat.JSON);
|
||||||
else
|
else
|
||||||
|
@ -200,6 +201,7 @@ public class ValidationTestSuite implements IEvaluationContext, IValidatorResour
|
||||||
v = content.has("version") ? content.get("version").getAsString() : Constants.VERSION;
|
v = content.has("version") ? content.get("version").getAsString() : Constants.VERSION;
|
||||||
StructureDefinition sd = loadProfile(filename, contents, v, messages);
|
StructureDefinition sd = loadProfile(filename, contents, v, messages);
|
||||||
val.getContext().cacheResource(sd);
|
val.getContext().cacheResource(sd);
|
||||||
|
val.setAssumeValidRestReferences(profile.has("assumeValidRestReferences") ? profile.get("assumeValidRestReferences").getAsBoolean() : false);
|
||||||
List<ValidationMessage> errorsProfile = new ArrayList<ValidationMessage>();
|
List<ValidationMessage> errorsProfile = new ArrayList<ValidationMessage>();
|
||||||
if (name.endsWith(".json"))
|
if (name.endsWith(".json"))
|
||||||
val.validate(null, errorsProfile, IOUtils.toInputStream(testCaseContent, Charsets.UTF_8), FhirFormat.JSON, asSdList(sd));
|
val.validate(null, errorsProfile, IOUtils.toInputStream(testCaseContent, Charsets.UTF_8), FhirFormat.JSON, asSdList(sd));
|
||||||
|
|
Loading…
Reference in New Issue