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

com.cerner.beadledom.configuration.ConfigurationSourcesModuleBuilder Maven / Gradle / Ivy

The newest version!
package com.cerner.beadledom.configuration;

import com.google.inject.AbstractModule;
import com.google.inject.Module;
import com.google.inject.multibindings.Multibinder;
import java.util.ArrayList;
import java.util.List;

/**
 * A Builder class that builds a Guice module for binding multiple {@link ConfigurationSource}s.
 *
 * 

The Guice module that is built by this builder configures *

    *
  • A {@link Multibinder} for {@link ConfigurationSource}
  • *
* *

This builder can be used in multiple modules to bind multiple {@link ConfigurationSource}. * Consumer must use the {@link ConfigurationSourcesModuleBuilder#addSource(ConfigurationSource)} * builder method to build the list of configuration Sources. * *

The {@link ConfigurationSourcesModuleBuilder#build} method creates a new anonymous * {@link Module} that configures a {@link Multibinder} for the provided {@link ConfigurationSource} * *

Usage: *


 *   public class MyModule extends AbstractModule {
 *     {@literal @}Override
 *     protected void configure() {
 *        install(ConfigurationSourcesModuleBuilder.newBuilder()
 *          .addSource(source1)
 *          .addSource(source2)
 *          .addSource(source3)
 *          .build());
 *     }
 *   }
 * 
* *

It is the responsibility of the consumer to build the configuration sources with appropriate * priority (natural ordering). The priority or natural ordering of the {@link ConfigurationSource}s * is what is considered when loading the configurations from the corresponding sources instead of * the order in which they are configured using this Builder. * * @author Sundeep Paruvu * @see com.cerner.beadledom.configuration.BeadledomConfigurationModule * @since 2.1 */ public final class ConfigurationSourcesModuleBuilder { private List configurationSources; private ConfigurationSourcesModuleBuilder() { this.configurationSources = new ArrayList(); } /** * Static Convenience method create an instance of {@link ConfigurationSourcesModuleBuilder}. */ public static ConfigurationSourcesModuleBuilder newBuilder() { return new ConfigurationSourcesModuleBuilder(); } /** * Adds the given {@code configurationSource} to the list. * * @param configurationSource configuration source from which Configuration will be built. * @return the current instance of the {@link ConfigurationSourcesModuleBuilder}. */ public ConfigurationSourcesModuleBuilder addSource(ConfigurationSource configurationSource) { if (configurationSource == null) { throw new NullPointerException("configurationSource: null"); } configurationSources.add(configurationSource); return this; } /** * Builds the {@link ConfigurationSourcesModuleBuilder} with the list of * {@link ConfigurationSource}s built using the {@link ConfigurationSourcesModuleBuilder * #addSource(ConfigurationSource)} builder method. * * @return a Guice module that configures a Multibinder for ConfigurationSources */ public Module build() { return new AbstractModule() { @Override protected void configure() { Multibinder multiBinder = Multibinder.newSetBinder(binder(), ConfigurationSource.class); for (ConfigurationSource configurationSource : configurationSources) { multiBinder.addBinding().toInstance(configurationSource); } } }; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy