diff --git a/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/KpaEcogDataMapper.java b/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/KpaEcogDataMapper.java new file mode 100644 index 0000000..5296514 --- /dev/null +++ b/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/KpaEcogDataMapper.java @@ -0,0 +1,78 @@ +package dev.pcvolkmer.onco.datamapper.mapper; + +import dev.pcvolkmer.mv64e.mtb.EcogCoding; +import dev.pcvolkmer.mv64e.mtb.EcogCodingCode; +import dev.pcvolkmer.mv64e.mtb.PerformanceStatus; +import dev.pcvolkmer.mv64e.mtb.Reference; +import dev.pcvolkmer.onco.datamapper.ResultSet; +import dev.pcvolkmer.onco.datamapper.datacatalogues.EcogCatalogue; + +import java.io.IOException; +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + +/** + * Mapper class to load and map prozedur data from database table 'dk_dnpm_uf_ecog' + * + * @author Paul-Christian Volkmer + * @since 0.1 + */ +public class KpaEcogDataMapper implements SubformDataMapper { + + private final EcogCatalogue catalogue; + + public KpaEcogDataMapper(final EcogCatalogue catalogue) { + this.catalogue = catalogue; + } + + /** + * Loads and maps Prozedur related by database id + * + * @param id The database id of the procedure data set + * @return The loaded data set + */ + @Override + public PerformanceStatus getById(final int id) { + var data = catalogue.getById(id); + return this.map(data); + } + + @Override + public List getByParentId(final int parentId) { + return catalogue.getAllByParentId(parentId) + .stream() + .map(this::map) + .sorted(Comparator.comparing(PerformanceStatus::getEffectiveDate)) + .collect(Collectors.toList()); + } + + private PerformanceStatus map(final ResultSet resultSet) { + var builder = PerformanceStatus.builder(); + builder + .id(resultSet.getProcedureId().toString()) + .patient(Reference.builder().id(resultSet.getString("patient_id")).build()) + .effectiveDate(resultSet.getDate("datum")) + .value(getEcogCoding(resultSet.getString("ecog"))) + ; + + return builder.build(); + } + + private EcogCoding getEcogCoding(final String value) { + if (value == null || !Arrays.stream(EcogCodingCode.values()).map(EcogCodingCode::toValue).collect(Collectors.toSet()).contains(value)) { + return null; + } + + var resultBuilder = EcogCoding.builder(); + try { + resultBuilder.code(EcogCodingCode.forValue(value)); + } catch (IOException e) { + throw new IllegalStateException("No valid code found"); + } + + return resultBuilder.build(); + } + +} diff --git a/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/KpaTumorausbreitungDataMapper.java b/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/KpaTumorausbreitungDataMapper.java index 30502f7..ca175d2 100644 --- a/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/KpaTumorausbreitungDataMapper.java +++ b/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/KpaTumorausbreitungDataMapper.java @@ -46,12 +46,6 @@ public class KpaTumorausbreitungDataMapper implements SubformDataMapper { + var columnName = invocationOnMock.getArgument(0, String.class); + return testData.get(columnName); + }).when(resultSet).getString(anyString()); + + doAnswer(invocationOnMock -> { + var columnName = invocationOnMock.getArgument(0, String.class); + return testData.get(columnName); + }).when(resultSet).getDate(anyString()); + + when(resultSet.getProcedureId()).thenReturn(1); + + doAnswer(invocationOnMock -> List.of(resultSet)) + .when(catalogue) + .getAllByParentId(anyInt()); + + var actualList = this.dataMapper.getByParentId(1); + assertThat(actualList).hasSize(1); + + var actual = actualList.get(0); + assertThat(actual).isInstanceOf(PerformanceStatus.class); + assertThat(actual.getId()).isEqualTo("1"); + assertThat(actual.getPatient()).isEqualTo(Reference.builder().id("42").build()); + assertThat(actual.getEffectiveDate()).isEqualTo(new java.sql.Date(Date.from(Instant.parse("2000-01-01T12:00:00Z")).getTime())); + assertThat(actual.getValue()).isEqualTo(EcogCoding.builder().code(EcogCodingCode.CODE_1).build()); + } + +}