Search in sources :

Example 1 with CompositionSerializer

use of org.ehrbase.serialisation.dbencoding.CompositionSerializer in project openEHR_SDK by ehrbase.

the class DbConformanceTest method testRoundTrip.

@ParameterizedTest
@MethodSource("testRoundTripArguments")
void testRoundTrip(CompositionTestDataConformanceSDTJson testData, String[] expectedMissing, String[] expectedExtra, String[] expectedValidationErrorPath) throws IOException {
    String templateId = testData.getTemplate().getTemplateId();
    RMDataFormat cut = new FlatJasonProvider(TEMPLATE_PROVIDER).buildFlatJson(FlatFormat.SIM_SDT, templateId);
    String flat = IOUtils.toString(testData.getStream(), StandardCharsets.UTF_8);
    Composition composition = cut.unmarshal(flat);
    CompositionSerializer compositionSerializerRawJson = new CompositionSerializer();
    String db_encoded = compositionSerializerRawJson.dbEncode(composition);
    assertNotNull(db_encoded);
    String converted = new LightRawJsonEncoder(db_encoded).encodeCompositionAsString();
    assertNotNull(converted);
    Composition actual = new CanonicalJson().unmarshal(converted, Composition.class);
    SoftAssertions softAssertions = new SoftAssertions();
    softAssertions.assertThat(actual).isNotNull();
    CompositionValidator rmObjectValidator = new CompositionValidator();
    softAssertions.assertThat(rmObjectValidator.validate(actual, TEMPLATE_PROVIDER.buildIntrospect(templateId).orElseThrow())).filteredOn(d -> !List.of("/composer", "/language", "/category", "/territory").contains(d.getAqlPath())).filteredOn(d -> !(Objects.equals("/", d.getAqlPath()) && d.getMessage().equals("Invariant Is_archetype_root failed on type COMPOSITION"))).filteredOn(d -> !ArrayUtils.contains(expectedValidationErrorPath, d.getAqlPath())).isEmpty();
    String actualString = cut.marshal(actual);
    String expected = IOUtils.toString(testData.getStream(), StandardCharsets.UTF_8);
    List<String> errors = compere(actualString, expected);
    softAssertions.assertThat(errors).filteredOn(s -> s.startsWith("Missing")).containsExactlyInAnyOrder(expectedMissing);
    softAssertions.assertThat(errors).filteredOn(s -> !List.of("Extra path: conformance-ehrbase.de.v0/_uid, value: 6e3a9506-b81c-4d74-a37f-1464fb7106b2::piri.ehrscape.com::1", "Extra path: conformance-ehrbase.de.v0/language|code, value: en", "Extra path: conformance-ehrbase.de.v0/language|terminology, value: ISO_639-1", "Extra path: conformance-ehrbase.de.v0/territory|code, value: US", "Extra path: conformance-ehrbase.de.v0/territory|terminology, value: ISO_3166-1", "Extra path: conformance-ehrbase.de.v0/category|code, value: 433", "Extra path: conformance-ehrbase.de.v0/category|value, value: event", "Extra path: conformance-ehrbase.de.v0/category|terminology, value: openehr", "Extra path: conformance-ehrbase.de.v0/context/_health_care_facility|id, value: 9091", "Extra path: conformance-ehrbase.de.v0/context/_health_care_facility|id_scheme, value: HOSPITAL-NS", "Extra path: conformance-ehrbase.de.v0/context/_health_care_facility|id_namespace, value: HOSPITAL-NS", "Extra path: conformance-ehrbase.de.v0/context/_health_care_facility|name, value: Hospital", "Extra path: conformance-ehrbase.de.v0/context/start_time, value: 2021-12-21T14:19:31.649613+01:00", "Extra path: conformance-ehrbase.de.v0/context/_end_time, value: 2021-12-21T15:19:31.649613+01:00", "Extra path: conformance-ehrbase.de.v0/context/_location, value: 2021-12-21T15:19:31.649613+01:00", "Extra path: conformance-ehrbase.de.v0/context/setting|code, value: 238", "Extra path: conformance-ehrbase.de.v0/context/setting|value, value: other care", "Extra path: conformance-ehrbase.de.v0/context/setting|terminology, value: openehr", "Extra path: conformance-ehrbase.de.v0/composer|name, value: Silvia Blake", "Extra path: conformance-ehrbase.de.v0/composer|id, value: 1234-5678", "Extra path: conformance-ehrbase.de.v0/composer|id_scheme, value: UUID", "Extra path: conformance-ehrbase.de.v0/composer|id_namespace, value: EHR.NETWORK", "Extra path: conformance-ehrbase.de.v0/context/_participation:0|function, value: requester", "Extra path: conformance-ehrbase.de.v0/context/_participation:0|mode, value: face-to-face communication", "Extra path: conformance-ehrbase.de.v0/context/_participation:0|name, value: Dr. Marcus Johnson", "Extra path: conformance-ehrbase.de.v0/context/_participation:0|id, value: 199", "Extra path: conformance-ehrbase.de.v0/context/_participation:0|id_scheme, value: HOSPITAL-NS", "Extra path: conformance-ehrbase.de.v0/context/_participation:0|id_namespace, value: HOSPITAL-NS", "Extra path: conformance-ehrbase.de.v0/_link:0|type, value: problem", "Extra path: conformance-ehrbase.de.v0/_link:0|meaning, value: problem related note", "Extra path: conformance-ehrbase.de.v0/_link:0|target, value: ehr://ehr.network/347a5490-55ee-4da9-b91a-9bba710f730e").contains(s)).filteredOn(s -> s.startsWith("Extra")).containsExactlyInAnyOrder(expectedExtra);
    softAssertions.assertAll();
}
Also used : java.util(java.util) SoftAssertions(org.assertj.core.api.SoftAssertions) CanonicalJson(org.ehrbase.serialisation.jsonencoding.CanonicalJson) Composition(com.nedap.archie.rm.composition.Composition) Assert.assertNotNull(org.junit.Assert.assertNotNull) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) ArrayUtils(org.apache.commons.lang3.ArrayUtils) IOException(java.io.IOException) Arguments(org.junit.jupiter.params.provider.Arguments) CompositionSerializer(org.ehrbase.serialisation.dbencoding.CompositionSerializer) JacksonUtil(org.ehrbase.serialisation.jsonencoding.JacksonUtil) CompositionValidator(org.ehrbase.validation.CompositionValidator) StandardCharsets(java.nio.charset.StandardCharsets) IOUtils(org.apache.commons.io.IOUtils) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) CompositionTestDataConformanceSDTJson(org.ehrbase.test_data.composition.CompositionTestDataConformanceSDTJson) FlatJasonProvider(org.ehrbase.serialisation.flatencoding.FlatJasonProvider) RMDataFormat(org.ehrbase.serialisation.RMDataFormat) TestDataTemplateProvider(org.ehrbase.conformance_test.templateprovider.TestDataTemplateProvider) LightRawJsonEncoder(org.ehrbase.serialisation.dbencoding.rawjson.LightRawJsonEncoder) FlatFormat(org.ehrbase.serialisation.flatencoding.FlatFormat) MethodSource(org.junit.jupiter.params.provider.MethodSource) Composition(com.nedap.archie.rm.composition.Composition) CanonicalJson(org.ehrbase.serialisation.jsonencoding.CanonicalJson) LightRawJsonEncoder(org.ehrbase.serialisation.dbencoding.rawjson.LightRawJsonEncoder) RMDataFormat(org.ehrbase.serialisation.RMDataFormat) SoftAssertions(org.assertj.core.api.SoftAssertions) CompositionSerializer(org.ehrbase.serialisation.dbencoding.CompositionSerializer) CompositionValidator(org.ehrbase.validation.CompositionValidator) FlatJasonProvider(org.ehrbase.serialisation.flatencoding.FlatJasonProvider) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) MethodSource(org.junit.jupiter.params.provider.MethodSource)

