From 429ed1ba1bc67129f40d54df136fe519cbd0293c Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Sat, 21 Jun 2025 11:44:31 +0200 Subject: [PATCH] refactor: catalogue creation and error handling --- ...Factory.java => DataCatalogueFactory.java} | 37 ++++++++++++++++--- .../DataCatalogueCreationException.java | 15 ++++++++ .../onco/datamapper/mapper/MtbDataMapper.java | 6 +-- 3 files changed, 49 insertions(+), 9 deletions(-) rename src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/{CatalogueFactory.java => DataCatalogueFactory.java} (63%) create mode 100644 src/main/java/dev/pcvolkmer/onco/datamapper/exceptions/DataCatalogueCreationException.java diff --git a/src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/CatalogueFactory.java b/src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/DataCatalogueFactory.java similarity index 63% rename from src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/CatalogueFactory.java rename to src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/DataCatalogueFactory.java index 5599e00..0762dd2 100644 --- a/src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/CatalogueFactory.java +++ b/src/main/java/dev/pcvolkmer/onco/datamapper/datacatalogues/DataCatalogueFactory.java @@ -1,5 +1,6 @@ package dev.pcvolkmer.onco.datamapper.datacatalogues; +import dev.pcvolkmer.onco.datamapper.exceptions.DataCatalogueCreationException; import org.springframework.jdbc.core.JdbcTemplate; import java.util.HashMap; @@ -11,24 +12,38 @@ import java.util.Map; * @author Paul-Christian Volkmer * @since 0.1 */ -public class CatalogueFactory { +public class DataCatalogueFactory { private final JdbcTemplate jdbcTemplate; private final Map, DataCatalogue> catalogues = new HashMap<>(); - private CatalogueFactory(JdbcTemplate jdbcTemplate) { + private DataCatalogueFactory(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } - private static CatalogueFactory obj; + private static DataCatalogueFactory obj; - public static synchronized CatalogueFactory instance(final JdbcTemplate jdbcTemplate) { + public static synchronized DataCatalogueFactory initialize(final JdbcTemplate jdbcTemplate) { if (null == obj) { - obj = new CatalogueFactory(jdbcTemplate); + obj = new DataCatalogueFactory(jdbcTemplate); } return obj; } + public static synchronized DataCatalogueFactory instance() { + if (null == obj) { + throw new IllegalStateException("CatalogueFactory not initialized"); + } + return obj; + } + + /** + * Get Catalogue of required type + * + * @param clazz The catalogues class + * @param The catalogue type + * @return The catalogue if it exists + */ @SuppressWarnings("unchecked") public synchronized T catalogue(Class clazz) { return (T) catalogues.computeIfAbsent(clazz, c -> { @@ -53,8 +68,18 @@ public class CatalogueFactory { } else if (c == VorbefundeCatalogue.class) { return VorbefundeCatalogue.create(jdbcTemplate); } - throw new RuntimeException("Unknown DataCatalogue class: " + clazz); + throw new DataCatalogueCreationException(clazz); }); } + /** + * Checks if a catalogue of this type is available + * + * @param clazz The catalogues class + * @return true if it is available + */ + public synchronized boolean hasCatalogue(Class clazz) { + return catalogues.containsKey(clazz); + } + } diff --git a/src/main/java/dev/pcvolkmer/onco/datamapper/exceptions/DataCatalogueCreationException.java b/src/main/java/dev/pcvolkmer/onco/datamapper/exceptions/DataCatalogueCreationException.java new file mode 100644 index 0000000..600945c --- /dev/null +++ b/src/main/java/dev/pcvolkmer/onco/datamapper/exceptions/DataCatalogueCreationException.java @@ -0,0 +1,15 @@ +package dev.pcvolkmer.onco.datamapper.exceptions; + +import dev.pcvolkmer.onco.datamapper.datacatalogues.DataCatalogue; + +/** + * Exception to be thrown if no catalogue can be created + * + * @author Paul-Christian Volkmer + * @since 0.1 + */ +public class DataCatalogueCreationException extends RuntimeException { + public DataCatalogueCreationException(Class clazz) { + super(String.format("Error creating data catalogue for type '%s'", clazz.getCanonicalName())); + } +} diff --git a/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/MtbDataMapper.java b/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/MtbDataMapper.java index 82ceda7..949d893 100644 --- a/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/MtbDataMapper.java +++ b/src/main/java/dev/pcvolkmer/onco/datamapper/mapper/MtbDataMapper.java @@ -1,7 +1,7 @@ package dev.pcvolkmer.onco.datamapper.mapper; import dev.pcvolkmer.mv64e.mtb.Mtb; -import dev.pcvolkmer.onco.datamapper.datacatalogues.CatalogueFactory; +import dev.pcvolkmer.onco.datamapper.datacatalogues.DataCatalogueFactory; import dev.pcvolkmer.onco.datamapper.datacatalogues.KpaCatalogue; import dev.pcvolkmer.onco.datamapper.datacatalogues.PatientCatalogue; import dev.pcvolkmer.onco.datamapper.exceptions.DataAccessException; @@ -22,10 +22,10 @@ public class MtbDataMapper implements DataMapper { private final Logger logger = LoggerFactory.getLogger(this.getClass()); - private final CatalogueFactory catalogueFactory; + private final DataCatalogueFactory catalogueFactory; MtbDataMapper(final JdbcTemplate jdbcTemplate) { - this.catalogueFactory = CatalogueFactory.instance(jdbcTemplate); + this.catalogueFactory = DataCatalogueFactory.initialize(jdbcTemplate); } /**