Package com.forgeessentials.core.config

Source Code of com.forgeessentials.core.config.ConfigManager$ConfigFile

package com.forgeessentials.core.config;

import java.io.File;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import net.minecraftforge.common.config.Configuration;

import com.forgeessentials.util.OutputHandler;

public class ConfigManager {

    private static class ConfigFile {

        public ConfigFile(File path)
        {
            config = new Configuration(path, true);
        }

        public Configuration config;

        public Set<IConfigLoader> loaders = new HashSet<>();

        public Set<IConfigLoader> loaded = new HashSet<>();

    }

    private File rootDirectory;

    private Map<String, ConfigFile> configFiles = new HashMap<>();

    private boolean useCanonicalConfig = false;

    private String mainConfigName;

    public ConfigManager(File rootDirectory, String mainConfigName)
    {
        this.rootDirectory = rootDirectory;
        this.mainConfigName = mainConfigName;
        load(false);
    }

    private ConfigFile getConfigFile(String configName)
    {
        ConfigFile loaders = configFiles.get(configName);
        if (loaders == null)
        {
            loaders = new ConfigFile(new File(this.rootDirectory, configName + ".cfg"));
            configFiles.put(configName, loaders);
        }
        return loaders;
    }

    public Configuration getConfig(String configName)
    {
        return getConfigFile(configName).config;
    }

    public void registerLoader(String configName, IConfigLoader loader)
    {
        registerLoader(configName, loader, true);
    }

    public void registerLoader(String configName, IConfigLoader loader, boolean loadAfterRegistration)
    {
        if (useCanonicalConfig && loader.supportsCanonicalConfig())
            getConfigFile(mainConfigName).loaders.add(loader);
        else
            getConfigFile(configName).loaders.add(loader);
        if (loadAfterRegistration)
            load(false);
    }

    public void load(boolean reload)
    {
        OutputHandler.felog.finer("Loading configuration files");
        boolean changed = false;
        for (ConfigFile file : configFiles.values())
        {
            if (reload)
                file.config.load();
            for (IConfigLoader loader : file.loaders)
            {
                if (!reload)
                {
                    if (file.loaded.contains(loader))
                        continue;
                    file.loaded.add(loader);
                }
                changed |= true;
                loader.load(file.config, reload);
            }
            if (changed)
                file.config.save();
        }
        OutputHandler.felog.finer("Finished loading configuration files");
    }

    public void saveAll()
    {
        OutputHandler.felog.finer("Saving configuration files");
        for (ConfigFile file : configFiles.values())
        {
            file.config.load();
            for (IConfigLoader loader : file.loaders)
                loader.save(file.config);
            file.config.save();
        }
    }

    public void save(String configName)
    {
        ConfigFile file = getConfigFile(configName);
        for (IConfigLoader loader : file.loaders)
            loader.save(file.config);
        file.config.save();
    }

    public boolean isUseCanonicalConfig()
    {
        return useCanonicalConfig;
    }

    public void setUseCanonicalConfig(boolean useCanonicalConfig)
    {
        this.useCanonicalConfig = useCanonicalConfig;
    }

    public String getMainConfigName()
    {
        return mainConfigName;
    }

    public Configuration getMainConfig()
    {
        return getConfig(mainConfigName);
    }

}
TOP

Related Classes of com.forgeessentials.core.config.ConfigManager$ConfigFile

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.