diff --git a/docs/validation.md b/docs/validation.md index a487c6c558..7720d733e0 100644 --- a/docs/validation.md +++ b/docs/validation.md @@ -155,7 +155,7 @@ documentation. The list of available profiles is available at [[server]/gazelle/validation/profiles](https://test.ahdis.ch/matchboxv3/gazelle/validation/profiles), and the -validation request is sent to `POST [server]/gazelle/validation/validate`. +validation request is sent to `POST [server]/gazelle/validation/v2/validate`. To configure a Matchbox instance in the EVSClient, the following actions shall be done: diff --git a/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/GazelleValidationWs.java b/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/GazelleValidationWs.java index b8be5d8e73..384d90855d 100644 --- a/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/GazelleValidationWs.java +++ b/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/GazelleValidationWs.java @@ -15,7 +15,6 @@ import ch.ahdis.matchbox.validation.gazelle.models.metadata.Service; import ch.ahdis.matchbox.validation.gazelle.models.validation.*; -import org.hl7.fhir.r5.model.StringType; import org.hl7.fhir.r5.model.StructureDefinition; import org.hl7.fhir.utilities.validation.ValidationMessage; import org.slf4j.Logger; @@ -47,7 +46,7 @@ public class GazelleValidationWs { */ private static final String METADATA_PATH = "/metadata"; private static final String PROFILES_PATH = "/validation/profiles"; - private static final String VALIDATE_PATH = "/validation/validate"; + private static final String VALIDATE_PATH = "/validation/v2/validate"; private final MatchboxEngineSupport matchboxEngineSupport; @@ -112,6 +111,7 @@ public List getProfiles() { // PATCHed: filename contains the StructureDefinition title. profile.setProfileName("%s (%s)".formatted(packageVersionResource.getFilename(), version)); profile.setDomain(packageVersionResource.getPackageVersion().getPackageId()); + profile.setVersion(version); profiles.add(profile); // If the package is current, we also add it version-less @@ -121,6 +121,7 @@ public List getProfiles() { // PATCHed: filename contains the StructureDefinition title. profile2.setProfileName(packageVersionResource.getFilename()); profile2.setDomain(packageVersionResource.getPackageVersion().getPackageId()); + profile2.setVersion(version); profiles.add(profile2); } }); @@ -140,8 +141,8 @@ public ValidationReport postValidate(@RequestBody final ValidationRequest valida final CliContext cliContext = new CliContext(this.baseCliContext); final var report = new ValidationReport(); - report.setValidationItems(new ArrayList<>(validationRequest.getValidationItems().size())); - report.setReports(new ArrayList<>(validationRequest.getValidationItems().size())); + report.setValidationItems(new ArrayList<>(validationRequest.getInputs().size())); + report.setReports(new ArrayList<>(validationRequest.getInputs().size())); report.setDisclaimer("Matchbox disclaims"); String profileCanonical = validationRequest.getValidationProfileId(); @@ -149,6 +150,7 @@ public ValidationReport postValidate(@RequestBody final ValidationRequest valida // Response: create the validation method now, with the info we already have final var method = new ValidationMethod(); method.setValidationProfileID(validationRequest.getValidationProfileId()); + method.setValidationProfileName("FHIR " + validationRequest.getValidationProfileId()); method.setValidationServiceName("Matchbox"); method.setValidationServiceVersion(VersionUtil.getVersion()); report.setValidationMethod(method); @@ -212,10 +214,10 @@ public ValidationReport postValidate(@RequestBody final ValidationRequest valida } // Response: add the validation items (requests) to the response - report.getValidationItems().addAll(validationRequest.getValidationItems()); + report.getValidationItems().addAll(validationRequest.getInputs()); // Perform the validation of all items with the given engine - for (final var item : validationRequest.getValidationItems()) { + for (final var item : validationRequest.getInputs()) { try { report.addValidationSubReport(this.validateItem(engine, item, profileCanonical)); } catch (final Exception exception) { @@ -257,7 +259,7 @@ MatchboxEngine getEngine(final String canonicalWithVersion, * Performs the validation of the given item with the given engine. */ ValidationSubReport validateItem(final MatchboxEngine engine, - final ValidationItem item, + final Input item, final String profile) { final String content = new String(item.getContent(), StandardCharsets.UTF_8); final var encoding = EncodingEnum.detectEncoding(content); diff --git a/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationItem.java b/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/Input.java similarity index 57% rename from matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationItem.java rename to matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/Input.java index 30e3636254..3ca1eecc35 100644 --- a/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationItem.java +++ b/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/Input.java @@ -10,13 +10,16 @@ * The model of a validation item. *

* Copy-pasted from - * https://gitlab.inria.fr/gazelle/library/validation-service-api/-/blob/master/validation-api/src/main/java/net/ihe/gazelle/validation/api/domain/request/structure/ValidationItem.java?ref_type=heads + * https://gitlab.inria.fr/gazelle/public/core/validation-service-api/-/blob/2.0.0/validation-v2-api/src/main/java/net/ihe/gazelle/validation/v2/api/business/Input.java?ref_type=tags * * @author Achraf Achkari * @author Quentin Ligier **/ @JsonRootName(value = "validationItem") -public class ValidationItem { +public class Input { + + @JsonProperty(value = "id") + private String id; @JsonProperty(value = "itemId") private String itemId; @@ -24,17 +27,23 @@ public class ValidationItem { @JsonProperty(value = "content") private byte[] content; - @JsonProperty(value = "role") - private String role; - @JsonProperty(value = "location") private String location; + public String getId() { + return this.id; + } + + public Input setId(final String id) { + this.id = id; + return this; + } + public String getItemId() { return itemId; } - public ValidationItem setItemId(String itemId) { + public Input setItemId(String itemId) { this.itemId = itemId; return this; } @@ -43,25 +52,16 @@ public byte[] getContent() { return content; } - public ValidationItem setContent(byte[] content) { + public Input setContent(byte[] content) { this.content = content; return this; } - public String getRole() { - return role; - } - - public ValidationItem setRole(String role) { - this.role = role; - return this; - } - public String getLocation() { return location; } - public ValidationItem setLocation(String location) { + public Input setLocation(String location) { this.location = location; return this; } @@ -81,16 +81,6 @@ public boolean isLocationValid(){ return location == null || isURLValid(location); } - @JsonIgnore - public boolean isRoleValid(){ - return role == null || !role.isBlank(); - } - - @JsonIgnore - public boolean isRoleDefined(){ - return role != null && !role.isBlank(); - } - @JsonIgnore public boolean isURLValid(String url) { try { @@ -103,14 +93,14 @@ public boolean isURLValid(String url) { @JsonIgnore public boolean isValid(){ - return isContentValid() && isItemIdValid() && isLocationValid() && isRoleValid(); + return isContentValid() && isItemIdValid() && isLocationValid(); } - public static ValidationItem clone(ValidationItem validationItem) { - return new ValidationItem() - .setItemId(validationItem.getItemId()) - .setContent(validationItem.getContent() != null ? validationItem.getContent().clone():null) - .setRole(validationItem.getRole()) - .setLocation(validationItem.getLocation()); + public static Input clone(Input input) { + return new Input() + .setId(input.getId()) + .setItemId(input.getItemId()) + .setContent(input.getContent() != null ? input.getContent().clone():null) + .setLocation(input.getLocation()); } } diff --git a/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/SupportedInput.java b/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/SupportedInput.java new file mode 100644 index 0000000000..a90db404d8 --- /dev/null +++ b/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/SupportedInput.java @@ -0,0 +1,79 @@ +package ch.ahdis.matchbox.validation.gazelle.models.validation; + +public class SupportedInput { + + private String id; + private String label; + private boolean required = true; + + /** + * Default constructor. + */ + public SupportedInput() { + // Default constructor + } + + /** + * Gets the id of the input. + * + * @return the id + */ + public String getId() { + return id; + } + + /** + * Sets the id of the input. + * + * @param id the id + * + * @return the current SupportedInput instance + */ + public SupportedInput setId(String id) { + this.id = id; + return this; + } + + /** + * Gets the human-readable label of the input. + * + * @return the label + */ + public String getLabel() { + return label; + } + + /** + * Sets the human-readable label of the input. + * + * @param label the label + * + * @return the current SupportedInput instance + */ + public SupportedInput setLabel(String label) { + this.label = label; + return this; + } + + /** + * Indicates whether the input is required. + * + * @return true if the input is required, false if optional. + */ + public boolean isRequired() { + return required; + } + + /** + * Sets whether the input is required (true by default). + * + * @param required true if the input is required, false if optional. + * + * @return the current SupportedInput instance + */ + public SupportedInput setRequired(boolean required) { + this.required = required; + return this; + } + +} diff --git a/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationCounters.java b/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationCounters.java index b186617da9..7e4aaf7c7c 100644 --- a/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationCounters.java +++ b/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationCounters.java @@ -15,10 +15,22 @@ public class ValidationCounters { private Integer numberOfFailedWithWarnings = 0; private Integer numberOfFailedWithErrors = 0; private Integer numberOfUnexpectedErrors = 0; + private Integer numberOfUndefined = 0; + public ValidationCounters() { } + public Integer getNumberOfUndefined() { + return numberOfUndefined; + } + + public ValidationCounters setNumberOfUndefined(Integer numberOfUndefined) { + this.numberOfUndefined = numberOfUndefined; + return this; + } + + public Integer getNumberOfUnexpectedErrors() { return this.numberOfUnexpectedErrors; } @@ -89,12 +101,18 @@ public void incrementUnexpectedErrors() { this.numberOfUnexpectedErrors = this.numberOfUnexpectedErrors + 1; } + public void incrementUndefined() { + Integer var1 = this.numberOfUndefined; + this.numberOfUndefined = this.numberOfUndefined + 1; + } + public void addNumbersFromSubCounters(ValidationCounters subCounters) { this.numberOfAssertions = this.numberOfAssertions + subCounters.getNumberOfAssertions(); this.numberOfFailedWithInfos = this.numberOfFailedWithInfos + subCounters.getNumberOfFailedWithInfos(); this.numberOfFailedWithWarnings = this.numberOfFailedWithWarnings + subCounters.getNumberOfFailedWithWarnings(); this.numberOfFailedWithErrors = this.numberOfFailedWithErrors + subCounters.getNumberOfFailedWithErrors(); this.numberOfUnexpectedErrors = this.numberOfUnexpectedErrors + subCounters.getNumberOfUnexpectedErrors(); + this.numberOfUndefined = this.numberOfUndefined + subCounters.getNumberOfUndefined(); } @JsonIgnore @@ -142,14 +160,16 @@ public boolean equals(Object o) { && Objects.equals(this.numberOfFailedWithInfos, that.numberOfFailedWithInfos) && Objects.equals(this.numberOfFailedWithWarnings, that.numberOfFailedWithWarnings) && Objects.equals(this.numberOfFailedWithErrors, that.numberOfFailedWithErrors) - && Objects.equals(this.numberOfUnexpectedErrors, that.numberOfUnexpectedErrors); + && Objects.equals(this.numberOfUnexpectedErrors, that.numberOfUnexpectedErrors) + && Objects.equals(this.numberOfUndefined, that.numberOfUndefined); } } public int hashCode() { return Objects.hash( new Object[]{ - this.numberOfAssertions, this.numberOfFailedWithInfos, this.numberOfFailedWithWarnings, this.numberOfFailedWithErrors, this.numberOfUnexpectedErrors + this.numberOfAssertions, this.numberOfFailedWithInfos, this.numberOfFailedWithWarnings, + this.numberOfFailedWithErrors, this.numberOfUnexpectedErrors, this.numberOfUndefined } ); } @@ -162,6 +182,7 @@ static ValidationCounters clone(ValidationCounters validationCounters) { .setNumberOfFailedWithInfos(validationCounters.getNumberOfFailedWithInfos()) .setNumberOfFailedWithWarnings(validationCounters.getNumberOfFailedWithWarnings()) .setNumberOfFailedWithErrors(validationCounters.getNumberOfFailedWithErrors()) - .setNumberOfUnexpectedErrors(validationCounters.getNumberOfUnexpectedErrors()); + .setNumberOfUnexpectedErrors(validationCounters.getNumberOfUnexpectedErrors()) + .setNumberOfUndefined(validationCounters.getNumberOfUndefined()); } } diff --git a/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationMethod.java b/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationMethod.java index 1232801dae..349ec5fd73 100644 --- a/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationMethod.java +++ b/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationMethod.java @@ -12,6 +12,7 @@ public class ValidationMethod { private String validationServiceVersion; private String validationProfileID; private String validationProfileVersion; + private String validationProfileName; public ValidationMethod() { } @@ -52,6 +53,15 @@ public ValidationMethod setValidationProfileVersion(String validationProfileVers return this; } + public String getValidationProfileName() { + return this.validationProfileName; + } + + public ValidationMethod setValidationProfileName(final String validationProfileName) { + this.validationProfileName = validationProfileName; + return this; + } + @JsonIgnore public boolean isValidationServiceNameValid() { return this.validationServiceName != null && !this.validationServiceName.isBlank(); @@ -87,6 +97,7 @@ static ValidationMethod clone(ValidationMethod validationMethod) { .setValidationServiceName(validationMethod.getValidationServiceName()) .setValidationServiceVersion(validationMethod.getValidationServiceVersion()) .setValidationProfileID(validationMethod.getValidationProfileID()) - .setValidationProfileVersion(validationMethod.getValidationProfileVersion()); + .setValidationProfileVersion(validationMethod.getValidationProfileVersion()) + .setValidationProfileName(validationMethod.getValidationProfileName()); } } diff --git a/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationProfile.java b/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationProfile.java index c5364528da..b90d7e4cca 100644 --- a/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationProfile.java +++ b/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationProfile.java @@ -14,7 +14,6 @@ * @author Quentin Ligier **/ @JsonTypeName("validationProfile") -@JsonPropertyOrder({"profileID", "profileName", "domain", "coveredItems"}) public class ValidationProfile { @JsonProperty("profileID") @@ -23,6 +22,9 @@ public class ValidationProfile { @JsonProperty("profileName") private String profileName; + @JsonProperty("version") + private String version; + // Not really useful for FHIR transactions @JsonProperty("coveredItems") private List coveredItems = new ArrayList<>(); @@ -31,6 +33,13 @@ public class ValidationProfile { @JsonProperty("domain") private String domain; + @JsonProperty("standards") + private List standards = new ArrayList<>(); + + @JsonProperty("supportedInputs") + private List supportedInputs = new ArrayList<>(); + + public String getDomain() { return this.domain; } @@ -72,6 +81,32 @@ public ValidationProfile addCoveredItem(String item) { return this; } + public String getVersion() { + return this.version; + } + + public ValidationProfile setVersion(final String version) { + this.version = version; + return this; + } + + public List getStandards() { + return this.standards; + } + + public ValidationProfile setStandards(final List standards) { + this.standards = standards; + return this; + } + + public List getSupportedInputs() { + return this.supportedInputs; + } + + public void setSupportedInputs(final List supportedInputs) { + this.supportedInputs = supportedInputs; + } + @JsonIgnore public boolean isProfileNameValid() { return this.profileName == null || !this.profileName.isBlank(); diff --git a/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationReport.java b/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationReport.java index cbfba52c57..63ad5cbd99 100644 --- a/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationReport.java +++ b/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationReport.java @@ -10,7 +10,8 @@ * @author Quentin Ligier **/ public class ValidationReport { - private String modelVersion = "0.1"; + public static final String MODEL_VERSION = "2.0"; + private String uuid; private Date dateTime; private String disclaimer; @@ -18,7 +19,7 @@ public class ValidationReport { private ValidationTestResult overallResult = ValidationTestResult.UNDEFINED; private List additionalMetadata; private List reports; - private List validationItems; + private List inputs; private ValidationCounters counters = new ValidationCounters(); public ValidationReport() { @@ -37,11 +38,10 @@ public ValidationReport setUuid(String uuid) { } public String getModelVersion() { - return this.modelVersion; + return MODEL_VERSION; } public ValidationReport setModelVersion(String modelVersion) { - this.modelVersion = modelVersion; return this; } @@ -117,12 +117,12 @@ public ValidationReport addAdditionalMetadata(Metadata metadata) { return this; } - public ValidationReport addValidationItem(ValidationItem validationItem) { - if (this.validationItems == null) { - this.validationItems = new ArrayList(); + public ValidationReport addValidationItem(Input input) { + if (this.inputs == null) { + this.inputs = new ArrayList(); } - this.validationItems.add(validationItem); + this.inputs.add(input); return this; } @@ -135,12 +135,12 @@ public ValidationReport addValidationSubReport(ValidationSubReport validationSub return this; } - public List getValidationItems() { - return this.validationItems; + public List getValidationItems() { + return this.inputs; } - public ValidationReport setValidationItems(List validationItems) { - this.validationItems = validationItems; + public ValidationReport setValidationItems(List inputs) { + this.inputs = inputs; return this; } @@ -193,11 +193,6 @@ public boolean isValidationTestResultValid() { return this.overallResult != null; } - @JsonIgnore - public boolean isModelVersionValid() { - return this.modelVersion == null || !this.modelVersion.isBlank(); - } - @JsonIgnore public boolean isReportsValid() { return this.reports == null || !this.reports.isEmpty(); @@ -210,7 +205,7 @@ public boolean isAdditionalMetadataValid() { @JsonIgnore public boolean isValidationItemsValid() { - return this.validationItems == null || !this.validationItems.isEmpty(); + return this.inputs == null || !this.inputs.isEmpty(); } @JsonIgnore @@ -241,7 +236,7 @@ static ValidationReport clone(ValidationReport validationReport) { .setUuid(validationReport.getUuid()) .setValidationMethod(ValidationMethod.clone(validationReport.getValidationMethod())) .setValidationItems( - validationReport.getValidationItems() != null ? validationReport.getValidationItems().stream().map(ValidationItem::clone).toList() : null + validationReport.getValidationItems() != null ? validationReport.getValidationItems().stream().map(Input::clone).toList() : null ) .setReports(validationReport.getReports() != null ? validationReport.getReports().stream().map(ValidationSubReport::clone).toList() : null) .setAdditionalMetadata( diff --git a/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationRequest.java b/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationRequest.java index 3aaaef0a3a..4f07f4aaac 100644 --- a/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationRequest.java +++ b/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationRequest.java @@ -11,44 +11,19 @@ * The model of a validation request, containing a list of items to validate. *

* Copy-pasted from - * https://gitlab.inria.fr/gazelle/library/validation-service-api/-/blob/master/validation-api/src/main/java/net/ihe/gazelle/validation/api/domain/request/structure/ValidationRequest.java?ref_type=heads + * https://gitlab.inria.fr/gazelle/public/core/validation-service-api/-/blob/2.0.0/validation-v2-api/src/main/java/net/ihe/gazelle/validation/v2/api/business/request/ValidationRequest.java * * @author Achraf Achkari * @author Quentin Ligier **/ @JsonRootName(value = "validationRequest") public class ValidationRequest { - public static final String API_VERSION = "0.1"; - - @JsonProperty(value = "apiVersion") - private String apiVersion = API_VERSION; - - @JsonProperty(value = "validationServiceName") - private String validationServiceName; // given In URL @JsonProperty(value = "validationProfileId") private String validationProfileId; - @JsonProperty(value = "validationItems") - private List validationItems; - - public String getApiVersion() { - return apiVersion; - } - - public ValidationRequest setApiVersion(String apiVersion) { - this.apiVersion = apiVersion; - return this; - } - - public String getValidationServiceName() { - return validationServiceName; - } - - public ValidationRequest setValidationServiceName(String validationServiceName) { - this.validationServiceName = validationServiceName; - return this; - } + @JsonProperty(value = "inputs") + private List inputs; public String getValidationProfileId() { return validationProfileId; @@ -59,19 +34,19 @@ public ValidationRequest setValidationProfileId(String validationProfileId) { return this; } - public List getValidationItems() { - return validationItems; + public List getInputs() { + return inputs; } - public ValidationRequest setValidationItems(List validationItems) { - this.validationItems = validationItems; + public ValidationRequest setInputs(List inputs) { + this.inputs = inputs; return this; } - public ValidationRequest addValidationItem(ValidationItem validationItem){ - if(this.validationItems == null){ - this.validationItems = new ArrayList<>(); + public ValidationRequest addInput(Input inputs){ + if(this.inputs == null) { + this.inputs = new ArrayList<>(); } - this.validationItems.add(validationItem); + this.inputs.add(inputs); return this; } @@ -81,23 +56,12 @@ public boolean isValidationProfileIdValid(){ } @JsonIgnore - public boolean isValidationServiceNameValid(){ - return validationServiceName != null && !validationServiceName.isBlank(); - } - - @JsonIgnore - public boolean isValidationItemsValid(){ - return validationItems != null && !validationItems.isEmpty(); - } - - @JsonIgnore - public boolean isValidationItemsRolesValid(){ - return validationItems == null || validationItems.size()<2 - || validationItems.stream().allMatch(item ->item.getRole() !=null && !item.getRole().isBlank()); + public boolean isInputsValid(){ + return inputs != null && !inputs.isEmpty(); } @JsonIgnore public boolean isValid(){ - return isValidationItemsValid() && isValidationProfileIdValid() && isValidationServiceNameValid(); + return isInputsValid() && isValidationProfileIdValid(); } } diff --git a/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationSubReport.java b/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationSubReport.java index eb604a4416..f104ee60b6 100644 --- a/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationSubReport.java +++ b/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/models/validation/ValidationSubReport.java @@ -1,6 +1,6 @@ package ch.ahdis.matchbox.validation.gazelle.models.validation; -import ch.ahdis.matchbox.validation.gazelle.utils.BidMap; +import ch.ahdis.matchbox.validation.gazelle.utils.BidiMap; import com.fasterxml.jackson.annotation.JsonIgnore; import java.util.ArrayList; @@ -20,10 +20,10 @@ public class ValidationSubReport { private List assertionReports; private ValidationCounters subCounters = new ValidationCounters(); private List unexpectedErrors; - private static final BidMap validationTestResultWeights = BidMap.of( - new BidMap.Entry(ValidationTestResult.PASSED, 0), - new BidMap.Entry(ValidationTestResult.FAILED, 1), - new BidMap.Entry(ValidationTestResult.UNDEFINED, 2)); + private static final BidiMap validationTestResultWeights = BidiMap.of( + new BidiMap.Entry(ValidationTestResult.PASSED, 0), + new BidiMap.Entry(ValidationTestResult.FAILED, 1), + new BidiMap.Entry(ValidationTestResult.UNDEFINED, 2)); public ValidationSubReport() { } diff --git a/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/utils/BidMap.java b/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/utils/BidiMap.java similarity index 78% rename from matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/utils/BidMap.java rename to matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/utils/BidiMap.java index 6201c20b13..5c1213a90f 100644 --- a/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/utils/BidMap.java +++ b/matchbox-server/src/main/java/ch/ahdis/matchbox/validation/gazelle/utils/BidiMap.java @@ -4,17 +4,12 @@ import java.util.HashMap; import java.util.Map; -/** - * matchbox - * - * @author Quentin Ligier - **/ -public class BidMap extends HashMap { +public class BidiMap extends HashMap { @Serial private static final long serialVersionUID = 5425067725254365745L; private final Map reversedMap = new HashMap<>(); - public BidMap() { + public BidiMap() { } public K getKey(V value) { @@ -51,10 +46,10 @@ public V put(K key, V value) { } @SafeVarargs - public static BidMap of(BidMap.Entry... entries) { - BidMap result = new BidMap<>(); + public static BidiMap of(BidiMap.Entry... entries) { + BidiMap result = new BidiMap<>(); - for(BidMap.Entry entry : entries) { + for(BidiMap.Entry entry : entries) { result.put(entry.key, entry.value); } @@ -77,7 +72,7 @@ public K getKey() { return this.key; } - public BidMap.Entry setKey(K key) { + public BidiMap.Entry setKey(K key) { this.key = key; return this; } @@ -86,7 +81,7 @@ public V getValue() { return this.value; } - public BidMap.Entry setValue(V value) { + public BidiMap.Entry setValue(V value) { this.value = value; return this; } diff --git a/matchbox-server/src/test/java/ch/ahdis/matchbox/gazelle/GazelleClient.java b/matchbox-server/src/test/java/ch/ahdis/matchbox/gazelle/GazelleClient.java index 492b15ee61..5efbd345cb 100644 --- a/matchbox-server/src/test/java/ch/ahdis/matchbox/gazelle/GazelleClient.java +++ b/matchbox-server/src/test/java/ch/ahdis/matchbox/gazelle/GazelleClient.java @@ -1,6 +1,6 @@ package ch.ahdis.matchbox.gazelle; -import ch.ahdis.matchbox.validation.gazelle.models.validation.ValidationItem; +import ch.ahdis.matchbox.validation.gazelle.models.validation.Input; import ch.ahdis.matchbox.validation.gazelle.models.validation.ValidationProfile; import ch.ahdis.matchbox.validation.gazelle.models.validation.ValidationReport; import ch.ahdis.matchbox.validation.gazelle.models.validation.ValidationRequest; @@ -48,16 +48,13 @@ public List getProfiles() throws IOException, InterruptedExce public ValidationReport validate(final String content, final String profileId) throws IOException, InterruptedException { final var validationRequest = new ValidationRequest(); - validationRequest.setValidationServiceName("Matchbox"); validationRequest.setValidationProfileId(profileId); - validationRequest.setApiVersion("3.9.9"); - validationRequest.addValidationItem(new ValidationItem() - .setItemId("first") - .setContent(content.getBytes(StandardCharsets.UTF_8)) - .setRole("request") - .setLocation("localhost")); + validationRequest.addInput(new Input() + .setItemId("first") + .setContent(content.getBytes(StandardCharsets.UTF_8)) + .setLocation("localhost")); - final var dest = this.serverUri.resolve("validation/validate"); + final var dest = this.serverUri.resolve("validation/v2/validate"); System.out.printf("Destination: %s%n", dest); final HttpRequest request = HttpRequest.newBuilder(dest) diff --git a/matchbox-server/src/test/java/ch/ahdis/matchbox/test/MatchboxApiR4Test.java b/matchbox-server/src/test/java/ch/ahdis/matchbox/test/MatchboxApiR4Test.java index fe91fccab6..b7812f13ce 100644 --- a/matchbox-server/src/test/java/ch/ahdis/matchbox/test/MatchboxApiR4Test.java +++ b/matchbox-server/src/test/java/ch/ahdis/matchbox/test/MatchboxApiR4Test.java @@ -4,7 +4,7 @@ import ca.uhn.fhir.context.FhirContext; import ca.uhn.fhir.context.RuntimeResourceDefinition; import ca.uhn.fhir.jpa.starter.Application; -import ch.ahdis.matchbox.validation.gazelle.models.validation.ValidationItem; +import ch.ahdis.matchbox.validation.gazelle.models.validation.Input; import ch.ahdis.matchbox.validation.gazelle.models.validation.ValidationReport; import ch.ahdis.matchbox.validation.gazelle.models.validation.ValidationRequest; import com.fasterxml.jackson.databind.ObjectMapper; @@ -325,19 +325,17 @@ private String getContent(String resourceName) throws IOException { } private ValidationReport validateWithGazelle(final String resource, final String profileId) throws Exception { - final var gazelleRequestItem = new ValidationItem(); + final var gazelleRequestItem = new Input(); gazelleRequestItem.setItemId("first"); gazelleRequestItem.setContent(resource.getBytes(StandardCharsets.UTF_8)); - gazelleRequestItem.setRole("request"); + gazelleRequestItem.setId("request"); gazelleRequestItem.setLocation("localhost"); final var gazelleRequest = new ValidationRequest(); - gazelleRequest.setApiVersion("3.5.3"); - gazelleRequest.setValidationServiceName("Matchbox"); gazelleRequest.setValidationProfileId(profileId); - gazelleRequest.addValidationItem(gazelleRequestItem); + gazelleRequest.addInput(gazelleRequestItem); - final HttpRequest request = HttpRequest.newBuilder(new URI(TARGET_SERVER + "/gazelle/validation/validate")) + final HttpRequest request = HttpRequest.newBuilder(new URI(TARGET_SERVER + "/gazelle/validation/v2/validate")) .POST(HttpRequest.BodyPublishers.ofString(this.objectMapper.writeValueAsString(gazelleRequest))) .header("Content-Type", "application/json") .build();