Skip to content

Commit

Permalink
Hide extension profiles in validation
Browse files Browse the repository at this point in the history
Fixes #237
  • Loading branch information
qligier authored and oliveregger committed Jun 14, 2024
1 parent d027b7e commit c7e2d9c
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 10 deletions.
4 changes: 4 additions & 0 deletions docs/changelog.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
Unreleased

- Extension profiles are not shown for validation anymore [#237](https://github.com/ahdis/matchbox/issues/237)

2024/05/27 Release 3.8.4

- R5 validation problem from EVS Client [#234](https://github.com/ahdis/matchbox/issues/234)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@

import java.lang.reflect.Field;

import static ch.ahdis.matchbox.util.MatchboxPackageInstallerImpl.SD_EXTENSION_TITLE_PREFIX;

/**
* A provider of CapabilityStatement customized for Matchbox.
*/
Expand Down Expand Up @@ -154,13 +156,18 @@ private void updateOperationDefinition(final OperationDefinition operationDefini
.setMin(0)
.setMax("1")
.setType(Enumerations.FHIRTypes.CODE);

final var profiles = this.structureDefinitionProvider.getCanonicalsR5().stream()
.filter(sd -> !sd.getExtensionByUrl("sd-title").getValueStringType().getValue().startsWith(
SD_EXTENSION_TITLE_PREFIX))
.toList();
operationDefinition.addParameter()
.setName("profile")
.setUse(Enumerations.OperationParameterUse.IN)
.setMin(0)
.setMax("1")
.setType(Enumerations.FHIRTypes.CANONICAL)
.setTargetProfile(this.structureDefinitionProvider.getCanonicalsR5());
.setTargetProfile(profiles);
operationDefinition.addParameter()
.setName("reload")
.setUse(Enumerations.OperationParameterUse.IN)
Expand All @@ -179,11 +186,11 @@ private void updateOperationDefinition(final OperationDefinition operationDefini
}

operationDefinition.addParameter()
.setName("extensions")
.setUse(Enumerations.OperationParameterUse.IN)
.setMin(0)
.setMax("1")
.setType(Enumerations.FHIRTypes.STRING);
.setName("extensions")
.setUse(Enumerations.OperationParameterUse.IN)
.setMin(0)
.setMax("1")
.setType(Enumerations.FHIRTypes.STRING);

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
import java.util.List;
import java.util.Objects;

import static ch.ahdis.matchbox.util.MatchboxPackageInstallerImpl.SD_EXTENSION_TITLE_PREFIX;

/**
* The WebService for validation with the new Gazelle Validation API.
*
Expand Down Expand Up @@ -93,7 +95,9 @@ public Service getMetadata(final HttpServletRequest request) {
*/
@GetMapping(path = PROFILES_PATH, produces = MediaType.APPLICATION_JSON_VALUE)
public List<ValidationProfile> getProfiles() {
// Filter the extensions, because they won't be validated directly
return this.structureDefinitionProvider.getPackageResources().stream()
.filter(packageVersionResource -> !packageVersionResource.getFilename().startsWith(SD_EXTENSION_TITLE_PREFIX))
.map(packageVersionResource -> {
final var profile = new ValidationProfile();
final var version = packageVersionResource.getCanonicalVersion();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@
*
*/
public class MatchboxPackageInstallerImpl implements IPackageInstallerSvc {
public static final String SD_EXTENSION_TITLE_PREFIX = "[Extension] ";

private static final Logger ourLog = LoggerFactory.getLogger(MatchboxPackageInstallerImpl.class);
// MODIFIED
Expand Down Expand Up @@ -236,17 +237,35 @@ public PackageInstallOutcomeJson install(PackageInstallationSpec theInstallation
final var title = switch (npmPackageVersionResourceEntity.getFhirVersion()) {
case R4 -> {
final var sd = (org.hl7.fhir.r4.model.StructureDefinition) parserR4.parse(resourceContents);

final String sdTitle;
if (sd.getTitle() != null) {
yield sd.getTitle();
sdTitle = sd.getTitle();
} else {
sdTitle = sd.getName();
}

if ("Extension".equals(sd.getType())) {
yield SD_EXTENSION_TITLE_PREFIX + sdTitle;
} else {
yield sdTitle;
}
yield sd.getName();
}
case R5 -> {
final var sd = (org.hl7.fhir.r5.model.StructureDefinition) parserR5.parse(resourceContents);

final String sdTitle;
if (sd.getTitle() != null) {
yield sd.getTitle();
sdTitle = sd.getTitle();
} else {
sdTitle = sd.getName();
}

if ("Extension".equals(sd.getType())) {
yield SD_EXTENSION_TITLE_PREFIX + sdTitle;
} else {
yield sdTitle;
}
yield sd.getName();
}
default -> {
ourLog.error("FHIR version not supported for parsing the StructureDefinition");
Expand Down

0 comments on commit c7e2d9c

Please sign in to comment.