From 579d98cf85fa722f89ebcb547b75f4a81ab6fbe2 Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Fri, 8 Oct 2021 08:01:41 +1100 Subject: [PATCH] enable detection of whether tx server knows about value set and better track returned errors from tx server --- .../org/hl7/fhir/r5/context/BaseWorkerContext.java | 10 ++++++---- .../java/org/hl7/fhir/r5/context/IWorkerContext.java | 5 +++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java index 661d7f566..9dfe7e7ee 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/BaseWorkerContext.java @@ -906,9 +906,9 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte pIn.addParameter().setName("implySystem").setValue(new BooleanType(true)); } setTerminologyOptions(options, pIn); - res = validateOnServer(vs, pIn); + res = validateOnServer(vs, pIn, options); } catch (Exception e) { - res = new ValidationResult(IssueSeverity.ERROR, e.getMessage() == null ? e.getClass().getName() : e.getMessage()).setTxLink(txLog == null ? null : txLog.getLastId()); + res = new ValidationResult(IssueSeverity.ERROR, e.getMessage() == null ? e.getClass().getName() : e.getMessage()).setTxLink(txLog == null ? null : txLog.getLastId()).setErrorClass(TerminologyServiceErrorClass.SERVER_ERROR); } if (res.getErrorClass() == TerminologyServiceErrorClass.CODESYSTEM_UNSUPPORTED) { unsupportedCodeSystems.add(code.getSystem()); @@ -967,7 +967,7 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte Parameters pIn = new Parameters(); pIn.addParameter().setName("codeableConcept").setValue(code); setTerminologyOptions(options, pIn); - res = validateOnServer(vs, pIn); + res = validateOnServer(vs, pIn, options); } catch (Exception e) { res = new ValidationResult(IssueSeverity.ERROR, e.getMessage() == null ? e.getClass().getName() : e.getMessage()).setTxLink(txLog.getLastId()); } @@ -975,7 +975,7 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte return res; } - private ValidationResult validateOnServer(ValueSet vs, Parameters pin) throws FHIRException { + private ValidationResult validateOnServer(ValueSet vs, Parameters pin, ValidationOptions options) throws FHIRException { boolean cache = false; if (vs != null) { for (ConceptSetComponent inc : vs.getCompose().getInclude()) { @@ -988,6 +988,8 @@ public abstract class BaseWorkerContext extends I18nBase implements IWorkerConte if (vs != null) { if (isTxCaching && cacheId != null && cached.contains(vs.getUrl()+"|"+vs.getVersion())) { pin.addParameter().setName("url").setValue(new UriType(vs.getUrl()+(vs.hasVersion() ? "|"+vs.getVersion() : ""))); + } else if (options.getVsAsUrl()){ + pin.addParameter().setName("url").setValue(new StringType(vs.getUrl())); } else { pin.addParameter().setName("valueSet").setResource(vs); cached.add(vs.getUrl()+"|"+vs.getVersion()); diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/IWorkerContext.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/IWorkerContext.java index 2d1c648af..0c189fb18 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/IWorkerContext.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/IWorkerContext.java @@ -613,6 +613,11 @@ public interface IWorkerContext { return this; } + public ValidationResult setErrorClass(TerminologyServiceErrorClass errorClass) { + this.errorClass = errorClass; + return this; + } + public String getTxLink() { return txLink; }