Example 2 with CompositionSerializer

use of org.ehrbase.serialisation.dbencoding.CompositionSerializer in project openEHR_SDK by ehrbase.

the class FeederAuditDetailsAttributes method toMap.

/**
 * encode the attributes lower snake case to comply with UML conventions and make is queryable
 * @return
 */
public Map<String, Object> toMap() {
    Map<String, Object> valuemap = PathMap.getInstance();
    if (feederAuditDetails == null)
        return null;
    valuemap.put(I_DvTypeAdapter.AT_TYPE, new SnakeCase(FeederAuditDetails.class.getSimpleName()).camelToUpperSnake());
    if (feederAuditDetails.getLocation() != null) {
        valuemap.put("location", new RmObjectEncoding(feederAuditDetails.getLocation()).toMap());
    }
    if (feederAuditDetails.getProvider() != null) {
        valuemap.put("provider", new RmObjectEncoding(feederAuditDetails.getProvider()).toMap());
    }
    if (feederAuditDetails.getSubject() != null) {
        valuemap.put("subject", new RmObjectEncoding(feederAuditDetails.getSubject()).toMap());
    }
    if (feederAuditDetails.getSystemId() != null) {
        valuemap.put("system_id", feederAuditDetails.getSystemId());
    }
    if (feederAuditDetails.getTime() != null) {
        valuemap.put("time", new RmObjectEncoding(feederAuditDetails.getTime()).toMap());
    }
    if (feederAuditDetails.getVersionId() != null) {
        valuemap.put("version_id", feederAuditDetails.getVersionId());
    }
    if (feederAuditDetails.getOtherDetails() != null) {
        String dbEncoded = new CompositionSerializer().dbEncode(feederAuditDetails.getOtherDetails());
        Map<String, Object> asMap = new LightRawJsonEncoder(dbEncoded).encodeOtherDetailsAsMap();
        String nodeId = asMap.get("/archetype_node_id").toString();
        // make sure node id is wrapped in [ and ] and throw errors if invalid input
        if (!nodeId.startsWith("[")) {
            if (nodeId.endsWith("]"))
                throw new IllegalArgumentException("Invalid archetype node id");
            nodeId = "[" + nodeId + "]";
        } else if (!nodeId.endsWith("]")) {
            throw new IllegalArgumentException("Invalid archetype node id");
        }
        valuemap.put("other_details" + nodeId, asMap);
    }
    return valuemap;
}
Also used : FeederAuditDetails(com.nedap.archie.rm.archetyped.FeederAuditDetails) SnakeCase(org.ehrbase.serialisation.util.SnakeCase) LightRawJsonEncoder(org.ehrbase.serialisation.dbencoding.rawjson.LightRawJsonEncoder) RmObjectEncoding(org.ehrbase.serialisation.dbencoding.RmObjectEncoding) CompositionSerializer(org.ehrbase.serialisation.dbencoding.CompositionSerializer)

