public Loader newLoader()

in archaius2-core/src/main/java/com/netflix/archaius/DefaultConfigLoader.java [133:224]


    public Loader newLoader() {
        return new Loader() {
            private CascadeStrategy strategy = defaultStrategy;
            private ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
            private Config overrides = null;
            
            @Override
            public Loader withCascadeStrategy(CascadeStrategy strategy) {
                this.strategy = strategy;
                return this;
            }
            
            @Override
            public Loader withClassLoader(ClassLoader classLoader) {
                this.classLoader = classLoader;
                return this;
            }
            
            @Override
            public Loader withFailOnFirst(boolean flag) {
                return this;
            }

            @Override
            public Loader withOverrides(Properties props) {
                this.overrides = MapConfig.from(props);
                return this;
            }

            @Override
            public Loader withOverrides(Config config) {
                this.overrides = config;
                return this;
            }

            @Override
            public CompositeConfig load(String resourceName) throws ConfigException {
                CompositeConfig compositeConfig = new DefaultCompositeConfig(true);

                List<String> names = strategy.generate(resourceName, interpolator, lookup);
                for (String name : names) {
                    for (ConfigReader reader : loaders) {
                        if (reader.canLoad(classLoader, name)) {
                            try {
                                Config config = reader.load(classLoader, name, interpolator, lookup);
                                if (!config.isEmpty()) {
                                    compositeConfig.addConfig(name, config);
                                }
                                LOG.debug("Loaded {} ", name);
                            }
                            catch (ConfigException e) {
                                LOG.debug("Unable to load {}, {}", name, e.getMessage());
                            }
                            break;
                        }
                    }
                }
                if (overrides != null) {
                    LOG.debug("Loading overrides form {}", resourceName);
                    compositeConfig.addConfig(resourceName + "_overrides", overrides);
                }
                return compositeConfig;
            }
 
            @Override
            public Config load(URL url) {
                for (ConfigReader loader : loaders) {
                    if (loader.canLoad(classLoader, url)) {
                        try {
                            Config config = loader.load(classLoader, url, interpolator, lookup);
                            LOG.info("Loaded " + url);
                            return config;
                        } catch (ConfigException e) {
                            LOG.info("Unable to load file '{}'", new Object[]{url, e.getMessage()});
                        } catch (Exception e) {
                            LOG.info("Unable to load file '{}'", new Object[]{url, e.getMessage()});
                        }
                    }
                }
                return null;
            }

            @Override
            public Config load(File file) throws ConfigException {
                try {
                    return load(file.toURI().toURL());
                } catch (MalformedURLException e) {
                    throw new ConfigException("Failed to load file " + file, e);
                }
            }
        };
    }