package com.hubspot.blazar.guice; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.base.Optional; import com.google.inject.Binder; import com.google.inject.Module; import com.google.inject.multibindings.Multibinder; import com.hubspot.blazar.base.visitor.RepositoryBuildVisitor; import com.hubspot.blazar.config.BlazarConfiguration; import com.hubspot.blazar.config.BlazarSlackConfiguration; import com.hubspot.blazar.visitor.repositorybuild.SlackDmNotificationVisitor; import com.hubspot.blazar.visitor.repositorybuild.SlackRoomNotificationVisitor; import com.hubspot.blazar.resources.SlackResource; import com.hubspot.blazar.resources.UserFeedbackResource; import com.ullink.slack.simpleslackapi.SlackSession; import com.ullink.slack.simpleslackapi.impl.SlackSessionFactory; /** * This module handles the configuration of all slack-related features inside of Blazar. * This module does not bind any slack related resources / clients / visitors etc. if slack is not configured. */ public class BlazarSlackModule implements Module { private static final Logger LOG = LoggerFactory.getLogger(BlazarSlackModule.class); private final Optional<BlazarSlackConfiguration> slackConfiguration; public BlazarSlackModule(BlazarConfiguration configuration) { this.slackConfiguration = configuration.getSlackConfiguration(); } @Override public void configure(Binder binder) { if (!slackConfiguration.isPresent()) { LOG.info("Slack is not configured, not binding slack related resources or slack build notification visitors"); return; } Multibinder<RepositoryBuildVisitor> repositoryBuildVisitorMultibinder = Multibinder.newSetBinder(binder, RepositoryBuildVisitor.class); repositoryBuildVisitorMultibinder.addBinding().to(SlackDmNotificationVisitor.class); repositoryBuildVisitorMultibinder.addBinding().to(SlackRoomNotificationVisitor.class); binder.bind(SlackSession.class).toInstance(SlackSessionFactory.createWebSocketSlackSession(slackConfiguration.get().getSlackApiToken())); binder.bind(SlackResource.class); binder.bind(UserFeedbackResource.class); } }