2229 - Remove support for the upload-igpack CLI command. (#2233)
* 2229 - Remove support for the upload-igpack CLI command. * 2229 - Revert changes made to the ValidateCommand class since it only takes an igpack as a parameter and therefore, should NOT have been removed. * 2229 - Remove the igpack option from the Validate command. * Update hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/5_3_0/2229-remove-upload-igpack-command.yaml Co-authored-by: James Agnew <jamesagnew@gmail.com> Co-authored-by: Kevin Dougan <kevindougan@kevins-mbp.lan> Co-authored-by: James Agnew <jamesagnew@gmail.com>
This commit is contained in:
parent
ab64aa540f
commit
9036df25fa
|
@ -91,11 +91,6 @@
|
||||||
<artifactId>hapi-fhir-validation-resources-r4</artifactId>
|
<artifactId>hapi-fhir-validation-resources-r4</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>${project.groupId}</groupId>
|
|
||||||
<artifactId>hapi-fhir-igpacks</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.groupId}</groupId>
|
<groupId>${project.groupId}</groupId>
|
||||||
<artifactId>hapi-fhir-jpaserver-model</artifactId>
|
<artifactId>hapi-fhir-jpaserver-model</artifactId>
|
||||||
|
|
|
@ -33,11 +33,6 @@
|
||||||
<type>jar</type>
|
<type>jar</type>
|
||||||
<classifier>classes</classifier>
|
<classifier>classes</classifier>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
|
||||||
<artifactId>hapi-fhir-igpacks</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
<groupId>ca.uhn.hapi.fhir</groupId>
|
||||||
<artifactId>hapi-fhir-jpaserver-migrate</artifactId>
|
<artifactId>hapi-fhir-jpaserver-migrate</artifactId>
|
||||||
|
|
|
@ -169,7 +169,6 @@ public abstract class BaseApp {
|
||||||
commands.add(new ValidationDataUploader());
|
commands.add(new ValidationDataUploader());
|
||||||
commands.add(new WebsocketSubscribeCommand());
|
commands.add(new WebsocketSubscribeCommand());
|
||||||
commands.add(new UploadTerminologyCommand());
|
commands.add(new UploadTerminologyCommand());
|
||||||
commands.add(new IgPackUploader());
|
|
||||||
commands.add(new ExportConceptMapToCsvCommand());
|
commands.add(new ExportConceptMapToCsvCommand());
|
||||||
commands.add(new ImportCsvToConceptMapCommand());
|
commands.add(new ImportCsvToConceptMapCommand());
|
||||||
commands.add(new HapiFlywayMigrateDatabaseCommand());
|
commands.add(new HapiFlywayMigrateDatabaseCommand());
|
||||||
|
|
|
@ -1,116 +0,0 @@
|
||||||
package ca.uhn.fhir.cli;
|
|
||||||
|
|
||||||
/*-
|
|
||||||
* #%L
|
|
||||||
* HAPI FHIR - Command Line Client - API
|
|
||||||
* %%
|
|
||||||
* Copyright (C) 2014 - 2020 University Health Network
|
|
||||||
* %%
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
* #L%
|
|
||||||
*/
|
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
|
||||||
import ca.uhn.fhir.context.support.IValidationSupport;
|
|
||||||
import ca.uhn.fhir.igpacks.parser.IgPackParserDstu3;
|
|
||||||
import ca.uhn.fhir.rest.client.api.IGenericClient;
|
|
||||||
import org.apache.commons.cli.CommandLine;
|
|
||||||
import org.apache.commons.cli.Option;
|
|
||||||
import org.apache.commons.cli.Options;
|
|
||||||
import org.apache.commons.cli.ParseException;
|
|
||||||
import org.hl7.fhir.dstu3.model.StructureDefinition;
|
|
||||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
|
||||||
import org.hl7.fhir.instance.model.api.IPrimitiveType;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Collection;
|
|
||||||
|
|
||||||
public class IgPackUploader extends BaseCommand {
|
|
||||||
// TODO: Don't use qualified names for loggers in HAPI CLI.
|
|
||||||
private static final Logger ourLog = LoggerFactory.getLogger(IgPackUploader.class);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getCommandDescription() {
|
|
||||||
return "Uploads an Implementation Guide Validation Pack";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getCommandName() {
|
|
||||||
return "upload-igpack";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Options getOptions() {
|
|
||||||
Options options = new Options();
|
|
||||||
addFhirVersionOption(options);
|
|
||||||
|
|
||||||
Option opt = new Option("t", "target", true, "Base URL for the target server (e.g. \"http://example.com/fhir\")");
|
|
||||||
opt.setRequired(false);
|
|
||||||
options.addOption(opt);
|
|
||||||
|
|
||||||
opt = new Option("u", "url", true, "The URL to the validation.pack file, e.g. http://hl7.org/fhir/us/core/validator.pack");
|
|
||||||
opt.setRequired(true);
|
|
||||||
options.addOption(opt);
|
|
||||||
|
|
||||||
return options;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run(CommandLine theCommandLine) throws ParseException{
|
|
||||||
parseFhirContext(theCommandLine);
|
|
||||||
|
|
||||||
IGenericClient client = newClient(theCommandLine);
|
|
||||||
|
|
||||||
String url = theCommandLine.getOptionValue("u");
|
|
||||||
|
|
||||||
Collection<File> files = null;
|
|
||||||
try {
|
|
||||||
files = loadFile(url, null, false);
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new CommandFailureException(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (File nextFile : files) {
|
|
||||||
FhirContext ctx = getFhirContext();
|
|
||||||
switch (ctx.getVersion().getVersion()) {
|
|
||||||
case DSTU3:
|
|
||||||
IgPackParserDstu3 packParser = new IgPackParserDstu3(ctx);
|
|
||||||
IValidationSupport ig = null;
|
|
||||||
try {
|
|
||||||
ig = packParser.parseIg(new FileInputStream(nextFile), nextFile.getName());
|
|
||||||
} catch (FileNotFoundException e) {
|
|
||||||
throw new CommandFailureException(e);
|
|
||||||
}
|
|
||||||
Iterable<IBaseResource> conformanceResources = ig.fetchAllConformanceResources();
|
|
||||||
for (IBaseResource nextResource : conformanceResources) {
|
|
||||||
String nextResourceUrl = ((IPrimitiveType<?>)ctx.newTerser().getSingleValueOrNull(nextResource, "url")).getValueAsString();
|
|
||||||
ourLog.info("Uploading resource: {}", nextResourceUrl);
|
|
||||||
client
|
|
||||||
.update()
|
|
||||||
.resource(nextResource)
|
|
||||||
.conditional()
|
|
||||||
.and(StructureDefinition.URL.matches().value(nextResourceUrl))
|
|
||||||
.execute();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new ParseException("This command does not support FHIR version " + ctx.getVersion().getVersion());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -23,10 +23,7 @@ package ca.uhn.fhir.cli;
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
import ca.uhn.fhir.context.support.DefaultProfileValidationSupport;
|
import ca.uhn.fhir.context.support.DefaultProfileValidationSupport;
|
||||||
import ca.uhn.fhir.context.support.IValidationSupport;
|
import ca.uhn.fhir.context.support.IValidationSupport;
|
||||||
import ca.uhn.fhir.igpacks.parser.IgPackParserDstu2;
|
|
||||||
import ca.uhn.fhir.igpacks.parser.IgPackParserDstu3;
|
|
||||||
import ca.uhn.fhir.parser.DataFormatException;
|
import ca.uhn.fhir.parser.DataFormatException;
|
||||||
import ca.uhn.fhir.parser.LenientErrorHandler;
|
|
||||||
import ca.uhn.fhir.validation.FhirValidator;
|
import ca.uhn.fhir.validation.FhirValidator;
|
||||||
import ca.uhn.fhir.validation.SingleValidationMessage;
|
import ca.uhn.fhir.validation.SingleValidationMessage;
|
||||||
import ca.uhn.fhir.validation.ValidationResult;
|
import ca.uhn.fhir.validation.ValidationResult;
|
||||||
|
@ -147,25 +144,11 @@ public class ValidateCommand extends BaseCommand {
|
||||||
localProfileResource = ca.uhn.fhir.rest.api.EncodingEnum.detectEncodingNoDefault(input).newParser(ctx).parseResource(input);
|
localProfileResource = ca.uhn.fhir.rest.api.EncodingEnum.detectEncodingNoDefault(input).newParser(ctx).parseResource(input);
|
||||||
}
|
}
|
||||||
|
|
||||||
byte[] igPack = null;
|
|
||||||
String igpackFilename = null;
|
|
||||||
if (theCommandLine.hasOption("igpack")) {
|
|
||||||
igpackFilename = theCommandLine.getOptionValue("igpack");
|
|
||||||
igPack = loadFileAsByteArray(igpackFilename);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (theCommandLine.hasOption("p")) {
|
if (theCommandLine.hasOption("p")) {
|
||||||
switch (ctx.getVersion().getVersion()) {
|
switch (ctx.getVersion().getVersion()) {
|
||||||
case DSTU2: {
|
case DSTU2: {
|
||||||
ValidationSupportChain validationSupport = new ValidationSupportChain(
|
ValidationSupportChain validationSupport = new ValidationSupportChain(
|
||||||
new DefaultProfileValidationSupport(ctx), new InMemoryTerminologyServerValidationSupport(ctx));
|
new DefaultProfileValidationSupport(ctx), new InMemoryTerminologyServerValidationSupport(ctx));
|
||||||
if (igPack != null) {
|
|
||||||
FhirContext hl7orgCtx = FhirContext.forDstu2Hl7Org();
|
|
||||||
hl7orgCtx.setParserErrorHandler(new LenientErrorHandler(false));
|
|
||||||
IgPackParserDstu2 parser = new IgPackParserDstu2(hl7orgCtx);
|
|
||||||
IValidationSupport igValidationSupport = parser.parseIg(igPack, igpackFilename);
|
|
||||||
validationSupport.addValidationSupport(igValidationSupport);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (theCommandLine.hasOption("r")) {
|
if (theCommandLine.hasOption("r")) {
|
||||||
validationSupport.addValidationSupport((IValidationSupport) new LoadingValidationSupportDstu2());
|
validationSupport.addValidationSupport((IValidationSupport) new LoadingValidationSupportDstu2());
|
||||||
|
@ -180,11 +163,6 @@ public class ValidateCommand extends BaseCommand {
|
||||||
FhirInstanceValidator instanceValidator = new FhirInstanceValidator(ctx);
|
FhirInstanceValidator instanceValidator = new FhirInstanceValidator(ctx);
|
||||||
val.registerValidatorModule(instanceValidator);
|
val.registerValidatorModule(instanceValidator);
|
||||||
ValidationSupportChain validationSupport = new ValidationSupportChain(new DefaultProfileValidationSupport(ctx), new InMemoryTerminologyServerValidationSupport(ctx));
|
ValidationSupportChain validationSupport = new ValidationSupportChain(new DefaultProfileValidationSupport(ctx), new InMemoryTerminologyServerValidationSupport(ctx));
|
||||||
if (igPack != null) {
|
|
||||||
IgPackParserDstu3 parser = new IgPackParserDstu3(getFhirContext());
|
|
||||||
IValidationSupport igValidationSupport = parser.parseIg(igPack, igpackFilename);
|
|
||||||
validationSupport.addValidationSupport(igValidationSupport);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (theCommandLine.hasOption("r")) {
|
if (theCommandLine.hasOption("r")) {
|
||||||
validationSupport.addValidationSupport((IValidationSupport) new LoadingValidationSupportDstu3());
|
validationSupport.addValidationSupport((IValidationSupport) new LoadingValidationSupportDstu3());
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
package ca.uhn.fhir.cli;
|
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
|
|
||||||
public class InstallIgPackTest {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testInstallIgPack() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,11 +1,8 @@
|
||||||
package ca.uhn.fhir.cli;
|
package ca.uhn.fhir.cli;
|
||||||
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Disabled;
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.fail;
|
|
||||||
|
|
||||||
public class ValidateCommandTest {
|
public class ValidateCommandTest {
|
||||||
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(ValidateCommandTest.class);
|
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(ValidateCommandTest.class);
|
||||||
|
|
||||||
|
@ -25,38 +22,4 @@ public class ValidateCommandTest {
|
||||||
"-p",
|
"-p",
|
||||||
"-n", resourcePath});
|
"-n", resourcePath});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
@Disabled
|
|
||||||
public void testValidateUsingIgPackSucceedingDstu2() {
|
|
||||||
String resourcePath = ValidateCommandTest.class.getResource("/argo-dstu2-observation-good.json").getFile();
|
|
||||||
ourLog.info(resourcePath);
|
|
||||||
|
|
||||||
App.main(new String[] {
|
|
||||||
"validate",
|
|
||||||
"-v", "dstu2",
|
|
||||||
"-p",
|
|
||||||
"--igpack", "src/test/resources/argo-dstu2.pack",
|
|
||||||
"-n", resourcePath});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testValidateUsingIgPackFailingDstu2() {
|
|
||||||
String resourcePath = ValidateCommandTest.class.getResource("/argo-dstu2-observation-bad.json").getFile();
|
|
||||||
ourLog.info(resourcePath);
|
|
||||||
|
|
||||||
try {
|
|
||||||
App.main(new String[] {
|
|
||||||
"validate",
|
|
||||||
"-v", "dstu2",
|
|
||||||
"-p",
|
|
||||||
"--igpack", "src/test/resources/argo-dstu2.pack",
|
|
||||||
"-n", resourcePath});
|
|
||||||
// Should not get here
|
|
||||||
fail();
|
|
||||||
} catch (CommandFailureException e) {
|
|
||||||
// good
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
type: remove
|
||||||
|
issue: 2229
|
||||||
|
title: "Remove support for the `upload-igpack` command. This command is no longer supported, as the IGPack format has been withdrawn and replaced with the FHIR NPM Package specification, which is also supported by HAPI FHIR"
|
|
@ -1,68 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xmlns="http://maven.apache.org/POM/4.0.0"
|
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<parent>
|
|
||||||
<artifactId>hapi-deployable-pom</artifactId>
|
|
||||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
|
||||||
<version>5.3.0-SNAPSHOT</version>
|
|
||||||
<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
|
|
||||||
</parent>
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
|
|
||||||
<artifactId>hapi-fhir-igpacks</artifactId>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
|
||||||
<artifactId>hapi-fhir-base</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
|
||||||
<artifactId>hapi-fhir-jpaserver-base</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>ca.uhn.hapi.fhir</groupId>
|
|
||||||
<artifactId>hapi-fhir-structures-dstu3</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>ch.qos.logback</groupId>
|
|
||||||
<artifactId>logback-classic</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.codehaus.mojo</groupId>
|
|
||||||
<artifactId>animal-sniffer-maven-plugin</artifactId>
|
|
||||||
<configuration>
|
|
||||||
<skip>true</skip>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.jacoco</groupId>
|
|
||||||
<artifactId>jacoco-maven-plugin</artifactId>
|
|
||||||
<configuration>
|
|
||||||
<dumpOnExit>true</dumpOnExit>
|
|
||||||
</configuration>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<id>default-prepare-agent</id>
|
|
||||||
<goals>
|
|
||||||
<goal>prepare-agent</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
|
|
||||||
</build>
|
|
||||||
</project>
|
|
|
@ -1,166 +0,0 @@
|
||||||
package ca.uhn.fhir.igpacks.parser;
|
|
||||||
|
|
||||||
/*-
|
|
||||||
* #%L
|
|
||||||
* hapi-fhir-igpacks
|
|
||||||
* %%
|
|
||||||
* Copyright (C) 2014 - 2020 University Health Network
|
|
||||||
* %%
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
* #L%
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
|
||||||
import ca.uhn.fhir.context.FhirVersionEnum;
|
|
||||||
import ca.uhn.fhir.parser.LenientErrorHandler;
|
|
||||||
import ca.uhn.fhir.rest.api.Constants;
|
|
||||||
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
|
||||||
import ca.uhn.fhir.util.StopWatch;
|
|
||||||
import org.apache.commons.lang3.Validate;
|
|
||||||
import org.hl7.fhir.dstu3.model.IdType;
|
|
||||||
import org.hl7.fhir.dstu3.model.ImplementationGuide;
|
|
||||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
|
||||||
import org.hl7.fhir.instance.model.api.IIdType;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.zip.ZipEntry;
|
|
||||||
import java.util.zip.ZipInputStream;
|
|
||||||
|
|
||||||
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
|
||||||
|
|
||||||
public abstract class BaseIgPackParser<T> {
|
|
||||||
|
|
||||||
private static final Logger ourLog = LoggerFactory.getLogger(BaseIgPackParser.class);
|
|
||||||
private final FhirContext myCtx;
|
|
||||||
|
|
||||||
public BaseIgPackParser(FhirContext theCtx) {
|
|
||||||
FhirVersionEnum expectedVersion = provideExpectedVersion();
|
|
||||||
Validate.isTrue(theCtx.getVersion().getVersion() == expectedVersion, "theCtx is not for the correct version, expecting " + expectedVersion);
|
|
||||||
|
|
||||||
myCtx = theCtx;
|
|
||||||
}
|
|
||||||
|
|
||||||
public FhirContext getCtx() {
|
|
||||||
return myCtx;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract T createValidationSupport(Map<IIdType, IBaseResource> theIgResources);
|
|
||||||
|
|
||||||
private IBaseResource findResource(Map<String, IBaseResource> theCandidateResources, IIdType theId) {
|
|
||||||
IBaseResource retVal = theCandidateResources.get(theId.toUnqualifiedVersionless().getValue());
|
|
||||||
if (retVal == null) {
|
|
||||||
throw new InternalErrorException("Unknown reference in ImplementationGuide: " + theId);
|
|
||||||
}
|
|
||||||
return retVal;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param theIgInputStream The "validator.pack" ZIP file
|
|
||||||
* @param theDescription A description (just used for logs)
|
|
||||||
*/
|
|
||||||
public T parseIg(InputStream theIgInputStream, String theDescription) {
|
|
||||||
Validate.notNull(theIgInputStream, "theIdInputStream must not be null");
|
|
||||||
String igResourceName = "ImplementationGuide-ig.json";
|
|
||||||
|
|
||||||
ourLog.info("Parsing IGPack: {}", theDescription);
|
|
||||||
StopWatch sw = new StopWatch();
|
|
||||||
|
|
||||||
ZipInputStream zipInputStream = new ZipInputStream(theIgInputStream);
|
|
||||||
ZipEntry entry;
|
|
||||||
try {
|
|
||||||
|
|
||||||
Map<String, IBaseResource> candidateResources = new HashMap<>();
|
|
||||||
Map<IIdType, IBaseResource> igResources = new HashMap<>();
|
|
||||||
|
|
||||||
while ((entry = zipInputStream.getNextEntry()) != null) {
|
|
||||||
if (entry.getName().endsWith(".json")) {
|
|
||||||
|
|
||||||
IBaseResource parsed;
|
|
||||||
InputStreamReader nextReader = new InputStreamReader(zipInputStream, Constants.CHARSET_UTF8);
|
|
||||||
|
|
||||||
if (entry.getName().equals(igResourceName)) {
|
|
||||||
parsed = FhirContext.forDstu3().newJsonParser().parseResource(ImplementationGuide.class, nextReader);
|
|
||||||
} else {
|
|
||||||
LenientErrorHandler errorHandler = new LenientErrorHandler();
|
|
||||||
errorHandler.setErrorOnInvalidValue(false);
|
|
||||||
parsed = myCtx.newJsonParser().setParserErrorHandler(errorHandler).parseResource(nextReader);
|
|
||||||
}
|
|
||||||
|
|
||||||
candidateResources.put(entry.getName(), parsed);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ourLog.info("Parsed {} candidateResources in {}ms", candidateResources.size(), sw.getMillis());
|
|
||||||
|
|
||||||
ImplementationGuide ig = (ImplementationGuide) candidateResources.get(igResourceName);
|
|
||||||
|
|
||||||
if (ig == null) {
|
|
||||||
throw new InternalErrorException("IG Pack '" + theDescription + "' does not contain a resource named: " + igResourceName);
|
|
||||||
}
|
|
||||||
|
|
||||||
HashMap<String, IBaseResource> newCandidateResources = new HashMap<>();
|
|
||||||
for (IBaseResource next : candidateResources.values()) {
|
|
||||||
newCandidateResources.put(next.getIdElement().toUnqualifiedVersionless().getValue(), next);
|
|
||||||
}
|
|
||||||
candidateResources = newCandidateResources;
|
|
||||||
|
|
||||||
for (ImplementationGuide.ImplementationGuidePackageComponent nextPackage : ig.getPackage()) {
|
|
||||||
ourLog.info("Processing package {}", nextPackage.getName());
|
|
||||||
|
|
||||||
for (ImplementationGuide.ImplementationGuidePackageResourceComponent nextResource : nextPackage.getResource()) {
|
|
||||||
if (isNotBlank(nextResource.getSourceReference().getReference())) {
|
|
||||||
IdType id = new IdType(nextResource.getSourceReference().getReference());
|
|
||||||
if (isNotBlank(id.getResourceType())) {
|
|
||||||
switch (id.getResourceType()) {
|
|
||||||
case "CodeSystem":
|
|
||||||
case "ConceptMap":
|
|
||||||
case "StructureDefinition":
|
|
||||||
case "ValueSet":
|
|
||||||
IBaseResource resource = findResource(candidateResources, id);
|
|
||||||
igResources.put(id.toUnqualifiedVersionless(), resource);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
ourLog.info("IG contains {} resources", igResources.size());
|
|
||||||
return createValidationSupport(igResources);
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new InternalErrorException("Failure while parsing IG: " + e, e);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param theIgPack The "validator.pack" ZIP file
|
|
||||||
* @param theDescription A description (just used for logs)
|
|
||||||
*/
|
|
||||||
public T parseIg(byte[] theIgPack, String theDescription) {
|
|
||||||
return parseIg(new ByteArrayInputStream(theIgPack), theDescription);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract FhirVersionEnum provideExpectedVersion();
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,56 +0,0 @@
|
||||||
package ca.uhn.fhir.igpacks.parser;
|
|
||||||
|
|
||||||
/*-
|
|
||||||
* #%L
|
|
||||||
* hapi-fhir-igpacks
|
|
||||||
* %%
|
|
||||||
* Copyright (C) 2014 - 2020 University Health Network
|
|
||||||
* %%
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
* #L%
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
|
||||||
import ca.uhn.fhir.context.FhirVersionEnum;
|
|
||||||
import ca.uhn.fhir.context.support.IValidationSupport;
|
|
||||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
|
||||||
import org.hl7.fhir.instance.model.api.IIdType;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class IgPackParserDstu2 extends BaseIgPackParser<IValidationSupport> {
|
|
||||||
|
|
||||||
public IgPackParserDstu2(FhirContext theCtx) {
|
|
||||||
super(massage(theCtx));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected IValidationSupport createValidationSupport(Map<IIdType, IBaseResource> theIgResources) {
|
|
||||||
return new IgPackValidationSupportDstu2(getCtx(), theIgResources);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected FhirVersionEnum provideExpectedVersion() {
|
|
||||||
return FhirVersionEnum.DSTU2_HL7ORG;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static FhirContext massage(FhirContext theCtx) {
|
|
||||||
if (theCtx.getVersion().getVersion() == FhirVersionEnum.DSTU2) {
|
|
||||||
return FhirContext.forDstu2Hl7Org();
|
|
||||||
} else {
|
|
||||||
return theCtx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,48 +0,0 @@
|
||||||
package ca.uhn.fhir.igpacks.parser;
|
|
||||||
|
|
||||||
/*-
|
|
||||||
* #%L
|
|
||||||
* hapi-fhir-igpacks
|
|
||||||
* %%
|
|
||||||
* Copyright (C) 2014 - 2020 University Health Network
|
|
||||||
* %%
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
* #L%
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
|
||||||
import ca.uhn.fhir.context.FhirVersionEnum;
|
|
||||||
import ca.uhn.fhir.context.support.IValidationSupport;
|
|
||||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
|
||||||
import org.hl7.fhir.instance.model.api.IIdType;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class IgPackParserDstu3 extends BaseIgPackParser<IValidationSupport> {
|
|
||||||
|
|
||||||
public IgPackParserDstu3(FhirContext theCtx) {
|
|
||||||
super(theCtx);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected IValidationSupport createValidationSupport(Map<IIdType, IBaseResource> theIgResources) {
|
|
||||||
return new IgPackValidationSupportDstu3(getCtx(), theIgResources);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected FhirVersionEnum provideExpectedVersion() {
|
|
||||||
return FhirVersionEnum.DSTU3;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,88 +0,0 @@
|
||||||
package ca.uhn.fhir.igpacks.parser;
|
|
||||||
|
|
||||||
/*-
|
|
||||||
* #%L
|
|
||||||
* hapi-fhir-igpacks
|
|
||||||
* %%
|
|
||||||
* Copyright (C) 2014 - 2020 University Health Network
|
|
||||||
* %%
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
* #L%
|
|
||||||
*/
|
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
|
||||||
import ca.uhn.fhir.context.support.IValidationSupport;
|
|
||||||
import ca.uhn.fhir.context.support.ValidationSupportContext;
|
|
||||||
import org.hl7.fhir.dstu2.model.ConceptMap;
|
|
||||||
import org.hl7.fhir.dstu2.model.StructureDefinition;
|
|
||||||
import org.hl7.fhir.dstu2.model.ValueSet;
|
|
||||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
|
||||||
import org.hl7.fhir.instance.model.api.IIdType;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class IgPackValidationSupportDstu2 implements IValidationSupport {
|
|
||||||
private final Map<IIdType, IBaseResource> myIgResources;
|
|
||||||
private FhirContext myCtx;
|
|
||||||
|
|
||||||
public IgPackValidationSupportDstu2(FhirContext theCtx, Map<IIdType, IBaseResource> theIgResources) {
|
|
||||||
myCtx = theCtx;
|
|
||||||
myIgResources = theIgResources;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <T extends IBaseResource> T fetchResource(Class<T> theClass, String theUri) {
|
|
||||||
for (Map.Entry<IIdType, IBaseResource> next : myIgResources.entrySet()) {
|
|
||||||
if (theClass.equals(ConceptMap.class)) {
|
|
||||||
if (theClass.isAssignableFrom(next.getValue().getClass())) {
|
|
||||||
ConceptMap sd = ((ConceptMap) next.getValue());
|
|
||||||
if (sd.getUrl().equals(theUri)) {
|
|
||||||
return (T) sd;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (theClass.equals(StructureDefinition.class)) {
|
|
||||||
if (theClass.isAssignableFrom(next.getValue().getClass())) {
|
|
||||||
StructureDefinition sd = ((StructureDefinition) next.getValue());
|
|
||||||
if (sd.getUrl().equals(theUri)) {
|
|
||||||
return (T) sd;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (theClass.equals(ValueSet.class)) {
|
|
||||||
if (theClass.isAssignableFrom(next.getValue().getClass())) {
|
|
||||||
ValueSet sd = ((ValueSet) next.getValue());
|
|
||||||
if (sd.getUrl().equals(theUri)) {
|
|
||||||
return (T) sd;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isCodeSystemSupported(ValidationSupportContext theValidationSupportContext, String theSystem) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public FhirContext getFhirContext() {
|
|
||||||
return myCtx;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,124 +0,0 @@
|
||||||
package ca.uhn.fhir.igpacks.parser;
|
|
||||||
|
|
||||||
/*-
|
|
||||||
* #%L
|
|
||||||
* hapi-fhir-igpacks
|
|
||||||
* %%
|
|
||||||
* Copyright (C) 2014 - 2020 University Health Network
|
|
||||||
* %%
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
* #L%
|
|
||||||
*/
|
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
|
||||||
import ca.uhn.fhir.context.support.ConceptValidationOptions;
|
|
||||||
import ca.uhn.fhir.context.support.IValidationSupport;
|
|
||||||
import ca.uhn.fhir.context.support.ValidationSupportContext;
|
|
||||||
import org.hl7.fhir.dstu3.model.CodeSystem;
|
|
||||||
import org.hl7.fhir.dstu3.model.ConceptMap;
|
|
||||||
import org.hl7.fhir.dstu3.model.StructureDefinition;
|
|
||||||
import org.hl7.fhir.dstu3.model.ValueSet;
|
|
||||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
|
||||||
import org.hl7.fhir.instance.model.api.IIdType;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class IgPackValidationSupportDstu3 implements IValidationSupport {
|
|
||||||
private final Map<IIdType, IBaseResource> myIgResources;
|
|
||||||
private FhirContext myCtx;
|
|
||||||
|
|
||||||
public IgPackValidationSupportDstu3(FhirContext theCtx, Map<IIdType, IBaseResource> theIgResources) {
|
|
||||||
myIgResources = theIgResources;
|
|
||||||
myCtx = theCtx;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<IBaseResource> fetchAllConformanceResources() {
|
|
||||||
return new ArrayList<>(myIgResources.values());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ValueSet fetchValueSet(String theSystem) {
|
|
||||||
return fetchResource(ValueSet.class, theSystem);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <T extends IBaseResource> T fetchResource(Class<T> theClass, String theUri) {
|
|
||||||
for (Map.Entry<IIdType, IBaseResource> next : myIgResources.entrySet()) {
|
|
||||||
if (theClass.equals(CodeSystem.class)) {
|
|
||||||
if (theClass.isAssignableFrom(next.getValue().getClass())) {
|
|
||||||
CodeSystem sd = ((CodeSystem) next.getValue());
|
|
||||||
if (sd.getUrl().equals(theUri)) {
|
|
||||||
return (T) sd;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (theClass.equals(ConceptMap.class)) {
|
|
||||||
if (theClass.isAssignableFrom(next.getValue().getClass())) {
|
|
||||||
ConceptMap sd = ((ConceptMap) next.getValue());
|
|
||||||
if (sd.getUrl().equals(theUri)) {
|
|
||||||
return (T) sd;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (theClass.equals(StructureDefinition.class)) {
|
|
||||||
if (theClass.isAssignableFrom(next.getValue().getClass())) {
|
|
||||||
StructureDefinition sd = ((StructureDefinition) next.getValue());
|
|
||||||
if (sd.getUrl().equals(theUri)) {
|
|
||||||
return (T) sd;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (theClass.equals(ValueSet.class)) {
|
|
||||||
if (theClass.isAssignableFrom(next.getValue().getClass())) {
|
|
||||||
ValueSet sd = ((ValueSet) next.getValue());
|
|
||||||
if (sd.getUrl().equals(theUri)) {
|
|
||||||
return (T) sd;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public StructureDefinition fetchStructureDefinition(String theUrl) {
|
|
||||||
return fetchResource(StructureDefinition.class, theUrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isCodeSystemSupported(ValidationSupportContext theValidationSupportContext, String theSystem) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CodeValidationResult validateCode(ValidationSupportContext theValidationSupportContext, ConceptValidationOptions theOptions, String theCodeSystem, String theCode, String theDisplay, String theValueSetUrl) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public LookupCodeResult lookupCode(ValidationSupportContext theValidationSupportContext, String theSystem, String theCode) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public FhirContext getFhirContext() {
|
|
||||||
return myCtx;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
package ca.uhn.fhir.igpack.parser;
|
|
||||||
|
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
|
||||||
import ca.uhn.fhir.context.support.IValidationSupport;
|
|
||||||
import ca.uhn.fhir.igpacks.parser.IgPackParserDstu3;
|
|
||||||
import org.hl7.fhir.dstu3.model.ValueSet;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
||||||
|
|
||||||
public class IgPackParserDstu3Test {
|
|
||||||
private static final Logger ourLog = LoggerFactory.getLogger(IgPackParserDstu3Test.class);
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testParseIg() {
|
|
||||||
|
|
||||||
FhirContext ctx = FhirContext.forDstu3();
|
|
||||||
IgPackParserDstu3 igParser = new IgPackParserDstu3(ctx);
|
|
||||||
|
|
||||||
IValidationSupport result = igParser.parseIg(IgPackParserDstu3Test.class.getResourceAsStream("/us-core-stu3-validator.pack"), "US-Core STU3");
|
|
||||||
|
|
||||||
assertNotNull(result.fetchResource(ValueSet.class, "http://hl7.org/fhir/us/core/ValueSet/simple-language"));
|
|
||||||
assertEquals(50, result.fetchAllConformanceResources().size());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Binary file not shown.
|
@ -1,30 +0,0 @@
|
||||||
<configuration>
|
|
||||||
|
|
||||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
|
||||||
<encoder>
|
|
||||||
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} [%file:%line] - %msg%n
|
|
||||||
</pattern>
|
|
||||||
</encoder>
|
|
||||||
</appender>
|
|
||||||
|
|
||||||
<logger name="org.eclipse" additivity="false" level="info">
|
|
||||||
<appender-ref ref="STDOUT" />
|
|
||||||
</logger>
|
|
||||||
<logger name="org.apache" additivity="false" level="info">
|
|
||||||
<appender-ref ref="STDOUT" />
|
|
||||||
</logger>
|
|
||||||
<logger name="org.thymeleaf" additivity="false" level="warn">
|
|
||||||
<appender-ref ref="STDOUT" />
|
|
||||||
</logger>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
<logger name="ca.uhn.fhir.rest.client" additivity="false" level="trace">
|
|
||||||
<appender-ref ref="STDOUT" />
|
|
||||||
</logger>
|
|
||||||
-->
|
|
||||||
|
|
||||||
<root level="info">
|
|
||||||
<appender-ref ref="STDOUT" />
|
|
||||||
</root>
|
|
||||||
|
|
||||||
</configuration>
|
|
Binary file not shown.
1
pom.xml
1
pom.xml
|
@ -2530,7 +2530,6 @@
|
||||||
<module>hapi-fhir-validation-resources-r4</module>
|
<module>hapi-fhir-validation-resources-r4</module>
|
||||||
<module>hapi-fhir-structures-r5</module>
|
<module>hapi-fhir-structures-r5</module>
|
||||||
<module>hapi-fhir-validation-resources-r5</module>
|
<module>hapi-fhir-validation-resources-r5</module>
|
||||||
<module>hapi-fhir-igpacks</module>
|
|
||||||
<module>hapi-fhir-elasticsearch-6</module>
|
<module>hapi-fhir-elasticsearch-6</module>
|
||||||
<module>hapi-fhir-jpaserver-api</module>
|
<module>hapi-fhir-jpaserver-api</module>
|
||||||
<module>hapi-fhir-jpaserver-model</module>
|
<module>hapi-fhir-jpaserver-model</module>
|
||||||
|
|
Loading…
Reference in New Issue