Skip to content

Commit cca10f2

Browse files
committed
old hapi
1 parent 0e9ec2e commit cca10f2

File tree

3 files changed

+61
-11
lines changed

3 files changed

+61
-11
lines changed

licenses/licenses.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,19 @@
138138
<url>http://creativecommons.org/publicdomain/zero/1.0</url>
139139
</urls>
140140
</license>
141+
<license>
142+
<name>Indiana University Extreme! Lab Software License, vesion 1.1.1</name>
143+
<names>
144+
<name>Indiana University Extreme! Lab Software License, vesion 1.1.1</name>
145+
<name>Public Domain</name>
146+
<name>Apache Software License, version 1.1</name>
147+
</names>
148+
<urls>
149+
<url>http://www.extreme.indiana.edu/viewcvs/~checkout~/XPP3/java/LICENSE.txt</url>
150+
<url>http://creativecommons.org/licenses/publicdomain</url>
151+
<url>http://www.apache.org/licenses/LICENSE-1.1</url>
152+
</urls>
153+
</license>
141154
</valid>
142155
<forbidden>
143156
<license>

pom.xml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<maven.compiler.source>21</maven.compiler.source>
1919
<maven.compiler.target>21</maven.compiler.target>
2020
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
21-
<fhir.version>7.6.1</fhir.version>
21+
<fhir.version>5.4.2</fhir.version>
2222
<log4j.version>2.24.3</log4j.version>
2323
<fasterxml.version>2.19.0</fasterxml.version>
2424
<sonar.organization>nhsdigital</sonar.organization>
@@ -64,11 +64,6 @@
6464
<artifactId>hapi-fhir-validation</artifactId>
6565
<version>${fhir.version}</version>
6666
</dependency>
67-
<dependency>
68-
<groupId>ca.uhn.hapi.fhir</groupId>
69-
<artifactId>hapi-fhir-caching-caffeine</artifactId>
70-
<version>${fhir.version}</version>
71-
</dependency>
7267
<dependency>
7368
<groupId>ca.uhn.hapi.fhir</groupId>
7469
<artifactId>hapi-fhir-base</artifactId>

src/main/java/software/nhs/fhirvalidator/configuration/ValidatorConfiguration.java

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,32 @@
44
import java.io.InputStream;
55
import java.util.ArrayList;
66
import java.util.List;
7+
import java.util.stream.Collectors;
78

89
import com.google.gson.Gson;
910

1011
import org.hl7.fhir.common.hapi.validation.support.CachingValidationSupport;
1112
import org.hl7.fhir.common.hapi.validation.support.CommonCodeSystemsTerminologyService;
1213
import org.hl7.fhir.common.hapi.validation.support.InMemoryTerminologyServerValidationSupport;
13-
import org.hl7.fhir.common.hapi.validation.support.NpmPackageValidationSupport;
14+
import org.hl7.fhir.common.hapi.validation.support.PrePopulatedValidationSupport;
1415
import org.hl7.fhir.common.hapi.validation.support.SnapshotGeneratingValidationSupport;
1516
import org.hl7.fhir.common.hapi.validation.support.ValidationSupportChain;
1617
import org.hl7.fhir.common.hapi.validation.validator.FhirInstanceValidator;
1718
import org.hl7.fhir.instance.model.api.IBaseResource;
1819
import org.hl7.fhir.r4.model.CanonicalType;
20+
import org.hl7.fhir.r4.model.CodeSystem;
1921
import org.hl7.fhir.r4.model.ElementDefinition;
22+
import org.hl7.fhir.r4.model.Resource;
2023
import org.hl7.fhir.r4.model.StructureDefinition;
24+
import org.hl7.fhir.r4.model.ValueSet;
2125
import org.hl7.fhir.utilities.npm.NpmPackage;
2226

