All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.tacitknowledge.slowlight.proxyserver.config.json.JSONConfigBuilder Maven / Gradle / Ivy

The newest version!
package com.tacitknowledge.slowlight.proxyserver.config.json;

import com.google.gson.GsonBuilder;
import com.tacitknowledge.slowlight.proxyserver.config.ConfigBuilder;
import com.tacitknowledge.slowlight.proxyserver.config.SlowlightConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.net.URL;
import java.util.Scanner;

/**
 * Config builder implementation to create slowlight configuration from an JSON based configuration file.
 * Config builder will initially try to load the JSON configuration file from given path and then from classpath.
 *
 * @author Alexandr Donciu ([email protected])
 */
public class JSONConfigBuilder implements ConfigBuilder
{
    private static final Logger LOG = LoggerFactory.getLogger(JSONConfigBuilder.class);

    @Override
    public SlowlightConfig getConfig(final String configFileName)
    {
        final String configJson = getConfigJSON(configFileName);

        final GsonBuilder gson = new GsonBuilder();
        return gson.create().fromJson(configJson, SlowlightConfig.class);
    }

    private String getConfigJSON(final String configFileName)
    {
        LOG.info("Load slowlight configuration [{}]", configFileName);

        File configFile = getConfigFromPath(configFileName);

        if (configFile == null)
        {
            configFile = getConfigFromClasspath(configFileName);
        }

        try
        {
            return new Scanner(configFile).useDelimiter("\\Z").next();
        }
        catch (Exception e)
        {
            throw new IllegalArgumentException("Cannot find config file [" + configFileName + "]", e);
        }
    }

    private File getConfigFromPath(final String configFileName)
    {
        LOG.debug("Loading configuration file [{}] from the path", configFileName);

        File configFile = new File(configFileName);
        if (!configFile.exists())
        {
            configFile = null;
        }

        return configFile;
    }

    private File getConfigFromClasspath(final String configFileName)
    {
        LOG.debug("Loading configuration file [{}] from the classpath", configFileName);

        File configFile = null;

        final URL url = Thread.currentThread().getContextClassLoader().getResource(configFileName);
        if (url != null)
        {
            configFile = new File(url.getFile());
        }

        return configFile;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy