mirror of
https://github.com/pcvolkmer/mv64e-onkostar-data.git
synced 2025-07-03 02:52:54 +00:00
refactor: catalogue creation and error handling
This commit is contained in:
@ -1,5 +1,6 @@
|
|||||||
package dev.pcvolkmer.onco.datamapper.datacatalogues;
|
package dev.pcvolkmer.onco.datamapper.datacatalogues;
|
||||||
|
|
||||||
|
import dev.pcvolkmer.onco.datamapper.exceptions.DataCatalogueCreationException;
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -11,24 +12,38 @@ import java.util.Map;
|
|||||||
* @author Paul-Christian Volkmer
|
* @author Paul-Christian Volkmer
|
||||||
* @since 0.1
|
* @since 0.1
|
||||||
*/
|
*/
|
||||||
public class CatalogueFactory {
|
public class DataCatalogueFactory {
|
||||||
|
|
||||||
private final JdbcTemplate jdbcTemplate;
|
private final JdbcTemplate jdbcTemplate;
|
||||||
private final Map<Class<? extends DataCatalogue>, DataCatalogue> catalogues = new HashMap<>();
|
private final Map<Class<? extends DataCatalogue>, DataCatalogue> catalogues = new HashMap<>();
|
||||||
|
|
||||||
private CatalogueFactory(JdbcTemplate jdbcTemplate) {
|
private DataCatalogueFactory(JdbcTemplate jdbcTemplate) {
|
||||||
this.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) {
|
if (null == obj) {
|
||||||
obj = new CatalogueFactory(jdbcTemplate);
|
obj = new DataCatalogueFactory(jdbcTemplate);
|
||||||
}
|
}
|
||||||
return obj;
|
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")
|
@SuppressWarnings("unchecked")
|
||||||
public synchronized <T extends DataCatalogue> T catalogue(Class<T> clazz) {
|
public synchronized <T extends DataCatalogue> T catalogue(Class<T> clazz) {
|
||||||
return (T) catalogues.computeIfAbsent(clazz, c -> {
|
return (T) catalogues.computeIfAbsent(clazz, c -> {
|
||||||
@ -53,8 +68,18 @@ public class CatalogueFactory {
|
|||||||
} else if (c == VorbefundeCatalogue.class) {
|
} else if (c == VorbefundeCatalogue.class) {
|
||||||
return VorbefundeCatalogue.create(jdbcTemplate);
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -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()));
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
package dev.pcvolkmer.onco.datamapper.mapper;
|
package dev.pcvolkmer.onco.datamapper.mapper;
|
||||||
|
|
||||||
import dev.pcvolkmer.mv64e.mtb.Mtb;
|
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.KpaCatalogue;
|
||||||
import dev.pcvolkmer.onco.datamapper.datacatalogues.PatientCatalogue;
|
import dev.pcvolkmer.onco.datamapper.datacatalogues.PatientCatalogue;
|
||||||
import dev.pcvolkmer.onco.datamapper.exceptions.DataAccessException;
|
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 Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||||
|
|
||||||
private final CatalogueFactory catalogueFactory;
|
private final DataCatalogueFactory catalogueFactory;
|
||||||
|
|
||||||
MtbDataMapper(final JdbcTemplate jdbcTemplate) {
|
MtbDataMapper(final JdbcTemplate jdbcTemplate) {
|
||||||
this.catalogueFactory = CatalogueFactory.instance(jdbcTemplate);
|
this.catalogueFactory = DataCatalogueFactory.initialize(jdbcTemplate);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user