package com.tacitknowledge.slowlight.embedded.config.json;
import com.google.gson.GsonBuilder;
import com.tacitknowledge.slowlight.embedded.config.MainConfig;
import java.io.InputStream;
import java.util.Scanner;
/**
* Configuration builder which constructs degradation configuration based on JSON config file.
*
* @author Alexandr Donciu (adonciu@tacitknowledge.com)
*/
public class JSONConfigBuilder
{
public static final String PROPERTY_CONFIG_FILE_NAME = "slowlight.embedded.config";
protected static final String DEFAULT_CONFIG_FILE_NAME = "slowlight-embedded.config";
private MainConfig config;
/**
* Builds and returns the configuration.
*
* @return configuration object.
*/
public MainConfig getConfig()
{
if (config == null)
{
final String configJSON = getConfigJSON();
final GsonBuilder gson = new GsonBuilder();
config = gson.create().fromJson(configJSON, MainConfig.class);
}
return config;
}
protected String getConfigFileName()
{
String configFileName = System.getProperty(PROPERTY_CONFIG_FILE_NAME);
return configFileName != null ? configFileName : DEFAULT_CONFIG_FILE_NAME;
}
private String getConfigJSON()
{
String configFileName = getConfigFileName();
final InputStream inputStream = getConfigFileInputStream(configFileName);
try
{
return new Scanner(inputStream).useDelimiter("\\Z").next();
}
catch (Exception e)
{
throw new IllegalArgumentException("Cannot load config file [" + configFileName + "]", e);
}
}
private InputStream getConfigFileInputStream(final String configFileName)
{
return Thread.currentThread().getContextClassLoader().getResourceAsStream(configFileName);
}
}