1
0
mirror of https://github.com/pcvolkmer/mv64e-onkostar-data.git synced 2025-07-02 02:22:54 +00:00

refactor: catalogue creation and error handling

This commit is contained in:
2025-06-21 11:44:31 +02:00
parent a52c8cf3b8
commit 429ed1ba1b
3 changed files with 49 additions and 9 deletions

View File

@ -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<Class<? extends DataCatalogue>, 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 <T> The catalogue type
* @return The catalogue if it exists
*/
@SuppressWarnings("unchecked")
public synchronized <T extends DataCatalogue> T catalogue(Class<T> 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<? extends DataCatalogue> clazz) {
return catalogues.containsKey(clazz);
}
}

View File

@ -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<? extends DataCatalogue> clazz) {
super(String.format("Error creating data catalogue for type '%s'", clazz.getCanonicalName()));
}
}

View File

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