evaluate FHIRPath for resource or logical model

This commit is contained in:
Oliver Egger 2019-10-26 09:39:37 +02:00
parent ace4623f42
commit ea786ddedc
2 changed files with 31 additions and 2 deletions

View File

@ -1268,7 +1268,14 @@ public class ValidationEngine implements IValidatorResourceFetcher {
Element e = Manager.parse(context, new ByteArrayInputStream(cnt.focus), cnt.cntType); Element e = Manager.parse(context, new ByteArrayInputStream(cnt.focus), cnt.cntType);
Manager.compose(context, e, new FileOutputStream(output), (output.endsWith(".json") ? FhirFormat.JSON : FhirFormat.XML), OutputStyle.PRETTY, null); Manager.compose(context, e, new FileOutputStream(output), (output.endsWith(".json") ? FhirFormat.JSON : FhirFormat.XML), OutputStyle.PRETTY, null);
} }
public String evaluateFhirPath(String source, String expression) throws Exception {
Content cnt = loadContent(source, "validate");
FHIRPathEngine fpe = new FHIRPathEngine(context);
Element e = Manager.parse(context, new ByteArrayInputStream(cnt.focus), cnt.cntType);
return fpe.evaluateToString(e, expression);
}
public StructureDefinition snapshot(String source, String version) throws Exception { public StructureDefinition snapshot(String source, String version) throws Exception {
Content cnt = loadContent(source, "validate"); Content cnt = loadContent(source, "validate");
Resource res = loadResourceByVersion(version, cnt.focus, Utilities.getFileNameForName(source)); Resource res = loadResourceByVersion(version, cnt.focus, Utilities.getFileNameForName(source));

View File

@ -111,7 +111,7 @@ import org.hl7.fhir.utilities.xhtml.XhtmlComposer;
public class Validator { public class Validator {
public enum EngineMode { public enum EngineMode {
VALIDATION, TRANSFORM, NARRATIVE, SNAPSHOT, SCAN, CONVERT VALIDATION, TRANSFORM, NARRATIVE, SNAPSHOT, SCAN, CONVERT, FHIRPATH
} }
private static String getNamedParam(String[] args, String param) { private static String getNamedParam(String[] args, String param) {
@ -243,6 +243,15 @@ public class Validator {
System.out.println(""); System.out.println("");
System.out.println("-convert requires the parameters -source and -output. ig may be used to provide a logical model"); System.out.println("-convert requires the parameters -source and -output. ig may be used to provide a logical model");
System.out.println(""); System.out.println("");
System.out.println("Alternatively, you can use the validator to evaluate a FHIRPath expression on a resource or logical model.");
System.out.println("To do this, you must provide a specific parameter:");
System.out.println("");
System.out.println(" -fhirpath [FHIRPath]");
System.out.println("");
System.out.println("* [FHIRPath] the FHIRPath expression to evaluate");
System.out.println("");
System.out.println("-fhirpath requires the parameters -source. ig may be used to provide a logical model");
System.out.println("");
System.out.println("Finally, you can use the validator to generate a snapshot for a profile."); System.out.println("Finally, you can use the validator to generate a snapshot for a profile.");
System.out.println("To do this, you must provide a specific parameter:"); System.out.println("To do this, you must provide a specific parameter:");
System.out.println(""); System.out.println("");
@ -393,6 +402,7 @@ public class Validator {
String txLog = null; String txLog = null;
String mapLog = null; String mapLog = null;
String lang = null; String lang = null;
String fhirpath = null;
boolean doDebug = false; boolean doDebug = false;
// load the parameters - so order doesn't matter // load the parameters - so order doesn't matter
@ -500,6 +510,15 @@ public class Validator {
i++; i++;
} else if (args[i].equals("-convert")) { } else if (args[i].equals("-convert")) {
mode = EngineMode.CONVERT; mode = EngineMode.CONVERT;
} else if (args[i].equals("-fhirpath")) {
mode = EngineMode.FHIRPATH;
if (fhirpath == null)
if (i+1 == args.length)
throw new Error("Specified -fhirpath without indicating a FHIRPath expression");
else
fhirpath = args[++i];
else
throw new Exception("Can only nominate a single -fhirpath parameter");
} else { } else {
sources.add(args[i]); sources.add(args[i]);
} }
@ -568,6 +587,9 @@ public class Validator {
} else if (mode == EngineMode.CONVERT) { } else if (mode == EngineMode.CONVERT) {
validator.convert(sources.get(0), output); validator.convert(sources.get(0), output);
System.out.println(" ...convert"); System.out.println(" ...convert");
} else if (mode == EngineMode.FHIRPATH) {
System.out.println(" ...evaluating "+fhirpath);
System.out.println(validator.evaluateFhirPath(sources.get(0), fhirpath));
} else { } else {
if (definitions == null) if (definitions == null)
throw new Exception("Must provide a defn when doing validation"); throw new Exception("Must provide a defn when doing validation");