public static <T> T getConfiguration(File configurationFile, Class<? extends T> configurationClass)
throws Exception {
if (configurationClass == null) {
return null;
}
ConfigurationCacheEntry entry = configurationCache.getIfPresent(configurationFile);
if(entry == null || !configurationClass.isInstance(entry.object) || entry.error) {
if(entry != null && entry.error) {
logger.warn("Cached configuration for {} is in error state, forcing a reload",
configurationFile.getAbsolutePath());
} else if(entry != null && !configurationClass.isInstance(entry.object)) {
logger.warn("Cached configuration for {} is an instance of the wrong class, forcing a reload",
configurationFile.getAbsolutePath());
}
T configuration = loadConfiguration(configurationFile, configurationClass);
entry = new ConfigurationCacheEntry(
configuration, configurationClass, configurationFile.lastModified(), false);
configurationCache.put(configurationFile, entry);
}
return (T) entry.object;
}