package codeine;
import javax.inject.Inject;
import javax.inject.Provider;
import codeine.configuration.ConfigurationReadManagerServer;
import codeine.configuration.IConfigurationManager;
import codeine.db.IStatusDatabaseConnector;
import codeine.db.ProjectsConfigurationConnector;
import codeine.db.mysql.MysqlHostSelector;
import codeine.db.mysql.NearestMysqlHostSelectorPreferLocalhost;
import codeine.db.mysql.StaticMysqlHostSelector;
import codeine.db.mysql.connectors.ProjectsConfigurationMysqlConnector;
import codeine.db.mysql.connectors.StatusMysqlConnector;
import codeine.jsons.global.GlobalConfigurationJsonStore;
import codeine.jsons.global.MysqlConfigurationJson;
import codeine.jsons.peer_status.PeersProjectsStatus;
import codeine.jsons.peer_status.PeersProjectsStatusInDirectory;
import codeine.version.VersionsMapping;
import codeine.version.VersionsMappingProvider;
import codeine.version.VersionsMappingStore;
import com.google.inject.AbstractModule;
import com.google.inject.Scopes;
public class CodeineDirectoryModule extends AbstractModule
{
@Override
protected void configure()
{
bind(ProjectsConfigurationConnector.class).to(ProjectsConfigurationMysqlConnector.class);
bind(IStatusDatabaseConnector.class).to(StatusMysqlConnector.class);
bind(MysqlHostSelector.class).toProvider(MysqlHostSelectorProvider.class).in(Scopes.SINGLETON);
//bind(PeersProjectsStatus.class).to(PeersProjectsStatusInDirectory.class).in(Scopes.SINGLETON);
bind(VersionsMappingStore.class).in(Scopes.SINGLETON);
bind(VersionsMapping.class).toProvider(VersionsMappingProvider.class).in(Scopes.SINGLETON);
bind(IConfigurationManager.class).to(ConfigurationReadManagerServer.class).in(Scopes.SINGLETON);
}
public static class MysqlHostSelectorProvider implements Provider<MysqlHostSelector> {
@Inject private GlobalConfigurationJsonStore conf;
@Override
public MysqlHostSelector get() {
MysqlConfigurationJson localConfOrNull = NearestMysqlHostSelectorPreferLocalhost.getLocalConfOrNull(conf);
if (null == localConfOrNull) {
throw new RuntimeException("could not find db conf to start with");
}
return new StaticMysqlHostSelector(localConfOrNull);
}
}
}