From 949a27f4e692a6a63bb7055f560549ccd594afb1 Mon Sep 17 00:00:00 2001 From: dotasek Date: Fri, 2 Jun 2023 18:00:26 -0400 Subject: [PATCH 1/7] Tests + start refactor --- .../org/hl7/fhir/validation/ValidatorCli.java | 152 ++++++----- .../fhir/validation/cli/tasks/CliTask.java | 20 ++ .../validation/cli/tasks/CompileTask.java | 34 +++ .../validation/cli/tasks/FhirpathTask.java | 33 +++ .../validation/cli/tasks/InstallTask.java | 32 +++ .../cli/tasks/LangTransformTask.java | 33 +++ .../validation/cli/tasks/NarrativeTask.java | 33 +++ .../fhir/validation/cli/tasks/ScanTask.java | 36 +++ .../validation/cli/tasks/SnapshotTask.java | 33 +++ .../validation/cli/tasks/SpecialTask.java | 41 +++ .../validation/cli/tasks/SpreadsheetTask.java | 33 +++ .../validation/cli/tasks/StandaloneTask.java | 14 + .../validation/cli/tasks/TransformTask.java | 33 +++ .../validation/cli/tasks/ValidateTask.java | 44 ++++ .../cli/tasks/ValidationServiceTask.java | 15 ++ .../validation/cli/tasks/VersionTask.java | 33 +++ .../fhir/validation/cli/utils/Display.java | 7 +- .../fhir/validation/ValidatorCliTests.java | 244 ++++++++++++++++++ .../validation/cli/utils/DisplayTests.java | 2 +- 19 files changed, 788 insertions(+), 84 deletions(-) create mode 100644 org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CliTask.java create mode 100644 org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompileTask.java create mode 100644 org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/FhirpathTask.java create mode 100644 org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/InstallTask.java create mode 100644 org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/LangTransformTask.java create mode 100644 org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/NarrativeTask.java create mode 100644 org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ScanTask.java create mode 100644 org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SnapshotTask.java create mode 100644 org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SpecialTask.java create mode 100644 org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SpreadsheetTask.java create mode 100644 org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/StandaloneTask.java create mode 100644 org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TransformTask.java create mode 100644 org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidateTask.java create mode 100644 org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidationServiceTask.java create mode 100644 org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/VersionTask.java create mode 100644 org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/ValidatorCliTests.java diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidatorCli.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidatorCli.java index 76d019efc..34c319b0a 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidatorCli.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidatorCli.java @@ -9,8 +9,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; -import org.hl7.fhir.convertors.loaders.loaderR5.R4BToR5Loader; - /* Copyright (c) 2011+, HL7, Inc. All rights reserved. @@ -82,6 +80,7 @@ import org.hl7.fhir.utilities.settings.FhirSettings; import org.hl7.fhir.validation.cli.model.CliContext; import org.hl7.fhir.validation.cli.services.ComparisonService; import org.hl7.fhir.validation.cli.services.ValidationService; +import org.hl7.fhir.validation.cli.tasks.*; import org.hl7.fhir.validation.cli.utils.Display; import org.hl7.fhir.validation.cli.utils.EngineMode; import org.hl7.fhir.validation.cli.utils.Params; @@ -120,7 +119,34 @@ public class ValidatorCli { private static ValidationService validationService = new ValidationService(); - public static void main(String[] args) throws Exception { + protected ValidationService myValidationService; + + final List cliTasks; + + final CliTask defaultCliTask = new ValidateTask(); + protected ValidatorCli(ValidationService validationService) { + myValidationService = validationService; + cliTasks = getCliTasks(); + } + + protected List getCliTasks() { + return List.of( + + new CompileTask(), + new FhirpathTask(), + new InstallTask(), + new LangTransformTask(), + new NarrativeTask(), + new ScanTask(), + new SnapshotTask(), + new SpecialTask(), + new SpreadsheetTask(), + new TransformTask(), + new VersionTask(), + defaultCliTask); + } + + protected void readParamsAndExecuteTask(CliContext cliContext, String[] args) throws Exception { TimeTracker tt = new TimeTracker(); TimeTracker.Session tts = tt.start("Loading"); @@ -130,8 +156,6 @@ public class ValidatorCli { Display.displayVersion(); Display.displaySystemInfo(); - CliContext cliContext = Params.loadCliContext(args); - if (cliContext.getFhirSettingsFile() != null) { FhirSettings.setExplicitFilePath(cliContext.getFhirSettingsFile()); } @@ -139,35 +163,26 @@ public class ValidatorCli { FileFormat.checkCharsetAndWarnIfNotUTF8(System.out); if (shouldDisplayHelpToUser(args)) { - Display.displayHelpDetails(); + Display.displayHelpDetails("help.txt"); } else if (Params.hasParam(args, Params.COMPARE)) { if (destinationDirectoryValid(Params.getParam(args, Params.DESTINATION))) { doLeftRightComparison(args, cliContext, tt); } } else if (Params.hasParam(args, Params.TEST) || Params.hasParam(args, Params.TX_TESTS)) { parseTestParamsAndExecute(args); - } else if (Params.hasParam(args, Params.SPECIAL)) { - executeSpecial(args); - } else { + } + else { Display.printCliArgumentsAndInfo(args); - doValidation(tt, tts, cliContext); + doValidation(tt, tts, cliContext, args); } } - private static void executeSpecial(String[] args) throws JsonException, IOException { - String specialMode = Params.getParam(args, Params.SPECIAL); - if ("r4r5tests".equals(specialMode)) { - final String target = Params.getParam(args, Params.TARGET); - final String source = Params.getParam(args, Params.SOURCE); - final String filter = Params.getParam(args, Params.FILTER); - if (new File(target).exists()) { - new R4R5MapTester().testMaps(target, source, filter); - } - } else { - System.out.println("Unknown SpecialMode "+specialMode); - } + public static void main(String[] args) throws Exception { + final ValidatorCli validatorCli = new ValidatorCli(validationService); + final CliContext cliContext = Params.loadCliContext(args); + validatorCli.readParamsAndExecuteTask(cliContext, args); } - + private static void setJavaSystemProxyParamsFromParams(String[] args) { setJavaSystemProxyHostFromParams(args, Params.PROXY, HTTP_PROXY_HOST, HTTP_PROXY_PORT); @@ -285,6 +300,7 @@ public class ValidatorCli { } private static boolean shouldDisplayHelpToUser(String[] args) { + String helpTarget = Params.getParam(args, Params.HELP); return (args.length == 0 || Params.hasParam(args, Params.HELP) || Params.hasParam(args, "?") @@ -304,14 +320,37 @@ public class ValidatorCli { ComparisonService.doLeftRightComparison(args, Params.getParam(args, Params.DESTINATION), validator); } - private static void doValidation(TimeTracker tt, TimeTracker.Session tts, CliContext cliContext) throws Exception { + private void doValidation(TimeTracker tt, TimeTracker.Session tts, CliContext cliContext, String[] params) throws Exception { if (cliContext.getSv() == null) { - cliContext.setSv(validationService.determineVersion(cliContext)); + cliContext.setSv(myValidationService.determineVersion(cliContext)); } + + CliTask cliTask = null; + for(CliTask candidateTask : cliTasks) { + if (candidateTask.shouldExecuteTask(cliContext, params)) { + cliTask = candidateTask; + } + } + if (cliTask == null) + cliTask = defaultCliTask; + + if (cliTask instanceof ValidationServiceTask) { + ValidationEngine validationEngine = getValidationEngine(tt, cliContext); + tts.end(); + ((ValidationServiceTask) cliTask).executeTask(myValidationService, validationEngine, cliContext, params, tt, tts); + } else if (cliTask instanceof StandaloneTask) { + ((StandaloneTask) cliTask).executeTask(cliContext,params,tt,tts); + } + + System.out.println("Done. " + tt.report()+". Max Memory = "+Utilities.describeSize(Runtime.getRuntime().maxMemory())); + } + + private ValidationEngine getValidationEngine(TimeTracker tt, CliContext cliContext) throws Exception { + ValidationEngine validationEngine; System.out.println(" Locale: "+Locale.getDefault().getDisplayCountry()+"/"+Locale.getDefault().getCountry()); if (cliContext.getJurisdiction() == null) { - System.out.println(" Jurisdiction: None specified (locale = "+Locale.getDefault().getCountry()+")"); - System.out.println(" Note that exceptions and validation failures may happen in the absense of a locale"); + System.out.println(" Jurisdiction: None specified (locale = "+Locale.getDefault().getCountry()+")"); + System.out.println(" Note that exceptions and validation failures may happen in the absense of a locale"); } else { System.out.println(" Jurisdiction: "+JurisdictionUtilities.displayJurisdiction(cliContext.getJurisdiction())); } @@ -320,57 +359,12 @@ public class ValidatorCli { // Comment this out because definitions filename doesn't necessarily contain version (and many not even be 14 characters long). // Version gets spit out a couple of lines later after we've loaded the context String definitions = "dev".equals(cliContext.getSv()) ? "hl7.fhir.r5.core#current" : VersionUtilities.packageForVersion(cliContext.getSv()) + "#" + VersionUtilities.getCurrentVersion(cliContext.getSv()); - ValidationEngine validator = validationService.initializeValidator(cliContext, definitions, tt); - tts.end(); - switch (cliContext.getMode()) { - case TRANSFORM: - validationService.transform(cliContext, validator); - break; - case COMPILE: - validationService.compile(cliContext, validator); - break; - case NARRATIVE: - validationService.generateNarrative(cliContext, validator); - break; - case SNAPSHOT: - validationService.generateSnapshot(cliContext, validator); - break; - case INSTALL: - validationService.install(cliContext, validator); - break; - case SPREADSHEET: - validationService.generateSpreadsheet(cliContext, validator); - break; - case CONVERT: - validationService.convertSources(cliContext, validator); - break; - case FHIRPATH: - validationService.evaluateFhirpath(cliContext, validator); - break; - case VERSION: - validationService.transformVersion(cliContext, validator); - break; - case LANG_TRANSFORM: - validationService.transformLang(cliContext, validator); - break; - case VALIDATION: - case SCAN: - default: - for (String s : cliContext.getProfiles()) { - if (!validator.getContext().hasResource(StructureDefinition.class, s) && !validator.getContext().hasResource(ImplementationGuide.class, s)) { - System.out.println(" Fetch Profile from " + s); - validator.loadProfile(cliContext.getLocations().getOrDefault(s, s)); - } - } - System.out.println("Validating"); - if (cliContext.getMode() == EngineMode.SCAN) { - Scanner validationScanner = new Scanner(validator.getContext(), validator.getValidator(null), validator.getIgLoader(), validator.getFhirPathEngine()); - validationScanner.validateScan(cliContext.getOutput(), cliContext.getSources()); - } else { - validationService.validateSources(cliContext, validator); - } - break; - } - System.out.println("Done. " + tt.report()+". Max Memory = "+Utilities.describeSize(Runtime.getRuntime().maxMemory())); + validationEngine = myValidationService.initializeValidator(cliContext, definitions, tt); + return validationEngine; + } + + protected void validateScan(CliContext cliContext, ValidationEngine validator) throws Exception { + Scanner validationScanner = new Scanner(validator.getContext(), validator.getValidator(null), validator.getIgLoader(), validator.getFhirPathEngine()); + validationScanner.validateScan(cliContext.getOutput(), cliContext.getSources()); } } \ No newline at end of file diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CliTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CliTask.java new file mode 100644 index 000000000..2c8d22861 --- /dev/null +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CliTask.java @@ -0,0 +1,20 @@ +package org.hl7.fhir.validation.cli.tasks; + +import lombok.Getter; +import org.hl7.fhir.utilities.TimeTracker; +import org.hl7.fhir.validation.cli.model.CliContext; + +import java.io.IOException; + +public abstract class CliTask { + + public abstract String getName(); + public final String getTaskParam() { + return "-" + getName(); + } + public abstract boolean shouldExecuteTask(CliContext cliContext, String[] args); + public abstract void printHelp(java.io.PrintStream out); + + + +} diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompileTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompileTask.java new file mode 100644 index 000000000..82b8f7468 --- /dev/null +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompileTask.java @@ -0,0 +1,34 @@ +package org.hl7.fhir.validation.cli.tasks; + +import org.hl7.fhir.utilities.TimeTracker; +import org.hl7.fhir.validation.Scanner; +import org.hl7.fhir.validation.ValidationEngine; +import org.hl7.fhir.validation.cli.model.CliContext; +import org.hl7.fhir.validation.cli.services.ValidationService; +import org.hl7.fhir.validation.cli.utils.EngineMode; + +import java.io.PrintStream; + +public class CompileTask extends ValidationServiceTask { + + @Override + public String getName() { + return "compile"; + } + + @Override + public boolean shouldExecuteTask(CliContext cliContext, String[] args) { + return cliContext.getMode() == EngineMode.COMPILE; + } + + @Override + public void printHelp(PrintStream out) { + + } + + @Override + public void executeTask(ValidationService validationService, ValidationEngine validationEngine, CliContext cliContext, String[] args, TimeTracker tt, TimeTracker.Session tts) throws Exception { + validationService.compile(cliContext, validationEngine); + } + +} diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/FhirpathTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/FhirpathTask.java new file mode 100644 index 000000000..e60579027 --- /dev/null +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/FhirpathTask.java @@ -0,0 +1,33 @@ +package org.hl7.fhir.validation.cli.tasks; + +import org.hl7.fhir.utilities.TimeTracker; +import org.hl7.fhir.validation.ValidationEngine; +import org.hl7.fhir.validation.cli.model.CliContext; +import org.hl7.fhir.validation.cli.services.ValidationService; +import org.hl7.fhir.validation.cli.utils.EngineMode; + +import java.io.PrintStream; + +public class FhirpathTask extends ValidationServiceTask { + + @Override + public String getName() { + return "fhirpath"; + } + + @Override + public boolean shouldExecuteTask(CliContext cliContext, String[] args) { + return cliContext.getMode() == EngineMode.FHIRPATH; + } + + @Override + public void printHelp(PrintStream out) { + + } + + @Override + public void executeTask(ValidationService validationService, ValidationEngine validationEngine, CliContext cliContext, String[] args, TimeTracker tt, TimeTracker.Session tts) throws Exception { + validationService.evaluateFhirpath(cliContext, validationEngine); + } + +} diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/InstallTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/InstallTask.java new file mode 100644 index 000000000..9a770ef2d --- /dev/null +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/InstallTask.java @@ -0,0 +1,32 @@ +package org.hl7.fhir.validation.cli.tasks; + +import org.hl7.fhir.utilities.TimeTracker; +import org.hl7.fhir.validation.ValidationEngine; +import org.hl7.fhir.validation.cli.model.CliContext; +import org.hl7.fhir.validation.cli.services.ValidationService; +import org.hl7.fhir.validation.cli.utils.EngineMode; + +import java.io.PrintStream; + +public class InstallTask extends ValidationServiceTask { + + @Override + public String getName() { + return "install"; + } + + @Override + public boolean shouldExecuteTask(CliContext cliContext, String[] args) { + return cliContext.getMode() == EngineMode.INSTALL; + } + + @Override + public void printHelp(PrintStream out) { + + } + + @Override + public void executeTask(ValidationService validationService, ValidationEngine validationEngine, CliContext cliContext, String[] args, TimeTracker tt, TimeTracker.Session tts) throws Exception { + validationService.install(cliContext, validationEngine); + } +} diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/LangTransformTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/LangTransformTask.java new file mode 100644 index 000000000..391059dbc --- /dev/null +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/LangTransformTask.java @@ -0,0 +1,33 @@ +package org.hl7.fhir.validation.cli.tasks; + +import org.hl7.fhir.utilities.TimeTracker; +import org.hl7.fhir.validation.ValidationEngine; +import org.hl7.fhir.validation.cli.model.CliContext; +import org.hl7.fhir.validation.cli.services.ValidationService; +import org.hl7.fhir.validation.cli.utils.EngineMode; + +import java.io.PrintStream; + +public class LangTransformTask extends ValidationServiceTask { + + @Override + public String getName() { + return "lang-transform"; + } + + @Override + public boolean shouldExecuteTask(CliContext cliContext, String[] args) { + return cliContext.getMode() == EngineMode.LANG_TRANSFORM; + } + + @Override + public void printHelp(PrintStream out) { + + } + + @Override + public void executeTask(ValidationService validationService, ValidationEngine validationEngine, CliContext cliContext, String[] args, TimeTracker tt, TimeTracker.Session tts) throws Exception { + validationService.transformLang(cliContext, validationEngine); + } + +} diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/NarrativeTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/NarrativeTask.java new file mode 100644 index 000000000..fe76a9729 --- /dev/null +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/NarrativeTask.java @@ -0,0 +1,33 @@ +package org.hl7.fhir.validation.cli.tasks; + +import org.hl7.fhir.utilities.TimeTracker; +import org.hl7.fhir.validation.ValidationEngine; +import org.hl7.fhir.validation.cli.model.CliContext; +import org.hl7.fhir.validation.cli.services.ValidationService; +import org.hl7.fhir.validation.cli.utils.EngineMode; + +import java.io.PrintStream; + +public class NarrativeTask extends ValidationServiceTask { + + @Override + public String getName() { + return "narrative"; + } + + @Override + public boolean shouldExecuteTask(CliContext cliContext, String[] args) { + return cliContext.getMode() == EngineMode.NARRATIVE; + } + + @Override + public void printHelp(PrintStream out) { + + } + + @Override + public void executeTask(ValidationService validationService, ValidationEngine validationEngine, CliContext cliContext, String[] args, TimeTracker tt, TimeTracker.Session tts) throws Exception { + validationService.generateNarrative(cliContext, validationEngine); + } + +} diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ScanTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ScanTask.java new file mode 100644 index 000000000..f7b960699 --- /dev/null +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ScanTask.java @@ -0,0 +1,36 @@ +package org.hl7.fhir.validation.cli.tasks; + +import org.hl7.fhir.utilities.TimeTracker; +import org.hl7.fhir.validation.Scanner; +import org.hl7.fhir.validation.ValidationEngine; +import org.hl7.fhir.validation.cli.model.CliContext; +import org.hl7.fhir.validation.cli.services.ValidationService; +import org.hl7.fhir.validation.cli.utils.EngineMode; + +import java.io.PrintStream; + +public class ScanTask extends ValidationServiceTask { + + + @Override + public String getName() { + return "scan"; + } + + @Override + public boolean shouldExecuteTask(CliContext cliContext, String[] args) { + return cliContext.getMode() == EngineMode.SCAN; + } + + @Override + public void printHelp(PrintStream out) { + + } + + @Override + public void executeTask(ValidationService validationService, ValidationEngine validationEngine, CliContext cliContext, String[] args, TimeTracker tt, TimeTracker.Session tts) throws Exception { + Scanner validationScanner = new Scanner(validationEngine.getContext(), validationEngine.getValidator(null), validationEngine.getIgLoader(), validationEngine.getFhirPathEngine()); + validationScanner.validateScan(cliContext.getOutput(), cliContext.getSources()); + } + +} diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SnapshotTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SnapshotTask.java new file mode 100644 index 000000000..810f75af3 --- /dev/null +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SnapshotTask.java @@ -0,0 +1,33 @@ +package org.hl7.fhir.validation.cli.tasks; + +import org.hl7.fhir.utilities.TimeTracker; +import org.hl7.fhir.validation.ValidationEngine; +import org.hl7.fhir.validation.cli.model.CliContext; +import org.hl7.fhir.validation.cli.services.ValidationService; +import org.hl7.fhir.validation.cli.utils.EngineMode; + +import java.io.PrintStream; + +public class SnapshotTask extends ValidationServiceTask { + + @Override + public String getName() { + return "snapshot"; + } + + @Override + public boolean shouldExecuteTask(CliContext cliContext, String[] args) { + return cliContext.getMode() == EngineMode.SNAPSHOT; + } + + @Override + public void printHelp(PrintStream out) { + + } + + @Override + public void executeTask(ValidationService validationService, ValidationEngine validationEngine, CliContext cliContext, String[] args, TimeTracker tt, TimeTracker.Session tts) throws Exception { + validationService.generateSnapshot(cliContext, validationEngine); + } + +} diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SpecialTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SpecialTask.java new file mode 100644 index 000000000..4091ba859 --- /dev/null +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SpecialTask.java @@ -0,0 +1,41 @@ +package org.hl7.fhir.validation.cli.tasks; + +import org.hl7.fhir.utilities.TimeTracker; +import org.hl7.fhir.validation.cli.model.CliContext; +import org.hl7.fhir.validation.cli.utils.Params; +import org.hl7.fhir.validation.special.R4R5MapTester; + +import java.io.File; +import java.io.PrintStream; + +public class SpecialTask extends StandaloneTask{ + @Override + public String getName() { + return "special"; + } + + @Override + public boolean shouldExecuteTask(CliContext cliContext, String[] args) { + return Params.hasParam(args, Params.SPECIAL); + } + + @Override + public void printHelp(PrintStream out) { + + } + + @Override + public void executeTask(CliContext cliContext, String[] args, TimeTracker tt, TimeTracker.Session tts) throws Exception { + String specialMode = Params.getParam(args, Params.SPECIAL); + if ("r4r5tests".equals(specialMode)) { + final String target = Params.getParam(args, Params.TARGET); + final String source = Params.getParam(args, Params.SOURCE); + final String filter = Params.getParam(args, Params.FILTER); + if (new File(target).exists()) { + new R4R5MapTester().testMaps(target, source, filter); + } + } else { + System.out.println("Unknown SpecialMode "+specialMode); + } + } +} diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SpreadsheetTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SpreadsheetTask.java new file mode 100644 index 000000000..533a5559b --- /dev/null +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SpreadsheetTask.java @@ -0,0 +1,33 @@ +package org.hl7.fhir.validation.cli.tasks; + +import org.hl7.fhir.utilities.TimeTracker; +import org.hl7.fhir.validation.ValidationEngine; +import org.hl7.fhir.validation.cli.model.CliContext; +import org.hl7.fhir.validation.cli.services.ValidationService; +import org.hl7.fhir.validation.cli.utils.EngineMode; + +import java.io.PrintStream; + +public class SpreadsheetTask extends ValidationServiceTask { + + @Override + public String getName() { + return "spreadsheet"; + } + + @Override + public boolean shouldExecuteTask(CliContext cliContext, String[] args) { + return cliContext.getMode() == EngineMode.SPREADSHEET; + } + + @Override + public void printHelp(PrintStream out) { + + } + + @Override + public void executeTask(ValidationService validationService, ValidationEngine validationEngine, CliContext cliContext, String[] args, TimeTracker tt, TimeTracker.Session tts) throws Exception { + validationService.generateSpreadsheet(cliContext, validationEngine); + } + +} diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/StandaloneTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/StandaloneTask.java new file mode 100644 index 000000000..ad40dc80c --- /dev/null +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/StandaloneTask.java @@ -0,0 +1,14 @@ +package org.hl7.fhir.validation.cli.tasks; + +import org.hl7.fhir.utilities.TimeTracker; +import org.hl7.fhir.validation.ValidationEngine; +import org.hl7.fhir.validation.cli.model.CliContext; +import org.hl7.fhir.validation.cli.services.ValidationService; + +public abstract class StandaloneTask extends CliTask{ + + public abstract void executeTask(CliContext cliContext, String[] args, TimeTracker tt, TimeTracker.Session tts) throws Exception; + + + +} diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TransformTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TransformTask.java new file mode 100644 index 000000000..78ec5a091 --- /dev/null +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TransformTask.java @@ -0,0 +1,33 @@ +package org.hl7.fhir.validation.cli.tasks; + +import org.hl7.fhir.utilities.TimeTracker; +import org.hl7.fhir.validation.ValidationEngine; +import org.hl7.fhir.validation.cli.model.CliContext; +import org.hl7.fhir.validation.cli.services.ValidationService; +import org.hl7.fhir.validation.cli.utils.EngineMode; + +import java.io.PrintStream; + +public class TransformTask extends ValidationServiceTask { + + @Override + public String getName() { + return "transform"; + } + + @Override + public boolean shouldExecuteTask(CliContext cliContext, String[] args) { + return cliContext.getMode() == EngineMode.TRANSFORM; + } + + @Override + public void printHelp(PrintStream out) { + + } + + @Override + public void executeTask(ValidationService validationService, ValidationEngine validationEngine, CliContext cliContext, String[] args, TimeTracker tt, TimeTracker.Session tts) throws Exception { + validationService.transform(cliContext, validationEngine); + } + +} diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidateTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidateTask.java new file mode 100644 index 000000000..3c2d165b8 --- /dev/null +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidateTask.java @@ -0,0 +1,44 @@ +package org.hl7.fhir.validation.cli.tasks; + +import org.hl7.fhir.r5.model.ImplementationGuide; +import org.hl7.fhir.r5.model.StructureDefinition; +import org.hl7.fhir.utilities.TimeTracker; +import org.hl7.fhir.validation.ValidationEngine; +import org.hl7.fhir.validation.cli.model.CliContext; +import org.hl7.fhir.validation.cli.services.ValidationService; + +import java.io.PrintStream; + +public class ValidateTask extends ValidationServiceTask { + + @Override + public String getName() { + return "validate"; + } + + @Override + public boolean shouldExecuteTask(CliContext cliContext, String[] args) { + // There is no explicit way to trigger a validation task. + // It is the default task. + return false; + } + + @Override + public void printHelp(PrintStream out) { + + } + + @Override + public void executeTask(ValidationService validationService, ValidationEngine validationEngine, CliContext cliContext, String[] args, TimeTracker tt, TimeTracker.Session tts) throws Exception { + for (String s : cliContext.getProfiles()) { + if (!validationEngine.getContext().hasResource(StructureDefinition.class, s) && !validationEngine.getContext().hasResource(ImplementationGuide.class, s)) { + System.out.println(" Fetch Profile from " + s); + validationEngine.loadProfile(cliContext.getLocations().getOrDefault(s, s)); + } + } + System.out.println("Validating"); + + validationService.validateSources(cliContext, validationEngine); + + } +} diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidationServiceTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidationServiceTask.java new file mode 100644 index 000000000..8cfd3a08f --- /dev/null +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidationServiceTask.java @@ -0,0 +1,15 @@ +package org.hl7.fhir.validation.cli.tasks; + +import lombok.Getter; +import org.hl7.fhir.utilities.TimeTracker; +import org.hl7.fhir.validation.ValidationEngine; +import org.hl7.fhir.validation.cli.model.CliContext; +import org.hl7.fhir.validation.cli.services.ValidationService; + +public abstract class ValidationServiceTask extends CliTask{ + + public abstract void executeTask(ValidationService validationService, ValidationEngine validationEngine, CliContext cliContext, String[] args, org.hl7.fhir.utilities.TimeTracker tt, TimeTracker.Session tts) throws Exception; + + + +} diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/VersionTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/VersionTask.java new file mode 100644 index 000000000..aae1bfcc8 --- /dev/null +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/VersionTask.java @@ -0,0 +1,33 @@ +package org.hl7.fhir.validation.cli.tasks; + +import org.hl7.fhir.utilities.TimeTracker; +import org.hl7.fhir.validation.ValidationEngine; +import org.hl7.fhir.validation.cli.model.CliContext; +import org.hl7.fhir.validation.cli.services.ValidationService; +import org.hl7.fhir.validation.cli.utils.EngineMode; + +import java.io.PrintStream; + +public class VersionTask extends ValidationServiceTask { + + @Override + public String getName() { + return "to-version"; + } + + @Override + public boolean shouldExecuteTask(CliContext cliContext, String[] args) { + return cliContext.getMode() == EngineMode.VERSION; + } + + @Override + public void printHelp(PrintStream out) { + + } + + @Override + public void executeTask(ValidationService validationService, ValidationEngine validationEngine, CliContext cliContext, String[] args, TimeTracker tt, TimeTracker.Session tts) throws Exception { + validationService.transformVersion(cliContext, validationEngine); + } + +} diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/utils/Display.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/utils/Display.java index 14a988487..42857323c 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/utils/Display.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/utils/Display.java @@ -5,9 +5,7 @@ import java.io.InputStream; import org.apache.commons.io.IOUtils; import org.hl7.fhir.r5.model.Constants; -import org.hl7.fhir.utilities.VersionUtilities; import org.hl7.fhir.utilities.npm.FilesystemPackageCacheManager; -import org.hl7.fhir.utilities.npm.ToolsVersion; /** * Class for displaying output to the cli user. @@ -52,10 +50,11 @@ public class Display { /** * Loads the help details from resources/help.txt, and displays them on the command line to the user. + * @param file */ - public static void displayHelpDetails() { + public static void displayHelpDetails(String file) { ClassLoader classLoader = Display.class.getClassLoader(); - InputStream help = classLoader.getResourceAsStream("help.txt"); + InputStream help = classLoader.getResourceAsStream(file); try { String data = IOUtils.toString(help, "UTF-8"); diff --git a/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/ValidatorCliTests.java b/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/ValidatorCliTests.java new file mode 100644 index 000000000..dc7fffd20 --- /dev/null +++ b/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/ValidatorCliTests.java @@ -0,0 +1,244 @@ +package org.hl7.fhir.validation; + +import org.apache.commons.compress.archivers.sevenz.CLI; +import org.hl7.fhir.utilities.TimeTracker; +import org.hl7.fhir.validation.cli.model.CliContext; +import org.hl7.fhir.validation.cli.services.ValidationService; +import org.hl7.fhir.validation.cli.tasks.*; +import org.hl7.fhir.validation.cli.utils.Params; + + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +public class ValidatorCliTests { + + @Mock + ValidationService validationService; + + @Mock + ValidationEngine validationEngine; + + @Spy + CompileTask compileTask; + + @Spy + FhirpathTask fhirpathTask; + @Spy + InstallTask installTask; + + @Spy + LangTransformTask langTransformTask; + + @Spy + NarrativeTask narrativeTask; + + @Spy + SnapshotTask snapshotTask; + @Spy + SpreadsheetTask spreadsheetTask; + @Spy + TransformTask transformTask; + + @Spy + VersionTask versionTask; + @Spy + ValidateTask validateTask; + + @Spy + ScanTask scanTask = new ScanTask() { + @Override + public void executeTask(ValidationService validationService, ValidationEngine validationEngine, CliContext cliContext, String[] args, TimeTracker tt, TimeTracker.Session tts) {} + }; + @Spy + SpecialTask specialTask = new SpecialTask() { + @Override + public void executeTask(CliContext cliContext, String[] args, TimeTracker tt, TimeTracker.Session tts) {} + }; + + public ValidatorCli mockValidatorCli() { + ValidatorCli validatorCli = spy(new ValidatorCli(validationService){ + protected void validateScan(CliContext cliContext, ValidationEngine validator) { + // DO NOTHING; + } + + protected List getCliTasks() { + return List.of( + compileTask, + fhirpathTask, + installTask, + langTransformTask, + narrativeTask, + scanTask, + snapshotTask, + specialTask, + spreadsheetTask, + transformTask, + versionTask, + //validate is the default + validateTask + ); + } + }); + return validatorCli; + } + public ValidatorCli mockValidatorCliWithService(CliContext cliContext) throws Exception { + when(validationService.determineVersion(Mockito.same(cliContext))).thenReturn("5.0.1"); + when(validationService.initializeValidator(Mockito.same(cliContext), anyString(), any(org.hl7.fhir.utilities.TimeTracker.class))).thenReturn(validationEngine); + return mockValidatorCli(); + } + + @Test + public void testCorrectTasksInValidatorCli() { + ValidatorCli realCli = new ValidatorCli(mock(ValidationService.class)); + ValidatorCli mockCli = mockValidatorCli(); + + List realTasks = realCli.getCliTasks(); + List mockTasks = mockCli.getCliTasks(); + assertEquals(mockTasks.size(), realTasks.size()); + for (int i = 0; i < realTasks.size(); i++) { + assertEquals(mockTasks.get(i).getName(), realTasks.get(i).getName(), "Differing task at index " + i); + } + } + + private void assertContainsValidationTask(List tasks, String name) { + for (CliTask task : tasks) { + if (task.getName().equals(name)) { + return; + } + } + fail("Cannot find " + name + " in task list"); + } + + @Test + public void transformTest() throws Exception { + final String[] args = new String[]{"-transform", "dummyFile.map", "dummySource.json"}; + CliContext cliContext = Params.loadCliContext(args); + ValidatorCli cli = mockValidatorCliWithService(cliContext); + cli.readParamsAndExecuteTask(cliContext, args); + Mockito.verify(validationService).determineVersion(same(cliContext)); + Mockito.verify(validationService).transform(same(cliContext), same(validationEngine)); + } + + @Test + public void narrativeTest() throws Exception { + final String[] args = new String[]{"-narrative"}; + CliContext cliContext = Params.loadCliContext(args); + ValidatorCli cli = mockValidatorCliWithService(cliContext); + cli.readParamsAndExecuteTask(cliContext, args); + Mockito.verify(validationService).determineVersion(same(cliContext)); + Mockito.verify(validationService).generateNarrative(same(cliContext), same(validationEngine)); + } + + @Test + public void compileTest() throws Exception { + final String[] args = new String[]{"-compile", "dummyMap.map"}; + CliContext cliContext = Params.loadCliContext(args); + ValidatorCli cli = mockValidatorCliWithService(cliContext); + cli.readParamsAndExecuteTask(cliContext, args); + Mockito.verify(validationService).determineVersion(same(cliContext)); + Mockito.verify(validationService).compile(same(cliContext), same(validationEngine)); + } + + @Test + public void snapshotTest() throws Exception { + final String[] args = new String[]{"-snapshot"}; + CliContext cliContext = Params.loadCliContext(args); + ValidatorCli cli = mockValidatorCliWithService(cliContext); + cli.readParamsAndExecuteTask(cliContext, args); + Mockito.verify(validationService).determineVersion(same(cliContext)); + Mockito.verify(validationService).generateSnapshot(same(cliContext), same(validationEngine)); + } + + @Test + public void installTest() throws Exception { + final String[] args = new String[]{"-install"}; + CliContext cliContext = Params.loadCliContext(args); + ValidatorCli cli = mockValidatorCliWithService(cliContext); + cli.readParamsAndExecuteTask(cliContext, args); + Mockito.verify(validationService).determineVersion(same(cliContext)); + Mockito.verify(validationService).install(same(cliContext), same(validationEngine)); + } + + @Test + public void spreadsheetTest() throws Exception { + final String[] args = new String[]{"-spreadsheet"}; + CliContext cliContext = Params.loadCliContext(args); + ValidatorCli cli = mockValidatorCliWithService(cliContext); + cli.readParamsAndExecuteTask(cliContext, args); + Mockito.verify(validationService).determineVersion(same(cliContext)); + Mockito.verify(validationService).generateSpreadsheet(same(cliContext), same(validationEngine)); + } + + @Test + public void fhirpathTest() throws Exception { + final String[] args = new String[]{"-fhirpath", "dummyExpression"}; + CliContext cliContext = Params.loadCliContext(args); + ValidatorCli cli = mockValidatorCliWithService(cliContext); + cli.readParamsAndExecuteTask(cliContext, args); + Mockito.verify(validationService).determineVersion(same(cliContext)); + Mockito.verify(validationService).evaluateFhirpath(same(cliContext), same(validationEngine)); + } + + @Test + public void versionTest() throws Exception { + final String[] args = new String[]{"-to-version", "1.2.3"}; + CliContext cliContext = Params.loadCliContext(args); + ValidatorCli cli = mockValidatorCliWithService(cliContext); + cli.readParamsAndExecuteTask(cliContext, args); + Mockito.verify(validationService).determineVersion(same(cliContext)); + Mockito.verify(validationService).transformVersion(same(cliContext), same(validationEngine)); + } + + @Test + public void langTransformTest() throws Exception { + final String[] args = new String[]{"-lang-transform", "dummyLang"}; + CliContext cliContext = Params.loadCliContext(args); + ValidatorCli cli = mockValidatorCliWithService(cliContext); + cli.readParamsAndExecuteTask(cliContext, args); + Mockito.verify(validationService).determineVersion(same(cliContext)); + Mockito.verify(validationService).transformLang(same(cliContext), same(validationEngine)); + } + + @Test + public void defaultTest() throws Exception { + final String[] args = new String[]{"dummyFile.json"}; + CliContext cliContext = Params.loadCliContext(args); + ValidatorCli cli = mockValidatorCliWithService(cliContext); + cli.readParamsAndExecuteTask(cliContext, args); + Mockito.verify(validationService).determineVersion(same(cliContext)); + Mockito.verify(validationService).validateSources(same(cliContext), same(validationEngine)); + } + + @Test + public void scanTest() throws Exception { + final String[] args = new String[]{"-scan"}; + CliContext cliContext = Params.loadCliContext(args); + ValidatorCli cli = mockValidatorCliWithService(cliContext); + cli.readParamsAndExecuteTask(cliContext, args); + Mockito.verify(validationService).determineVersion(same(cliContext)); + Mockito.verify(scanTask).executeTask(same(validationService), same(validationEngine), same(cliContext), eq(args), any(TimeTracker.class), any(TimeTracker.Session.class)); + } + + @Test + public void specialTest() throws Exception { + final String[] args = new String[]{"-special"}; + CliContext cliContext = Params.loadCliContext(args); + ValidatorCli cli = mockValidatorCli(); + cli.readParamsAndExecuteTask(cliContext, args); + + Mockito.verify(specialTask).executeTask(same(cliContext), eq(args), any(TimeTracker.class), any(TimeTracker.Session.class)); + } +} diff --git a/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/cli/utils/DisplayTests.java b/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/cli/utils/DisplayTests.java index 38061f386..eccac5731 100644 --- a/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/cli/utils/DisplayTests.java +++ b/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/cli/utils/DisplayTests.java @@ -23,7 +23,7 @@ public class DisplayTests { System.setErr(new PrintStream(errContent)); try { - Display.displayHelpDetails(); + Display.displayHelpDetails("help.txt"); String output = outContent.toString(); From 7922a9947ea41f9fb86cb19cd230cd42fae5642d Mon Sep 17 00:00:00 2001 From: dotasek Date: Mon, 5 Jun 2023 13:19:51 -0400 Subject: [PATCH 2/7] Add Tests, TxTests, and Compare Tasks --- .../org/hl7/fhir/validation/ValidatorCli.java | 111 ++++-------------- .../fhir/validation/cli/tasks/CliTask.java | 3 - .../validation/cli/tasks/CompareTask.java | 60 ++++++++++ .../fhir/validation/cli/tasks/TestsTask.java | 45 +++++++ .../validation/cli/tasks/TxTestsTask.java | 38 ++++++ .../fhir/validation/cli/utils/Display.java | 2 +- .../fhir/validation/ValidatorCliTests.java | 50 +++++++- 7 files changed, 218 insertions(+), 91 deletions(-) create mode 100644 org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompareTask.java create mode 100644 org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TestsTask.java create mode 100644 org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TxTestsTask.java diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidatorCli.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidatorCli.java index 34c319b0a..924a2bf5f 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidatorCli.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidatorCli.java @@ -1,10 +1,7 @@ package org.hl7.fhir.validation; -import java.io.File; -import java.io.IOException; import java.net.Authenticator; import java.net.PasswordAuthentication; -import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -67,28 +64,17 @@ POSSIBILITY OF SUCH DAMAGE. */ -import org.hl7.fhir.r5.model.ImplementationGuide; -import org.hl7.fhir.r5.model.StructureDefinition; import org.hl7.fhir.r5.terminologies.JurisdictionUtilities; import org.hl7.fhir.utilities.FileFormat; import org.hl7.fhir.utilities.TimeTracker; import org.hl7.fhir.utilities.Utilities; import org.hl7.fhir.utilities.VersionUtilities; -import org.hl7.fhir.utilities.json.JsonException; -import org.hl7.fhir.utilities.npm.CommonPackages; import org.hl7.fhir.utilities.settings.FhirSettings; import org.hl7.fhir.validation.cli.model.CliContext; -import org.hl7.fhir.validation.cli.services.ComparisonService; import org.hl7.fhir.validation.cli.services.ValidationService; import org.hl7.fhir.validation.cli.tasks.*; import org.hl7.fhir.validation.cli.utils.Display; -import org.hl7.fhir.validation.cli.utils.EngineMode; import org.hl7.fhir.validation.cli.utils.Params; -import org.hl7.fhir.validation.special.R4R5MapTester; -import org.hl7.fhir.validation.special.TxTester; -import org.hl7.fhir.validation.special.TxTester.InternalTxLoader; -import org.hl7.fhir.validation.testexecutor.TestExecutor; -import org.hl7.fhir.validation.testexecutor.TestExecutorParams; /** * A executable class that will validate one or more FHIR resources against @@ -131,7 +117,7 @@ public class ValidatorCli { protected List getCliTasks() { return List.of( - + new CompareTask(), new CompileTask(), new FhirpathTask(), new InstallTask(), @@ -141,6 +127,8 @@ public class ValidatorCli { new SnapshotTask(), new SpecialTask(), new SpreadsheetTask(), + new TestsTask(), + new TxTestsTask(), new TransformTask(), new VersionTask(), defaultCliTask); @@ -163,18 +151,13 @@ public class ValidatorCli { FileFormat.checkCharsetAndWarnIfNotUTF8(System.out); if (shouldDisplayHelpToUser(args)) { + String helpTarget = Params.getParam(args, Params.HELP); Display.displayHelpDetails("help.txt"); - } else if (Params.hasParam(args, Params.COMPARE)) { - if (destinationDirectoryValid(Params.getParam(args, Params.DESTINATION))) { - doLeftRightComparison(args, cliContext, tt); - } - } else if (Params.hasParam(args, Params.TEST) || Params.hasParam(args, Params.TX_TESTS)) { - parseTestParamsAndExecute(args); - } - else { - Display.printCliArgumentsAndInfo(args); - doValidation(tt, tts, cliContext, args); + return; } + + + readParamsAndExecuteTask(tt, tts, cliContext, args); } public static void main(String[] args) throws Exception { @@ -182,7 +165,7 @@ public class ValidatorCli { final CliContext cliContext = Params.loadCliContext(args); validatorCli.readParamsAndExecuteTask(cliContext, args); } - + private static void setJavaSystemProxyParamsFromParams(String[] args) { setJavaSystemProxyHostFromParams(args, Params.PROXY, HTTP_PROXY_HOST, HTTP_PROXY_PORT); @@ -232,31 +215,6 @@ public class ValidatorCli { } } - protected static void parseTestParamsAndExecute(String[] args) throws IOException, URISyntaxException { - if (Params.hasParam(args, Params.TX_TESTS)) { - final String source = Params.getParam(args, Params.SOURCE); - final String output = Params.getParam(args, Params.OUTPUT); - final String version = Params.getParam(args, Params.VERSION); - final String tx = Params.getParam(args, Params.TERMINOLOGY); - final String filter = Params.getParam(args, Params.FILTER); - boolean ok = new TxTester(new InternalTxLoader(source, output), tx).setOutput(output).execute(version, filter); - System.exit(ok ? 1 : 0); - } else { - final String testModuleParam = Params.getParam(args, Params.TEST_MODULES); - final String testClassnameFilter = Params.getParam(args, Params.TEST_NAME_FILTER); - final String testCasesDirectory = Params.getParam(args, Params.TEST); - final String txCacheDirectory = Params.getParam(args, Params.TERMINOLOGY_CACHE); - assert TestExecutorParams.isValidModuleParam(testModuleParam) : "Invalid test module param: " + testModuleParam; - final String[] moduleNamesArg = TestExecutorParams.parseModuleParam(testModuleParam); - - assert TestExecutorParams.isValidClassnameFilterParam(testClassnameFilter) : "Invalid regex for test classname filter: " + testClassnameFilter; - - new TestExecutor(moduleNamesArg).executeTests(testClassnameFilter, txCacheDirectory, testCasesDirectory); - - System.exit(0); - } - } - private static String[] addAdditionalParamsForIpsParam(String[] args) { // ips$branch --> -version 4.0 -ig hl7.fhir.uv.ips#current$connectathon-2 -profile http://hl7.org/fhir/uv/ips/StructureDefinition/Bundle-uv-ips List res = new ArrayList<>(); @@ -286,21 +244,9 @@ public class ValidatorCli { return r; } - private static boolean destinationDirectoryValid(String dest) { - if (dest == null) { - System.out.println("no -dest parameter provided"); - return false; - } else if (!new File(dest).isDirectory()) { - System.out.println("Specified destination (-dest parameter) is not valid: \"" + dest + "\")"); - return false; - } else { - System.out.println("Valid destination directory provided: \"" + dest + "\")"); - return true; - } - } + private static boolean shouldDisplayHelpToUser(String[] args) { - String helpTarget = Params.getParam(args, Params.HELP); return (args.length == 0 || Params.hasParam(args, Params.HELP) || Params.hasParam(args, "?") @@ -308,33 +254,16 @@ public class ValidatorCli { || Params.hasParam(args, "/?")); } - private static void doLeftRightComparison(String[] args, CliContext cliContext, TimeTracker tt) throws Exception { - Display.printCliArgumentsAndInfo(args); - if (cliContext.getSv() == null) { - cliContext.setSv(validationService.determineVersion(cliContext)); - } - String v = VersionUtilities.getCurrentVersion(cliContext.getSv()); - String definitions = VersionUtilities.packageForVersion(v) + "#" + v; - ValidationEngine validator = validationService.initializeValidator(cliContext, definitions, tt); - validator.loadPackage(CommonPackages.ID_PUBPACK, null); - ComparisonService.doLeftRightComparison(args, Params.getParam(args, Params.DESTINATION), validator); - } + private void readParamsAndExecuteTask(TimeTracker tt, TimeTracker.Session tts, CliContext cliContext, String[] params) throws Exception { + Display.printCliParamsAndInfo(params); - private void doValidation(TimeTracker tt, TimeTracker.Session tts, CliContext cliContext, String[] params) throws Exception { if (cliContext.getSv() == null) { cliContext.setSv(myValidationService.determineVersion(cliContext)); } - CliTask cliTask = null; - for(CliTask candidateTask : cliTasks) { - if (candidateTask.shouldExecuteTask(cliContext, params)) { - cliTask = candidateTask; - } - } - if (cliTask == null) - cliTask = defaultCliTask; + final CliTask cliTask = selectCliTask(cliContext, params); - if (cliTask instanceof ValidationServiceTask) { + if (cliTask instanceof ValidationServiceTask) { ValidationEngine validationEngine = getValidationEngine(tt, cliContext); tts.end(); ((ValidationServiceTask) cliTask).executeTask(myValidationService, validationEngine, cliContext, params, tt, tts); @@ -345,6 +274,18 @@ public class ValidatorCli { System.out.println("Done. " + tt.report()+". Max Memory = "+Utilities.describeSize(Runtime.getRuntime().maxMemory())); } + private CliTask selectCliTask(CliContext cliContext, String[] params) { + CliTask cliTask = null; + for(CliTask candidateTask : cliTasks) { + if (candidateTask.shouldExecuteTask(cliContext, params)) { + cliTask = candidateTask; + } + } + if (cliTask == null) + cliTask = defaultCliTask; + return cliTask; + } + private ValidationEngine getValidationEngine(TimeTracker tt, CliContext cliContext) throws Exception { ValidationEngine validationEngine; System.out.println(" Locale: "+Locale.getDefault().getDisplayCountry()+"/"+Locale.getDefault().getCountry()); diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CliTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CliTask.java index 2c8d22861..b3b8122f5 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CliTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CliTask.java @@ -9,9 +9,6 @@ import java.io.IOException; public abstract class CliTask { public abstract String getName(); - public final String getTaskParam() { - return "-" + getName(); - } public abstract boolean shouldExecuteTask(CliContext cliContext, String[] args); public abstract void printHelp(java.io.PrintStream out); diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompareTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompareTask.java new file mode 100644 index 000000000..dca2e41ee --- /dev/null +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompareTask.java @@ -0,0 +1,60 @@ +package org.hl7.fhir.validation.cli.tasks; + +import org.hl7.fhir.utilities.TimeTracker; +import org.hl7.fhir.utilities.VersionUtilities; +import org.hl7.fhir.utilities.npm.CommonPackages; +import org.hl7.fhir.validation.ValidationEngine; +import org.hl7.fhir.validation.cli.model.CliContext; +import org.hl7.fhir.validation.cli.services.ComparisonService; +import org.hl7.fhir.validation.cli.services.ValidationService; +import org.hl7.fhir.validation.cli.utils.Display; +import org.hl7.fhir.validation.cli.utils.Params; + +import java.io.File; +import java.io.PrintStream; + +public class CompareTask extends ValidationServiceTask{ + @Override + public String getName() { + return "compare"; + } + + @Override + public boolean shouldExecuteTask(CliContext cliContext, String[] args) { + return Params.hasParam(args, Params.COMPARE); + } + + @Override + public void printHelp(PrintStream out) { + + } + + @Override + public void executeTask(ValidationService validationService, ValidationEngine validationEngine, CliContext cliContext, String[] args, TimeTracker tt, TimeTracker.Session tts) throws Exception { + Display.printCliParamsAndInfo(args); + if (!destinationDirectoryValid(Params.getParam(args, Params.DESTINATION))) { + return; + } + if (cliContext.getSv() == null) { + cliContext.setSv(validationService.determineVersion(cliContext)); + } + String v = VersionUtilities.getCurrentVersion(cliContext.getSv()); + String definitions = VersionUtilities.packageForVersion(v) + "#" + v; + ValidationEngine validator = validationService.initializeValidator(cliContext, definitions, tt); + validator.loadPackage(CommonPackages.ID_PUBPACK, null); + ComparisonService.doLeftRightComparison(args, Params.getParam(args, Params.DESTINATION), validator); + } + + private boolean destinationDirectoryValid(String dest) { + if (dest == null) { + System.out.println("no -dest parameter provided"); + return false; + } else if (!new File(dest).isDirectory()) { + System.out.println("Specified destination (-dest parameter) is not valid: \"" + dest + "\")"); + return false; + } else { + System.out.println("Valid destination directory provided: \"" + dest + "\")"); + return true; + } + } +} diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TestsTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TestsTask.java new file mode 100644 index 000000000..240c60a82 --- /dev/null +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TestsTask.java @@ -0,0 +1,45 @@ +package org.hl7.fhir.validation.cli.tasks; + +import org.hl7.fhir.utilities.TimeTracker; +import org.hl7.fhir.validation.cli.model.CliContext; +import org.hl7.fhir.validation.cli.utils.Params; +import org.hl7.fhir.validation.special.R4R5MapTester; +import org.hl7.fhir.validation.special.TxTester; +import org.hl7.fhir.validation.testexecutor.TestExecutor; +import org.hl7.fhir.validation.testexecutor.TestExecutorParams; + +import java.io.File; +import java.io.PrintStream; + +public class TestsTask extends StandaloneTask{ + @Override + public String getName() { + return "tests"; + } + + @Override + public boolean shouldExecuteTask(CliContext cliContext, String[] args) { + return Params.hasParam(args, Params.TEST); + } + + @Override + public void printHelp(PrintStream out) { + + } + + @Override + public void executeTask(CliContext cliContext, String[] args, TimeTracker tt, TimeTracker.Session tts) throws Exception { + final String testModuleParam = Params.getParam(args, Params.TEST_MODULES); + final String testClassnameFilter = Params.getParam(args, Params.TEST_NAME_FILTER); + final String testCasesDirectory = Params.getParam(args, Params.TEST); + final String txCacheDirectory = Params.getParam(args, Params.TERMINOLOGY_CACHE); + assert TestExecutorParams.isValidModuleParam(testModuleParam) : "Invalid test module param: " + testModuleParam; + final String[] moduleNamesArg = TestExecutorParams.parseModuleParam(testModuleParam); + + assert TestExecutorParams.isValidClassnameFilterParam(testClassnameFilter) : "Invalid regex for test classname filter: " + testClassnameFilter; + + new TestExecutor(moduleNamesArg).executeTests(testClassnameFilter, txCacheDirectory, testCasesDirectory); + + System.exit(0); + } +} diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TxTestsTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TxTestsTask.java new file mode 100644 index 000000000..ac57cd8a0 --- /dev/null +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TxTestsTask.java @@ -0,0 +1,38 @@ +package org.hl7.fhir.validation.cli.tasks; + +import org.hl7.fhir.utilities.TimeTracker; +import org.hl7.fhir.validation.cli.model.CliContext; +import org.hl7.fhir.validation.cli.utils.Params; +import org.hl7.fhir.validation.special.TxTester; +import org.hl7.fhir.validation.testexecutor.TestExecutor; +import org.hl7.fhir.validation.testexecutor.TestExecutorParams; + +import java.io.PrintStream; + +public class TxTestsTask extends StandaloneTask{ + @Override + public String getName() { + return "txTests"; + } + + @Override + public boolean shouldExecuteTask(CliContext cliContext, String[] args) { + return Params.hasParam(args, Params.TX_TESTS); + } + + @Override + public void printHelp(PrintStream out) { + + } + + @Override + public void executeTask(CliContext cliContext, String[] args, TimeTracker tt, TimeTracker.Session tts) throws Exception { + final String source = Params.getParam(args, Params.SOURCE); + final String output = Params.getParam(args, Params.OUTPUT); + final String version = Params.getParam(args, Params.VERSION); + final String tx = Params.getParam(args, Params.TERMINOLOGY); + final String filter = Params.getParam(args, Params.FILTER); + boolean ok = new TxTester(new TxTester.InternalTxLoader(source, output), tx).setOutput(output).execute(version, filter); + System.exit(ok ? 1 : 0); + } +} diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/utils/Display.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/utils/Display.java index 42857323c..b64ecec3a 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/utils/Display.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/utils/Display.java @@ -19,7 +19,7 @@ public class Display { return Long.toString(maxMemory / (1024 * 1024)); } - public static void printCliArgumentsAndInfo(String[] args) throws IOException { + public static void printCliParamsAndInfo(String[] args) throws IOException { System.out.println(" Paths: Current = " + System.getProperty("user.dir") + ", Package Cache = " + new FilesystemPackageCacheManager(org.hl7.fhir.utilities.npm.FilesystemPackageCacheManager.FilesystemPackageCacheMode.USER).getFolder()); System.out.print(" Params:"); for (String s : args) { diff --git a/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/ValidatorCliTests.java b/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/ValidatorCliTests.java index dc7fffd20..da8b75e4d 100644 --- a/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/ValidatorCliTests.java +++ b/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/ValidatorCliTests.java @@ -1,13 +1,11 @@ package org.hl7.fhir.validation; -import org.apache.commons.compress.archivers.sevenz.CLI; import org.hl7.fhir.utilities.TimeTracker; import org.hl7.fhir.validation.cli.model.CliContext; import org.hl7.fhir.validation.cli.services.ValidationService; import org.hl7.fhir.validation.cli.tasks.*; import org.hl7.fhir.validation.cli.utils.Params; - import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; @@ -31,6 +29,9 @@ public class ValidatorCliTests { @Mock ValidationEngine validationEngine; + @Spy + CompareTask compareTask; + @Spy CompileTask compileTask; @@ -49,6 +50,18 @@ public class ValidatorCliTests { SnapshotTask snapshotTask; @Spy SpreadsheetTask spreadsheetTask; + + @Spy + TestsTask testsTask = new TestsTask() { + @Override + public void executeTask(CliContext cliContext, String[] args, TimeTracker tt, TimeTracker.Session tts) {} + }; + + @Spy + TxTestsTask txTestsTask = new TxTestsTask() { + @Override + public void executeTask(CliContext cliContext, String[] args, TimeTracker tt, TimeTracker.Session tts) {} + }; @Spy TransformTask transformTask; @@ -76,6 +89,7 @@ public class ValidatorCliTests { protected List getCliTasks() { return List.of( + compareTask, compileTask, fhirpathTask, installTask, @@ -85,6 +99,8 @@ public class ValidatorCliTests { snapshotTask, specialTask, spreadsheetTask, + testsTask, + txTestsTask, transformTask, versionTask, //validate is the default @@ -241,4 +257,34 @@ public class ValidatorCliTests { Mockito.verify(specialTask).executeTask(same(cliContext), eq(args), any(TimeTracker.class), any(TimeTracker.Session.class)); } + + @Test + public void compareTest() throws Exception { + final String[] args = new String[]{"-compare"}; + CliContext cliContext = Params.loadCliContext(args); + ValidatorCli cli = mockValidatorCliWithService(cliContext); + cli.readParamsAndExecuteTask(cliContext, args); + Mockito.verify(validationService).determineVersion(same(cliContext)); + Mockito.verify(compareTask).executeTask(same(validationService), same(validationEngine), same(cliContext), eq(args), any(TimeTracker.class), any(TimeTracker.Session.class)); + } + + @Test + public void txTestsTest() throws Exception { + final String[] args = new String[]{"-txTests"}; + CliContext cliContext = Params.loadCliContext(args); + ValidatorCli cli = mockValidatorCli(); + cli.readParamsAndExecuteTask(cliContext, args); + + Mockito.verify(txTestsTask).executeTask(same(cliContext), eq(args), any(TimeTracker.class), any(TimeTracker.Session.class)); + } + + @Test + public void testsTest() throws Exception { + final String[] args = new String[]{"-tests"}; + CliContext cliContext = Params.loadCliContext(args); + ValidatorCli cli = mockValidatorCli(); + cli.readParamsAndExecuteTask(cliContext, args); + + Mockito.verify(testsTask).executeTask(same(cliContext), eq(args), any(TimeTracker.class), any(TimeTracker.Session.class)); + } } From 8eb8787053f4b040ca79f7965ae2f60ac53bc121 Mon Sep 17 00:00:00 2001 From: dotasek Date: Mon, 5 Jun 2023 13:51:41 -0400 Subject: [PATCH 3/7] Fix missing convert task --- .../org/hl7/fhir/validation/ValidatorCli.java | 1 + .../validation/cli/tasks/ConvertTask.java | 33 +++++++++++++++++++ .../fhir/validation/ValidatorCliTests.java | 12 +++++++ 3 files changed, 46 insertions(+) create mode 100644 org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ConvertTask.java diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidatorCli.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidatorCli.java index 924a2bf5f..00289b0c8 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidatorCli.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidatorCli.java @@ -119,6 +119,7 @@ public class ValidatorCli { return List.of( new CompareTask(), new CompileTask(), + new ConvertTask(), new FhirpathTask(), new InstallTask(), new LangTransformTask(), diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ConvertTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ConvertTask.java new file mode 100644 index 000000000..dcee9e8b1 --- /dev/null +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ConvertTask.java @@ -0,0 +1,33 @@ +package org.hl7.fhir.validation.cli.tasks; + +import org.hl7.fhir.utilities.TimeTracker; +import org.hl7.fhir.validation.ValidationEngine; +import org.hl7.fhir.validation.cli.model.CliContext; +import org.hl7.fhir.validation.cli.services.ValidationService; +import org.hl7.fhir.validation.cli.utils.EngineMode; + +import java.io.PrintStream; + +public class ConvertTask extends ValidationServiceTask { + + @Override + public String getName() { + return "convert"; + } + + @Override + public boolean shouldExecuteTask(CliContext cliContext, String[] args) { + return cliContext.getMode() == EngineMode.CONVERT; + } + + @Override + public void printHelp(PrintStream out) { + + } + + @Override + public void executeTask(ValidationService validationService, ValidationEngine validationEngine, CliContext cliContext, String[] args, TimeTracker tt, TimeTracker.Session tts) throws Exception { + validationService.convertSources(cliContext, validationEngine); + } + +} diff --git a/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/ValidatorCliTests.java b/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/ValidatorCliTests.java index da8b75e4d..b5747140d 100644 --- a/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/ValidatorCliTests.java +++ b/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/ValidatorCliTests.java @@ -29,6 +29,8 @@ public class ValidatorCliTests { @Mock ValidationEngine validationEngine; + @Spy + ConvertTask convertTask; @Spy CompareTask compareTask; @@ -91,6 +93,7 @@ public class ValidatorCliTests { return List.of( compareTask, compileTask, + convertTask, fhirpathTask, installTask, langTransformTask, @@ -168,6 +171,15 @@ public class ValidatorCliTests { Mockito.verify(validationService).compile(same(cliContext), same(validationEngine)); } + @Test + public void convertTest() throws Exception { + final String[] args = new String[]{"-convert"}; + CliContext cliContext = Params.loadCliContext(args); + ValidatorCli cli = mockValidatorCliWithService(cliContext); + cli.readParamsAndExecuteTask(cliContext, args); + Mockito.verify(validationService).determineVersion(same(cliContext)); + Mockito.verify(validationService).convertSources(cliContext,validationEngine); + } @Test public void snapshotTest() throws Exception { final String[] args = new String[]{"-snapshot"}; From 88883fc5d8aee003c962d549a6eb74210251e147 Mon Sep 17 00:00:00 2001 From: dotasek Date: Mon, 5 Jun 2023 14:30:54 -0400 Subject: [PATCH 4/7] Start implementing help options --- .../org/hl7/fhir/validation/cli/tasks/CliTask.java | 4 ++++ .../org/hl7/fhir/validation/cli/tasks/CompareTask.java | 10 ++++++++++ .../org/hl7/fhir/validation/cli/tasks/CompileTask.java | 10 ++++++++++ .../org/hl7/fhir/validation/cli/tasks/ConvertTask.java | 10 ++++++++++ .../hl7/fhir/validation/cli/tasks/FhirpathTask.java | 10 ++++++++++ .../org/hl7/fhir/validation/cli/tasks/InstallTask.java | 10 ++++++++++ .../fhir/validation/cli/tasks/LangTransformTask.java | 10 ++++++++++ .../hl7/fhir/validation/cli/tasks/NarrativeTask.java | 10 ++++++++++ .../org/hl7/fhir/validation/cli/tasks/ScanTask.java | 10 ++++++++++ .../hl7/fhir/validation/cli/tasks/SnapshotTask.java | 10 ++++++++++ .../org/hl7/fhir/validation/cli/tasks/SpecialTask.java | 10 ++++++++++ .../hl7/fhir/validation/cli/tasks/SpreadsheetTask.java | 10 ++++++++++ .../org/hl7/fhir/validation/cli/tasks/TestsTask.java | 10 ++++++++++ .../hl7/fhir/validation/cli/tasks/TransformTask.java | 10 ++++++++++ .../org/hl7/fhir/validation/cli/tasks/TxTestsTask.java | 10 ++++++++++ .../hl7/fhir/validation/cli/tasks/ValidateTask.java | 10 ++++++++++ .../org/hl7/fhir/validation/cli/tasks/VersionTask.java | 10 ++++++++++ 17 files changed, 164 insertions(+) diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CliTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CliTask.java index b3b8122f5..92e9ba3aa 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CliTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CliTask.java @@ -9,6 +9,10 @@ import java.io.IOException; public abstract class CliTask { public abstract String getName(); + + public abstract String getDisplayName(); + + public abstract boolean isHidden(); public abstract boolean shouldExecuteTask(CliContext cliContext, String[] args); public abstract void printHelp(java.io.PrintStream out); diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompareTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompareTask.java index dca2e41ee..e6aa069a7 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompareTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompareTask.java @@ -19,6 +19,16 @@ public class CompareTask extends ValidationServiceTask{ return "compare"; } + @Override + public String getDisplayName() { + return "Comparing Profiles"; + } + + @Override + public boolean isHidden() { + return false; + } + @Override public boolean shouldExecuteTask(CliContext cliContext, String[] args) { return Params.hasParam(args, Params.COMPARE); diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompileTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompileTask.java index 82b8f7468..017994ba5 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompileTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompileTask.java @@ -16,6 +16,16 @@ public class CompileTask extends ValidationServiceTask { return "compile"; } + @Override + public String getDisplayName() { + return "Compile"; + } + + @Override + public boolean isHidden() { + return true; + } + @Override public boolean shouldExecuteTask(CliContext cliContext, String[] args) { return cliContext.getMode() == EngineMode.COMPILE; diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ConvertTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ConvertTask.java index dcee9e8b1..88894eb51 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ConvertTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ConvertTask.java @@ -15,6 +15,16 @@ public class ConvertTask extends ValidationServiceTask { return "convert"; } + @Override + public String getDisplayName() { + return "Conversion"; + } + + @Override + public boolean isHidden() { + return false; + } + @Override public boolean shouldExecuteTask(CliContext cliContext, String[] args) { return cliContext.getMode() == EngineMode.CONVERT; diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/FhirpathTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/FhirpathTask.java index e60579027..4de364296 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/FhirpathTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/FhirpathTask.java @@ -15,6 +15,16 @@ public class FhirpathTask extends ValidationServiceTask { return "fhirpath"; } + @Override + public String getDisplayName() { + return "FHIRPath"; + } + + @Override + public boolean isHidden() { + return false; + } + @Override public boolean shouldExecuteTask(CliContext cliContext, String[] args) { return cliContext.getMode() == EngineMode.FHIRPATH; diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/InstallTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/InstallTask.java index 9a770ef2d..3572dc985 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/InstallTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/InstallTask.java @@ -15,6 +15,16 @@ public class InstallTask extends ValidationServiceTask { return "install"; } + @Override + public String getDisplayName() { + return "Install"; + } + + @Override + public boolean isHidden() { + return true; + } + @Override public boolean shouldExecuteTask(CliContext cliContext, String[] args) { return cliContext.getMode() == EngineMode.INSTALL; diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/LangTransformTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/LangTransformTask.java index 391059dbc..df15d61ea 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/LangTransformTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/LangTransformTask.java @@ -15,6 +15,16 @@ public class LangTransformTask extends ValidationServiceTask { return "lang-transform"; } + @Override + public String getDisplayName() { + return "Lang Transform"; + } + + @Override + public boolean isHidden() { + return true; + } + @Override public boolean shouldExecuteTask(CliContext cliContext, String[] args) { return cliContext.getMode() == EngineMode.LANG_TRANSFORM; diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/NarrativeTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/NarrativeTask.java index fe76a9729..602391b5e 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/NarrativeTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/NarrativeTask.java @@ -15,6 +15,16 @@ public class NarrativeTask extends ValidationServiceTask { return "narrative"; } + @Override + public String getDisplayName() { + return "Narratives"; + } + + @Override + public boolean isHidden() { + return false; + } + @Override public boolean shouldExecuteTask(CliContext cliContext, String[] args) { return cliContext.getMode() == EngineMode.NARRATIVE; diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ScanTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ScanTask.java index f7b960699..ab7d2a67d 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ScanTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ScanTask.java @@ -17,6 +17,16 @@ public class ScanTask extends ValidationServiceTask { return "scan"; } + @Override + public String getDisplayName() { + return "Scan"; + } + + @Override + public boolean isHidden() { + return true; + } + @Override public boolean shouldExecuteTask(CliContext cliContext, String[] args) { return cliContext.getMode() == EngineMode.SCAN; diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SnapshotTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SnapshotTask.java index 810f75af3..88c543b96 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SnapshotTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SnapshotTask.java @@ -15,6 +15,16 @@ public class SnapshotTask extends ValidationServiceTask { return "snapshot"; } + @Override + public String getDisplayName() { + return "Snapshots"; + } + + @Override + public boolean isHidden() { + return false; + } + @Override public boolean shouldExecuteTask(CliContext cliContext, String[] args) { return cliContext.getMode() == EngineMode.SNAPSHOT; diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SpecialTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SpecialTask.java index 4091ba859..24b086867 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SpecialTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SpecialTask.java @@ -14,6 +14,16 @@ public class SpecialTask extends StandaloneTask{ return "special"; } + @Override + public String getDisplayName() { + return "Special"; + } + + @Override + public boolean isHidden() { + return true; + } + @Override public boolean shouldExecuteTask(CliContext cliContext, String[] args) { return Params.hasParam(args, Params.SPECIAL); diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SpreadsheetTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SpreadsheetTask.java index 533a5559b..cbf65f99a 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SpreadsheetTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SpreadsheetTask.java @@ -15,6 +15,16 @@ public class SpreadsheetTask extends ValidationServiceTask { return "spreadsheet"; } + @Override + public String getDisplayName() { + return "Spreadsheet"; + } + + @Override + public boolean isHidden() { + return true; + } + @Override public boolean shouldExecuteTask(CliContext cliContext, String[] args) { return cliContext.getMode() == EngineMode.SPREADSHEET; diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TestsTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TestsTask.java index 240c60a82..b2e44aac4 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TestsTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TestsTask.java @@ -17,6 +17,16 @@ public class TestsTask extends StandaloneTask{ return "tests"; } + @Override + public String getDisplayName() { + return "Tests"; + } + + @Override + public boolean isHidden() { + return false; + } + @Override public boolean shouldExecuteTask(CliContext cliContext, String[] args) { return Params.hasParam(args, Params.TEST); diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TransformTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TransformTask.java index 78ec5a091..4adbd0a52 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TransformTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TransformTask.java @@ -15,6 +15,16 @@ public class TransformTask extends ValidationServiceTask { return "transform"; } + @Override + public String getDisplayName() { + return "Transforms"; + } + + @Override + public boolean isHidden() { + return false; + } + @Override public boolean shouldExecuteTask(CliContext cliContext, String[] args) { return cliContext.getMode() == EngineMode.TRANSFORM; diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TxTestsTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TxTestsTask.java index ac57cd8a0..1d6b9c512 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TxTestsTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TxTestsTask.java @@ -15,6 +15,16 @@ public class TxTestsTask extends StandaloneTask{ return "txTests"; } + @Override + public String getDisplayName() { + return "Terminology Tests"; + } + + @Override + public boolean isHidden() { + return true; + } + @Override public boolean shouldExecuteTask(CliContext cliContext, String[] args) { return Params.hasParam(args, Params.TX_TESTS); diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidateTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidateTask.java index 3c2d165b8..727a1a351 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidateTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidateTask.java @@ -16,6 +16,16 @@ public class ValidateTask extends ValidationServiceTask { return "validate"; } + @Override + public String getDisplayName() { + return "Validation"; + } + + @Override + public boolean isHidden() { + return false; + } + @Override public boolean shouldExecuteTask(CliContext cliContext, String[] args) { // There is no explicit way to trigger a validation task. diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/VersionTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/VersionTask.java index aae1bfcc8..394d4b56c 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/VersionTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/VersionTask.java @@ -15,6 +15,16 @@ public class VersionTask extends ValidationServiceTask { return "to-version"; } + @Override + public String getDisplayName() { + return "Version Conversion"; + } + + @Override + public boolean isHidden() { + return false; + } + @Override public boolean shouldExecuteTask(CliContext cliContext, String[] args) { return cliContext.getMode() == EngineMode.VERSION; From 19d557788c45bb2482e6b7e5b3431bc2b9079407 Mon Sep 17 00:00:00 2001 From: dotasek Date: Mon, 5 Jun 2023 16:39:45 -0400 Subject: [PATCH 5/7] Add help text for each visible task --- .../org/hl7/fhir/validation/ValidatorCli.java | 57 +++++++-- .../validation/cli/tasks/CompareTask.java | 2 +- .../validation/cli/tasks/ConvertTask.java | 3 +- .../validation/cli/tasks/FhirpathTask.java | 3 +- .../validation/cli/tasks/NarrativeTask.java | 3 +- .../validation/cli/tasks/SnapshotTask.java | 3 +- .../fhir/validation/cli/tasks/TestsTask.java | 3 +- .../validation/cli/tasks/TransformTask.java | 3 +- .../validation/cli/tasks/ValidateTask.java | 8 +- .../validation/cli/tasks/VersionTask.java | 3 +- .../fhir/validation/cli/utils/Display.java | 25 ++-- .../testexecutor/TestExecutorParams.java | 5 +- .../src/main/resources/help/compare.txt | 13 ++ .../src/main/resources/help/convert.txt | 13 ++ .../src/main/resources/help/fhirpath.txt | 9 ++ .../src/main/resources/{ => help}/help.txt | 0 .../src/main/resources/help/narrative.txt | 7 ++ .../src/main/resources/help/snapshot.txt | 16 +++ .../src/main/resources/help/tests.txt | 24 ++++ .../src/main/resources/help/transform.txt | 11 ++ .../src/main/resources/help/validate.txt | 114 ++++++++++++++++++ .../src/main/resources/help/version.txt | 12 ++ .../validation/cli/utils/DisplayTests.java | 25 ++-- 23 files changed, 316 insertions(+), 46 deletions(-) create mode 100644 org.hl7.fhir.validation/src/main/resources/help/compare.txt create mode 100644 org.hl7.fhir.validation/src/main/resources/help/convert.txt create mode 100644 org.hl7.fhir.validation/src/main/resources/help/fhirpath.txt rename org.hl7.fhir.validation/src/main/resources/{ => help}/help.txt (100%) create mode 100644 org.hl7.fhir.validation/src/main/resources/help/narrative.txt create mode 100644 org.hl7.fhir.validation/src/main/resources/help/snapshot.txt create mode 100644 org.hl7.fhir.validation/src/main/resources/help/tests.txt create mode 100644 org.hl7.fhir.validation/src/main/resources/help/transform.txt create mode 100644 org.hl7.fhir.validation/src/main/resources/help/validate.txt create mode 100644 org.hl7.fhir.validation/src/main/resources/help/version.txt diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidatorCli.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidatorCli.java index 00289b0c8..8c05cdb1a 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidatorCli.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidatorCli.java @@ -64,6 +64,7 @@ POSSIBILITY OF SUCH DAMAGE. */ +import org.apache.commons.text.WordUtils; import org.hl7.fhir.r5.terminologies.JurisdictionUtilities; import org.hl7.fhir.utilities.FileFormat; import org.hl7.fhir.utilities.TimeTracker; @@ -142,8 +143,8 @@ public class ValidatorCli { args = addAdditionalParamsForIpsParam(args); setJavaSystemProxyParamsFromParams(args); - Display.displayVersion(); - Display.displaySystemInfo(); + Display.displayVersion(System.out); + Display.displaySystemInfo(System.out); if (cliContext.getFhirSettingsFile() != null) { FhirSettings.setExplicitFilePath(cliContext.getFhirSettingsFile()); @@ -152,15 +153,49 @@ public class ValidatorCli { FileFormat.checkCharsetAndWarnIfNotUTF8(System.out); if (shouldDisplayHelpToUser(args)) { - String helpTarget = Params.getParam(args, Params.HELP); - Display.displayHelpDetails("help.txt"); - return; + String helpTarget = Params.getParam(args, "-" + Params.HELP); + if (helpTarget != null) { + cliTasks.stream() + .filter(task -> helpTarget.equals(task.getName())) + .findFirst() + .ifPresent(cliTask -> { + displayHelpForTask(cliTask); + }); + } else { + displayHelpForDefaultTask(); + }return; } - readParamsAndExecuteTask(tt, tts, cliContext, args); } + private void displayHelpForDefaultTask() { + System.out.println(); + System.out.println(WordUtils.wrap("This is the help text for default usage of the validator. Help for other modes of operation is available by using the parameter '-help [mode]' for one of the following modes:", 80)); + System.out.println(); + for (CliTask cliTask : cliTasks) { + if (!cliTask.isHidden()) { + System.out.println(" " + cliTask.getName()); + } + } + System.out.println(); + System.out.println(defaultCliTask.getDisplayName() + " (default usage)"); + System.out.println("=".repeat(defaultCliTask.getDisplayName().length())); + System.out.println(); + defaultCliTask.printHelp(System.out); + } + + private void displayHelpForTask(CliTask cliTask) { + System.out.println(); + + System.out.println("This is the help text for '" + cliTask.getName() + "'. To display all available help options, use the '-help' or 'help' parameter."); + System.out.println(); + System.out.println(cliTask.getDisplayName()); + System.out.println("=".repeat(cliTask.getDisplayName().length())); + System.out.println(); + cliTask.printHelp(System.out); + } + public static void main(String[] args) throws Exception { final ValidatorCli validatorCli = new ValidatorCli(validationService); final CliContext cliContext = Params.loadCliContext(args); @@ -247,9 +282,10 @@ public class ValidatorCli { - private static boolean shouldDisplayHelpToUser(String[] args) { + private boolean shouldDisplayHelpToUser(String[] args) { return (args.length == 0 || Params.hasParam(args, Params.HELP) + || Params.hasParam(args, "-" + Params.HELP) || Params.hasParam(args, "?") || Params.hasParam(args, "-?") || Params.hasParam(args, "/?")); @@ -258,13 +294,14 @@ public class ValidatorCli { private void readParamsAndExecuteTask(TimeTracker tt, TimeTracker.Session tts, CliContext cliContext, String[] params) throws Exception { Display.printCliParamsAndInfo(params); - if (cliContext.getSv() == null) { - cliContext.setSv(myValidationService.determineVersion(cliContext)); - } + final CliTask cliTask = selectCliTask(cliContext, params); if (cliTask instanceof ValidationServiceTask) { + if (cliContext.getSv() == null) { + cliContext.setSv(myValidationService.determineVersion(cliContext)); + } ValidationEngine validationEngine = getValidationEngine(tt, cliContext); tts.end(); ((ValidationServiceTask) cliTask).executeTask(myValidationService, validationEngine, cliContext, params, tt, tts); diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompareTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompareTask.java index e6aa069a7..a8ca7c4bc 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompareTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompareTask.java @@ -36,7 +36,7 @@ public class CompareTask extends ValidationServiceTask{ @Override public void printHelp(PrintStream out) { - + Display.displayHelpDetails(out,"help/compare.txt"); } @Override diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ConvertTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ConvertTask.java index 88894eb51..bd185f048 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ConvertTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ConvertTask.java @@ -4,6 +4,7 @@ import org.hl7.fhir.utilities.TimeTracker; import org.hl7.fhir.validation.ValidationEngine; import org.hl7.fhir.validation.cli.model.CliContext; import org.hl7.fhir.validation.cli.services.ValidationService; +import org.hl7.fhir.validation.cli.utils.Display; import org.hl7.fhir.validation.cli.utils.EngineMode; import java.io.PrintStream; @@ -32,7 +33,7 @@ public class ConvertTask extends ValidationServiceTask { @Override public void printHelp(PrintStream out) { - + Display.displayHelpDetails(out,"help/convert.txt"); } @Override diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/FhirpathTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/FhirpathTask.java index 4de364296..856eaf399 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/FhirpathTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/FhirpathTask.java @@ -4,6 +4,7 @@ import org.hl7.fhir.utilities.TimeTracker; import org.hl7.fhir.validation.ValidationEngine; import org.hl7.fhir.validation.cli.model.CliContext; import org.hl7.fhir.validation.cli.services.ValidationService; +import org.hl7.fhir.validation.cli.utils.Display; import org.hl7.fhir.validation.cli.utils.EngineMode; import java.io.PrintStream; @@ -32,7 +33,7 @@ public class FhirpathTask extends ValidationServiceTask { @Override public void printHelp(PrintStream out) { - + Display.displayHelpDetails(out,"help/fhirpath.txt"); } @Override diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/NarrativeTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/NarrativeTask.java index 602391b5e..1ff7e590e 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/NarrativeTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/NarrativeTask.java @@ -4,6 +4,7 @@ import org.hl7.fhir.utilities.TimeTracker; import org.hl7.fhir.validation.ValidationEngine; import org.hl7.fhir.validation.cli.model.CliContext; import org.hl7.fhir.validation.cli.services.ValidationService; +import org.hl7.fhir.validation.cli.utils.Display; import org.hl7.fhir.validation.cli.utils.EngineMode; import java.io.PrintStream; @@ -32,7 +33,7 @@ public class NarrativeTask extends ValidationServiceTask { @Override public void printHelp(PrintStream out) { - + Display.displayHelpDetails(out,"help/narrative.txt"); } @Override diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SnapshotTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SnapshotTask.java index 88c543b96..99187ba1b 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SnapshotTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SnapshotTask.java @@ -4,6 +4,7 @@ import org.hl7.fhir.utilities.TimeTracker; import org.hl7.fhir.validation.ValidationEngine; import org.hl7.fhir.validation.cli.model.CliContext; import org.hl7.fhir.validation.cli.services.ValidationService; +import org.hl7.fhir.validation.cli.utils.Display; import org.hl7.fhir.validation.cli.utils.EngineMode; import java.io.PrintStream; @@ -32,7 +33,7 @@ public class SnapshotTask extends ValidationServiceTask { @Override public void printHelp(PrintStream out) { - + Display.displayHelpDetails(out,"help/snapshot.txt"); } @Override diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TestsTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TestsTask.java index b2e44aac4..548c43dca 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TestsTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TestsTask.java @@ -2,6 +2,7 @@ package org.hl7.fhir.validation.cli.tasks; import org.hl7.fhir.utilities.TimeTracker; import org.hl7.fhir.validation.cli.model.CliContext; +import org.hl7.fhir.validation.cli.utils.Display; import org.hl7.fhir.validation.cli.utils.Params; import org.hl7.fhir.validation.special.R4R5MapTester; import org.hl7.fhir.validation.special.TxTester; @@ -34,7 +35,7 @@ public class TestsTask extends StandaloneTask{ @Override public void printHelp(PrintStream out) { - + Display.displayHelpDetails(out,"help/tests.txt"); } @Override diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TransformTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TransformTask.java index 4adbd0a52..db71ada2c 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TransformTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TransformTask.java @@ -4,6 +4,7 @@ import org.hl7.fhir.utilities.TimeTracker; import org.hl7.fhir.validation.ValidationEngine; import org.hl7.fhir.validation.cli.model.CliContext; import org.hl7.fhir.validation.cli.services.ValidationService; +import org.hl7.fhir.validation.cli.utils.Display; import org.hl7.fhir.validation.cli.utils.EngineMode; import java.io.PrintStream; @@ -32,7 +33,7 @@ public class TransformTask extends ValidationServiceTask { @Override public void printHelp(PrintStream out) { - + Display.displayHelpDetails(out,"help/transform.txt"); } @Override diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidateTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidateTask.java index 727a1a351..f304d4af4 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidateTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidateTask.java @@ -1,16 +1,22 @@ package org.hl7.fhir.validation.cli.tasks; +import org.hl7.fhir.r5.model.Constants; import org.hl7.fhir.r5.model.ImplementationGuide; import org.hl7.fhir.r5.model.StructureDefinition; import org.hl7.fhir.utilities.TimeTracker; import org.hl7.fhir.validation.ValidationEngine; import org.hl7.fhir.validation.cli.model.CliContext; import org.hl7.fhir.validation.cli.services.ValidationService; +import org.hl7.fhir.validation.cli.utils.Display; import java.io.PrintStream; public class ValidateTask extends ValidationServiceTask { + final static String[][] PLACEHOLDERS = { + { "XML_AND_JSON_FHIR_VERSIONS", "1.0, 1.4, 3.0, 4.0, " + Constants.VERSION_MM }, + { "TURTLE_FHIR_VERSIONS", "3.0, 4.0, " + Constants.VERSION_MM }, + }; @Override public String getName() { return "validate"; @@ -35,7 +41,7 @@ public class ValidateTask extends ValidationServiceTask { @Override public void printHelp(PrintStream out) { - + Display.displayHelpDetails(out,"help/validate.txt", PLACEHOLDERS); } @Override diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/VersionTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/VersionTask.java index 394d4b56c..e83a6c501 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/VersionTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/VersionTask.java @@ -4,6 +4,7 @@ import org.hl7.fhir.utilities.TimeTracker; import org.hl7.fhir.validation.ValidationEngine; import org.hl7.fhir.validation.cli.model.CliContext; import org.hl7.fhir.validation.cli.services.ValidationService; +import org.hl7.fhir.validation.cli.utils.Display; import org.hl7.fhir.validation.cli.utils.EngineMode; import java.io.PrintStream; @@ -32,7 +33,7 @@ public class VersionTask extends ValidationServiceTask { @Override public void printHelp(PrintStream out) { - + Display.displayHelpDetails(out,"help/version.txt"); } @Override diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/utils/Display.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/utils/Display.java index b64ecec3a..16d2c97b1 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/utils/Display.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/utils/Display.java @@ -2,6 +2,7 @@ package org.hl7.fhir.validation.cli.utils; import java.io.IOException; import java.io.InputStream; +import java.io.PrintStream; import org.apache.commons.io.IOUtils; import org.hl7.fhir.r5.model.Constants; @@ -35,30 +36,30 @@ public class Display { return CURLY_START + string + CURLY_END; } - final static String[][] PLACEHOLDERS = { - { getMoustacheString("XML_AND_JSON_FHIR_VERSIONS"), "1.0, 1.4, 3.0, 4.0," + Constants.VERSION_MM }, - { getMoustacheString("TURTLE_FHIR_VERSIONS"), "3.0, 4.0, " + Constants.VERSION_MM }, - }; + final static String replacePlaceholders(final String input, final String[][] placeholders) { String output = input; for (String[] placeholder : placeholders) { - output = output.replaceAll(placeholder[0], placeholder[1]); + output = output.replaceAll(getMoustacheString(placeholder[0]), placeholder[1]); } return output; } + public static void displayHelpDetails(PrintStream out, String file) { + displayHelpDetails(out, file, new String[][]{}); + } /** - * Loads the help details from resources/help.txt, and displays them on the command line to the user. + * Loads the help details from a file, and displays them on the out stream. * @param file */ - public static void displayHelpDetails(String file) { + public static void displayHelpDetails(PrintStream out, String file, final String[][] placeholders) { ClassLoader classLoader = Display.class.getClassLoader(); InputStream help = classLoader.getResourceAsStream(file); try { String data = IOUtils.toString(help, "UTF-8"); - System.out.println(replacePlaceholders(data, PLACEHOLDERS)); + out.println(replacePlaceholders(data, placeholders)); } catch (IOException e) { e.printStackTrace(); } @@ -69,8 +70,8 @@ public class Display { /** * Prints out system info to the command line. */ - public static void displaySystemInfo() { - System.out.println(" Java: " + System.getProperty("java.version") + public static void displaySystemInfo(PrintStream out) { + out.println(" Java: " + System.getProperty("java.version") + " from " + System.getProperty("java.home") + " on " + System.getProperty("os.arch") + " (" + System.getProperty("sun.arch.data.model") + "bit). " @@ -80,7 +81,7 @@ public class Display { /** * Prints current version of the validator. */ - public static void displayVersion() { - System.out.println("FHIR Validation tool " + VersionUtil.getVersionString()); + public static void displayVersion(PrintStream out) { + out.println("FHIR Validation tool " + VersionUtil.getVersionString()); } } \ No newline at end of file diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/testexecutor/TestExecutorParams.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/testexecutor/TestExecutorParams.java index 56d8123b3..e20d0012b 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/testexecutor/TestExecutorParams.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/testexecutor/TestExecutorParams.java @@ -30,11 +30,12 @@ public class TestExecutorParams { } public static boolean isValidClassnameFilterParam(String param) { + if (param == null) return true; try { Pattern.compile(param); - return true; + return true; } catch (PatternSyntaxException e) { - return false; + return false; } } } diff --git a/org.hl7.fhir.validation/src/main/resources/help/compare.txt b/org.hl7.fhir.validation/src/main/resources/help/compare.txt new file mode 100644 index 000000000..84bae610a --- /dev/null +++ b/org.hl7.fhir.validation/src/main/resources/help/compare.txt @@ -0,0 +1,13 @@ +The validator can compare profiles. To compare profiles, use the following parameters: + +java -jar validator_cli.jar -compare -dest /home/user/work/ig-comparison -version 4.0 + -ig hl7.fhir.us.carin-bb#1.1.0 -ig hl7.fhir.us.davinci-crd#1.0.0 + -left http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-Patient -right http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-patient + +Parameters: + +-compare: tell the validator to run the comparison logic +-dest: folder in which to produce the output. This must exist, and the validator will overwrite existing content if it needs to. The output isn't simple - see below +-version Maj.Min - the version to use. You can leave this out and let the validator infer this, but it's there so that you can compare profiles across versions. E.g. if you specify -version 4.0, the profiles will both be treated as R4 profiles, even if they aren't +-ig - a repeating parameter that specifies the packages to load, that contain the profiles you want to compare +-left and -right - the two profiles to compare. There's no functional difference between left and right, except that the comparison will keep to left and right consistently \ No newline at end of file diff --git a/org.hl7.fhir.validation/src/main/resources/help/convert.txt b/org.hl7.fhir.validation/src/main/resources/help/convert.txt new file mode 100644 index 000000000..9b2075a3e --- /dev/null +++ b/org.hl7.fhir.validation/src/main/resources/help/convert.txt @@ -0,0 +1,13 @@ +You can use the validator to convert a resource or logical model. To do this, +you must provide a specific parameter: + + -convert + +-convert requires the parameters -source and one of {-output, -outputSuffix}. +-ig may be used to provide a logical model. + +If the -source maps to one or more resources, e.g. when using a wildcard, +use -outputSuffix , to obtain multiple result files with a +`.` filename. +Example: `-source *.xml -convert -outputSuffix convert.json` outputs: +`source1.xml.convert.json`, `source2.xml.convert.json`, etc. . \ No newline at end of file diff --git a/org.hl7.fhir.validation/src/main/resources/help/fhirpath.txt b/org.hl7.fhir.validation/src/main/resources/help/fhirpath.txt new file mode 100644 index 000000000..8f723dc5f --- /dev/null +++ b/org.hl7.fhir.validation/src/main/resources/help/fhirpath.txt @@ -0,0 +1,9 @@ +You can use the validator to evaluate a FHIRPath expression on a resource or +logical model. To do this, you must provide a specific parameter: + + -fhirpath [FHIRPath] + +* [FHIRPath] the FHIRPath expression to evaluate + +-fhirpath requires the parameters -source. ig may be used to provide a logical +model \ No newline at end of file diff --git a/org.hl7.fhir.validation/src/main/resources/help.txt b/org.hl7.fhir.validation/src/main/resources/help/help.txt similarity index 100% rename from org.hl7.fhir.validation/src/main/resources/help.txt rename to org.hl7.fhir.validation/src/main/resources/help/help.txt diff --git a/org.hl7.fhir.validation/src/main/resources/help/narrative.txt b/org.hl7.fhir.validation/src/main/resources/help/narrative.txt new file mode 100644 index 000000000..a15e3ffed --- /dev/null +++ b/org.hl7.fhir.validation/src/main/resources/help/narrative.txt @@ -0,0 +1,7 @@ +You can use the validator to generate narrative for a resource. To do this, you +must provide a specific parameter: + + -narrative + +-narrative requires the parameters -defn, -txserver, -source, and -output. ig +and profile may be used \ No newline at end of file diff --git a/org.hl7.fhir.validation/src/main/resources/help/snapshot.txt b/org.hl7.fhir.validation/src/main/resources/help/snapshot.txt new file mode 100644 index 000000000..5186351fb --- /dev/null +++ b/org.hl7.fhir.validation/src/main/resources/help/snapshot.txt @@ -0,0 +1,16 @@ +You can use the validator to generate a snapshot for a profile. To do this, you +must provide a specific parameter: + + -snapshot + +-snapshot requires the parameters -defn, -txserver, -source, and +one of {-output, -outputSuffix}. +-ig may be used to provide necessary base profiles. + +The -output/-outputSuffic filetype (xml, json) may imply a conversion. + +If the -source maps to one or more profiles, e.g. when using a wildcard, +use -outputSuffix , to obtain multiple result files with a +`.` filename. +Example: `-source *.xml -snapshot -outputSuffix snapshot.json` outputs: +`source1.xml.snapshot.json`, `source2.xml.snapshot.json`, etc. . \ No newline at end of file diff --git a/org.hl7.fhir.validation/src/main/resources/help/tests.txt b/org.hl7.fhir.validation/src/main/resources/help/tests.txt new file mode 100644 index 000000000..d04ebe21a --- /dev/null +++ b/org.hl7.fhir.validation/src/main/resources/help/tests.txt @@ -0,0 +1,24 @@ +The validator can be run in test mode, which executes all JUnit tests for the +FHIR core library against a set of test cases in a local directory. To do this, +you must provide a specific parameter with a directory value: + + -test [directory] + +The directory must follow the same conventions as the reference test cases found +at https://github.com/FHIR/fhir-test-cases. This mode must also be executed with +the Java property java.locale.providers set to COMPAT as below: + + java -Djava.locale.providers=COMPAT -jar validator_cli.jar -tests + ./my/path/to/fhir-test-cases + +This parameter is compatible with -txCache, -test-modules, and +-test-classname-filter parameters. + +The following test-specific parameters can be used to limit which tests are run: +-test-modules [module-names] A comma delimited list of Java module names for + which to run JUnit tests. By default, all modules are used to run tests. + Example: -test-modules org.hl7.fhir.dstu2,org.hl7.fhir.dstu2016may + +-test-classname-filter [regex] A regex filter applied to test Java class names + for selecting which JUnit tests to run. By default, all tests are run. + Example: -test-classname-filter .*ShexGeneratorTests \ No newline at end of file diff --git a/org.hl7.fhir.validation/src/main/resources/help/transform.txt b/org.hl7.fhir.validation/src/main/resources/help/transform.txt new file mode 100644 index 000000000..eb3f7367b --- /dev/null +++ b/org.hl7.fhir.validation/src/main/resources/help/transform.txt @@ -0,0 +1,11 @@ +You can use the validator to execute a transformation as described by a +structure map. To do this, you must provide some additional parameters: + + -transform [map] + +* [map] the URI of the map that the transform starts with + +Any other dependency maps have to be loaded through an -ig reference + +-transform uses the parameters -defn, -txserver, -ig (at least one with the map +files), and -output diff --git a/org.hl7.fhir.validation/src/main/resources/help/validate.txt b/org.hl7.fhir.validation/src/main/resources/help/validate.txt new file mode 100644 index 000000000..fea863e23 --- /dev/null +++ b/org.hl7.fhir.validation/src/main/resources/help/validate.txt @@ -0,0 +1,114 @@ +Usage: java -jar [validator].jar (parameters) + +The FHIR validation tool validates a FHIR resource or bundle. +The validation tool compares a resource against the base definitions and any +profiles declared in the resource (Resource.meta.profile) or specified on the +command line + +The FHIR validation tool validates a FHIR resource or bundle. Schema and +schematron checking is performed, then some additional checks are performed. + +* XML & Json (FHIR versions {{XML_AND_JSON_FHIR_VERSIONS}}) +* Turtle (FHIR versions {{TURTLE_FHIR_VERSIONS}}) + +If requested, instances will also be verified against the appropriate schema W3C +XML Schema, JSON schema or ShEx, as appropriate + +The following parameters are supported: + +[source]: a file, url, directory or pattern for resources to validate. + At least one source must be declared. If there is more than one source or + if the source is other than a single file or url and the output parameter is + used, results will be provided as a Bundle. + Patterns are limited to a directory followed by a filename with an + embedded asterisk. E.g. foo*-examples.xml or someresource.*, etc. +-version [ver]: The FHIR version to use. + This can only appear once. + valid values {{FHIR_MAJOR_VERSIONS}} or {{FHIR_MINOR_VERSIONS}} + Default value is {{FHIR_CURRENT_VERSION}} +-ig [package|file|folder|url]: an IG or profile definition to load. + Can be the URL of an implementation guide or a package ([id]-[ver]) for a + built implementation guide or a local folder that contains a set of + conformance resources. + If you would like to load the latest unreleased version of the + implementation guide or package, please define the version as '#current'. + If no version is provided, the latest version in the package cache will + be used, or if no such cached package is available, the PackageCacheManager + will load the latest from the the online package repo. + If you want the implementation guide to be loaded for a specific version + of FHIR, you can prefix the IG with the appropriate version in square + brackets ([[fhirVer]][id]-[igVer]). + No default value. This parameter can appear any number of times +-tx [url]: the [base] url of a FHIR terminology service + Default value is http://tx.fhir.org. This parameter can appear once + To run without terminology value, specific n/a as the URL +-txLog [file]: Produce a log of the terminology server operations in [file] + Default value is not to produce a log +-profile [url]: the canonical URL to validate against (same as if it was + specified in Resource.meta.profile). + If no profile is specified, the resource is validated against the base + specification. This parameter can appear any number of times. + Note: the profile (and it's dependencies) have to be made available + through one of the -ig parameters. Note that package dependencies will + automatically be resolved +-showReferenceMessages + Includes validation messages resulting from validating target resources + against profiles defined on a reference. This increases the volume of + validation messages, but may allow easier debugging. If not specified, + then only a high-level message indicating that the referenced item wasn't + valid against the listed profile(s) will be provided. +-questionnaire mode: what to do when validating QuestionnaireResponse resources + * none (default): just ignore the questionnaire reference + * required: check that the QuestionnaireResponse has a questionnaire and + validate against it + * check: if the QuestionnaireResponse has a questionnaire, validate + against it + The questionnaire must be loaded using the -ig parameter + which specifies the location of a questionnaire. If provided, then the + validator will validate any QuestionnaireResponse that claims to match the + Questionnaire against it no default value. This parameter can appear any + number of times +-output [file]: a filename for the results (OperationOutcome) + Default: results are sent to the std out. +-outputSuffix [string]: used in -convert and -snapshot to deal with + one or more result files (where -output can only have one) +-debug + Produce additional information about the loading/validation process +-recurse + Look in subfolders when -ig refers to a folder +-locale + Specifies the locale/language of the validation result messages (eg.: + de-DE +-sct + Specify the edition of SNOMED CT to use. Valid Choices: + intl | us | uk | au | nl | ca | se | dk | es + tx.fhir.org only supports a subset. To add to this list or tx.fhir.org ask + on https://chat.fhir.org/#narrow/stream/179202-terminology +-native: use schema for validation as well + * XML: w3c schema+schematron + * JSON: json.schema + * RDF: SHEX + Default: false +-language: [lang] The language to use when validating coding displays - same + value as for xml:lang + Not used if the resource specifies language + Default: no specified language +-extension: Controls how extensions are validated by the validator. The value + for this parameter is a URL for a domain from which extensions will be + allowed. By default, unknown extensions are prohibited, but can be allowed + by using the value 'any' (e.g. -extension any). This parameter can repeat + any number of times. +-hintAboutNonMustSupport: If present, raise hints if the instance contains data + elements that are not marked as mustSupport=true. Useful to identify + elements included that may be ignored by recipients +-assumeValidRestReferences: If present, assume that URLs that reference + resources follow the RESTful URI pattern and it is safe to infer the type + from the URL +-security-checks: If present, check that string content doesn't include any html + -like tags that might create problems downstream (though all external input + must always be santized by escaping for either html or sql) + +The validator also supports the param -proxy=[address]:[port] for if you use a +proxy + +Parameters can appear in any order \ No newline at end of file diff --git a/org.hl7.fhir.validation/src/main/resources/help/version.txt b/org.hl7.fhir.validation/src/main/resources/help/version.txt new file mode 100644 index 000000000..8cff18774 --- /dev/null +++ b/org.hl7.fhir.validation/src/main/resources/help/version.txt @@ -0,0 +1,12 @@ +The validator can convert between versions of FHIR (r2, r3, and r4). To use the validator to convert versions, provide the following parameters: + + java -jar validator_cli.jar c:\temp\observation.xml -version 3.0 -to-version 4.0 -output c:\temp\observation4.json +The key parameter is "-to-version" which causes the validator to invoke the version conversion routine. + +Technical notes: + +the validator can use either it's own internal routines, or the structure maps found at https://github.com/FHIR/packages/tree/master/interversion. +By default, the internal routines will be used for resources with a canonical URL (e.g. code system etc) and the structure maps will be used otherwise +If the internal routines fail, the structure maps will be used anyway +you can use the parameter -do-native to get the validator to try the internal routines first for any resource, and the parameter -no-native to tell it not to try them at all +Issues with the structure maps should be discussed on the chat.fhir.org implementers channel, or submitted as PRs against the github repo above diff --git a/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/cli/utils/DisplayTests.java b/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/cli/utils/DisplayTests.java index eccac5731..4ad841baf 100644 --- a/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/cli/utils/DisplayTests.java +++ b/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/cli/utils/DisplayTests.java @@ -1,5 +1,7 @@ package org.hl7.fhir.validation.cli.utils; +import org.hl7.fhir.r5.model.Constants; +import org.hl7.fhir.validation.cli.tasks.ValidateTask; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -10,32 +12,29 @@ import static org.junit.jupiter.api.Assertions.*; public class DisplayTests { + + final static String[][] PLACEHOLDERS = { + { "XML_AND_JSON_FHIR_VERSIONS", "1.0, 1.4, 3.0, 4.0, " + Constants.VERSION_MM }, + { "TURTLE_FHIR_VERSIONS", "3.0, 4.0, " + Constants.VERSION_MM }, + }; @Test @DisplayName("Check for placeholder replacement in help output") public void displayHelpDetails() { final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); final ByteArrayOutputStream errContent = new ByteArrayOutputStream(); - final PrintStream originalOut = System.out; - final PrintStream originalErr = System.err; + PrintStream out = new PrintStream(outContent); + PrintStream err = new PrintStream(errContent); - System.setOut(new PrintStream(outContent)); - System.setErr(new PrintStream(errContent)); - - try { - Display.displayHelpDetails("help.txt"); + Display.displayHelpDetails(out, "help/validate.txt", PLACEHOLDERS); String output = outContent.toString(); - for (String[] placeHolder: Display.PLACEHOLDERS) { + for (String[] placeHolder: PLACEHOLDERS) { assertTrue(output.contains(placeHolder[1]), placeHolder[1] + " is not contained in output:\n" + output); assertFalse(output.contains(placeHolder[0]), placeHolder[0] + " found in output:\n" + output); } - } - finally { - System.setOut(originalOut); - System.setErr(originalErr); - } + } @Test From a8051d6c45f63b08095795308934a31f44f0bb99 Mon Sep 17 00:00:00 2001 From: dotasek Date: Mon, 5 Jun 2023 17:06:10 -0400 Subject: [PATCH 6/7] Rename to ValidationEngineTask --- .../src/main/java/org/hl7/fhir/validation/ValidatorCli.java | 4 ++-- .../java/org/hl7/fhir/validation/cli/tasks/CompareTask.java | 2 +- .../java/org/hl7/fhir/validation/cli/tasks/CompileTask.java | 3 +-- .../java/org/hl7/fhir/validation/cli/tasks/ConvertTask.java | 2 +- .../java/org/hl7/fhir/validation/cli/tasks/FhirpathTask.java | 2 +- .../java/org/hl7/fhir/validation/cli/tasks/InstallTask.java | 2 +- .../org/hl7/fhir/validation/cli/tasks/LangTransformTask.java | 2 +- .../java/org/hl7/fhir/validation/cli/tasks/NarrativeTask.java | 2 +- .../main/java/org/hl7/fhir/validation/cli/tasks/ScanTask.java | 2 +- .../java/org/hl7/fhir/validation/cli/tasks/SnapshotTask.java | 2 +- .../org/hl7/fhir/validation/cli/tasks/SpreadsheetTask.java | 2 +- .../java/org/hl7/fhir/validation/cli/tasks/TransformTask.java | 2 +- .../java/org/hl7/fhir/validation/cli/tasks/ValidateTask.java | 2 +- .../{ValidationServiceTask.java => ValidationEngineTask.java} | 3 +-- .../java/org/hl7/fhir/validation/cli/tasks/VersionTask.java | 2 +- 15 files changed, 16 insertions(+), 18 deletions(-) rename org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/{ValidationServiceTask.java => ValidationEngineTask.java} (85%) diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidatorCli.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidatorCli.java index 8c05cdb1a..605175c97 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidatorCli.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidatorCli.java @@ -298,13 +298,13 @@ public class ValidatorCli { final CliTask cliTask = selectCliTask(cliContext, params); - if (cliTask instanceof ValidationServiceTask) { + if (cliTask instanceof ValidationEngineTask) { if (cliContext.getSv() == null) { cliContext.setSv(myValidationService.determineVersion(cliContext)); } ValidationEngine validationEngine = getValidationEngine(tt, cliContext); tts.end(); - ((ValidationServiceTask) cliTask).executeTask(myValidationService, validationEngine, cliContext, params, tt, tts); + ((ValidationEngineTask) cliTask).executeTask(myValidationService, validationEngine, cliContext, params, tt, tts); } else if (cliTask instanceof StandaloneTask) { ((StandaloneTask) cliTask).executeTask(cliContext,params,tt,tts); } diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompareTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompareTask.java index a8ca7c4bc..7c7a3aeff 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompareTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompareTask.java @@ -13,7 +13,7 @@ import org.hl7.fhir.validation.cli.utils.Params; import java.io.File; import java.io.PrintStream; -public class CompareTask extends ValidationServiceTask{ +public class CompareTask extends ValidationEngineTask { @Override public String getName() { return "compare"; diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompileTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompileTask.java index 017994ba5..1de7edd00 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompileTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/CompileTask.java @@ -1,7 +1,6 @@ package org.hl7.fhir.validation.cli.tasks; import org.hl7.fhir.utilities.TimeTracker; -import org.hl7.fhir.validation.Scanner; import org.hl7.fhir.validation.ValidationEngine; import org.hl7.fhir.validation.cli.model.CliContext; import org.hl7.fhir.validation.cli.services.ValidationService; @@ -9,7 +8,7 @@ import org.hl7.fhir.validation.cli.utils.EngineMode; import java.io.PrintStream; -public class CompileTask extends ValidationServiceTask { +public class CompileTask extends ValidationEngineTask { @Override public String getName() { diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ConvertTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ConvertTask.java index bd185f048..d12253445 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ConvertTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ConvertTask.java @@ -9,7 +9,7 @@ import org.hl7.fhir.validation.cli.utils.EngineMode; import java.io.PrintStream; -public class ConvertTask extends ValidationServiceTask { +public class ConvertTask extends ValidationEngineTask { @Override public String getName() { diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/FhirpathTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/FhirpathTask.java index 856eaf399..ee93a080e 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/FhirpathTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/FhirpathTask.java @@ -9,7 +9,7 @@ import org.hl7.fhir.validation.cli.utils.EngineMode; import java.io.PrintStream; -public class FhirpathTask extends ValidationServiceTask { +public class FhirpathTask extends ValidationEngineTask { @Override public String getName() { diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/InstallTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/InstallTask.java index 3572dc985..b68ad4456 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/InstallTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/InstallTask.java @@ -8,7 +8,7 @@ import org.hl7.fhir.validation.cli.utils.EngineMode; import java.io.PrintStream; -public class InstallTask extends ValidationServiceTask { +public class InstallTask extends ValidationEngineTask { @Override public String getName() { diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/LangTransformTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/LangTransformTask.java index df15d61ea..12e886112 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/LangTransformTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/LangTransformTask.java @@ -8,7 +8,7 @@ import org.hl7.fhir.validation.cli.utils.EngineMode; import java.io.PrintStream; -public class LangTransformTask extends ValidationServiceTask { +public class LangTransformTask extends ValidationEngineTask { @Override public String getName() { diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/NarrativeTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/NarrativeTask.java index 1ff7e590e..c19d35054 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/NarrativeTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/NarrativeTask.java @@ -9,7 +9,7 @@ import org.hl7.fhir.validation.cli.utils.EngineMode; import java.io.PrintStream; -public class NarrativeTask extends ValidationServiceTask { +public class NarrativeTask extends ValidationEngineTask { @Override public String getName() { diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ScanTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ScanTask.java index ab7d2a67d..2f7a91ade 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ScanTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ScanTask.java @@ -9,7 +9,7 @@ import org.hl7.fhir.validation.cli.utils.EngineMode; import java.io.PrintStream; -public class ScanTask extends ValidationServiceTask { +public class ScanTask extends ValidationEngineTask { @Override diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SnapshotTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SnapshotTask.java index 99187ba1b..aa5574dd0 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SnapshotTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SnapshotTask.java @@ -9,7 +9,7 @@ import org.hl7.fhir.validation.cli.utils.EngineMode; import java.io.PrintStream; -public class SnapshotTask extends ValidationServiceTask { +public class SnapshotTask extends ValidationEngineTask { @Override public String getName() { diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SpreadsheetTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SpreadsheetTask.java index cbf65f99a..0c2206ef7 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SpreadsheetTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/SpreadsheetTask.java @@ -8,7 +8,7 @@ import org.hl7.fhir.validation.cli.utils.EngineMode; import java.io.PrintStream; -public class SpreadsheetTask extends ValidationServiceTask { +public class SpreadsheetTask extends ValidationEngineTask { @Override public String getName() { diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TransformTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TransformTask.java index db71ada2c..76ef89efb 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TransformTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/TransformTask.java @@ -9,7 +9,7 @@ import org.hl7.fhir.validation.cli.utils.EngineMode; import java.io.PrintStream; -public class TransformTask extends ValidationServiceTask { +public class TransformTask extends ValidationEngineTask { @Override public String getName() { diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidateTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidateTask.java index f304d4af4..0912757c5 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidateTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidateTask.java @@ -11,7 +11,7 @@ import org.hl7.fhir.validation.cli.utils.Display; import java.io.PrintStream; -public class ValidateTask extends ValidationServiceTask { +public class ValidateTask extends ValidationEngineTask { final static String[][] PLACEHOLDERS = { { "XML_AND_JSON_FHIR_VERSIONS", "1.0, 1.4, 3.0, 4.0, " + Constants.VERSION_MM }, diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidationServiceTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidationEngineTask.java similarity index 85% rename from org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidationServiceTask.java rename to org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidationEngineTask.java index 8cfd3a08f..0bf6b32b1 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidationServiceTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/ValidationEngineTask.java @@ -1,12 +1,11 @@ package org.hl7.fhir.validation.cli.tasks; -import lombok.Getter; import org.hl7.fhir.utilities.TimeTracker; import org.hl7.fhir.validation.ValidationEngine; import org.hl7.fhir.validation.cli.model.CliContext; import org.hl7.fhir.validation.cli.services.ValidationService; -public abstract class ValidationServiceTask extends CliTask{ +public abstract class ValidationEngineTask extends CliTask{ public abstract void executeTask(ValidationService validationService, ValidationEngine validationEngine, CliContext cliContext, String[] args, org.hl7.fhir.utilities.TimeTracker tt, TimeTracker.Session tts) throws Exception; diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/VersionTask.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/VersionTask.java index e83a6c501..74d80f7f9 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/VersionTask.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/tasks/VersionTask.java @@ -9,7 +9,7 @@ import org.hl7.fhir.validation.cli.utils.EngineMode; import java.io.PrintStream; -public class VersionTask extends ValidationServiceTask { +public class VersionTask extends ValidationEngineTask { @Override public String getName() { From b4a34e0bc036e813eb4675c7d748fa8934889fa7 Mon Sep 17 00:00:00 2001 From: dotasek Date: Mon, 5 Jun 2023 18:19:50 -0400 Subject: [PATCH 7/7] Fix broken test --- .../java/org/hl7/fhir/validation/cli/utils/DisplayTests.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/cli/utils/DisplayTests.java b/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/cli/utils/DisplayTests.java index 4ad841baf..0bc941ba5 100644 --- a/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/cli/utils/DisplayTests.java +++ b/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/cli/utils/DisplayTests.java @@ -43,8 +43,8 @@ public class DisplayTests { final String myTestString = "The {{DUMMY_A}} jumps over the {{DUMMY_B}}."; final String[][] placeHolders = { - { "\\{\\{DUMMY_A\\}\\}", "quick brown fox"}, - { "\\{\\{DUMMY_B\\}\\}", "lazy dog"}, + { "DUMMY_A", "quick brown fox"}, + { "DUMMY_B", "lazy dog"}, }; final String expectedOutput = "The quick brown fox jumps over the lazy dog.";