Skip to content
This repository was archived by the owner on Oct 6, 2025. It is now read-only.

Commit 881fea4

Browse files
committed
1 parent 26e7e8c commit 881fea4

3 files changed

Lines changed: 34 additions & 4 deletions

File tree

codex-process-data-transfer/src/main/java/de/netzwerk_universitaetsmedizin/codex/processes/data_transfer/validation/ValidationPackageManagerImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ private List<ValueSet> withExpandedValueSets(ValidationPackageWithDepedencies pa
202202
ValueSetExpander expander = internalValueSetExpanderFactory.apply(fhirContext,
203203
createSupportChain(fhirContext, packageWithDependencies, Collections.emptyList(), expandedValueSets));
204204

205-
packageWithDependencies.getValueSetsIncludingDependencies(valueSetBindingStrengths).forEach(v ->
205+
packageWithDependencies.getValueSetsIncludingDependencies(valueSetBindingStrengths, fhirContext).forEach(v ->
206206
{
207207
logger.debug("Expanding ValueSet {}|{}", v.getUrl(), v.getVersion());
208208

codex-process-data-transfer/src/main/java/de/netzwerk_universitaetsmedizin/codex/processes/data_transfer/validation/ValidationPackageWithDepedencies.java

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,16 @@
2323
import org.hl7.fhir.r4.model.StructureDefinition.StructureDefinitionDifferentialComponent;
2424
import org.hl7.fhir.r4.model.UriType;
2525
import org.hl7.fhir.r4.model.ValueSet;
26+
import org.slf4j.Logger;
27+
import org.slf4j.LoggerFactory;
2628

2729
import ca.uhn.fhir.context.FhirContext;
30+
import ca.uhn.fhir.context.support.IValidationSupport;
2831

2932
public class ValidationPackageWithDepedencies extends ValidationPackage
3033
{
34+
private static final Logger logger = LoggerFactory.getLogger(ValidationPackageWithDepedencies.class);
35+
3136
public static ValidationPackageWithDepedencies from(
3237
Map<ValidationPackageIdentifier, ValidationPackage> packagesByNameAndVersion,
3338
ValidationPackageIdentifier rootPackageIdentifier)
@@ -216,17 +221,42 @@ private Set<String> findValueSetsWithBindingStrength(Stream<StructureDefinition>
216221
.map(StructureDefinitionDifferentialComponent::getElement).flatMap(List::stream)
217222
.filter(ElementDefinition::hasBinding).map(ElementDefinition::getBinding)
218223
.filter(b -> bindingStrengths.contains(b.getStrength()))
224+
.filter(ElementDefinitionBindingComponent::hasValueSet)
219225
.map(ElementDefinitionBindingComponent::getValueSet).collect(Collectors.toSet());
220226
}
221227

222-
public List<ValueSet> getValueSetsIncludingDependencies(EnumSet<BindingStrength> bindingStrengths)
228+
public List<ValueSet> getValueSetsIncludingDependencies(EnumSet<BindingStrength> bindingStrengths,
229+
FhirContext fhirContext)
223230
{
224231
Stream<StructureDefinition> sds = getValidationSupportResources().getStructureDefinitions().stream()
225232
.flatMap(sd -> Stream.concat(Stream.of(sd), getStructureDefinitionDependencies(sd).stream()))
226233
.distinct();
227234

228235
Set<String> neededValueSets = findValueSetsWithBindingStrength(sds, bindingStrengths);
229-
return getAllValueSets().stream().filter(vs -> neededValueSets.contains(vs.getUrl())
236+
List<ValueSet> foundValueSets = getAllValueSets().stream().filter(vs -> neededValueSets.contains(vs.getUrl())
230237
|| neededValueSets.contains(vs.getUrl() + "|" + vs.getVersion())).collect(Collectors.toList());
238+
239+
logMissingValueSets(neededValueSets, foundValueSets, fhirContext);
240+
241+
return foundValueSets;
242+
}
243+
244+
private void logMissingValueSets(Set<String> neededValueSets, List<ValueSet> foundValueSets,
245+
FhirContext fhirContext)
246+
{
247+
Set<String> foundValueSetUrls = foundValueSets.stream()
248+
.flatMap(vs -> Stream.of(vs.getUrl(), vs.getUrl() + "|" + vs.getVersion())).collect(Collectors.toSet());
249+
250+
IValidationSupport validationSupport = fhirContext.getValidationSupport();
251+
String missingValueSets = neededValueSets.stream()
252+
.filter(e -> !foundValueSetUrls.contains(e) && validationSupport.fetchValueSet(e) == null).distinct()
253+
.sorted().collect(Collectors.joining(", ", "[", "]"));
254+
255+
if (!missingValueSets.isEmpty())
256+
{
257+
logger.warn(
258+
"The following ValueSet are required for validation but could not be found in validation package {}|{} or its dependencies: {}",
259+
getName(), getVersion(), missingValueSets);
260+
}
231261
}
232262
}

codex-process-data-transfer/src/test/java/de/netzwerk_universitaetsmedizin/codex/processes/data_transfer/validation/ValidateDataLearningTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ public void testCheckValueSetForComplexeSnomedCtCodes() throws Exception
144144
.expandValueSetsAndGenerateStructureDefinitionSnapshots(packageWithDepedencies);
145145

146146
List<ValueSet> valueSets = packageWithDepedencies
147-
.getValueSetsIncludingDependencies(EnumSet.allOf(BindingStrength.class));
147+
.getValueSetsIncludingDependencies(EnumSet.allOf(BindingStrength.class), fhirContext);
148148

149149
valueSets.forEach(v ->
150150
{

0 commit comments

Comments
 (0)