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

com.github.phillipkruger.microprofileextentions.config.FileConfigSource Maven / Gradle / Ivy

package com.github.phillipkruger.microprofileextentions.config;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.logging.Level;
import lombok.NoArgsConstructor;
import lombok.extern.java.Log;
import org.eclipse.microprofile.config.Config;
import org.eclipse.microprofile.config.ConfigProvider;
import org.eclipse.microprofile.config.spi.ConfigSource;

/**
 * File config
 * @author Phillip Kruger ([email protected])
 */
@Log
@NoArgsConstructor
public class FileConfigSource implements ConfigSource {
    
    public static final String NAME = "FileConfigSource";
    
    @Override
    public int getOrdinal() {
        return 310;
    }
    
    @Override
    public String getValue(String key) {
        if(getProperties().containsKey(key)){
            return getProperties().get(key);
        }
        return null;
    }

    @Override
    public String getName() {
        return NAME;
    }
    
    private final Map properties = new HashMap<>();
    @Override
    public Map getProperties() {
        if(this.properties == null){
            log.info("Loading [file] MicroProfile ConfigSource");
            String filename = getPropertyValue(KEY_FILE_PATH,DEFAULT_FILE_PATH);
            log.log(Level.INFO, "Using [{0}] as property file", filename);
            File f = new File(filename);

            try {
                Properties p = new Properties();
                p.load(new FileInputStream(f));
                Set> entrySet = p.entrySet();

                entrySet.forEach((entry) -> {
                    this.properties.put((String)entry.getKey(),(String)entry.getValue());
                });

            } catch (IOException ex) {
                log.log(Level.INFO, "FileConfigSource did not find properties file [{0}]", f.getAbsolutePath());
            }
        }
        return this.properties;
    }
    
    private String getPropertyValue(String key,String defaultValue){
        Config config = ConfigProvider.getConfig();
        Iterable configSources = config.getConfigSources();
        for(ConfigSource configsource:configSources){
            if(!configsource.getName().equals(NAME)){
                String val = configsource.getValue(key);
                if(val!=null && !val.isEmpty())return val;
            }
        }
        return defaultValue;
        
    }
    
    private static final String KEY_FILE_PATH = "configsource.file.path";
    private static final String DEFAULT_FILE_PATH = "application.properties";
    
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy