handle vs.url properly so that we can rely on just url + version for internal caching (no hashing needed)

This commit is contained in:
Grahame Grieve 2021-12-15 09:34:54 +11:00
parent ea87f94253
commit a6ba3e8a21
2 changed files with 9 additions and 5 deletions

View File

@ -796,7 +796,7 @@ public class QuestionnaireRenderer extends TerminologyRenderer {
vs = (ValueSet) q.getContained(i.getAnswerValueSet().substring(1)); vs = (ValueSet) q.getContained(i.getAnswerValueSet().substring(1));
if (vs != null && !vs.hasUrl()) { if (vs != null && !vs.hasUrl()) {
vs = vs.copy(); vs = vs.copy();
vs.setUrl("urn:uuid:"+UUID.randomUUID().toString().toLowerCase()); vs.setUrl(q.getUrl()+"--"+q.getContained(i.getAnswerValueSet().substring(1)));
} }
} else { } else {
vs = context.getContext().fetchResource(ValueSet.class, i.getAnswerValueSet()); vs = context.getContext().fetchResource(ValueSet.class, i.getAnswerValueSet());

View File

@ -613,8 +613,10 @@ public class ValueSetCheckerSimple extends ValueSetWorker implements ValueSetChe
if (valueset.hasExpansion()) { if (valueset.hasExpansion()) {
return checkExpansion(new Coding(system, code, null)); return checkExpansion(new Coding(system, code, null));
} else if (valueset.hasCompose()) { } else if (valueset.hasCompose()) {
int i = 0;
for (ConceptSetComponent vsi : valueset.getCompose().getInclude()) { for (ConceptSetComponent vsi : valueset.getCompose().getInclude()) {
Boolean ok = inComponent(vsi, system, code, valueset.getCompose().getInclude().size() == 1, warnings); Boolean ok = inComponent(vsi, i, system, code, valueset.getCompose().getInclude().size() == 1, warnings);
i++;
if (ok == null && result == false) { if (ok == null && result == false) {
result = null; result = null;
} else if (ok) { } else if (ok) {
@ -623,7 +625,8 @@ public class ValueSetCheckerSimple extends ValueSetWorker implements ValueSetChe
} }
} }
for (ConceptSetComponent vsi : valueset.getCompose().getExclude()) { for (ConceptSetComponent vsi : valueset.getCompose().getExclude()) {
Boolean nok = inComponent(vsi, system, code, valueset.getCompose().getInclude().size() == 1, warnings); Boolean nok = inComponent(vsi, i, system, code, valueset.getCompose().getInclude().size() == 1, warnings);
i++;
if (nok == null && result == false) { if (nok == null && result == false) {
result = null; result = null;
} else if (nok != null && nok) { } else if (nok != null && nok) {
@ -635,7 +638,7 @@ public class ValueSetCheckerSimple extends ValueSetWorker implements ValueSetChe
return result; return result;
} }
private Boolean inComponent(ConceptSetComponent vsi, String system, String code, boolean only, List<String> warnings) throws FHIRException { private Boolean inComponent(ConceptSetComponent vsi, int vsiIndex, String system, String code, boolean only, List<String> warnings) throws FHIRException {
for (UriType uri : vsi.getValueSet()) { for (UriType uri : vsi.getValueSet()) {
if (inImport(uri.getValue(), system, code)) { if (inImport(uri.getValue(), system, code)) {
return true; return true;
@ -662,7 +665,8 @@ public class ValueSetCheckerSimple extends ValueSetWorker implements ValueSetChe
// make up a transient value set with // make up a transient value set with
ValueSet vs = new ValueSet(); ValueSet vs = new ValueSet();
vs.setStatus(PublicationStatus.ACTIVE); vs.setStatus(PublicationStatus.ACTIVE);
vs.setUrl(Utilities.makeUuidUrn()); vs.setUrl(valueset.getUrl()+"--"+vsiIndex);
vs.setVersion(valueset.getVersion());
vs.getCompose().addInclude(vsi); vs.getCompose().addInclude(vsi);
ValidationResult res = context.validateCode(options.noClient(), new Coding(system, code, null), vs); ValidationResult res = context.validateCode(options.noClient(), new Coding(system, code, null), vs);
if (res.getErrorClass() == TerminologyServiceErrorClass.UNKNOWN || res.getErrorClass() == TerminologyServiceErrorClass.CODESYSTEM_UNSUPPORTED || res.getErrorClass() == TerminologyServiceErrorClass.VALUESET_UNSUPPORTED) { if (res.getErrorClass() == TerminologyServiceErrorClass.UNKNOWN || res.getErrorClass() == TerminologyServiceErrorClass.CODESYSTEM_UNSUPPORTED || res.getErrorClass() == TerminologyServiceErrorClass.VALUESET_UNSUPPORTED) {