2327
import ca.uhn.fhir.context.FhirContext;
2428
import ca.uhn.fhir.context.support.ConceptValidationOptions;
2529
import ca.uhn.fhir.context.support.DefaultProfileValidationSupport;
2630
import ca.uhn.fhir.context.support.IValidationSupport;
2731
import ca.uhn.fhir.context.support.ValidationSupportContext;
32+
import ca.uhn.fhir.parser.IParser;
2833
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
2934
import ca.uhn.fhir.util.ClasspathUtil;
3035
import ca.uhn.fhir.validation.FhirValidator;
@@ -48,6 +53,44 @@ public class ValidatorConfiguration {
4853

4954
Logger log = LogManager.getLogger(ValidatorConfiguration.class);
5055

56+
private <T extends Resource> List<T> getResourcesOfType(NpmPackage npmPackage, T resourceType) throws IOException {
57+
IParser jsonParser = fhirContext.newJsonParser();
58+
59+
return npmPackage.listResources(resourceType.fhirType()).stream()
60+
.map(t -> {
61+
try {
62+
return npmPackage.loadResource(t);
63+
} catch (IOException e) {
64+
// TODO Auto-generated catch block
65+
e.printStackTrace();
66+
}
67+
return null;
68+
})
69+
.map(jsonParser::parseResource)
70+
.filter(resource -> resourceType.getClass().isInstance(resource))
71+
.map(resource -> (T) resource)
72+
.collect(Collectors.toList());
73+
}
74+
75+
private PrePopulatedValidationSupport createPrePopulatedValidationSupport(InputStream inputStream) throws IOException {
76+
NpmPackage npmPackage = NpmPackage.fromPackage(inputStream);
77+
PrePopulatedValidationSupport prePopulatedSupport = new PrePopulatedValidationSupport(fhirContext);
78+
79+
for (StructureDefinition sd : getResourcesOfType(npmPackage, new StructureDefinition())) {
80+
prePopulatedSupport.addStructureDefinition(sd);
81+
}
82+
83+
for (CodeSystem cs : getResourcesOfType(npmPackage, new CodeSystem())) {
84+
prePopulatedSupport.addCodeSystem(cs);
85+
}
86+
87+
for (ValueSet vs : getResourcesOfType(npmPackage, new ValueSet())) {
88+
prePopulatedSupport.addValueSet(vs);
89+
}
90+
91+
return prePopulatedSupport;
92+
}
93+
5194
public ValidatorConfiguration(String _PROFILE_MANIFEST_FILE) {
5295
PROFILE_MANIFEST_FILE = _PROFILE_MANIFEST_FILE;
5396
fhirContext = FhirContext.forR4();
@@ -60,23 +103,22 @@ public ValidatorConfiguration(String _PROFILE_MANIFEST_FILE) {
60103
new SnapshotGeneratingValidationSupport(fhirContext));
61104

62105
SimplifierPackage[] packages = getPackages();
63-
NpmPackageValidationSupport npmPackageSupport = new NpmPackageValidationSupport(fhirContext);
64106

65107
try {
66108
for (SimplifierPackage individualPackage : packages) {
67109
String packagePath = String.format("classpath:package/%s-%s.tgz", individualPackage.packageName,
68110
individualPackage.version);
69-
npmPackageSupport.loadPackageFromClasspath(packagePath);
70111
try (InputStream is = ClasspathUtil.loadResourceAsStream(packagePath)) {
71112
NpmPackage pkg = NpmPackage.fromPackage(is);
72113
npmPackages.add(pkg);
114+
PrePopulatedValidationSupport foo = createPrePopulatedValidationSupport(is);
115+
supportChain.addValidationSupport(foo);
73116
}
74117
}
75118
} catch (InternalErrorException | IOException ex) {
76119
log.error(ex.getMessage(), ex);
77120
throw new RuntimeException("error loading simplifier packages", ex);
78121
}
79-
supportChain.addValidationSupport(npmPackageSupport);
80122
generateSnapshots(supportChain);
81123
supportChain.fetchCodeSystem("http://snomed.info/sct");
82124

@@ -183,7 +225,7 @@ public IValidationSupport.CodeValidationResult validateCodeInValueSet(
183225
String theCode,
184226
String theDisplay,
185227
IBaseResource theValueSet) {
186-
String valueSetUrl = CommonCodeSystemsTerminologyService.getValueSetUrl(fhirContext, theValueSet);
228+
String valueSetUrl = CommonCodeSystemsTerminologyService.getValueSetUrl(theValueSet);
187229

188230
if ("https://fhir.nhs.uk/ValueSet/NHSDigital-MedicationRequest-Code".equals(valueSetUrl)
189231
|| "https://fhir.nhs.uk/ValueSet/NHSDigital-MedicationDispense-Code".equals(valueSetUrl)

0 commit comments

Comments
 (0)