Aggregations

CompositionSerializer (org.ehrbase.serialisation.dbencoding.CompositionSerializer)2 LightRawJsonEncoder (org.ehrbase.serialisation.dbencoding.rawjson.LightRawJsonEncoder)2 JsonProcessingException (com.fasterxml.jackson.core.JsonProcessingException)1 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)1 FeederAuditDetails (com.nedap.archie.rm.archetyped.FeederAuditDetails)1 Composition (com.nedap.archie.rm.composition.Composition)1 IOException (java.io.IOException)1 StandardCharsets (java.nio.charset.StandardCharsets)1 java.util (java.util)1 IOUtils (org.apache.commons.io.IOUtils)1 ArrayUtils (org.apache.commons.lang3.ArrayUtils)1 SoftAssertions (org.assertj.core.api.SoftAssertions)1 TestDataTemplateProvider (org.ehrbase.conformance_test.templateprovider.TestDataTemplateProvider)1 RMDataFormat (org.ehrbase.serialisation.RMDataFormat)1 RmObjectEncoding (org.ehrbase.serialisation.dbencoding.RmObjectEncoding)1 FlatFormat (org.ehrbase.serialisation.flatencoding.FlatFormat)1 FlatJasonProvider (org.ehrbase.serialisation.flatencoding.FlatJasonProvider)1 CanonicalJson (org.ehrbase.serialisation.jsonencoding.CanonicalJson)1 JacksonUtil (org.ehrbase.serialisation.jsonencoding.JacksonUtil)1 SnakeCase (org.ehrbase.serialisation.util.SnakeCase)1