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

com.hubspot.singularity.runner.base.config.ConfigurationBinder Maven / Gradle / Ivy

The newest version!
package com.hubspot.singularity.runner.base.config;

import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;

import com.google.inject.Binder;
import com.google.inject.Scopes;
import com.google.inject.multibindings.Multibinder;
import com.hubspot.singularity.runner.base.configuration.BaseRunnerConfiguration;
import com.hubspot.singularity.runner.base.configuration.Configuration;
import java.util.Optional;

public class ConfigurationBinder {
  private final Binder binder;
  private final Multibinder multibinder;

  public static  ConfigurationBinder newBinder(
    Binder binder
  ) {
    return new ConfigurationBinder(binder);
  }

  private ConfigurationBinder(Binder binder) {
    this.binder = binder;
    this.multibinder = Multibinder.newSetBinder(binder, BaseRunnerConfiguration.class);
  }

  public  ConfigurationBinder bindPrimaryConfiguration(
    Class configurationClass,
    Optional filename
  ) {
    bindConfiguration(configurationClass, filename);
    binder.bind(BaseRunnerConfiguration.class).to(configurationClass);
    return this;
  }

  public  ConfigurationBinder bindConfiguration(
    Class configurationClass,
    Optional filename
  ) {
    checkNotNull(configurationClass, "configurationClass");
    checkState(
      configurationClass.getAnnotation(Configuration.class) != null,
      "%s must be annotated with @Configuration",
      configurationClass.getSimpleName()
    );

    binder
      .bind(configurationClass)
      .toProvider(
        new SingularityRunnerConfigurationProvider(configurationClass, filename)
      )
      .in(Scopes.SINGLETON);
    multibinder.addBinding().to(configurationClass);
    return this;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy