From a10842df0c9cd285c0e0c7330ab1a039b7818a1b Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Sun, 22 Jun 2025 11:26:40 +0200 Subject: [PATCH] feat: add access to property catalogue --- .../onco/datamapper/PropertyCatalogue.java | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 src/main/java/dev/pcvolkmer/onco/datamapper/PropertyCatalogue.java diff --git a/src/main/java/dev/pcvolkmer/onco/datamapper/PropertyCatalogue.java b/src/main/java/dev/pcvolkmer/onco/datamapper/PropertyCatalogue.java new file mode 100644 index 0000000..6e47426 --- /dev/null +++ b/src/main/java/dev/pcvolkmer/onco/datamapper/PropertyCatalogue.java @@ -0,0 +1,82 @@ +package dev.pcvolkmer.onco.datamapper; + +import dev.pcvolkmer.onco.datamapper.exceptions.DataAccessException; +import org.springframework.jdbc.core.JdbcTemplate; + +/** + * Data access to property catalogues in Onkostar database + * + * @author Paul-Christian Volkmer + * @since 0.1 + */ +public class PropertyCatalogue { + + private final JdbcTemplate jdbcTemplate; + + private PropertyCatalogue(JdbcTemplate jdbcTemplate) { + this.jdbcTemplate = jdbcTemplate; + } + + private static PropertyCatalogue obj; + + public static synchronized PropertyCatalogue initialize(final JdbcTemplate jdbcTemplate) { + if (null == obj) { + obj = new PropertyCatalogue(jdbcTemplate); + } + return obj; + } + + public static synchronized PropertyCatalogue instance() { + if (null == obj) { + throw new IllegalStateException("PropertyCatalogue not initialized"); + } + return obj; + } + + /** + * Get procedure result sets by parent procedure id + * + * @param code The entries code + * @param version The entries version + * @return The sub procedures + */ + public Entry getByCodeAndVersion(String code, int version) { + try { + return this.jdbcTemplate.queryForObject( + "SELECT code, shortdesc, description FROM property_catalogue_version_entry WHERE code = ? AND property_version_id = ?", + (rs, rowNum) -> new Entry(rs.getString("code"), rs.getString("shortdesc"), rs.getString("description")), + code, + version); + } catch (RuntimeException e) { + throw new DataAccessException(String.format("Cannot request property catalogue entry for '%s' version '%d'", code, version)); + } + } + + /** + * A property catalogue entry + */ + public static class Entry { + private final String code; + private final String shortdesc; + private final String description; + + Entry(String code, String shortdesc, String description) { + this.code = code; + this.shortdesc = shortdesc; + this.description = description; + } + + public String getCode() { + return code; + } + + public String getDescription() { + return description; + } + + public String getShortdesc() { + return shortdesc; + } + } + +}