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); } /**